在下图中,我使用了一种冗长但非常具有教育意义的算法风格。
我想自动使用作用于块内容的宏,就像第一个示例中那样,但只需键入第二个宏。只需查看 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
ElseIf
和Else
。它使用这些名称来构建上面修改的命令及其许多变体,例如用于处理()
添加注释的可选参数。如果您需要该功能,您还需要重新定义这些变体命令。