Алгоритмы и списки источников

Набросок алгоритма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.

Вернуться к Полевые комплекты