Trennung zwischen Bildunterschrift und Unterbildunterschrift

Trennung zwischen Bildunterschrift und Unterbildunterschrift

Betrachten Sie die folgenden 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}

Wie reduziere ich ab der Präambel (entweder als Paketoption oder als Einstellung) die Trennung zwischen der Beschriftung der Unterabbildungen und der Beschriftung der Abbildung?

Antwort1

Es handelt sich dabei hauptsächlich um einen optischen Effekt. Der vertikale Abstand ist derselbe wie zwischen Abbildung und Bildunterschrift, wird jedoch von unten gemessen, was im Fall von Unterabbildungen der tiefste Punkt in den Klammern ist.

Hier ist der Beweis:

\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}

Ich habe Linien hinzugefügt, um den Abstand anzuzeigen. Die Linie in der oberen Abbildung berührt fast das schwarze Kästchen, im unteren Fall berührt sie fast die Höhe der Klammern. Tatsächlich ist im unteren Fall 1pt mehr vorhanden, aufgrund von \lineskip.

Bildbeschreibung hier eingeben

Wenn Sie möchten, dass der vertikale Abstand von der Grundlinie der Unterfiguren gemessen wirdUndIhre Untertitel sind immer Einzeiler, dann könnten Sie hinzufügen

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

und das Ergebnis wäre

Bildbeschreibung hier eingeben

Allerdings wäre der Aufwand zu groß, wenn eine Unterüberschrift über mehrere Zeilen hinweg umbrochen wird.

Eine viel einfachere Methode wäre

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

3ptin den Fällen, in denen dies notwendig erscheint, entsprechend anpassen . Dadurch wird der Abstand zwischen den Objekten (Unterabbildungen und Bildunterschrift) um den angegebenen Betrag reduziert.

Antwort2

Stellen Sie die skipOption ein, die bereitgestellt wird voncaption. Wie imcaptionDokumentation, „Der vertikale Abstand zwischen der Bildunterschrift und dem Bild- bzw. Tabelleninhalt wird gesteuert durch skip=<amount>“:

Bildbeschreibung hier eingeben

\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}

Sie können dies auch in der Dokumentpräambel festlegen.

Antwort3

Dieses Problem ist ziemlich schwierig, da mehrere Fälle betrachtet werden müssen. Sie könnten Ihre Unterabbildungsbeschriftungen neu definieren, um einige vspacedavon unten zu entfernen, aber das würde bei mehrzeiligen Unterabbildungsgruppen schlecht aussehen.

Oder Sie könnten durch Laden etwas Platz über der Beschriftung loswerden, \usepackage[aboveskip=5pt]{caption}aber das wäre für normale Zahlen schlecht.

Vielleicht könnte man prüfen, ob eine Abbildung Unterabbildungen enthält, aber das wäre ein ziemlich großer Aufwand. Oder man könnte die subfigureUmgebung neu definieren, was ebenfalls nicht als Best Practice gelten sollte.

Ich würde empfehlen, in jede Abbildung einen speziellen Befehl einzufügen, der genau dieses Problem behandelt. Oder Sie schreiben einen speziellen Beschriftungsbefehl, den Sie in diesen Fällen verwenden. Beides lässt sich nachträglich von Ihrer Präambel aus manipulieren.

Im Folgenden zeige ich beide Wege:

% 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} 

Bildbeschreibung hier eingeben

Antwort4

Um den vertikalen Abstand zwischen Bildunterschriften und Abbildungsunterschriften automatisch zu verkürzen (ohne den vertikalen Abstand vor Beschriftungen ohne Unterabbildungen zu beeinträchtigen), kann der Präambel der folgende Code hinzugefügt werden:

\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

Aufgrund bestimmter Umstände stellte es sich als ziemlicher Hack heraus (das Hinzufügen von Dingen \endsubfigurefunktioniert, hat aber keine Auswirkung auf folgende \captions usw. ...).

verwandte Informationen