我使用 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
如果我发现哪个包导致安德鲁的答案不起作用,我会回到这里并将其添加为评论。