
次のコードは正常に動作します:
\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
マクロでも同様の処理が必要になります。