考慮以下 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}
我新增了規則來顯示間距;上圖中的規則幾乎觸及黑盒子;在底部的情況下,它幾乎觸及括號的水平。實際上,由於\lineskip
. ,底殼中多了 1pt 。
如果您希望從子圖的基線開始測量垂直間距和你的小標題總是一行行,那麼你可以添加
\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
由於某些情況,結果證明它相當hacky(添加東西到\endsubfigure
作品中,但對以下內容沒有影響\caption
,等等...)