我问过类似的问题试图创建一个数字来源列表但是对于这个,我想尝试做一些稍微不同的事情,即不是每个图像只有一个条目,而是来自一个来源的多幅图像都有一个条目。
我曾尝试修改其中一个答案这个问题以获得期望的结果,但作为业余爱好者,我并不真正了解宏。
这是我的(复制/改编自这个答案) 迄今为止尝试过 MWE。
\documentclass[oneside]{memoir}
\usepackage{lstdoc}
\makeatletter
\def\tags{Physics,Computer Science,Chemistry,}
%% sorts the tags for later on
\def\tags@sorted{\lst@BubbleSort\tags}
\tags@sorted
%% we automatically create macros for each tag
\def\macrofy@#1\@nil{%
\expandafter\def\csname#1\endcsname{}
}
\def\addtags#1{\g@addto@macro\tags{#1,}
\tags@sorted
\macrofy@@
}
%% Make macros to hold the lists for each tag
%%
\def\macrofy@@{\@for\next:=\tags\do{%
\expandafter\macrofy@\next\@nil
}}
\macrofy@@
\def\addtotag#1\@nil#2{%
\expandafter\ifx\csname#2\endcsname\@empty
\expandafter\g@addto@macro\csname#2\endcsname{#1}
\else
\expandafter\g@addto@macro\csname#2\endcsname{,#1}
\fi
}
\def\tag#1{%
\expandafter\addtotag\the\c@figure\@nil{#1}
}
\def\thetags{%
%% we now print the tags or save them to a file
\section*{Image Sources}
\@for\next:=\tags\do{%
\ifx\next\@empty\else\next: See figure(s) \@nameuse{\next}\par\fi
}
}
\parindent0pt
\begin{document}
% add some tags
\addtags{NANZ,NPG,Wiki}
% test to see everything ok and list is sorted
\tags
% list of figures
\listoffigures
% example text
\chapter{foo}
\begin{figure}
\centering
\rule{1cm}{1cm}
\caption[A figure]{A longer image description}
\tag{NPG}
\end{figure}
\chapter{bar}
\begin{figure}
\centering
\rule{1cm}{1cm}
\caption[Another figure]{Another longer image description}
\tag{Wiki}
\end{figure}
\begin{figure}
\centering
\rule{1cm}{1cm}
\caption[Again Another figure]{Again Another longer image description}
\tag{NANZ}
\end{figure}
\chapter*{Images Credits}
%% prints the tags with the sections
\thetags
\end{document}
因此,第一个问题是,当前代码未链接到\thetags
列表中的图形编号。其次,我希望能够以短格式和长格式定义标签。我的意思是,\tag{NPG}{National Portrait Gallery}
这样我就可以标记图形 NPG,但列表将显示国家肖像画廊。此外,我使用标签是因为我认为这是一种简单的方法,并且有一个例子可以参考,但如果有更简单或更好的方法,请分享。
答案1
这是我的想法
首先我们定义写入特殊索引文件的命令speindexfile.ids
笔记:pdflatex 运行后makeindex speindexfile.ids
然后 2* pdflatex
\newwrite\speidx
\immediate\openout\speidx=speindexfile.ids
\def\speindex{%
\@bsphack\begingroup
\@sanitize\spewrindex}
\newcommand{\spewrindex}[2]{%
\protected@write\speidx{}%
{\string\indexentry{#2|hidepage}{\thepage}}%
\endgroup
\@esphack}
然后使用新命令\spelabel
作为标签并写入新的特殊索引。
笔记:因此对于您的图形,您不需要使用标签\spelabel
。
\newcommand{\spelabel}[2]{%
\label{#1}%
\@ifundefined{mtidx#2}{%
\global\@namedef{mtidx#2}{\ref{#1}}}{%
\expandafter\g@addto@macro\csname mtidx#2\endcsname{, \ref{#1}}}
\speindex{#1}{#2}}
新命令\printspeindex
\newcommand{\printspeindex}{%
\IfFileExists{speindexfile.ind}{%
\input{speindexfile.ind}}{}}
新命令\newcommand{\hidepage}[1]{}
从特殊索引中删除页码
最后我们重新定义索引项来打印图形编号
笔记:\spelabel
图号已通过命令保存在宏中
\let\mtindex\theindex
\renewcommand{\theindex}{%
\mtindex%
\gdef\item##1,{%
\par\hangindent 40pt ##1:\csname mtidx##1\endcsname}}
平均能量损失
\documentclass[oneside]{memoir}
\usepackage{graphicx}
\usepackage{makeidx}
\makeindex
\usepackage{hyperref}
\makeatletter
\newwrite\speidx
\immediate\openout\speidx=speindexfile.ids
\def\speindex{%
\@bsphack\begingroup
\@sanitize\spewrindex}
\newcommand{\spewrindex}[2]{%
\protected@write\speidx{}%
{\string\indexentry{#2|hidepage}{\thepage}}%
\endgroup
\@esphack}
\newcommand{\spelabel}[2]{%
\label{#1}%
\@ifundefined{mtidx#2}{%
\global\@namedef{mtidx#2}{\ref{#1}}}{%
\expandafter\g@addto@macro\csname mtidx#2\endcsname{, \ref{#1}}}
\speindex{#1}{#2}}
\newcommand{\printspeindex}{%
\IfFileExists{speindexfile.ind}{%
\input{speindexfile.ind}}{}}
\newcommand{\hidepage}[1]{}
\makeatother
\begin{document}
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer nec odio. Praesent libero. Sed cursus ante dapibus diam. Sed nisi. Nulla quis sem at nibh elementum imperdiet. Duis sagittis ipsum.
\begin{figure}
\centering
\includegraphics[scale=.5]{example-image}
\caption{ipsum}
\spelabel{figax}{Alexander bla bla}
\end{figure}
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer nec odio. Praesent libero. Sed cursus ante dapibus diam. Sed nisi. Nulla quis sem at nibh elementum imperdiet. Duis sagittis ipsum.
\begin{figure}
\centering
\includegraphics[scale=.5]{example-image}
\caption{ipsum}
\spelabel{figab}{Albert bla bla}
\end{figure}
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer nec odio. Praesent libero. Sed cursus ante dapibus diam. Sed nisi. Nulla quis sem at nibh elementum imperdiet. Duis sagittis ipsum.
\begin{figure}
\centering
\includegraphics[scale=.5]{example-image}
\caption{ipsum}
\spelabel{figza}{Zigzoo foo}
\end{figure}
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer nec odio. Praesent libero. Sed cursus ante dapibus diam. Sed nisi. Nulla quis sem at nibh elementum imperdiet. Duis sagittis ipsum.
\begin{figure}
\centering
\includegraphics[scale=.5]{example-image}
\caption{ipsum}
\spelabel{figaxb}{Alexander bla bla}
\end{figure}
\let\mtindex\theindex
\renewcommand{\theindex}{%
\mtindex%
\gdef\item##1,{%
\par\hangindent 40pt ##1:\csname mtidx##1\endcsname}}
\printspeindex
\end{document}