我有一個兩列文檔,其中有一些跨列浮動。問題在於,浮動本質上會減少頁面大小(當存在時),並且剩餘頁面大小不一定對應於整數行。因此,TeX 嘗試透過增加段落之間的間距來將文字與頁面邊界對齊。
更好的解決方案是增加浮動和文字之間的間距,這對於單列文件是自動完成的。對於兩列文檔,有什麼方法可以實現這一點嗎?
微量元素:
\documentclass[twocolumn]{article}
\usepackage{kantlipsum}
\usepackage{mwe}
\begin{document}
\begin{figure*}[!t]
\includegraphics[width=\textwidth,height=10cm]{example-image-a}
\caption{This is a caption}
\end{figure*}
\kant[1-7]
\end{document}
答案1
這裡是原理性的示範。這個想法是將頁面上的剩餘空間減少到 的倍數\baselineskip
。
請注意,\baselineskip
圖形創建和最終位置之間可能會發生變化(除非您想更改字體大小,否則不太可能)。
\documentclass[twocolumn]{article}
\usepackage{environ}
\usepackage{mwe}
% skip to the next grid interval
\newcommand{\vgrid}[2]% #1 = remaining page, #2 = grid interval (\e.g. \baselineskip)
{\bgroup% use local registers
\dimen0=#1\relax
\dimen1=#2\relax
\count1=\numexpr \dimen0 / \dimen1\relax
\advance \dimen0 by -\count1\dimen1
\ifdim\dimen0<0pt \advance\dimen0 by \dimen1\fi
\vskip\dimen0
\egroup}
\makeatletter
\NewEnviron{figureboxstar}[1][t]{\@dblfloat{figure}[#1]
\sbox0{\begin{minipage}{\textwidth}
\BODY
\end{minipage}}%
\usebox0\vgrid{\dimexpr\textheight-\topskip-\ht0-\dp0-\dbltextfloatsep}{\baselineskip}%
\end@dblfloat}
\NewEnviron{figurebox}[1][t]{\@float{figure}[#1]
\sbox0{\begin{minipage}{\columnwidth}
\BODY
\end{minipage}}%
\usebox0\vgrid{\dimexpr\textheight-\topskip-\ht0-\dp0-\textfloatsep}{\baselineskip}%
\end@float}
\renewenvironment{figure}{\figurebox}{\endfigurebox}
\renewenvironment{figure*}{\figureboxstar}{\endfigureboxstar}
\makeatother
\begin{document}
\begin{figure}[t]
\includegraphics[width=\textwidth,height=10cm]{example-image-a}
\caption{This is a caption}
\end{figure}
\begin{figure*}[t]
\includegraphics[width=\textwidth,height=10cm]{example-image-a}
\caption{This is a caption}
\end{figure*}
\lipsum[1-10]
\end{document}
事實證明,更換figure
和figure*
環境比預期的要容易。 (我開始嘗試使用\@ifstar
。)