Рисунок с кратким описанием, добавленным к подписи

Рисунок с кратким описанием, добавленным к подписи

У меня большие фигуры с длинными подписями. Мои подписи отформатированы (с помощью пакета подписей) и выглядят хорошо, но я хотел бы настроить их немного больше, чтобы также добавить мое краткое описание синим и жирным шрифтом.

В настоящее время в подписи к рисункам краткое описание добавляется дважды. Это кажется излишним и подвержено ошибкам. Краткое описание также используется в списке рисунков, и я хочу убедиться, что в списке и на самом рисунке будет точно такое же краткое описание.

МВЭ:

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

решение1

Вы можете переопределить \captionследующим образом. Примечание: в текущем состоянии это не будет работать правильно для \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}

Результат

Если вы напрямую поместите это определение в преамбулу, это не сработает (и я не знаю почему). Но есть обходной путь с использованием \AtBeginDocument. Таким образом вы можете поместить следующее в преамбулу, и оно будет выполнено сразу после \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

Связанный контент