2 列の文書があり、列をまたぐフロートがいくつか含まれています。問題は、フロートが存在するとページ サイズが実質的に縮小され、残りのページ サイズが必ずしも行数の整数に一致しないという点です。そのため、TeX は段落間のスペースを増やすことで、テキストをページ境界に揃えようとします。
より良い解決策は、フロートとテキストの間のスペースを増やすことです。これは、1 列のドキュメントでは自動的に実行されます。2 列のドキュメントでもこれを実現する方法はありますか?
MWE:
\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
。)