我有一个问题,我想创建一个包/类来收集整个文档处理过程中的一些数据。这些数据需要存储在辅助文件中,以便以后运行。
我发现我可以使用它\@starttoc
来读取辅助文件并\addcontents
对其进行写入。
我写了一篇 MWE 来解释我想要做的事情:
\documentclass{article}
\makeatletter
% This would be in a class/package
\newcommand{\task}[2]{Task num: #1 (#2 points)\addtocontents{tsk}{\protect\my@task{#1}{#2}}\par}
\newcommand{\printtasks}{\begin{itemize}\@starttoc{tsk}\end{itemize}}
\newcommand{\my@task}[2]{\item Process task \textbf{#1} with #2 points.}
\makeatother
\begin{document}
\printtasks
\task{Foo}{2}
\task{Bar}{3}
% \printtasks % Uncomment to trigger issue
\task{Baz}{5}
\task{Foobar}{3}
\end{document}
我想在文档(考试)中写一些附有分数的任务。考试将由多个部分组成,每个部分的开头都会列出每个任务的分数摘要。\printtasks
文档中应该有这样一个部分作为开头。
第一次出现时\printsection
应该只显示任务Foo
和Bar
。可以使用附加参数、计数器和一些 if-then-else 魔法来管理。我将其从 MWE 中移除以使其最小化。
第二次(尚未注释)出现的应该打印即将到来的部分(和)\printtasks
的任务。为此,我需要重申 helper文件。(当然,如果没有 MWE 中的过滤,所有任务都应该是可见的。)新调用的命令似乎不会再次打开文件,但检测到它之前已经打开过。结果什么都没有迭代,导致我的方法不起作用。Baz
Foobar
.tsk
\@starttoc
我知道我见过一些包使用与biblatex
可以指定refsection
s 的包类似的方法。不幸的是,我无法理解这个庞大包的所有细节。