![我们如何才能在算法中的某些地方使用 [noend]?](https://linux22.com/image/238287/%E6%88%91%E4%BB%AC%E5%A6%82%E4%BD%95%E6%89%8D%E8%83%BD%E5%9C%A8%E7%AE%97%E6%B3%95%E4%B8%AD%E7%9A%84%E6%9F%90%E4%BA%9B%E5%9C%B0%E6%96%B9%E4%BD%BF%E7%94%A8%20%5Bnoend%5D%EF%BC%9F.png)
例如我们有三个嵌套循环
\FORALL{ condition 1}
\FORALL{condition 2}
\FORALL{condition 3}
\STATE {do sth}
\ENDFOR
\ENDFOR
\ENDFOR
如果我们使用的[noend]
为假,则打印 3 个“endif”,但我只想打印一个,即仅第一个循环!!
有人有经验吗?
答案1
看到代码片段的语法,我假设你正在使用算法包。你应该使用算法(以尾随“x”结尾);这个包为您提供了自定义算法布局的多种可能性,并允许您根据特定需求定义全新的布局。
在下面的示例代码中,我展示了同一“算法”的三种变体;第一种是标准行为(三个“forall 循环”及其对应的“end for”)。在第二种中,我过去常常\algnotext
隐藏所有“end for”语句。在第三种中,我使用了一个自定义的“forall”循环,它不会产生任何结束文本;这与标准\ForAll, \EndFor
构造相结合,将产生所需的结果:
\documentclass{article}
\usepackage{algorithmicx,algpseudocode}
\algloopdefx{NFor}[1]{\textbf{for all} #1 \textbf{do}}
\begin{document}
Each \texttt{for} with its corresponding ending:
\begin{algorithmic}
\ForAll{ condition 1}
\ForAll{condition 2}
\ForAll{condition 3}
\State{do sth}
\EndFor
\EndFor
\EndFor
\end{algorithmic}
Using \verb+\algnotext+ to suppress the ending part for every \verb+\EndFor+ command:
\begin{algorithmic}
\algnotext{EndFor}
\ForAll{ condition 1}
\ForAll{condition 2}
\ForAll{condition 3}
\State{do sth}
\EndFor
\EndFor
\EndFor
\end{algorithmic}
Using the newly defined loop-block to suppress the ending part at will:
\begin{algorithmic}
\ForAll{ condition 1}
\NFor{condition 2}
\NFor{condition 3}
\State{do sth}
\EndFor
\end{algorithmic}
\end{document}