当 \parskip 没有可拉伸胶水时,柱子底部齐平

当 \parskip 没有可拉伸胶水时,柱子底部齐平

在以下示例中,第 1 页和第 3 页上的列完全“位于”框架上,而第 2 页(具有较大浮动)上的列则略高于框架。有人知道我该怎么做才能解决这个问题吗?(如果无法完美解决,那么 1-2pt 的差异是可以接受的)。

使用\parskip可拉伸部分自然有帮助,但这不是我想要的。设置\dbltextfloatsep为特定值也有帮助(在本例中为 24.8pt),但这取决于图形的大小,找到“正确”的值很麻烦。

\documentclass[a4paper,twocolumn]{book}
\usepackage{lipsum}
\usepackage[showframe,
           textheight=\dimexpr\topskip+45\baselineskip\relax]{geometry}
%\parskip=0pt plus 1pt
\parskip=0pt 

%\dbltextfloatsep=24.8pt

\begin{document}
\begin{figure*}
\rule{\textwidth}{5cm}
\caption{blub}
\end{figure*}

\lipsum \lipsum
\end{document}

答案1

正如大卫卡莱尔在他的评论中解释的那样,\dbltextfloatsep胶水是在无法拉伸或收缩的地方发射的。

通过加载图形、排版获取其高度并插入跳过以补偿整数行数的差异,我得到了正确的高度。

\documentclass[a4paper,twocolumn,draft]{book}
\usepackage{lipsum}
\usepackage[showframe,lines=46]{geometry}
\usepackage{environ}
\makeatletter
\NewEnviron{Figure}{%
  \setbox0=\vbox{\hsize=\textwidth
    \def\refstepcounter##1{}\def\label##1{}
    \def\@captype{figure}
    \BODY
  }
  \dimen0=\dimexpr\ht0+\dbltextfloatsep\relax
  \count255=\dimen0
  \divide\count255\baselineskip
  \dimen0=\dimexpr\numexpr(1+\count255)\baselineskip-\dbltextfloatsep-\ht0\relax
  \begin{figure*}
  \BODY
  \vskip\dimen0
  \end{figure*}
}

\parskip=0pt 
%\dbltextfloatsep=20pt % set at pleasure


\begin{document}

\lipsum[1-5]

\begin{Figure}
\centering
\rule{\textwidth}{5cm}

\caption{blub}
\end{Figure}

\lipsum[6-7]\lipsum\lipsum
\end{document}

相关内容