演算法環境中的 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 期間的測試\Call中使用)的存在使 TeX 感到困惑,因為在評估和\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宏也需要類似的處理。

相關內容