Написание алгоритмов и псевдокода в LaTeX (пакет algorithm2e)

Почему algorithm2e — стандарт для научных публикаций

При написании дипломных работ по программной инженерии, диссертаций и статей в IEEE/ACM ключевые вычислительные методы принято представлять не длинными листингами кода и не громоздкими рисунками, а в виде компактного псевдокода. Пакет algorithm2e — признанный эталон академической верстки алгоритмов.

В отличие от пакетов для вывода листингов исходного кода с кириллицей, algorithm2e ориентирован именно на математическую абстракцию алгоритма, обеспечивая строгую нумерацию строк и визуализацию вложенности условий.

Подключение и базовые опции: linesnumbered, ruled, vlined

Для подключения пакета добавьте в преамбулу строку с полезными опциями:

LaTeX Преамбула
\usepackage[linesnumbered,ruled,vlined]{algorithm2e}

Значение параметров:

  • linesnumbered — автоматическая нумерация строк псевдокода слева;
  • ruled — оформление заголовка алгоритма элегантными горизонтальными разделительными линиями сверху и снизу;
  • vlined — отрисовка аккуратных вертикальных линий, наглядно показывающих границы вложенности условий и циклов.

Опция algo2e переименовывает окружение в algorithm2e. Она нужна, только если в документе есть другой пакет с окружением algorithm, например пакет algorithm (не algorithmicx: тот даёт окружение algorithmic). Тогда псевдокод пишите внутри \begin{algorithm2e}, а \begin{algorithm} остаётся плавающим окружением пакета algorithm. Без algo2e оба пакета сразу останавливают сборку: Command \algorithm already defined. Ошибка Environment algorithm undefined бывает в другом случае: опция algo2e включена, а пакета algorithm нет.

Псевдокод в LaTeX algorithm2e: условия If-Else, циклы While и For

Создавая псевдокод в latex algorithm2e, вы используете интуитивные макросы для управляющих конструкций:

  • Условие: \eIf{условие}{блок тогда}{блок иначе} или \If{условие}{блок};
  • Цикл с предусловием: \While{условие}{тело цикла};
  • Цикл со счетчиком: \For{i = 1 \KwTo n}{тело цикла};
  • Итератор по коллекции: \ForEach{элемент \textbf{in} коллекция}{тело};
  • Возврат значения: \Return результат\; (обратите внимание на обязательную точку с запятой \; в конце строки).

Русификация ключевых слов (Вход, Выход, Если, Иначе)

По умолчанию ключевые слова выводятся на английском языке. Чтобы перевести их на русский для русскоязычной работы, задайте переопределения в преамбуле:

LaTeX Русификация
\SetKwInOut{Input}{Вход}
\SetKwInOut{Output}{Выход}
\SetKw{KwTo}{до}
\SetKw{KwDownTo}{вниз до}
\SetKwIF{If}{ElseIf}{Else}{если}{то}{иначе если}{иначе}{конец если}
\SetKwFor{While}{пока}{выполнять}{конец цикла}
\SetKwFor{For}{для}{выполнять}{конец цикла}
\SetKwFor{ForEach}{для каждого}{выполнять}{конец цикла}
\SetKw{Return}{вернуть}

Оформление алгоритма в LaTeX: законченный пример

Полный код алгоритма поиска кратчайшего пути Дейкстры. Качественное оформление алгоритма в LaTeX в виде псевдокода выглядит строго и профессионально (если нужна именно блок-схема, смотрите статью о блок-схемах алгоритмов по ГОСТ). Команды \Input и \Output объявлены в разделе о русификации — добавьте те строки в преамбулу. Каждая строка псевдокода заканчивается командой \;:

LaTeX Пример алгоритма
\begin{algorithm}[htbp]
\caption{Алгоритм Дейкстры для поиска кратчайшего пути}
\label{algo:dijkstra}
\Input{Взвешенный граф $G = (V, E)$, стартовая вершина $s \in V$}
\Output{Массив кратчайших расстояний $dist[u]$ для всех $u \in V$}

\ForEach{$u \in V$}{
    $dist[u] \leftarrow \infty$\;
    $visited[u] \leftarrow \text{false}$\;
}
$dist[s] \leftarrow 0$\;
Инициализировать очередь с приоритетами $Q$ парой $(0, s)$\;

\While{$Q$ не пуста}{
    Извлечь вершину $u$ с минимальным $dist[u]$ из $Q$\;
    \If{$visited[u]$}{
        \textbf{continue}\;
    }
    $visited[u] \leftarrow \text{true}$\;
    
    \ForEach{соседней вершины $v$ для $u$ со стоимостью ребра $w$}{
        \If{$dist[u] + w < dist[v]$}{
            $dist[v] \leftarrow dist[u] + w$\;
            Добавить $(dist[v], v)$ в очередь $Q$\;
        }
    }
}
\Return $dist$\;
\end{algorithm}

Чтобы читатель мог перейти к описанию алгоритма из текста работы по клику на его номер, настройте систему кликабельных перекрестных ссылок в PDF.

Практические советы

1

Точка с запятой \; в конце строки

В algorithm2e команда \; не просто печатает точку с запятой, а завершает логическую строку и осуществляет перенос на новую строку с сохранением нумерации.

2

Компиляция в Labkeeper

В онлайн-редакторе Labkeeper сложные многостраничные алгоритмы удобно отлаживать: ошибки компиляции показываются списком с привязкой к строке кода, а уже собранный PDF при этом не пропадает.

Попробуйте прямо сейчас

Верстайте алгоритмы в Labkeeper

Онлайн-редактор LaTeX с поддержкой algorithm2e, формул amsmath и предпросмотром PDF.

Другие статьи