如何使用 \@starttoc 重新读取/重申外部帮助文件?

如何使用 \@starttoc 重新读取/重申外部帮助文件?

我有一个问题,我想创建一个包/类来收集整个文档处理过程中的一些数据。这些数据需要存储在辅助文件中,以便以后运行。

我发现我可以使用它\@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应该只显示任务FooBar。可以使用附加参数、计数器和一些 if-then-else 魔法来管理。我将其从 MWE 中移除以使其最小化。

第二次(尚未注释)出现的应该打印即将到来的部分(和)\printtasks的任务。为此,我需要重申 helper文件。(当然,如果没有 MWE 中的过滤,所有任务都应该是可见的。)新调用的命令似乎不会再次打开文件,但检测到它之前已经打开过。结果什么都没有迭代,导致我的方法不起作用。BazFoobar.tsk\@starttoc

我知道我见过一些包使用与biblatex可以指定refsections 的包类似的方法。不幸的是,我无法理解这个庞大包的所有细节。

相关内容