没有“do”的“For”循环;没有“then”的“if”语句

没有“do”的“For”循环;没有“then”的“if”语句

我怎样才能摆脱在一个为了循环和然后在一个如果使用algorithmalgorithmicx包排版算法时声明?

答案1

您可以重新定义\algorithmicthen\algorithmicdo

\renewcommand\algorithmicthen{}
\renewcommand\algorithmicdo{}

在序言中添加前面的几行(分别在将构造封闭在组内的特定算法环境之前)将从所有环境中删除“then”和“do” algorithmic(分别针对特定环境)。如果更改仅应用于特定算法的某些结构,而其他结构仍将具有“then”和“do”,那么您可以定义命令来“打开/关闭”表达式:

\documentclass{article}
\usepackage{algorithm}
\usepackage{algorithmic}

\newcommand\NoDo{\renewcommand\algorithmicdo{}}
\newcommand\ReDo{\renewcommand\algorithmicdo{\textbf{do}}}
\newcommand\NoThen{\renewcommand\algorithmicthen{}}
\newcommand\ReThen{\renewcommand\algorithmicthen{\textbf{then}}}

\begin{document}

\begin{algorithm}
\caption{Calculate $y = x^n$}
\label{alg1}
\begin{algorithmic}
\STATE $y \leftarrow 1$
\NoThen
\IF{$n < 0$}
\STATE $X \leftarrow 1 / x$
\ENDIF
\ReThen
\IF{$n > 0$}
\STATE $X \leftarrow 1$
\ENDIF
\NoDo
\FOR{$N \neq 0$}
\STATE $X \leftarrow X \times X$
\ENDFOR
\ReDo
\WHILE{$N \neq 0$}
\STATE $X \leftarrow X \times X$
\ENDWHILE
\end{algorithmic}
\end{algorithm}

\end{document}

在此处输入图片描述

答案2

虽然这可能取决于用户偏好,但algorithmicx包裹提供与algorithmic但具有更多(或更简单)的定制功能。

这里是@Gonzalo的答案的实现,它使用“ONE定义宏”定义\NoThenIf...\EndIf\NoDoFor...对:\EndFor\algdef

在此处输入图片描述

\documentclass{article}
\usepackage{algorithm}% http://ctan.org/pkg/algorithm
\usepackage{algpseudocode}% http://ctan.org/pkg/algorithmicx
\begin{document}

\algdef{SE}[FOR]{NoDoFor}{EndFor}[1]{\algorithmicfor\ #1}{\algorithmicend\ \algorithmicfor}%
\algdef{SE}[IF]{NoThenIf}{EndIf}[1]{\algorithmicif\ #1}{\algorithmicend\ \algorithmicif}%
\begin{algorithm}
  \caption{Calculate $y = x^n$}\label{alg1}
  \begin{algorithmic}[1]
    \State $y \leftarrow 1$
    \NoThenIf{$n < 0$}
      \State $X \leftarrow 1 / x$
    \EndIf
    \If{$n > 0$}
      \State $X \leftarrow 1$
    \EndIf
    \NoDoFor{$N \neq 0$}
      \State $X \leftarrow X \times X$
    \EndFor
    \While{$N \neq 0$}
      \State $X \leftarrow X \times X$
    \EndWhile
  \end{algorithmic}
\end{algorithm}
\end{document}

两个定义中的标志SE均指“S使用文本启动命令”和“继续命令,默认E查找文本继续命令”。请参阅algorithmicx文档有关这些命令定义的更多信息(部分4.7 唯一定义宏,第 20 页起)。

相关内容