我们如何才能在算法中的某些地方使用 [noend]?

我们如何才能在算法中的某些地方使用 [noend]?

例如我们有三个嵌套循环

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

在此处输入图片描述

相关内容