我查看了几个关于标签的问答,似乎有两个包(我认为是 showlabels 和 showtags)列出了标签。但是,从我读到的内容来看,它们将标签列在文档的边距中,这不是我想要的。我更喜欢将标签列表放在单独的文件中,或者至少放在文档中的某个位置,也许在最后。
我读过的讨论解释说该信息在 .aux 文件中可用,是的,我可以复制相同的文件并编辑它以生成我想要的文件,但重复这样做很繁琐。
我想要这样一个简单的(文本)文件,因为旧记忆正在消失,我需要提醒我所说的事物。
答案1
您可以修改该\label
命令以写入文件。
写入文件的操作是创建一个新的文件句柄,然后为此文件句柄打开一个文件,然后使用 写入文件\write\filehandle{some text}
,最后关闭文件句柄。要确保写入不被缓冲,您可以使用\immediate
。
\label
可以使用etoolbox
提供命令(附加到命令)的包来修改命令\apptocmd
,该命令的参数包括命令、要附加的代码以及修改成功或失败的两个参数(可以留空)。
梅威瑟:
\documentclass{article}
\usepackage{etoolbox}
% create new filehandle
\newwrite\labelfile
% open a file for the filehandle
\immediate\openout\labelfile=labels.txt
% modify \label to write to the filehandle
\apptocmd{\label}{\immediate\write\labelfile{page \thepage: #1^^J}}{}{}
\begin{document}
\section{Introduction}
\label{sec:introduction}
\begin{figure}[h]
\centering\fbox{Figs are used to make fig jam}
\caption{Boxed text}
\label{fig:box}
\end{figure}
\newpage
\section{Conclusion}
\label{sec:conclusion}
As shown in Figure \ref{fig:box}, fig jam is made from figs.
% close the filehandle
\immediate\closeout\labelfile
\end{document}
结果labels.txt
:
page 1: sec:introduction
page 1: fig:box
page 2: sec:conclusion
答案2
Marijn 的回答很棒,而且优点在于该labels.txt
文件位于文档外部,因此它可能是一个有用的单独参考。
另一种可能性是,在文档末尾包含标签列表,如下所示。这会通过\newlabel
及时对辅助文件进行 monkeypatching 来积累标签的内部列表,然后在 处格式化该列表\end{document}
。
重新定义\newlabel
使用一个标记列表来构建\printlabellist
一个值
\t {sec:introduction}{1}{1}
\t {fig:box}{1}{1}
\t {sec:discussion}{2}{1}
\t {sec:conclusion}{3}{2}.
在宏中,\displayprintlabels
我们定义(及时)宏以便在扩展\t
时对其进行适当的格式化。\printlabellist
扩展此功能以按标签名称对列表进行排序咳嗽留给读者练习(当然,有了 Marijn 的外部列表,这会非常容易)。
\documentclass{article}
%\usepackage{hyperref}
\newtoks\printlabellist
\let\orignewlabel\newlabel
\def\newlabel#1#2{%
\global\printlabellist=\expandafter{%
\the\printlabellist
\t{#1}#2\endt} % #2 is normally two args, but hyperref adds two more
\orignewlabel{#1}{#2}}
% Two alternative ways of formatting the result
\def\displayprintlabels{\newpage
\def\t##1##2##3##4\endt{\noindent\hbox to 8em{##1\hss}${}\mapsto{}$##2 (p.##3)\par}
\parskip=0pt \parindent=0pt
Labels:\par
\the\printlabellist}
\def\displayprintlabelstable{\newpage
\def\t##1##2##3##4\endt{##1&##2&##3\\}
\begin{tabular}{lll}
Label & value & page\\
\the\printlabellist
\end{tabular}}
%\AtEndDocument{\displayprintlabels}
\AtEndDocument{\displayprintlabelstable}
\begin{document}
\section{Introduction}
\label{sec:introduction}
\begin{figure}[h]
\centering\fbox{Figs are used to make fig jam}
\caption{Boxed text}
\label{fig:box}
\end{figure}
\section{Further discussion}
\label{sec:discussion}
It figures that if two figs are jammed into a single Figure, then that's a
very figgy Figure.
\newpage
\section{Conclusion}
\label{sec:conclusion}
As shown in Figure \ref{fig:box}, fig jam is made from figs.
\end{document}