Алгоритмы и списки источников
Набросок алгоритма2e и листинги реального кода.
Алгоритмы и списки исходников
В статьях код представлен в двух различных формах, и для каждой из них в LaTeX есть отдельный инструмент. Псевдокод — это идеализированный набросок алгоритма, набранный с использованием ключевых слов и математических вычислений, и его обрабатывает пакет «algorithm2e». Исходные листинги представляют собой реальный код, дословно воспроизведенный моноширинным шрифтом, и пакет listings обрабатывает их. Выбор неправильного инструмента является обычным источником разногласий, поэтому полезно увидеть и то, и другое.
Псевдокод с алгоритмом2e
\usepackage[ruled,vlined]{algorithm2e}\begin{algorithm}\caption{Train}\While{not converged}{ Update $\theta$\;}\end{algorithm}Параметры пакета задают визуальный стиль: «ruled» рисует горизонтальные линии над и под алгоритмом и помещает заголовок вверху (согласно соглашению, ожидаемому большинством мест), а «vlined» рисует небольшую вертикальную линию, обозначающую размер каждого блока, поэтому вложение остается читабельным без больших отступов. Окружающая среда algorithm представляет собой число с плавающей запятой, подобное цифре, поэтому она содержит \caption, который дает ей номер для \ref для цитирования.
Внутри \While{condition}{body} печатает цикл с ключевым словом, выделенным жирным шрифтом, условием и телом в виде блока с отступом. \For, \If и \Return следуют одному и тому же шаблону. Операторы заканчиваются символом \;, который печатает признак конца строки и начинает новую строку. Забыть об этом — классическая ошибка новичка: линии сливаются. Поскольку это обычный LaTeX, такие математические операции, как $\theta$, работают встроенно, для чего и нужен псевдокод: описание правила обновления в нотации, а не на каком-либо конкретном языке.
Реальный код с листингами
\usepackage{listings}\begin{lstlisting}[language=Python]def f(x): return x**2\end{lstlisting}Среда lstlisting точно воспроизводит свое содержимое, сохраняя пробелы и обрабатывая специальные символы буквально, поэтому вы можете вставлять код, ничего не экранируя. Опция language=Python включает подсветку ключевых слов для этого языка, а listings знает десятки других. По умолчанию вывод простой. Большинство людей добавляют один раз \lstset{basicstyle=\ttfamily\small, Numbers=left} в преамбулу, чтобы получить моноширинный шрифт разумного размера с номерами строк. Чтобы включить файл напрямую, а не вставлять, \lstinputlisting[language=Python]{train.py} считывает его с диска, что обеспечивает синхронизацию документа с фактическим источником. Если вам нужно цветное, высококачественное выделение, пакет «minted» — более надежная альтернатива, но за счет необходимости использования внешнего инструмента и выхода из оболочки.
Выбор между ними
Используйте псевдокод в основной части документа, чтобы передать идею, и оставьте дословные списки для артефактов, для которых важен точный код, таких как приложения или описания инструментов. Распространенной ошибкой является размещение lstlisting внутри фрейма Beamer без опции [fragile]`, что приводит к непрозрачной ошибке; такое же предостережение появляется в первой колоде Beamer.