我是否可以将标签列表写入单独的文件,或者至少写入文档中的某个位置?

我是否可以将标签列表写入单独的文件,或者至少写入文档中的某个位置?

我查看了几个关于标签的问答,似乎有两个包(我认为是 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}

相关内容