アルゴリズム環境における LaTeX 数式モード

アルゴリズム環境における LaTeX 数式モード

次のコードは正常に動作します:

\documentclass{article}
\usepackage{algpseudocode,amsmath}

\begin{document}
\begin{algorithmic}[1]
\State \Call{MergeSort}{$T(1,\dotsc,n)$}
\end{algorithmic}
\end{document}

$...$しかし、を に置き換えると\(...\)、何らかの理由でエラーが発生します。そのため、次のコードは機能しません。

\documentclass{article}
\usepackage{algpseudocode,amsmath}

\begin{document}
\begin{algorithmic}[1]
\State \Call{MergeSort}{\(T(1,\dotsc,n)\)}
\end{algorithmic}
\end{document}

$...$と は同等だと思いました\(...\)。なぜこのようなことが起こるのでしょうか? ありがとうございます。

答え1

マクロ\Callは を使用します\ifthenelse。これは非常に便利な機能を持っています。命題論理接続子( および\ANDと呼ばれる\OR)とテストを、優先順位を示す括弧で組み合わせることができます。ここに落とし穴があります!これらの括弧のシンボルは\(およびです。したがって、の2番目の引数(の処理中にテストで使用される)におよび が\)存在すると、TeXが混乱します。これは、この評価の時点でおよび\(\)\Call\ifthenelse{\equal{#2}{}}\Call\(\) ない数式の区切り文字ではなく、「命題論理の括弧」です。

したがって、 を使用します$

代替解決策:

\documentclass{article}
\usepackage{algpseudocode,amsmath,xifthen}

\algrenewcommand\Call[2]{\textproc{#1}\ifthenelse{\isempty{#2}}{}{(#2)}}%

\begin{document}

\begin{algorithmic}[1]
\State \Call{MergeSort}{\(T(1,\dotsc,n)\)}
\end{algorithmic}
\end{document}

xifthenこれは、引数を解釈しない新しいテストを導入するため機能します\isempty。もちろん、他のalgpseudocodeマクロでも同様の処理が必要になります。

関連情報