我怎样才能摆脱做在一个为了循环和然后在一个如果使用algorithm
和algorithmicx
包排版算法时声明?
答案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 页起)。