如何扩展 \caption 命令以预先插入图形/表格的附属来源?

如何扩展 \caption 命令以预先插入图形/表格的附属来源?

在科学著作中,对每句话都注明出处是很常见的。当然,表格或图像也需要注明出处。

通常我都会使用\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} 

在此处输入图片描述

相关内容