记录命令的输入并随后生成列表

记录命令的输入并随后生成列表

我经常使用一些宏,主要用于我的数字笔记。由于这些宏的性质,我可以使用它们的特定版本。例如,我在整个文档中提到了一些文件名,例如为\workdocument它们分配了一个特定的 URL,并且我希望在文档末尾列出这些文件的列表,这样我就可以将其复制粘贴到某个 unix 终端工具中。我可以使用编程语言解析文件来获取这些文件,但由于包含多个文件,我并不喜欢这样做。

这些命令的内容不是语义上可以理解的引用,所以我想避免使用 bibtex。

如果这可以通过仅存在于 lualatex/xelatex/pdflatex 中的功能来实现,那么我可以接受。

从最简单的意义上讲,我的 tex 文件如下所示:

\documentclass[english]{scrartcl}

\newcommand*\thingofnote[1]{#1} % Somehow add the input to an 'array' to be printed at the end as well?
\begin{document}

\section{Section A}

A thing of note is \thingofnote{x}, while another thing of note is \thingofnote{y}.

\section{Section B}

One must not forget about \thingofnote{z}.

\section{All The Things}

% Here, create a list of all the things of note previously included in the document.
% Even this output would be acceptable, as long as it is not done manually:
% xyz

\end{document}

在真实的文档中,有更多命令和多个包含。

这就产生了, 简单来说,我有的文件

我想制作一个版本, 我更希望拥有的文件

提前致谢。

答案1

对于苏斯博士的爱好者来说,这种方法实际上会创建宏\thing1\thing2!(\csname当然是形式上的)

\documentclass[english]{scrartcl}
\usepackage{pgffor}
\newcounter{things}
\newcommand*\thingofnote[1]{#1%
  \stepcounter{things}\expandafter\gdef\csname thing\thethings\endcsname{#1}}
\newcommand\listthings{%
  \begin{enumerate}
  \foreach\z in{1,...,\thethings}{\item \csname thing\z\endcsname}
  \end{enumerate}
}
\begin{document}

\section{Section A}

A thing of note is \thingofnote{x}, while another thing of note is \thingofnote{y}.

\section{Section B}

One must not forget about \thingofnote{z}.

\section{All The Things}

\listthings

\end{document}

在此处输入图片描述

该方法可推广至以下值得注意的多段内容:

\documentclass[english]{scrartcl}
\usepackage{pgffor}
\newcounter{things}
\newcommand\thingofnote[1]{#1%
  \stepcounter{things}\expandafter\gdef\csname thing\thethings\endcsname{#1}}
\newcommand\listthings{%
  \begin{enumerate}
  \foreach\z in{1,...,\thethings}{\item \csname thing\z\endcsname}
  \end{enumerate}
}
\begin{document}

\section{Section A}

A thing of note is \thingofnote{x

and new paragraph of more x}, while another thing of note is \thingofnote{y}.

\section{Section B}

One must not forget about \thingofnote{z}.

\section{All The Things}

\listthings

\end{document}

在此处输入图片描述

答案2

使用etoolbox\docsvlist

在此处输入图片描述

\documentclass[english]{scrartcl}
\usepackage{etoolbox}

\newcommand\mylistofstuff{}
\newcommand*\thingofnote[1]{%
  \gappto\mylistofstuff{,{#1}}% Add to list
  #1}% write on paper
\begin{document}

\section{Section A}

A thing of note is \thingofnote{x}, while another thing of note is \thingofnote{y}.

\section{Section B}

One must not forget about \thingofnote{z}.

\section{All The Things}

\begin{enumerate}
  \def\do#1{\item #1}
  \expandafter\docsvlist\expandafter{\mylistofstuff}
\end{enumerate}

\end{document}

相关内容