Tex文章にアルゴリズム(疑似コード)を書く方法

はじめに

擬似コード (ぎじコード、英: pseudocode )とは、アルゴリズムなどを、架空の非常に高水準なプログラミング言語(擬似言語)で記述したものである。 フローチャートよりもプログラミング言語に近いので理解しやすいかもしれない。

この記事は

TeX論文にアルゴリズム(疑似コード)を書く方法 https://qiita.com/jirojiro/items/0ae13aac9112a804f8d5

algorithmicxを使いLaTeXに擬似コードを追加 https://qiita.com/tomoyk/items/6016123b5c9034bb0087

を参考にまとめた。

準備

conf.py の中の preamble のところで:

\usepackage{algpseudocode}
\usepackage{algorithm}

と定義して、疑似コード用パッケージを呼び出す。 texlive-science でpythonをインストールしておけば

  • algorithm2e

  • algorithmicx

  • algorithms

などが入っているのでパッケージの呼び出しに問題はないはずである。

最終的に、

../_images/1.png

図 5 疑似アルゴリズムの例

のような形を目指す。

書き方

上の例は、

.. raw:: latex

    \makeatletter
    \renewcommand{\ALG@name}{アルゴリズム}
    \makeatother
    \begin{algorithm}[tb]
    \caption{疑似アルゴリズム記法:配列から最大値を求める関数}
    \begin{algorithmic}[1]

    \Function {max\_in\_array}{$array$}
        \State $max \gets 0$
        \ForAll {$element \gets array$}
            \If {$element > max$}
                \State $max \gets element$
            \EndIf
        \EndFor
        \State \Return $max$
    \EndFunction

    \end{algorithmic}
    \end{algorithm}

のようにsphinxからlatexのコマンドを直接呼び出す形となる。

疑似コードの記述方法

以下、疑似アルゴリズムの記述方法を

TeX論文にアルゴリズム(疑似コード)を書く方法 https://qiita.com/jirojiro/items/0ae13aac9112a804f8d5

より転載。

  1. 単純代入:

    \STATE <text>
    
  2. if文:

    \IF{<condition1>}
    \STATE some processing
    \ELSIF{<condition2>}
    \STATE some processing
    \ELSE
    \STATE some processing
    \ENDIF
    
  3. forループ:

    \FOR{<condition>}
    \STATE some processing
    \ENDFOR
    
  4. whileループ:

    \WHILE{<condition>}
    \STATE some processing
    \ENDWHILE
    
  5. repeat-untilループ:

    \REPEAT
    \STATE some processing
    \UNTIL{<condition>}
    
  6. 論理演算:

    <expression> \AND <expression>
    <expression> \OR <expression>
    <expression> \XOR <expression>
    \NOT <expression>
    
  7. 前提条件:

    \REQUIRE <condition>
    
  8. 事後条件:

    \ENSURE <condition>
    
  9. return文:

    \RETURN <text>
    
  10. 真偽:

    \RETURN \TRUE
    \RETURN \FALSE
    
  11. 文字のプリント:

    \PRINT <text>
    
  12. コメント:

    \COMMENT{<comment>}