答案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}
输出