如何消除 wrapfigure 中过多的垂直空间?

如何消除 wrapfigure 中过多的垂直空间?

使用以下文档编译会导致在环绕图标题上方出现不必要的垂直空间。删除软件包或用法的xelatex包含可消除此问题。然而,这不是一个可行的解决方案。polyglossia\centercaption

\documentclass{article}
\usepackage{polyglossia}
\usepackage{wrapfig}
\usepackage{caption}
\usepackage{lipsum}

\newcommand\centercaption{%
  \captionsetup{format=plain,labelsep=newline,justification=centering}}

\begin{document}

\begin{wrapfigure}{r}{2cm}
  \rule{2cm}{2cm}
  \centercaption
  \caption{test}
\end{wrapfigure}

\lipsum[1]

\end{document}

上述文件产生

图片 1

没有polyglossia间距是正确的:

图片 2

有没有其他方法可以消除过多的垂直空间多于标题?请注意,设置要使用的行数wrapfigure不会产生任何效果。

答案1

我不确定为什么polyglossia在图形和标题之间添加了额外的空间,也许是一个错误。您可以\centercaption在环境的开头使用wrapfigure以防止它产生的额外空间。

顺便说一句,wrapfig包的wrapfigure环境有几个可选参数。第一个是它垂直占用的行数。例如:

\begin{wrapfigure}[8]{r}{2cm}
  \centercaption
  \rule{2cm}{2cm}
  \caption{test}
\end{wrapfigure}

请参阅手册以wrapfig了解更多选项和说明。

答案2

您看到的额外垂直空间是由于\@esphack包中宏的重新定义造成fixltx2e的(因此,显然用户 Leo Liu 说这是 polyglossia 的错误是错误的,polyglossia 加载了 fontspec,而 fontspec 加载了 fixltx2e)。\@esphacklatex.ltx 中的原始定义是:

\def\@esphack{%
  \relax
  \ifhmode
    \spacefactor\@savsf
    \ifdim\@savsk>\z@
      \ignorespaces
    \fi
  \fi}

\@esphack而对in的重新定义 fixltx2e为:

\def\@esphack{%
  \relax
  \ifhmode
    \spacefactor\@savsf
    \ifdim\@savsk>\z@
      \nobreak \hskip\z@skip  % <------
      \ignorespaces
    \fi
  \fi}

因此,您可以清楚地看到\nobreak \hskip\z@skip导致额外的垂直空间。fixltx2e软件包文档指出,这是由 Donald Arseneau 建议的,用于修复错误“浮动环境后第一个单词中没有连字符”(第 18 页)。

更新:实际的错误报告可以在这里找到这里

相关内容