这个问题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