在 `algpseudocode` 中使用 `\(...\)`

在 `algpseudocode` 中使用 `\(...\)`

有没有办法在( )\(...\)中的任何命令的参数中使用较新的数学语法?文档和几乎所有其他教程都使用 TeX-primitive 。algpseudocodealgorithmicx$...$

梅威瑟:

\documentclass{article}
\usepackage{algorithm}
\usepackage{algpseudocode}
\begin{document}

\begin{algorithm}
    \begin{algorithmic}
        \For{\(i \gets 0\) to \(n\)}   % breaks
            \State \Call{Foo}{\(i\)}   % breaks
        \EndFor
    \end{algorithmic}
\end{algorithm}

\end{document}

答案1

我没有收到来自 的错误\For{\(i \gets 0\) to \(n\)}。但是来自 的错误\Call{Foo}{\(i\)}因为\Call最终变成了

#1#2->\textproc {#1}\ifthenelse {\equal {#2}{}}{}{(#2)}

\equal{#2}当传递包含 LaTeX 强命令的内容时会失败,因为它尝试进行完全扩展。

你可以修复这个问题。

\documentclass{article}
\usepackage{algorithm}
\usepackage{algpseudocode}

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


\begin{document}

\begin{algorithm}
    \begin{algorithmic}
        \For{\(i \gets 0\) to \(n\)}
            \State \Call{Foo}{\(i\)}
        \EndFor
    \end{algorithmic}
\end{algorithm}

\end{document}

在此处输入图片描述

或者更有效地,

\algrenewcommand\Call[2]{%
  \textproc{#1}%
  \if\relax\detokenize{#2}\relax\else(#2)\fi
}

还有其他两个地方可能需要这样的修复,因此应该有一个完整的版本

\documentclass{article}
\usepackage{algorithm}
\usepackage{algpseudocode}

%%% fix for usage of \ifthenelse
\newcommand{\algparenthesize}[1]{%
  \if\relax\detokenize{#1}\relax\else(#1)\fi
}
\algdef{SE}[PROCEDURE]{Procedure}{EndProcedure}[2]
 {\algorithmicprocedure\ \textproc{#1}\algparenthesize{#2}}
 {\algorithmicend\ \algorithmicprocedure}
\algdef{SE}[FUNCTION]{Function}{EndFunction}[2]
 {\algorithmicfunction\ \textproc{#1}\algparenthesize{#2}}
 {\algorithmicend\ \algorithmicfunction}
\algrenewcommand\Call[2]{\textproc{#1}\algparenthesize{#2}}
%%% end fix

\begin{document}

\begin{algorithm}
    \begin{algorithmic}
        \For{\(i \gets 0\) to \(n\)}
            \State \Call{Foo}{\(i\)}
        \EndFor
    \end{algorithmic}
\end{algorithm}

\end{document}

相关内容