在 algpseudocode 中,\algrenewcommand 不适用于 \algorithmicelsif

在 algpseudocode 中,\algrenewcommand 不适用于 \algorithmicelsif

我想自定义 中的关键字algpseudocode,包括 的渲染\ElsIf。但是当我编译文件时

\documentclass{article}
\usepackage{algpseudocode}
\algrenewcommand\algorithmicthen{\relax}
\algrenewcommand\algorithmicif{If}
\algrenewcommand\algorithmicelse{Else}
\algrenewcommand\algorithmicelsif{Elif}
\begin{document}
\end{document}

我收到一个语法错误:

! LaTeX Error: Command \ALG@cmd@2@algorithmicelsif undefined.

See the LaTeX manual or LaTeX Companion for explanation.
Type  H <return>  for immediate help.
 ...

l.7 \algrenewcommand\algorithmicelsif
                                     {Elif}
?

而前三个algrenewcommand都工作正常。我做错了什么?

我可以看到样式文件algorithmic.sty包含

\newcommand{\algorithmicif}{\textbf{if}}
\newcommand{\algorithmicthen}{\textbf{then}}
\newcommand{\algorithmicelse}{\textbf{else}}
\newcommand{\algorithmicelsif}{\algorithmicelse\ \algorithmicif}

所以我认为应该可以重新定义这些命令中的任何一个。

答案1

algorithmic.styalgorithms, 尽管algpseudocode.styalgorithmicx,所以你比较的是根本没有使用的代码。后者定义\ElsIf为使用\algorithmicelse\algorithmicif,因此重新定义它们就足够了。或者,如果你想要通过不同的输出\ElsIf,请将其定义为:

在此处输入图片描述

\documentclass{article}

\usepackage{algpseudocode}

\algrenewcommand\algorithmicthen{\relax}
\algrenewcommand\algorithmicif{If}
\algrenewcommand\algorithmicelse{Else}
\algrenewcommand\algorithmicend{End}

\algdef{C}[IF]{IF}{ElsIf}[1]{ElIf\ #1}% Update display of \ElsIf

\begin{document}

\begin{algorithmic}[1]
  \If{$quality \geq 9$}
    \State $a \gets perfect$
  \ElsIf{$quality \geq 7$}
    \State $a \gets good$
  \ElsIf{$quality\geq 5$}
    \State $a \gets medium$
  \ElsIf{$quality \geq 3$}
    \State $a \gets bad$
  \Else
    \State $a \gets unusable$
  \EndIf
\end{algorithmic}

\end{document}

上述示例代码部分取自algorithmicx文档

答案2

软件包代码 ( algpseudocode.sty) 具有

\algdef{C}[IF]{IF}{ElsIf}[1]{\algorithmicelse\ w\ #1\ \algorithmicthen}%

所以ElseIf是根据定义的,默认\algorithmicelse情况\algorithmicthen下没有任何命令 \algorithmicelsif

algorithmicx.sty该包并不基于algorithmic.sty您所展示的片段。

相关内容