algorithm2e 与 boxruled 给出过满的 hbox

algorithm2e 与 boxruled 给出过满的 hbox

我使用 algorithm2e 包和 boxruled 选项来格式化我的伪代码。但是,我得到的是过满的水平盒子,我怀疑这是由于边距/盒子冲突造成的。

有人能解决这个问题吗?提供了最小的工作示例:

\documentclass[11pt]{llncs}

\usepackage[boxruled]{algorithm2e}
\SetAlFnt{\scriptsize}
\SetAlCapFnt{\scriptsize}
\SetAlCapNameFnt{\scriptsize}

\begin{document}
    \begin{algorithm}[H]
    \SetAlgoLined
    \KwData{input}
    \KwResult{output}
    a;
    b;
    c;
    \caption{lalala}
\end{algorithm}
\end{document}

答案1

该选项的编码boxruled产生了一个不考虑规则宽度的框。可以通过重新定义一个内部命令来纠正此问题:

示例输出

\documentclass[11pt]{article}

\usepackage[boxruled]{algorithm2e}
\SetAlFnt{\scriptsize}
\SetAlCapFnt{\scriptsize}
\SetAlCapNameFnt{\scriptsize}

\makeatletter
\renewcommand{\algocf@caption@boxruled}{%
  \hrule
  \hbox to \hsize{%
    \vrule\hskip-0.4pt
    \vbox{   
       \vskip\interspacetitleboxruled%
       \unhbox\algocf@capbox\hfill
       \vskip\interspacetitleboxruled
       }%
     \hskip-0.4pt\vrule%
   }\nointerlineskip%
}%
\makeatother

\begin{document}
    \begin{algorithm}[H]
    \SetAlgoLined
    \KwData{input}
    \KwResult{output}
    a;
    b;
    c;
    \caption{lalala}
\end{algorithm}

\end{document}

newcommand 与样式文件中的命令不同之处在于 (a) 首先打印水平规则,(b) 隐藏0.4pt垂直规则的宽度 ( )。这基本上就是它的\framebox工作原理,用于框住算法主体。它不能用于标题,因为人们不想将分隔规则加倍。

答案2

我遇到了与问题中提到的相同的问题,但 Andrew 给出的答案对我拥有的更大的文档不起作用。也许我的序言中还有其他软件包阻止了 Andrew 的想法。我需要几天时间才能找出是哪个软件包导致了这个问题,但与此同时,我可以给出一个更简单的解决方案,当我遇到边距和旧打印机的问题时,这个解决方案可以帮助我。

在我的情况下,在加载文档类之后,我需要改进文档的边距,因为打印机总是有点偏差。[单个命令\usepackage[4apaper]{geometry) 本身无法完成此操作。] 我添加了一些更正,它确实有助于消除算法调用末尾的“在行中检测到过满的 \hbox(17.0pt 太宽)”问题。

该代码片段只是为了偏移足够的边距以使我的打印机能够工作。

\hoffset -0.0625in 
\voffset 0.15625in
\parindent0em

如果我发现哪个包导致安德鲁的答案不起作用,我会回到这里并将其添加为评论。

相关内容