LaTeXで擬似コード
アルゴリズムやプログラミングに関する文書を書いているとき、擬似コードを書くことがあると思います。この記事ではLaTeXで擬似コードを書く方法と見た目を変更する方法をいくつか説明したいと思います。環境としてはLuaTeXを想定していますが、それ以外の場合でも若干の変更で動くと思います。
1. 主な使い方
まずは
algpseudocode
というパッケージを読み込みます。
以下のように挿入ソートのアルゴリズムを書いてみます。
表示されるのは以下のような擬似コードになります。
普段Pythonなど
end
を明示しない言語に慣れていると少し冗長に感じるかもしれません。そのような記号を明示したくない場合はパッケージ読込時に
のように書いておくと
のようなPython風の擬似コードになります。さらにdo
の記述も不要ならば、ヘッダ部分に以下のように記述します。
\algrenewcommand\algorithmicdo{}
いま
for
の始点と終点の間には…
を使っていますが、もし変えたければalgpseudocode.sty
にならい新しい制御構造\ForTo
をプリアンブルで定義します。
アルゴリズム中
\For
を新しく定義した
\ForTo
に置き換えて次のような出力を得ます。
新しく定義した制御構造については
[noend]
オプションが適用されないのため、要らなければ
algtext*{EndFor}
を
\ForTo
の定義の次の行にでも書いておきましょう。
2. よく変更を加える項目について
行間は\setlength{\baselineskip}{Npt}
(N
は自然数 )で変更できます。ここでは新たにbroadalgo
という環境を定義することにします。
この例では出てきませんが\Return
には行番号が振られないようになっています。あったほうがよいならば再定義する必要があります。
上記の設定を使った文書の例です。
\documentclass{article}
\usepackage{amsmath}
\usepackage[noend]{algpseudocode}
%%%%% フォント関連 %%%%%
\usepackage{unicode-math}
\setmainfont[Ligatures=TeX]{TeX Gyre Termes}
\setmathfont{TeX Gyre Termes Math}
\newfontfamily\algfont{TeX Gyre Cursor}
\makeatletter
\renewcommand{\ALG@beginalgorithmic}{\algfont}
\makeatother
%%%%%%%%%%%%%%%%%%%%
\algnewcommand\algorithmicto{\textbf{to}}
\algdef{SE}[FOR]{ForTo}{EndFor}[2]{%
\algorithmicfor\ #1\ \algorithmicto\ #2\ \algorithmicdo
}{%
\algorithmicend\ \algorithmicfor
}
\algrenewcommand\algorithmicdo{}
\let\oldReturn\Return
\renewcommand{\Return}{\State\oldReturn}
\algtext*{EndFor}
\algrenewcommand\alglinenumber[1]{{\texttt{#1:}}}
\newenvironment{broadalgo}{%
\setlength{\baselineskip}{17pt}
\begin{algorithmic}[1]
}{%
\end{algorithmic}
}
\pagestyle{empty}
\begin{document}
\begin{broadalgo}
\Procedure{Insertion-Sort}{$A$}
\ForTo{$j = 2$}{$A.\mathrm{length}$}
\State{$k = A[j]$}
\State{$i = j - 1$}
\While{$i > 0$ and $A[i] > k$}
\State{$A[i + 1] = A[i]$}
\State{$i = i - 1$}
\EndWhile
\State{$A[i + 1] = k$}
\EndFor
\EndProcedure
\end{broadalgo}
\end{document}