
単純な「アルゴリズム」を書くためのパッケージについて混乱しています。オプションが多すぎて、何をいつ使用すればよいのか混乱します。たとえば、 を使用する場合、すでにパッケージに含まれているため、algpseudocode
追加できません。algorithmic
algorithm
合理化されたアプローチのための明確なガイドラインはありますか? どのような提案でも歓迎します。
答え1
TL;DRバージョン:
- アルゴリズム- アルゴリズムの float ラッパー。
- アルゴリズム- 最初のアルゴリズム組版環境。
- アルゴリズム- 2 番目のアルゴリズムの組版環境。
- アルゴリズム疑似コード- のレイアウト
algorithmicx
。 - アルゴリズム2e- 3番目のアルゴリズム組版環境。
は よりも優れているため、algorithmicx
を使用します。と比較して同じ機能を提供していると思いますが、 の構文の方が の構文よりも明確だと思います。algpseudocode
algorithmic
algorithmicx
algorithm2e
algorithm2e
詳細版
アルゴリズム
table
アルゴリズムのフロートラッパー。ブロックコマンドやに似ておりfigure
、表や図を囲んで番号を付け、2ページに分割されるのを防ぎます。ドキュメンテーション言う:
フローティング環境にカプセル化されずにテキスト内に配置された場合、
algorithmic
環境はページ境界を越えて分割され、見た目が大きく損なわれる可能性があります。さらに、参照用にアルゴリズムに番号を付けたり、コンテンツのリストにアルゴリズムのリストを追加したりすることも便利です。このalgorithm
環境は、アルゴリズムにフローティング環境を提供することで、これらの問題に対処することを目的としています。
例:
\begin{algorithm}
\caption{Algorithm caption}
\label{alg:algorithm-label}
\begin{algorithmic}
... Your pseudocode ...
\end{algorithmic}
\end{algorithm}
アルゴリズム
これは擬似コードを書く環境です。 、 、 などの一般的な構造に対して定義済みのコマンドがあります。if
すべてwhile
のprocedure
コマンドは大文字で始まります\IF{cond} ... \ELSE ...
。例: 。ドキュメント1言う:
環境
algorithmic
はアルゴリズムを記述するための環境を提供し、algorithm
環境はアルゴリズム用の「float」ラッパーを提供します (algorithmic
またはユーザーのオプションで他の方法を使用して実装されます)。 2 つの環境が提供されている理由は、ユーザーに最大限の柔軟性を与えるためです。
例:
\begin{algorithmic}
\IF{some condition is true}
\STATE do some processing
\ELSIF{some other condition is true}
\STATE do some different processing
\ELSE
\STATE do the default actions
\ENDIF
\end{algorithmic}
アルゴリズム
このパッケージはalgorithmic
アップグレードされたようなものです。カスタムコマンドを定義できますが、これは algorithmic
ではできないことです。したがって、(クレイジーな)カスタムコマンドを書きたくない場合は、 で十分です。は と同じようにalgorithmic
使用しますが、構文と詳細がわずかに異なります。詳細については、以下の例を参照してください。algorithmicx
algorithmic
ドキュメンテーション言う:
algorithmicx パッケージ自体はアルゴリズムコマンドを定義しませんが、そのようなコマンドセットを定義するマクロのセットを提供します。algorithmicx のみを使用してコマンドを自分で定義することも、定義済みのコマンドセットのいずれかを使用することもできます。
例:
\begin{algorithm}
\caption{Euclid’s algorithm}
\label{euclid}
\begin{algorithmic}[1] % The number tells where the line numbering should start
\Procedure{Euclid}{$a,b$} \Comment{The g.c.d. of a and b}
\State $r\gets a \bmod b$
\While{$r\not=0$} \Comment{We have the answer if r is 0}
\State $a \gets b$
\State $b \gets r$
\State $r \gets a \bmod b$
\EndWhile\label{euclidendwhile}
\State \textbf{return} $b$\Comment{The gcd is b}
\EndProcedure
\end{algorithmic}
\end{algorithm}
アルゴリズム疑似コード
algorithmicx
これは、 にできるだけ似せようとするのレイアウトですalgorithmic
。 他にも次のようなレイアウトがあります。
algcompatible
(アルゴリズムパッケージと完全に互換性があります)、algpascal
(フォーマットされたパスカル プログラムを作成することを目的とし、いくつかの基本的な置換規則を使用してパスカル プログラムをalgpascal
アルゴリズム記述に変換できます)。algc
(algpascal と同様ですが、c 用です。このレイアウトは不完全です)。
のドキュメンテーション言う:
アルゴリズム パッケージに慣れている場合は、簡単に切り替えることができます。 レイアウトでは古いアルゴリズムを使用できます
algcompatible
が、algpseudocode
新しいアルゴリズムにはレイアウトを使用してください。 を使用するにはalgpseudocode
、 を使用します\usepackage{algpseudocode}
。パッケージを手動でロードする必要はありませんalgorithmicx
。これは によって実行されますalgpseudocode
。
の例を参照してください。この例でalgorithmicx
はレイアウトが使用されていますalgpseudocode
。
アルゴリズム2e
algorithmic
これは、またはのような別のアルゴリズム環境ですalgorithmicx
。ドキュメンテーション言う:
Algorithm2e は、LaTeX2e でアルゴリズムを記述するための環境です。 は、
algorithm
図のような浮動オブジェクトとして定義されます。さまざまな種類のキーワードを作成できるマクロが提供され、定義済みのキーワードのセットが提供されます。キーワードの書体を変更することもできます。
例:
\begin{algorithm}[H]
\SetAlgoLined
\KwData{this text}
\KwResult{how to write algorithm with \LaTeX2e }
initialization\;
\While{not at end of this document}{
read current\;
\eIf{understand}{
go to next section\;
current section becomes this one\;
}{
go back to the beginning of current section\;
}
}
\caption{How to write algorithms}
\end{algorithm}
答え2
- 私は最近見つけた
algpseudocodex
パッケージさまざまなパッケージの統一に向けた良い一歩となるでしょうalgorithm*
。 - このパッケージは、 のいくつかの機能 (汎用性、テンプレート化など)
algorithmicx
と の無駄のないレイアウトalgorithm2e
、つまり垂直のスコープ ラインをうまく組み合わせています。