Figura com breve descrição adicionada à legenda

Figura com breve descrição adicionada à legenda

Tenho figuras grandes com legendas longas. Minhas legendas são formatadas (usando o pacote de legendas) e parecem boas, mas gostaria de personalizá-las um pouco mais para que minha breve descrição também fosse adicionada em azul e negrito.

Atualmente, a legenda de uma figura tem uma breve descrição adicionada duas vezes. Isso parece redundante e sujeito a erros. A breve descrição também é usada na lista de figuras e quero ter certeza de ter exatamente a mesma breve descrição na lista e na própria figura.

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}

Responder1

Você poderia redefinir \captionda seguinte maneira. Nota: No estado atual isso não funcionará corretamente 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

Se você colocar essa definição diretamente em seu preâmbulo, isso não funcionará (e não sei por quê). Mas há uma solução alternativa usando \AtBeginDocument. Assim você pode colocar o seguinte em seu preâmbulo e ele será executado diretamente apó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

informação relacionada