图片来源发布在图片环境中,打印在图片来源列表中

图片来源发布在图片环境中,打印在图片来源列表中

我正在写一本有很多图表的长书,我想在每个图表环境中插入图表信用代码,并将相关的信用文本收集并打印在书末的 Listoffigurecredits 中(很像 Listoffigures、Listoftables 等)。

我调查了这个相关答案但它相当复杂,而且不能完全满足我的需要,例如根据排版的数字编号自动对信用进行编号。

举个例子,我希望与信用额度相关的数字调用具有以下(最小)形式:

\begin{figure}
\include{...figure file here...}
\caption{Mona Lisa by Leonardo da Vinci.}
\figurecredit{Mona Lisa by Leonardo da Vinci, reproduced by permission, The Louvre, Paris.}
\end{figure}

然后,在这本书的最后,我想有一个

\listoffigurecredits

这将打印出包含以下内容的列表:

图 2.9:列奥纳多·达·芬奇的《蒙娜丽莎》,经巴黎卢浮宫许可复制。

注意,“图 2.9”应该根据实际排版图自动生成,并且样式应该与 listoffigures、listoftables 等相匹配。

我希望使用最少的代码...最简单的方法来完成这个棘手的任务。

答案1

在此处输入图片描述

该宏\figurecredits只是将信用写入一个名为的单独文件\jobname.fcf,基本上与显示文件\listoffigurecredits的副本没有什么不同。\tableofcontents.fcf

\documentclass{article}

\usepackage{etoolbox}


\makeatletter
\newcommand{\figurecredit}[2][]{%
  \ifblank{#1}{%
    \addcontentsline{fcf}{figure}{\protect\numberline{\thefigure}#2}%
  }{%
    \addcontentsline{fcf}{figure}{\protect\numberline{\thefigure}#1}%
  }%
}

\newcommand{\listoffigurecredits}{%
  \begingroup
  \clearpage
  \let\old@starttoc\@starttoc
  \def\@starttoc##1{\old@starttoc{fcf}}
  \renewcommand{\contentsname}{Figure credits}
  \tableofcontents
  \endgroup
}
\makeatother

\begin{document}
\listoffigures


\begin{figure}
\caption{Mona Lisa by Leonardo da Vinci.}
\figurecredit{Mona Lisa by Leonardo da Vinci, reproduced by permission, The Louvre, Paris.}
\end{figure}

\begin{figure}
\caption{The Scream by Edvard Munch}
\figurecredit[The Scream]{The Scream by Edvard Munch}
\end{figure}


\listoffigurecredits

\end{document}

答案2

根据@user31729的回答以及另一个,这是一个更简单的案例,对我有用,但@user31729 的答案却没有:

\DeclareRobustCommand{\figurecredit}[1]{\addcontentsline{fcf}{figure}{\protect\numberline{\thefigure}#1}}
\makeatletter
\newcommand{\listoffigurecredits}{%
    \begingroup
    \chapter*{Figure credits}
    \@starttoc{fcf}
    \endgroup
}
\makeatother

现在,如果您使用 KOMA-Script 类,或者仅仅tocbasic使用其本身,您也可以执行以下操作:

\addtotoclist[]{fcf}
\DeclareRobustCommand{\figurecredit}[1]{\addcontentsline{fcf}{figure}{\protect\numberline{\thefigure}#1}}
\newcommand*{\listoffigurecredits}{\listoftoc[Figures credits]{fcf}}

最后,您可能希望包含子图并正确引用,然后将定义交换为\figurecredit

\DeclareRobustCommand{\figurecredit}[1]{%
    \addcontentsline{fcf}{figure}{%
        \ifnum\value{subfigure}>0
            \protect\numberline{\thefigure.\thesubfigure}
        \else
            \protect\numberline{\thefigure}
        \fi
        #1%
    }%
}

答案3

这可能不能令人满意,但快速而肮脏的解决方案是将所有文本放在标题内,然后使用命令 \listoffigures,该命令首先生成所有图形的列表,其中包含图形编号,然后是标题文本(以冒号分隔)。

相关内容