在科学著作中,对每句话都注明出处是很常见的。当然,表格或图像也需要注明出处。
通常我都会使用\caption
-command 来给表格和图片添加一些说明。不幸的是,我总是必须自己手动输入表格/图片的源代码。
以前我就是这样欺骗它的(但有时候真的很烦人):
\caption[Caption]{Caption\newline\footnotesize{Source: Own representation}}
以下是一些 MWE:
\documentclass{article}
\usepackage[demo]{graphicx}
\usepackage[justification=justified,singlelinecheck=false]{caption}
\begin{document}
\begin{figure}[ht]
\centering
\includegraphics[width=1\textwidth]{figs/test1.png}
\caption[Caption for lof]{Caption for figure\newline\footnotesize{Source: Own representation}}
\end{figure}%
\end{document}
现在我有了一个想法:
如果可以{}
向\caption
命令中插入一个额外的变量以获得一个用于添加源的单独字段,结果会怎样?
现在,它看起来像这样(标准命令):
\caption[Caption for list of figures]{Caption for figure itself}
如果我们可以扩展该\caption
命令来获得如下结果会怎样?
\caption[Caption for list of figures]{Caption for figure itself}{Source}
Source: Own representation
最理想的解决方案是,如果用户未在该字段中填写其他文本,则自动填充文本。可以使用if/else
以下一些命令来处理:
If the field is empty: Insert "Source: Own representation"
If the field is NOT empty: Insert "Source: {Inserted text}"
你知道怎样才能实现这个目标吗?
非常感谢您的帮助!
答案1
我建议不要改变的语法\caption
,而是\Caption
借助来定义命令xparse
。语法是
\Caption[<caption for lof>]{Caption}[<optional source>]
第一个可选参数具有通常含义;尾随可选参数指定源;如果为空,则使用“自己的表示”。
以下是一些使用示例。
\documentclass{article}
\usepackage{graphicx}
\usepackage[justification=justified,singlelinecheck=false]{caption}
\usepackage{xparse}
\NewDocumentCommand{\Caption}{
O{#2} % optional (default = value of mandatory argument)
m % mandatory
O{Own representation} % optional (default = given text)
}{%
\caption[#1]{#2\newline\footnotesize Source: #3}%
}
\begin{document}
\begin{figure}[!htp]
\centering
\includegraphics[width=\textwidth,height=2cm]{example-image}
\Caption
[Caption for lof]
{Caption for figure}[Some author]
\end{figure}
\begin{figure}[!htp]
\centering
\includegraphics[width=\textwidth,height=2cm]{example-image}
\Caption
{Caption for figure}[Some author]
\end{figure}
\begin{figure}[!htp]
\centering
\includegraphics[width=\textwidth,height=2cm]{example-image}
\Caption{Caption for figure}
\end{figure}
\end{document}
答案2
我建议另一种方法:定义一个变体来\includegraphics
添加第二个可选参数,该参数包含源,这要归功于copyrightbox
包和xparse
。
\documentclass{article}
\usepackage{graphicx}
\usepackage{copyrightbox}
\usepackage{caption}
\usepackage{xparse}
\DeclareDocumentCommand\myincludegraphics{o O{Source: Own representation} m }{%
\IfNoValueTF{#1}{\copyrightbox[b]{\includegraphics{#3}}{#2}}%
{\copyrightbox[b]{\includegraphics[#1]{#3}}{#2}}
}
\begin{document}
\begin{figure}[!htb]
\centering
\myincludegraphics[width=0.85\linewidth][Yuri Norstein]{loupnorstein2}
\caption[Caption for lof]{Tale of tales (1979)}
\end{figure}%
\begin{figure}[!htb]
\centering
\myincludegraphics{Hedgehog-in-the-Fog}
\caption[Caption for lof]{Hedgehog in the fog (1975)}
\end{figure}%
\end{document}