LINUX.ORG.RU

Автоматическое формирование отчётов в LaTeX.

 , ,


2

2

Пока оформлял отчёт по НИРу, возникла идея — всё это дело автоматизировать. Есть БД с некими результатами. Полагаю, что нужно скриптом собирать определённую выборку из БД, и на основании выборки (за дату или период) формировать файлы данных для gnuplot и .tex-файлы, которые потом кормить pdflatex'у.

Подтолкните в какую сторону смотреть. Как формировать tex-файл по определённым условиям.


Подтолкните в какую сторону смотреть.

Knitr.

the_real_kinik ★★
()

Мне как-то было нужно подобное, но не слишком гибкое. Надо было в фиксированные места в тексте вставить таблицы и иллюстрации. Я просто накодил скрипт, который генерировал тело таблицы, а потом использовал Makefile типа такого:

table.tex: data.csv
        ./gentable $< $@

paper.pdf: paper.tex table.tex
        latexmk -pdf $<
Ну и в тексте в нужном месте \input{table.tex}.

TeopeTuK ★★★★
()

Подтолкните в какую сторону смотреть.

Шаблонизатор какой-нибудь надо, чтобы ты ему $date, а он тебе это дело заполнял. Ну и чем-то собирать данные в какую-нибудь удобоваримую структуру. Ты на чём писать умеешь?

crutch_master ★★★★★
()

tex-файл удобно формировать шаблонизатором типа Jinja. Весь процесс сборки можешь запихнуть в Makefile.

aquadon ★★★★★
()

Мне кажется, в такой постановке лучше штуки типа помянутого RMarkdown (knitr), Jupyter Notebook и иже с ними. Но если нужно именно по ГОСТ - будут проблемы.

Если отчет совсем уж шаблонный - можно попробовать самописными скриптами через grep/sed/… делать замену в тех-файлах, либо подгружать текстовые файлы в самом латехе через инклюды (но опять сохраниться вопрос, кто эти текстовые файлы будет генерить в надлежащем формате.) По последнему варианту я делал автогенерящиеся отчеты, собирающие в целое данные записанные в отдельных txt - работает, но есть подводные камни.

luka83
()
Ответ на: комментарий от luka83

Сделать ГОСТовый шаблон не проблема. Точнее - он уже есть, и как года два прекрасно используется. Но в шаблонизатор его не запихнуть (скорее всего) --- слишком много переопределений.

Скорее всего придётся работать через инклюды и скрипты. Хотя ещё копаю тему.

arbyz
() автор топика
\documentclass{scrartcl}

\input{generatedfile.tex}
\begin{document}
	Hello, \username{}.
\end{document}
variables = {
    "username": "arbyz",
    "age": 5,
}

with open("generatedfile.tex", "w") as f:
    f.writelines(f"\\newcommand{{\\{key}}}{{{value}}}\n" for key, value in variables.items())
anonymous
()
Ответ на: комментарий от luka83

Но если нужно именно по ГОСТ - будут проблемы.

С третьего курса пишу курсачи в knitr с оформлением по ЕСКД. Проблем нет, потому что графики никак не регламентированы, а с помощью R из можно сделать красивыми. Все остальное оформление через .cls прикручено.

the_real_kinik ★★
()
Ответ на: комментарий от Evgueni

Вот не хотел. Всячески отмахивался от него, пистона для анализа хватало. Но теперь понимаю, что придётся браться за R.

arbyz
() автор топика
Ответ на: комментарий от arbyz

придётся браться за R.

А браться собстна не за что. Лайтовая вещь. Если уж на пистоне рубишь, в R вообще лафа.

Deleted
()
Ответ на: комментарий от anonymous

У меня вместо \newcommand:

\newcommand\undefinedParametersList{}

\newcommand\putUndefinedParametersListHere{%
  \ifx\undefinedParametersList\empty%
  \else%
    \section{Undefined parameters}%
    \begin{itemize} \undefinedParametersList%
    \end{itemize}%
  \fi}

\newwrite\undefinedParametersFile

\immediate\openout\undefinedParametersFile=undefinedParameters.log

\makeatletter 

