在以下示例中,第 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}