我正在用 LaTeX 编写一个算法,我想删除 else if 条件部分中的关键字“then”。
\documentclass{article}
\usepackage[noend]{algcompatible}
\begin{document}
\begin{algorithmic}
\If{c1}
\State{}
\ElsIf {c2}
\State{}
\EndIf
\end{algorithmic}
\end{document}
我尝试添加以下定义:
\algdef{SE}[ELSIF]{NoThenElseIf}{ElseIf}[1]{\algorithmicelsif\ #1}{\algorithmicelse\ \algorithmicif}%
并在代码中使用它。
\NoThenElseIf {c2}
\State{}
但是,编译器给出以下输出:
! Undefined control sequence.
\ALG@text #1->\algorithmicelsif
答案1
您的代码使用类似于 定义的algpseudocode
,而不是algcompatible
。但是,这里适用相同的过程(请参阅文章结尾)。
\ElsIf
我首先找到了within的定义algpseudocode.sty
:
\algdef{C}[IF]{IF}{ElsIf}[1]{\algorithmicelse\ \algorithmicif\ #1\ \algorithmicthen}
然后,我将其复制为一个新命令\NoThenElseIf
:
\newcommand{\algorithmicelsif}{\textbf{elsif}}
\algdef{C}[IF]{IF}{NoThenElseIf}[1]{\algorithmicelsif\ #1}
\documentclass{article}
\usepackage[noend]{algpseudocode}
% Original definition of \ElsIf from
% algpseudocode.sty (http://mirrors.ctan.org/macros/latex/contrib/algorithmicx/algpseudocode.sty)
% \algdef{C}[IF]{IF}{ElsIf}[1]{\algorithmicelse\ \algorithmicif\ #1\ \algorithmicthen}%
\newcommand{\algorithmicelsif}{\textbf{elsif}}
\algdef{C}[IF]{IF}{NoThenElseIf}[1]{\algorithmicelsif\ #1}
\begin{document}
\begin{algorithmic}
\If{c1}
\State True branch
\ElsIf{c2}
\State Else true branch
\NoThenElseIf{c3}
\State No \textbf{then} true branch
\EndIf
\end{algorithmic}
\end{document}
\algdef{C}[IF]{IF}{ELSIF}%
[2][default]{\algorithmicelse\ \algorithmicif\ #2\ \algorithmicthen\ALG@compatcomm{#1}}%
这可以替换为
\makeatletter
\newcommand{\algorithmicelsif}{\textbf{elsif}}
\algdef{C}[IF]{IF}{NOTHENELSIF}%
[2][default]{\algorithmicelse\ \algorithmicif\ #2\ALG@compatcomm{#1}}%
\makeatother
这是一个完整的最小示例:
\documentclass{article}
\usepackage[noend]{algcompatible}
% Original definition of \ELSIF from
% algcompatible.sty (http://mirrors.ctan.org/macros/latex/contrib/algorithmicx/algcompatible.sty)
% \algdef{C}[IF]{IF}{ELSIF}%
% [2][default]{\algorithmicelse\ \algorithmicif\ #2\ \algorithmicthen\ALG@compatcomm{#1}}%
\makeatletter
\newcommand{\algorithmicelsif}{\textbf{elsif}}
\algdef{C}[IF]{IF}{NOTHENELSIF}%
[2][default]{\algorithmicelse\ \algorithmicif\ #2\ALG@compatcomm{#1}}%
\makeatother
\begin{document}
\begin{algorithmic}
\IF{c1}
\STATE True branch
\ELSIF{c2}
\STATE Else true branch
\NOTHENELSIF{c3}
\STATE No \textbf{then} true branch
\ENDIF
\end{algorithmic}
\end{document}