LaTeXのalgorithmicxの擬似コードをカスタマイズしてみる
擬似コードを書くのは、情報系の論文だと結構あるあるだと思います。フローチャートだと長くなりすぎる場合など、シンプルでないアルゴリズムはこっちのほうがきれいに書ける印象です。(※個人の感想です)
僕自身はalgorithmicxパッケージを使って擬似コードを書いていたりとかします。 他にもalgorithmicとかalgorithm2eとかがあるようです*1。 algorithmicxの使い方は以下のリンクがわかりやすいと思います。
ただし、algorithmicxは日本語の論文(卒論など)を書くときにはキャプションが「Algorithm n」になったりとめんどくさい点がいくつかあります。 それ以外にも、標準の入出力の表現がRequireとEnsureであんまり直感的ではない(※個人の感想です)などといろいろと気に食わない点もあります。 ここでは各種サイトを参考に、いくつか擬似コードまわりのカスタマイズをしたメモを書いていきます。
- Require,Ensure -> Input Outputに変える
- Algorithm -> アルゴリズムにする
- Initialize:ブロックを追加する
- 結果的に得られる出力
- おわりに
- References
Require,Ensure -> Input Outputに変える
ここは好みとかがあると思いますが、擬似コードのInputとOutputがRequireとEnsureになっててあんまり直感的ではないので、InputとOutputに書き変えます。
\begin{document}
の前に以下のように書きます。
% RequireとEnsureをInputとOutputにする \renewcommand{\algorithmicrequire}{\textbf{Input:}} \renewcommand{\algorithmicensure}{\textbf{Output:}}
Algorithm -> アルゴリズムにする
図のキャプションの名前がAlgorithmのままなので、日本語に直します。
\begin{document}
の前に以下のように書きます。
\makeatletter \renewcommand{\ALG@name}{アルゴリズム} \makeatother
Initialize:ブロックを追加する
初期化処理をまとめたブロックを追加します。
\begin{document}
の前に以下のように書きます。
\algnewcommand{\Initialize}[1]{% \State \textbf{Initialize:} \State \hspace*{\algorithmicindent}\parbox[t]{0.8\linewidth}{\raggedright #1} }
実際に使うときには、\Initialize
の中につらつらと書いていきます。
このとき、\State
は使わずに、手動で開業する必要があったりします。もう少しいい方法ないかな…
\begin{algorithm}[t] \caption{なんとかなアルゴリズム} \label{alg:hoge} \begin{algorithmic} \footnotesize{ \Require{$x$:なんとか,$\tau$:閾値} \Ensure{$x$:ほにゃらら} \Function{hoge}{$x$} \Initialize{ $y$ := \Call{Get\_Fuga}{$x$}\\ $z$ := \Call{Get\_Piyo}{$y$} } \State return $x$ \EndFunction } \end{algorithmic} \end{algorithm}
結果的に得られる出力
こんな出力が得られれます。論文ぽくていい感じ。
おわりに
以上、擬似コードを書く時のalgorithmicxのカスタマイズ術でした。 このポストを書く時もそうでしたが、英語でググるといろいろなTipsが大抵の場合引っかかるので、それを参考にするといいと思います。
References
algorithmicx - Slight change in algorithm - TeX - LaTeX Stack Exchange
naming - Changing name of the label Algorithm - TeX - LaTeX Stack Exchange
*1:https://en.wikibooks.org/wiki/LaTeX/Algorithms WikibooksでLaTeX擬似コードの書き方がまとめられています