我正在使用通常的algorithm
软件包来写论文。但是,LaTeX 在算法下方放置了太多的垂直空间。我已经减少了\floatsep
,\textfloatsep
但\intextsep
似乎没有帮助。对于图形,我可以\vspaces
在图形后使用负数以减少其后的空间。但是,这对算法不起作用,因为算法下方显示了一条线。如果我在算法环境中使用负垂直空间,该线将被拉入伪代码中。
因此,针对这个问题发布的两个答案是:
不工作。
如何解决这个问题?
答案1
这layouts
文档(部分6.2 浮动布局详细,第 25 页)描述了影响浮动元素和文本主体元素之间的垂直空间的可能长度:
\textfloatsep
- 在t
op 和b
bottom 对齐浮动与文本主体之间(默认为20\p@ \@plus 2\p@ \@minus 4\p@
);以及\intextsep
- 对于其他浮点数,位于浮点数和文本之间(默认为12\p@ \@plus 2\p@ \@minus 2\p@
)。
这些的默认值设置为latex.ltx
layouts
。这两种长度都有胶水(意味着它们可以拉伸/收缩)。以下是显示所涉及长度的图表。
\textfloatsep
以下是关于从默认更改为的0pt
示例algorithmicx
包裹:
\documentclass{article}
\usepackage{lipsum}% http://ctan.org/pkg/lipsum
\usepackage{algorithm}% http://ctan.org/pkg/algorithms
\usepackage{algpseudocode}% http://ctan.org/pkg/algorithmicx
\begin{document}
\lipsum[1-2]
\begin{algorithm}[t]
\begin{algorithmic}[1]
\Procedure{Euclid}{$a,b$}\Comment{The g.c.d. of a and b}
\State $r\gets a\bmod b$
\While{$r\not=0$}\Comment{We have the answer if r is 0}
\State $a\gets b$
\State $b\gets r$
\State $r\gets a\bmod b$
\EndWhile\label{euclidendwhile}
\State \textbf{return} $b$\Comment{The gcd is b}
\EndProcedure
\end{algorithmic}
\caption{Euclid’s algorithm}\label{euclid}
\end{algorithm}
\lipsum[3-6]
\setlength{\textfloatsep}{0pt}% Remove \textfloatsep
\begin{algorithm}[t]
\begin{algorithmic}[1]
\Procedure{Euclid}{$a,b$}\Comment{The g.c.d. of a and b}
\State $r\gets a\bmod b$
\While{$r\not=0$}\Comment{We have the answer if r is 0}
\State $a\gets b$
\State $b\gets r$
\State $r\gets a\bmod b$
\EndWhile\label{euclidendwhile}
\State \textbf{return} $b$\Comment{The gcd is b}
\EndProcedure
\end{algorithmic}
\caption{Euclid’s algorithm}\label{euclid}
\end{algorithm}
\end{document}
请注意算法下方垂直空间的明显差异。
答案2
另一种方法是将算法放在图形中。一旦进入图形,您就可以使用\vspace{-1cm}
(或类似命令) 调整空白,就像调整其他图形一样。这种方法的一个好处是它不会改变其他图形周围的间距。
完整示例:
\begin{figure}[t]
\vspace{-5em}
\begin{algorithm}[H]
\begin{algorithmic}[1]
\Procedure{Euclid}{$a,b$}\Comment{The g.c.d. of a and b}
\State $r\gets a\bmod b$
\While{$r\not=0$}\Comment{We have the answer if r is 0}
\State $a\gets b$
\State $b\gets r$
\State $r\gets a\bmod b$
\EndWhile\label{euclidendwhile}
\State \textbf{return} $b$\Comment{The gcd is b}
\EndProcedure
\end{algorithmic}
\end{algorithm}
\vspace{-5em}
\end{figure}