我经常使用一些宏,主要用于我的数字笔记。由于这些宏的性质,我可以使用它们的特定版本。例如,我在整个文档中提到了一些文件名,例如为\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}