algorithm2e - 将命令应用于 IF ... THEN ... ELSE 的内容块

algorithm2e - 将命令应用于 IF ... THEN ... ELSE 的内容块

在下图中,我使用了一种冗长但非常具有教育意义的算法风格。

在此处输入图片描述

我想自动使用作用于块内容的宏,就像第一个示例中那样,但只需键入第二个宏。只需查看 MWE。这将允许始终键入相同的 LaTeX 代码,但可以在不同的代码中使用它们。

\documentclass[10pt,a4paper]{article}
    \usepackage[vlined]{algorithm2e}

    \newcommand\BlockIf[1]{\KwSty{Start If} \\ #1 \\ \KwSty{End If}}
    \newcommand\BlockElseIf[1]{\KwSty{Start Else If} \\ #1 \\ \KwSty{End Else If}}
    \newcommand\BlockElse[1]{\KwSty{Start Else} \\ #1 \\ \KwSty{End Else}}

\begin{document}

\begin{algorithm}[H]
    \uIf{1}{\BlockIf{if...}}
    \uElseIf{2}{\BlockElseIf{else if...}}
    \Else{\BlockElse{else...}}
\end{algorithm} 

\begin{algorithm}[H]
    \uIf{1}{if...}
    \uElseIf{2}{else if...}
    \Else{else...}
\end{algorithm} 

\end{document}

答案1

中的相关内部命令algorithm2e\algocf@uIf\algocf@uElseIf\algocf@Else。这些命令的以下修改会插入您的额外格式:

\documentclass[10pt,a4paper]{article}
\usepackage[vlined]{algorithm2e}

\newcommand\BlockIf[1]{\KwSty{Start If} \\ #1 \\ \KwSty{End If}}
\newcommand\BlockElseIf[1]{\KwSty{Start Else If} \\ #1 \\ \KwSty{End Else If}}
\newcommand\BlockElse[1]{\KwSty{Start Else} \\ #1 \\ \KwSty{End Else}}

\makeatletter
\renewcommand{\algocf@uIf}[2]{\If@ifthen{#1}\If@noend{\BlockIf{#2}}}
\renewcommand{\algocf@uElseIf}[2]{\ElseIf@elseif{#1}\If@noend{\BlockElseIf{#2}}}
\renewcommand{\algocf@Else}[1]{\Else@else\If@endif{\BlockElse{#1}}}
\makeatother

\begin{document}
\begin{algorithm}[H]
    \uIf{1}{if...}
    \uElseIf{2}{else if...}
    \Else{else...}
\end{algorithm} 

\end{document}

示例输出

显示 if-then-else 结构的设置由命令处理,\SetKwIF该命令的标准形式有 8 个参数,其中前三个是If ElseIfElse。它使用这些名称来构建上面修改的命令及其许多变体,例如用于处理()添加注释的可选参数。如果您需要该功能,您还需要重新定义这些变体命令。

相关内容