在 algorithm2e 中定义多态对象

在 algorithm2e 中定义多态对象

我目前正在写我的硕士论文,我正在使用 algorithm2e 编写伪代码。我经常使用SetKwData它来显示数据类型。但是,我想稍微改变一下使用参数时的显示方式。

例如,如果我想显示一个在键和数据上都是多态的键值映射数据类型,我会写类似这样的内容

\SetKwData{DFoo}{Foo}
\SetKwData{DBar}{Bar}
\SetKwData{DMap}{Map}

\Dmap{\DFoo, DBar}

然后编译后的文档看起来会像这样

Map(Foo, Bar)

在我看来,这看起来太像函数调用了。我想将括号改为类似这样的形式Map<Foo, Bar>

答案1

在下面的示例中,根据\SetKwData{Kw}{the text}中的定义algorithm2e.sty,提供了一个通用宏\SetKwMetaData{Kw}{the text}{left delimiter}{right delimiter},允许您指定分隔符。这些分隔符在 中被硬编码为(和。)\SetKwData

\documentclass{article}
\usepackage{algorithm2e}

\makeatletter
% \SetKwMetaData{Kw}{the text}{left delimiter}{right delimiter}
\newcommand{\SetKwMetaData}[4]{%
  \algocf@newcommand{@#1}[1]{\DataSty{#2#3}\ArgSty{##1}\DataSty{#4}}%
  \algocf@newcommand{#1}{%
    \@ifnextchar\bgroup{\csname @#1\endcsname}{\DataSty{#2}\xspace}}%
  }%
\makeatother

\SetKwData{DFoo}{Foo}
\SetKwData{DBar}{Bar}
\SetKwMetaData{DMap}{Map}{$\langle$}{$\rangle$}

\begin{document}
\begin{algorithm}
  \DFoo{a}\\
  \DMap{\DFoo, \DBar}
\end{algorithm}
\end{document}

在此处输入图片描述

相关内容