在 algorithm2e 中定义一个由两部分组成的新区块

在 algorithm2e 中定义一个由两部分组成的新区块

我正在尝试定义一个新的关键词让...进入...结束对于我的算法来说,它有两个部分,比如关键字在这个算法中:

夹子

我尝试定义一个块,但我发现只有像虽然...结束(只有一个块)可以定义。

抱歉我的英语不好,但我不知道如何排版这种块algorithm2e

答案1

algorithm2e定义一个命令\SetKwBlock,可用于定义新的块结构。虽然文档说这个命令定义了两个变体,一个用于具有显式结束标记的块,另一个用于没有显式结束标记的块,但后者实际上似乎没有定义。它可用于从两个这样的块构建我们的 let-in 结构。

因此,我们不得不求助于更多低级函数。以下代码\LetIn{<definitions>}{<usage>}根据\SetKwBlock\SetKwSwitch宏使用的模式定义了一个新的块结构:

\documentclass{article}
\usepackage{algorithm2e}

\makeatletter
\algocf@newcmdside@kobe{LetIn@let}{%
    \KwSty{let}%
    \ifArgumentEmpty{#1}\relax{ #1}%
    \algocf@group{#2}%
    \par
}
\algocf@newcmdside@kobe{LetIn@in}{%
    \KwSty{in}%
    \ifArgumentEmpty{#1}\relax{ #1}%
    \algocf@block{#2}{end}{#3}%
    \par
}
\newcommand\LetIn[2]{%
    \LetIn@let{#1}%
    \LetIn@in{#2}%
}
\makeatother

\newcommand\demo[2]{%
    \begin{minipage}[t]{0.33\linewidth}%
        #1:\par
        \begin{algorithm}[H]
          #2%
          \eIf{cond}
            {true part}
            {false part}
          \LetIn
            {definitions part}
            {usage part}
        \end{algorithm}%
    \end{minipage}
}

\parindent=0pt
\begin{document}

\demo{No line style}\SetAlgoNoLine
\demo{Normal line style}\SetAlgoLined
\demo{Vertical line style}\SetAlgoVlined

\end{document}

输出

在此处输入图片描述

相关内容