图片列表 - 图片来源见标题

图片列表 - 图片来源见标题

当我插入图像时我通常这样做

\begin{figure}
    \includegraphics[width=\textwidth]{bilder/duese_halb}
    \caption[Image-Test \cite{source1}]{Image-Test}
    \label{fig:image-test}
\end{figure}

我希望来源仅出现在图表列表和文本和列表中的标题中。

上面显示的代码运行良好,但是如果标题中有很多文本,您总是必须复制并粘贴它,如果您在标题中更改了某些内容,则会忘记更改第二个文本,那么是否可以使用部分中的参数{}并只需在部分中添加源[],并且两者都将显示在图形列表中?

\caption[\cite{source1}]{Image-Test}

答案1

\documentclass{article}

\usepackage{xparse}

\NewDocumentCommand{\captionsource}{omm}{%
  \IfNoValueTF{#1}
   {% no leading optional argument
    \caption[#2\formatsource{#3}]{#2}%
   }
   {% leading optional argument
    \caption[#1\formatsource{#3}]{#2}%
   }
}
\NewDocumentCommand{\formatsource}{m}{%
  \unskip\ (Source:~\cite{#1})%
}

\begin{document}

\listoffigures

\begin{figure}[htp]
\Huge X
\captionsource{Test caption}{source1}
\end{figure}

\begin{figure}[htp]
\Huge Y
\captionsource[Short text]{Long test caption}{source2}
\end{figure}

\begin{thebibliography}{9}

\bibitem{source1} Something

\bibitem{source2} Else

\end{thebibliography}

\end{document}

\formatsource这样定义只是为了表达一下意思;这样做有两个原因:主要原因是你不必拘泥于 定义中的某种格式\captionsource;同样重要的是\formatsource是健壮的,所以不管\cite是健壮的还是脆弱的(取决于你是否加载了一些包,它可能会变得脆弱),都不会有问题。你可以简单地使用

\NewDocumentCommand{\formatsource}{m}{%
  \unskip~\cite{#1}%
}

如果您不想特别格式化引用。

在此处输入图片描述

答案2

您可以创建新的宏,例如

\newcommand\sourcecaption[2]{\caption[#2 \protect\cite{#1}]{#2}}

然后你可以写

\sourcecaption{source1}{Image-Test}

相关内容