다음 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