Я пишу воспроизводимую статью, и в ней есть результаты вычислений, которые генерируются скриптом Python (аналогичный скрипт MATLAB генерирует почти идентичные результаты). Я чувствую, что статья будет легче понять читателям, если они смогут сопоставить вычисления в статье с вычислениями в коде. В работе предлагается абстрактный формализм, и примеры в статье должны сделать этот формализм более конкретным для читателей (многие из которых будут инженерами); код, вероятно, будет самой подробной записью о том, как выполнять расчеты, и разъяснение может помочь нам в процессе проверки.
Есть ли у кого-нибудь предложения о том, как сделать более понятным соответствие между кодом и результатами вычислений (рисунками, уравнениями)?
Например, я думал, что когда дело доходит до строк кода, реализующих различные шаги в статье, я мог бы приводить числа уравнений (было бы удивительно, если бы я мог перекрестно ссылаться между кодом и LaTeX, но маркировка их вручную - это хорошо) и я мог бы написать функции, соответствующие различным примерам и рисункам, таким как
def example_1():
# Insert code corresponding to first example
pass
def figure_1():
# Insert code that generates Figure 1
pass
Если бы код был большим, и я не пытался объяснить, как куча различных математических методов, используемых в разработке, были на самом деле одинаковыми, я бы, наверное, не стал бы сильно беспокоиться о том, чтобы сделать код понятным, но учитывая абстрактный характер бумага и небольшая база кода, кажется, что в этом упражнении может быть что-то полезное.
источник
Ответы:
Вы можете написать всю статью в Новебе . Это немного утомительно, но очень мощный способ смешать код и текст в формате LaTeX, уравнения и цифры. Для длинных программ он имеет тенденцию превращать ваш код в книгу, а не в статью, но для коротких программ это может сработать довольно хорошо.
Если вы не хотите заходить так далеко, все же должно быть достаточно просто отформатировать секции комментариев ваших списков кода с использованием LaTeX.
listings
Пакет может помочь вам осуществить это. Вот короткий пример:С некоторыми дополнительными манипуляциями вы должны быть в состоянии заставить номера ваших ссылочных уравнений появляться в моноширинном шрифте, который он использует для перечисления уравнения.
источник
Подход noweb, упомянутый Биллом, эволюционировал совсем немного, как в своем первоначальном духе документирования кода (а не научной публикации) под термином « грамотное программирование», так и сейчас он имеет много разновидностей (я думаю, что noweb изначально был обобщением cweb), какие
doxygen
и различные языковые версии могут генерировать документацию в TeX, HTML и других форматах.К вашему сведению, noweb был разработан в течение некоторого времени в
R
сообществе (ну, первоначально этоS
сообщество, отсюда и название) под названием «Sweave» с целью предоставить документ «Воспроизводимые исследования», где код фактически запускается, когда латексный файл скомпилирован (и при желании также отображается). В Sweave написано довольно много научных работ (включая, я полагаю, весь R-журнал; см. Также журнал биостатистики и его политику в отношении воспроизводимых статей).Хотя Sweave по-прежнему является частью любой базовой установки R, его заменяет knitr, который теперь не зависит от языка , что делает его возможным выбором для вашего кода Python. Knitr поддерживает запись в LaTeX или уценке, поддерживает подсветку синтаксиса, кэширование, экстернализацию кода из исходного латекса и многие другие желательные функции для такого рода работы.
У Python есть свои собственные решения, похожие на ноутбуки ipython , которые могут отображать в HTML, возможно, в LaTeX, но я об этом знаю меньше.
Другой проект, безусловно, заслуживающий внимания, это dexyit , еще одна не зависящая от языка программа, которая прекрасно работает с LaTeX и HTML. Хотя в документации больше примеров, чем в написании научных работ, работа в LaTeX должна быть простой.
И то,
knitr
и другоеdexyit
будет делать именно то, что вы описываете в LaTeX, включая указание на внешний скрипт на python и чтение в коде. Подобные вещи могут быть выполнены в DocBook и XML, хотя я менее знаком с этим подходом.источник
Пакет Латекс чеканились обеспечивает очень широкую подсветку синтаксиса (на основе Pygments) и позволяет перекрестных ссылок в обоих направлениях. Вы можете перейти в LaTeX из части кода (отчеканенной части) и можете ссылаться в основном тексте на строки кода. Кроме того, он предоставляет среду списков, так что вы можете создать «список списков» (например, список таблиц) и позволяет ссылаться на все списки. Смотрите LaTeX MWE и его вывод с LuaLaTeX ниже (не судите код :-)).
Другой вариант - использовать PythonTeX от того же автора / сопровождающего, который позволяет выполнять вычисления при компиляции исходного кода LaTeX, поэтому результаты на бумаге и в коде всегда генерируются вместе и, следовательно, всегда связны. Смотрите галерею PythonTeX здесь.
источник
Используйте функциональность грамотного программирования в режиме org .
Большинство пользователей режима org стремятся сосредоточиться исключительно на встроенных функциях управления проектами / временем или на возможности экспортировать документы в несколько популярных форматов файлов, например PDF , из простых в обслуживании текстовых файлов.
Тем не менее, лучшей особенностью org-mode является возможность создавать грамотные программы на более чем 30 языках, при этом сообщество открытых источников ежемесячно добавляет больше языков.
Ниже приведены тривиальные примеры кода с использованием Ruby и Python:
Pros
Способность к:
SRC
блока результатов в качестве вывода и / или значения.SRC
результаты блока в виде кода, списков, таблицы, латекса, HTMLSRC
блоков.SRC
блоков вSRC
блоки в качестве переменных.noweb
синтаксис внутриSRC
блоков.Проект с открытым исходным кодом - как бесплатный, как пиво, так и бесплатный.
Cons
Необходимо установить и настроить gnu emacs для использования org-mode.
Необходимо установить и настроить все необходимое программное обеспечение для программирования.
ipython notebooks
иSweave
вы, вероятно, не увидите столько сообщений о вакансиях, даже если в 2008 году была добавлена функция Literate Programming.источник