如何调整 algorithm2e 包的行号?

如何调整 algorithm2e 包的行号?

在 algorithm2e 包中使用行号时,行号放置在文本块的左侧,而不是文本的正下方。请参阅algorithm2e 手册

可以将它们放在文本下方吗?

更新:现在行号:

   Input ...
   Output ...
1: Code ...

我想要的行号:

Input ...
Output ...
1: Code ...

答案1

最简单的方法是使用格式化命令\Indm\Indp减少和增加缩进。在输入/输出命令周围使用会使这些行与后续行号一样左对齐。下面的示例在手册中第二个示例的精简版中展示了此操作。

示例输出

\documentclass{article}

\usepackage[linesnumbered]{algorithm2e}

\begin{document}

\IncMargin{1em}
\begin{algorithm}
  \SetKwData{Left}{left}
  \SetKwData{Up}{up}
  \SetKwFunction{FindCompress}{FindCompress}
  \SetKwInOut{Input}{input}
  \SetKwInOut{Output}{output}

\Indm  
  \Input{A bitmap $Im$ of size $w\times l$}
  \Output{A partition of the bitmap}
\Indp
  \BlankLine
  \For{$i\leftarrow 2$ \KwTo $l$}{ 
    \Left$\leftarrow$ \FindCompress{$Im[i,j-1]$}\;
    \Up$\leftarrow$ \FindCompress{$Im[i-1,]$}\; }
    \lForEach{element $e$ of the line $i$}{\FindCompress{p}}
\end{algorithm}
\DecMargin{1em}

\end{document}

对于更一般的缩进更改,有\Indentp,它在样式类中定义,但手册中没有提到。 \Indm相当于\Indentp{-1em}\Indp\Indentp{1em}。还有 和\Indmm\Indpp它们将缩进调整为0.5em。对于行号的每个额外数字,您都需要一个额外的0.5em。特别是,如果您有两位数的行号,您可以\Indm\Indmm按如下方式使用:

两位数输出示例

\documentclass{article}

\usepackage[linesnumbered]{algorithm2e}

\begin{document}

\IncMargin{1.5em}
\begin{algorithm}
  \SetKwData{Left}{left}
  \SetKwData{Up}{up}
  \SetKwFunction{FindCompress}{FindCompress}
  \SetKwInOut{Input}{input}
  \SetKwInOut{Output}{output}

\Indm\Indmm
  \Input{A bitmap $Im$ of size $w\times l$}
  \Output{A partition of the bitmap}
\Indp\Indpp
  \BlankLine
  \For{$i\leftarrow 2$ \KwTo $l$}{ 
    \Left$\leftarrow$ \FindCompress{$Im[i,j-1]$}\;
    \Up$\leftarrow$ \FindCompress{$Im[i-1,]$}\; }
    \lForEach{element $e$ of the line $i$}{\FindCompress{p}}
  \For{$i\leftarrow 2$ \KwTo $l$}{ 
    \Left$\leftarrow$ \FindCompress{$Im[i,j-1]$}\;
    \Up$\leftarrow$ \FindCompress{$Im[i-1,]$}\; }
    \lForEach{element $e$ of the line $i$}{\FindCompress{p}}
  \For{$i\leftarrow 2$ \KwTo $l$}{ 
    \Left$\leftarrow$ \FindCompress{$Im[i,j-1]$}\;
    \Up$\leftarrow$ \FindCompress{$Im[i-1,]$}\; }
    \lForEach{element $e$ of the line $i$}{\FindCompress{p}}
  \For{$i\leftarrow 2$ \KwTo $l$}{ 
    \Left$\leftarrow$ \FindCompress{$Im[i,j-1]$}\;
    \Up$\leftarrow$ \FindCompress{$Im[i-1,]$}\; }
    \lForEach{element $e$ of the line $i$}{\FindCompress{p}}
    \BlankLine
    \Indm\Indmm
  \Input{A bitmap $Im$ of size $w\times l$}
  \Output{A partition of the bitmap}
\Indp\Indpp
\end{algorithm}
\DecMargin{1.5em}

\end{document}

没有内部变量来存储行号的宽度。该包将\llap它们放在宽度为零的框中,数字加上算法中的空格突出到该框的右侧。如文档中的示例所示,用户可以调整边距以适应给定的算法。

答案2

提出\IncMargin{1em} \DecMargin{1em}你的算法。

\IncMargin{1em}
\begin{algorithm}
\end{algorithm}
\DecMargin{1em}

相关内容