플로트를 그리드에 스냅하는 방법

플로트를 그리드에 스냅하는 방법

열에 걸쳐 있는 부동 소수점이 포함된 2열 문서가 있습니다. 문제는 부동 소수점이 존재하는 경우 본질적으로 페이지 크기를 줄이고 나머지 페이지 크기가 반드시 행의 정수와 일치하지 않는다는 것입니다. 따라서 TeX은 단락 사이의 공간을 늘려 페이지 경계에 텍스트를 정렬하려고 합니다.

더 나은 해결책은 단일 열 문서의 경우 자동으로 수행되는 플로트와 텍스트 사이의 공간을 늘리는 것입니다. 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}

figurefigure*환경을 교체하는 것이 예상보다 쉽다는 것이 밝혀졌습니다 . (저는 를 사용하려고 시작했습니다 \@ifstar.)

관련 정보