我想自定义 中的关键字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.sty
是algorithms
捆, 尽管algpseudocode.sty
是algorithmicx
捆,所以你比较的是根本没有使用的代码。后者定义\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
您所展示的片段。