我正在尝试为算法块添加自定义关键字,以指示应用代码的对象类型。我尝试使用,\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}