算法环境中的 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)结合起来,并用括号说明优先级。这就是问题所在!这些括号的符号是\(和。因此,的第二个参数中的和(在处理 if 期间的测试中使用)的\)存在会使 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新测试。当然其他宏也需要类似的处理。\isemptyalgpseudocode

相关内容