算法后的垂直空间

算法后的垂直空间

我正在使用通常的algorithm软件包来写论文。但是,LaTeX 在算法下方放置了太多的垂直空间。我已经减少了\floatsep\textfloatsep\intextsep似乎没有帮助。对于图形,我可以\vspaces在图形后使用负数以减少其后的空间。但是,这对算法不起作用,因为算法下方显示了一条线。如果我在算法环境中使用负垂直空间,该线将被拉入伪代码中。

因此,针对这个问题发布的两个答案是:

如何删除/更改 \algorithm 环境前后的垂直间距?

不工作。

如何解决这个问题?

答案1

layouts 文档(部分6.2 浮动布局详细,第 25 页)描述了影响浮动元素和文本主体元素之间的垂直空间的可能长度:

  • \textfloatsep- 在top 和bbottom 对齐浮动与文本主体之间(默认为20\p@ \@plus 2\p@ \@minus 4\p@);以及
  • \intextsep- 对于其他浮点数,位于浮点数和文本之间(默认为12\p@ \@plus 2\p@ \@minus 2\p@)。

这些的默认值设置为latex.ltxlayouts。这两种长度都有胶水(意味着它们可以拉伸/收缩)。以下是显示所涉及长度的图表。

在此处输入图片描述

\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}

相关内容