\newcommand\hashparameter[2]{%
  \@namedef{parameter-e154q-#1}{#2}%
}
\newcommand\gethashparameter[1]{%
  \@ifundefined{parameter-e154q-#1}{%
    \texttt{\textbackslash #1}%
    \g@addto@macro\undefinedParametersList{\item \texttt{#1}} %
    \immediate\write\undefinedParametersFile{#1}%
  }{%
    \@nameuse{parameter-e154q-#1}%
  }%
}

Это для проставки всякой мелочи в доке. Таблицы заполняются input-ом сгенерированного скриптом файла.

ados ★★★★★
()

А можно без латеха. reportlab посмотри.

anonymous
()
Ответ на: комментарий от luka83

Экспорт через pdf?

Да.

Было бы интересно взглянуть на результат.

У меня в курсачах возможности R слабо задействованы. Лучше примеры на knitr от создателя посмотреть.

the_real_kinik ★★
()
Ответ на: комментарий от the_real_kinik

Раз уж тут упомянули knitr, спрошу, shiny+knitr кто-нибудь использовал?

einhander ★★★★★
()

Подтолкните в какую сторону смотреть. Как формировать tex-файл по определённым условиям.

Literate Programming, Reproducible Research

в частности, изучи пример «научной» работы (влияние потепления климата на рост столбов на марсе неважно что, главное сам метод, техника Reproducible Research в которой эта работа написана).

Literate Programming: подход Дональда Эрвина Кнута про то, как писать проектную документацию. программа пишется как книжка для человека, с исполняемыми в виде кода комментариями. текстом описывается замысел, код приводится для иллюстрации замысла. потом средства WEB: CWEB/noweb или аналоги по команде tangle извлекают компилируемый код из «обобщённого исходника» в разметке WEB, по команде weave извлекают из него же документацию (в разметке .tex). при этом weave может использовать результаты tangle / make compile/ make run/ make test, например, писать методички по лабораторным или книжку с примерами так очень удобно (примеры книга+программа, написанных в таком стиле: TeX the book and the program, компилятор lcc, Physically Based Rendering). в автоматически построенной через weave документации есть оглавление, индекс, гиперссылки на «блоки кода» в добавок к просто тексту.

Reproducible Research: подход «воспроизводимых научных исследований», где воспроизводимость обеспечивается за счёт того, что научная работа пишется как лабораторный журнал + описание экспериментов, включая все исходные данные + описание методики, достаточно полной для воспроизводимости эксперимента и методики исследования (на других исходных данных, корректно собранных в соответствии с описанной методикой исследования, более полной чем обычно — например, другим учёным). облегчается верификация — достаточно собрать исходные данные (по описанной методике) и запустить скрипт (аналогичный tangle/make run/make test), который строит графики, зависимости, устойчивость модели управления и т.п. то есть картинки строятся скриптом автомагически. скрипт выполняет статистическую обработку и наглядную демонстрацию зависимости, какого-то открытого закона, модели.

anonymous
()
Ответ на: комментарий от anonymous

первого примера из журнала Open Access jstat — достаточно для понимания технологии: смотри в makefile, изучай датасет который закачивается через SQL и далее обрабатывается на R, который строит график (результаты исследования).

ещё имеет смысл покопать гитхаб и страничку Эрика Шульте на предмет работ, написанных в таком стиле (см. раздел «публикации», PDF, данные для воспроизводимости, исходники этих PDF на гитхабе).

он в последних статьях пишет про Reproducible Research на основе Emacs org-mode babel. есть расширение org-mode к Emacs — текстовый органайзер (например, план дня agenda + хронометраж времени на задачу + вики-заметки ). к нему есть плагин babel для LP/RR среды. текстовое представление довольно гибкое — облегчённая разметка типа markdown + вики-подобные ссылки, есть не только «блоки кода» но и «блоки данных» (таблицы, матрицы, вектора, скаляры). помимо встроенного «экселя» calc в текстовом виде с формульным калькулятором, «блоки данных» можно именовать, представлять как метапеременные-параметры для интерпретации в «блоки кода» и тут же непосредственно исполнять через C-c C-c для 10500 доступных языков программирования, ну или «компилировать» tangle через C-c C-v t внутри «блока кода» либо M-x org-babel-tangle.

org-mode интересен тем, что «из коробки» поддерживает weave в стандартные форматы (PDF, PS через LaTeX, ODT, и далее MS Word через OpenOffice, XML, и прочие (всё полностью настраиваемо)). чтобы генерировать «отчёт в ворде» достаточно один раз настроить стилевой файл и далее конвертировать в ODT и далее в Word (лучше OpenOffice-ом, а не вордом, у которого есть мелкие проблемы с ODT).

с минимумом телодвижений.

если «компендиум» в таком стиле получился большой, иногда имеет смысл запускать tangle отдельной программой (на гитхабе есть на C/nim/питоне/лиспе), а не встроенным в емакс M-x org-babel-tangle

также потенциально интересной идеей является представление «обобщённого исходника» компендиума в виде не markdown, а например S-выражений. к примеру, GNU Skribilo написанный на Guile поддерживает несколько исходных форматов и генерирует в несколько выходных. строит AST и преобразования AST, можно написать свой reader/writer/постпроцессор S-выражений макросами. нечто похожее делает и Emacs внутри babel обвязки через метапеременные, только напрямую этого не видно. а тут всё открыто, доступно и настраиваемо.

ну и также pandoc в последних версиях уже довольно неплох.

anonymous
()

также нечто подобное есть в iPython notebook, Wolfram Mathematica, Julia notebook, knitr и т.п.

anonymous
()
Ответ на: комментарий от arbyz

примеры org-mode babel: @gh:dfeich/org-babel-examples, eschulte/org-scraps и исходник, org-contrib/babel/uses

org-mode babel + RR научная работа в RR стиле.

Eric Nielsen org-examples

org-mode tutorial

+ см. примеры выше.

+ обычные ссылки про «Reproducible Research», если погуглить.

anonymous
()
Ответ на: комментарий от anonymous

Очень содержательно! Благодарствую!

arbyz
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.