算法:Else if 不带 Then

算法:Else if 不带 Then

我正在用 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}

为了algcompatible

\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}

相关内容