以下代码可以正常工作:
\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
新测试。当然其他宏也需要类似的处理。\isempty
algpseudocode