algpseudocode:是否可以让“noend”选项与自定义块一起工作?

algpseudocode:是否可以让“noend”选项与自定义块一起工作?

这个问题algpseudocode提供了几个关于创建没有结束标签的自定义块的好答案。

基于此,我想知道是否可以重新定义这样的自定义块以检测选项noend,这对于标准块和循环来说会使它们的最终指示器消失。

是否应该使用自定义命令来跟踪 的存在? 里面是否有可以使用的noend内部标志?algorithmicx

我认为它可以具有以下结构(不是实际的解决方案,而是一个粗略的草图):

\usepackage[noend]{algpseudocode}
\usepackage{ifthen}

\ifthenelse{\undefined{\noEndDetector}}{ % A command "sensing" the *noend* option
    \algdef[SE]{...} % Definition considering ending keywords
}{
    \algdef[SxNE]{...} % Definition without ending keywords
}

任何帮助都将受到赞赏。

答案1

嗯,经过一番研究,似乎这个问题有效地回答了我的疑问。

事实证明,有一个标志\ALG@noend可以检查以确定选项是否noend已传递给包。

代码片段(取自问题)

% Defines custom \On ... \EndOn block
\algnewcommand\algorithmicon{\textbf{on}}
\algnewcommand\algorithmicfrom{\textbf{from}}
\algblockdefx[ON]{On}{EndOn}[2]
  {\algorithmicon\ #1\ \algorithmicfrom\ #2\ \algorithmicdo}
  {\algorithmicend\ \algorithmicon}

% Tells algorithmicx not to print an empty line if `noend' is set 
\makeatletter
\ifthenelse{\equal{\ALG@noend}{t}}%
  {\algtext*{EndOn}}
  {}%
\makeatother

相关内容