自定义关键字算法对齐

自定义关键字算法对齐

我正在尝试为算法块添加自定义关键字,以指示应用代码的对象类型。我尝试使用,\SetKW{arg1}{arg2}但无法在其后插入新行(下一个关键字在同一行),因此我尝试使用\SetKwInOut{arg1}{arg2},并且成功了,但我遇到了冒号对齐问题。

我正在使用以下代码:

\begin{algorithm}
    \SetAlgoLined
    \SetKwFunction{match}{exact\_match}\SetKwComment{tcp}{//}{}
    \SetKwInOut{Object}{Object}
    \Object{MyObject}
    \SetKwInOut{Input}{Input}\SetKwInOut{Output}{Output}
    \Input{my input}
    \KwResult{my result}
    \While{condition}{
        while-block\;
    }
\end{algorithm}

生成以下输出:

在此处输入图片描述

因此,即使更改了我使用的结构,我该如何对齐前三个字段的列?提前致谢。

答案1

algorithm2e提供了两个函数来定义这类前置条件和后置条件关键字:\SetKwInput{<macro name>}{<output text>}并且\SetKwInOut{<macro name>}{<output text>}都定义了一个新命令\<macro name>{<text>}

\SetKwInput以关键字样式排版<output text>,后跟冒号,并将用户<text>作为参数传递给新定义的宏。功能几乎相同,但它将所有冒号与先前定义的所有关键字的\SetKwInOut最长宽度对齐。<output text>\SetKwInOut

在第一次使用 之后定义新的宏时\Object,对齐位置会移动,因为\Output现在给出所有宽度中最大的<output text>。这就是为什么您会在一个看似随机的位置得到第二个冒号。添加更多宏调用表明对齐是正确的,但是(\KwResult尚未定义\SetKwInOut ,因此不会对齐):

\begin{algorithm}
    \SetAlgoLined
    \SetKwInOut{Object}{Object}
    \Object{My object}
    \SetKwInOut{Input}{Input}
    \SetKwInOut{Output}{Output}
    \Input{My input}
    \Output{My output}
    \Object{My object again}
    \KwResult{The final result}
    \While{condition}{
        while-block\;
    }
\end{algorithm}

输出

在此处输入图片描述

为了获得正确的对齐,只需在使用任何一个宏之前先定义要使用的所有宏:

\documentclass{article}
\usepackage{algorithm2e}

\begin{document}
Non-aligned version:
\SetKwInput{Object}{Object}
\SetKwInput{Input}{Input}
\SetKwInput{Output}{Output}
\SetKwInput{Result}{Result}
\begin{algorithm}
    \SetAlgoLined
    \Object{My object}
    \Input{My input}
    \Output{My output}
    \Result{The final result}
    \While{condition}{
        while-block\;
    }
\end{algorithm}

Aligned version:
\SetKwInOut{Object}{Object}
\SetKwInOut{Input}{Input}
\SetKwInOut{Output}{Output}
\SetKwInOut{Result}{Result}
\begin{algorithm}
    \SetAlgoLined
    \Object{My object}
    \Input{My input}
    \Output{My output}
    \Result{The final result}
    \While{condition}{
        while-block\;
    }
\end{algorithm}
\end{document}

在此处输入图片描述

相关内容