캡션과 하위 캡션의 분리

캡션과 하위 캡션의 분리

다음 MWE를 고려하십시오.

\documentclass{article}
\usepackage{caption}
\usepackage{subcaption}
\begin{document}
\begin{figure}
  \begin{subfigure}[t]{.5\linewidth}
    \centering
    \rule{3cm}{3cm}
    \caption{First subfigure}
  \end{subfigure}%
  \begin{subfigure}[t]{.5\linewidth}
    \centering
    \rule{3cm}{3cm}
    \caption{Second subfigure}
  \end{subfigure}
\caption{A figure}
\end{figure}
\end{document}

서문(패키지 옵션 또는 설정)에서 하위 그림 캡션과 그림 캡션 간의 분리를 어떻게 줄일 수 있습니까?

답변1

대부분 광학 효과입니다. 세로 간격은 그림과 캡션 사이의 간격과 동일하지만 아래쪽부터 측정되며, 하위 그림의 경우 괄호 안의 가장 낮은 지점이 됩니다.

증거는 다음과 같습니다.

\documentclass{article}
\usepackage{caption}
\usepackage{subcaption}

\DeclareRobustCommand{\vr}[1]{\smash{\rule{0.2pt}{#1}}}
\DeclareRobustCommand{\hr}{\makebox[0pt][l]{\rule{10cm}{0.2pt}}}

\begin{document}

\begin{figure}[htp]
\centering
    \rule{6cm}{3cm}
\caption{A figure\vr{18pt}}
\end{figure}

\begin{figure}[htp]
  \begin{subfigure}[t]{.5\linewidth}
    \centering
    \rule{3cm}{3cm}
    \caption{\hr First subfigure}
  \end{subfigure}%
  \begin{subfigure}[t]{.5\linewidth}
    \centering
    \rule{3cm}{3cm}
    \caption{Second subfigure}
  \end{subfigure}

\caption{A figure\vr{18pt}}
\end{figure}
\end{document}

간격을 표시하기 위해 규칙을 추가했습니다. 위 그림의 규칙은 블랙박스에 거의 닿아 있습니다. 하단의 경우 괄호 수준에 거의 닿습니다. 실제로 하단의 경우에는 1pt가 더 있습니다 \lineskip.

여기에 이미지 설명을 입력하세요

하위 그림의 기준선에서 수직 간격을 측정하려는 경우그리고하위 캡션은 항상 하나의 라이너이므로 추가할 수 있습니다.

\AtBeginDocument{%
  \def\endsubfigure{%
    \par % ensure vertical mode
    {\small\sbox0{()}\kern-\dp0}% back up by the depth of ()
    \kern-\lineskip
    \endminipage
  }%
}

결과는 다음과 같습니다.

여기에 이미지 설명을 입력하세요

그러나 하위 캡션이 여러 줄로 나누어지면 백업이 너무 많아집니다.

훨씬 쉬운 방법은

\captionsetup{skip=\dimexpr\abovecaptionskip-3pt}
\caption{A figure}

3pt필요하다고 생각되는 경우에 맞게 조정합니다 . 이렇게 하면 지정된 양만큼 개체(하위 그림 및 캡션) 사이의 건너뛰기가 줄어듭니다.

답변2

skip제공되는 옵션을 설정하세요 .caption. 에서 제안한대로caption선적 서류 비치, "캡션과 그림 또는 표 내용 사이의 수직 공간은 skip=<amount>":

여기에 이미지 설명을 입력하세요

\documentclass{article}
\usepackage{caption,subcaption,graphicx}
\begin{document}

\begin{figure}[t]
  \begin{subfigure}[t]{.5\linewidth}
    \centering
    \includegraphics[width=3cm]{example-image-a}
    \caption{First subfigure}
  \end{subfigure}%
  \begin{subfigure}[t]{.5\linewidth}
    \centering
    \includegraphics[width=3cm]{example-image-b}
    \caption{Second subfigure}
  \end{subfigure}
\caption{A figure}
\end{figure}

\begin{figure}[t]
  \captionsetup{skip=0pt}
  \begin{subfigure}[t]{.5\linewidth}
    \centering
    \includegraphics[width=3cm]{example-image-a}
    \caption{First subfigure}
  \end{subfigure}%
  \begin{subfigure}[t]{.5\linewidth}
    \centering
    \includegraphics[width=3cm]{example-image-b}
    \caption{Second subfigure}
  \end{subfigure}
\caption{A figure}
\end{figure}

Hello world.

\end{document}

문서 서문에서 이를 설정할 수도 있습니다.

답변3

이 문제는 살펴봐야 할 사례가 여러 개 있기 때문에 매우 어렵습니다. 아래의 일부를 빼기 위해 하위 그림 캡션을 재정의할 수 있지만 vspace이는 여러 줄의 하위 그림 그룹에 적합하지 않습니다.

또는 로드하여 캡션 위의 일부 공간을 없앨 수 있지만 \usepackage[aboveskip=5pt]{caption}이는 일반 수치에는 좋지 않습니다.

어쩌면 그림에 하위 그림이 있는지 확인하는 것이 가능할 수도 있지만 이는 꽤 큰 해킹이 될 것입니다. 또는 subfigure모범 사례로 간주되어서는 안 되는 환경을 재정의할 수도 있습니다 .

나는 바로 이 문제에 적용되는 특별한 명령을 각 그림에 넣을 것을 권장합니다. 또는 그러한 경우에 사용하는 특별한 캡션 명령을 작성합니다. 둘 다 나중에 서문에서 조작할 수 있습니다.

나는 다음과 같이 두 가지 방법을 모두 보여줍니다.

% arara: pdflatex

\documentclass{article}
\usepackage{caption}
\usepackage{subcaption}
\newcommand*\myCaption[1]{\captionsetup{aboveskip=2pt}\caption{#1}} % 10 pt is the default
\newcommand{\mySubFigureHack}{\captionsetup{aboveskip=2pt}}

\begin{document}
    \begin{figure}
        \begin{subfigure}[t]{.5\linewidth}
            \centering
            \rule{3cm}{3cm}
            \caption{First subfigure}
        \end{subfigure}%
        \begin{subfigure}[t]{.5\linewidth}
            \centering
            \rule{3cm}{3cm}
            \caption{Second subfigure}
        \end{subfigure}
        \myCaption{A figure}
    \end{figure}
    \begin{figure}
        \mySubFigureHack
        \begin{subfigure}[t]{.5\linewidth}
            \centering
            \rule{3cm}{3cm}
            \caption{First subfigure}
        \end{subfigure}%
        \begin{subfigure}[t]{.5\linewidth}
            \centering
            \rule{3cm}{3cm}
            \caption{Second subfigure}
        \end{subfigure}
        \caption{A figure}
    \end{figure}
\end{document} 

여기에 이미지 설명을 입력하세요

답변4

하위 그림 캡션과 그림 캡션 사이의 수직 공간을 자동으로 줄이려면(하위 그림이 없는 캡션 앞의 수직 공간에 영향을 주지 않고) 다음 코드를 프리앰블에 추가할 수 있습니다.

\usepackage{etoolbox}
\newcommand{\belowSubcaptionSkip}{-1ex}
\pretocmd{\figure}{%% \pretocmd{\figure}... is needed because \caption is not defined outside
    \apptocmd{\endsubfigure}{\gdef\hackingMacroThatAlignsSubfigureCaptions{\vspace{\belowSubcaptionSkip}}}{}{}%% Remember that a subfigure occured. \gdef (global \def) is needed as normal \def does not work.
    \pretocmd{\caption}{\hackingMacroThatAlignsSubfigureCaptions\gdef\hackingMacroThatAlignsSubfigureCaptions{}}{}{}%% Apply the skip if applicable. Reset the skip.
}{}{}
\def\hackingMacroThatAlignsSubfigureCaptions{} %% Avoid errors in case the first figure does not have subfigures

어떤 상황으로 인해 꽤 해키적인 것으로 판명되었습니다(작업에 항목을 추가했지만 다음 항목 \endsubfigure에는 영향을 미치지 않습니다 ...).\caption

관련 정보