Figura con breve descripción agregada al título.

Figura con breve descripción agregada al título.

Tengo figuras grandes con títulos largos. Mis subtítulos están formateados (usando el paquete de subtítulos) y se ven bien, pero me gustaría personalizarlos un poco más para agregar también mi breve descripción en azul y negrita.

Actualmente, el título de una figura tiene la descripción breve agregada dos veces. Esto parece redundante y propenso a errores. La descripción breve también se utiliza en la lista de figuras y quiero asegurarme de tener exactamente la misma descripción breve tanto en la lista como en la figura misma.

MWE:

\documentclass{book}
\usepackage{caption}
\usepackage{graphicx}
\usepackage{xcolor}
\captionsetup[figure]{font={small, singlespacing, sf},labelfont={color=blue, bf, sf}, indention=.5cm, labelsep=quad}

\begin{document}
\listoffigures
\begin{figure}
\includegraphics[width=0.8\textwidth]{black.png}
\centering
\caption[Short description]{\textbf{\color{blue}Short description} Very long description spanning several lines.}
\label{label}
\end{figure}
\end{document}

Respuesta1

Podrías redefinir \captionde la siguiente manera. Nota: En el estado actual, esto no funcionará correctamente para \caption*.

\documentclass{book}
\usepackage{caption}
\usepackage{graphicx}
\usepackage{xcolor}
\captionsetup[figure]{font={small, singlespacing, sf},labelfont={color=blue, bf, sf}, indention=.5cm, labelsep=quad}

\begin{document}

\makeatletter
    \let\oldcaption\caption
    \def\caption{\@ifnextchar[{\caption@with}{\caption@without}}
    \def\caption@with[#1]#2{\oldcaption[#1]{\textcolor{blue}{\bfseries#1} #2}}
    \def\caption@without#1{\oldcaption{#1}}
\makeatother

\listoffigures
\begin{figure}
    \includegraphics[width=0.8\textwidth]{example-image-duck}
    \centering
    \caption[Short description]{Very long description spanning several lines.}
    \label{label}
\end{figure}
\end{document}

Resultado

Si coloca esta definición directamente en su preámbulo, esto no funcionará (y no sé por qué). Pero existe una solución alternativa que utiliza \AtBeginDocument. De esta manera, puedes poner lo siguiente en tu preámbulo y se ejecutará directamente después \begin{document}.

\makeatletter
\AtBeginDocument{
    \let\oldcaption\caption
    \def\caption{\@ifnextchar[{\caption@with}{\caption@without}}
    \def\caption@with[#1]#2{\oldcaption[#1]{\textcolor{blue}{\bfseries#1} #2}}
    \def\caption@without#1{\oldcaption{#1}}
}
\makeatother

información relacionada