我正在写一本有很多图表的长书,我想在每个图表环境中插入图表信用代码,并将相关的信用文本收集并打印在书末的 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,该命令首先生成所有图形的列表,其中包含图形编号,然后是标题文本(以冒号分隔)。