当我插入图像时我通常这样做
\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}