Separación entre título y subtítulo

Separación entre título y subtítulo

Considere el siguiente 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}

¿Cómo puedo reducir del preámbulo (ya sea como una opción de paquete o una configuración) la separación entre el título de las subfiguras y el título de la figura?

Respuesta1

Es principalmente un efecto óptico. El espacio vertical es el mismo que se utiliza entre figura y pie de foto, pero se mide desde abajo, que en el caso de subfiguras es en el punto más bajo del paréntesis.

Aquí está la prueba:

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

Agregué reglas para mostrar el espaciado; la regla en la figura superior casi toca el cuadro negro; en la parte inferior, casi toca el nivel del paréntesis. En realidad, hay 1 punto más en la parte inferior, debido a \lineskip.

ingrese la descripción de la imagen aquí

Si desea que el espaciado vertical se mida desde la línea base de las subfigurasytus subtítulos son siempre de una sola línea, entonces puedes agregar

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

y el resultado sería

ingrese la descripción de la imagen aquí

Sin embargo, el retroceso sería excesivo si un subtítulo se separara de las líneas.

Un método mucho más fácil sería

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

ajustando el 3pta su medida en los casos en que parezca necesario. Esto reducirá el salto entre los objetos (subfiguras y títulos) en la cantidad indicada.

Respuesta2

Establezca la skipopción proporcionada porcaption. Como se sugiere en elcaptiondocumentación, "[e]l espacio vertical entre el título y la figura o el contenido de la tabla está controlado por skip=<amount>":

ingrese la descripción de la imagen aquí

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

También puede configurar esto en el preámbulo del documento.

Respuesta3

Este problema es bastante difícil ya que hay varios casos que analizar. Podrías redefinir los títulos de tus subfiguras para restar algunos vspacea continuación, pero esto quedaría mal para grupos de subfiguras de varias líneas.

O podrías deshacerte de algo de espacio encima del título cargándolo, \usepackage[aboveskip=5pt]{caption}pero esto sería malo para las figuras normales.

Tal vez sería posible comprobar si hay subfiguras en una figura, pero esto sería un truco bastante grande. O podría redefinir el subfigureentorno, lo que tampoco debería considerarse una mejor práctica.

Recomendaría poner un comando especial en cada figura que se aplique a este mismo problema. O escribe un comando de título especial que utiliza en esos casos. Ambos pueden manipularse posteriormente desde su preámbulo.

Estoy mostrando ambas maneras en lo siguiente:

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

ingrese la descripción de la imagen aquí

Respuesta4

Para acortar automáticamente el espacio vertical entre los títulos de subfiguras y los títulos de figuras (sin afectar el espacio vertical antes de los títulos que no tienen subfiguras), se puede agregar el siguiente código al preámbulo:

\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

Resultó ser bastante complicado debido a algunas circunstancias (Agregar cosas a \endsubfigurelas obras, pero no tiene efecto en los siguientes \captioncorreos electrónicos, etc.)

información relacionada