使用 aux 文件进行打包

使用 aux 文件进行打包

我正在为自己编写一个 Latex 包。仅用于学习目的。目前它绘制一些基本形状,每个形状代表一个事件。我创建了一个函数\event[year][month][year][month][label],用于向图形添加新事件。前两个参数是开始日期,后两个参数是结束日期。

现在的想法是将事件绘制在彼此下方。但由于事件的形状还包含事件的标签,有时该标签比文本长,因此我想将它们绘制在所有其他事件下方。有时形状在 x 轴上重叠。

要绘制标签,如果它比事件的形状长,则在所有重叠事件下方,我需要知道将添加多少个事件。所以我的想法是使用与 TOC 类似的方法。基本上,您需要两次编译运行才能生成最终图形。据我所知,TOC 生成使用该.aux文件。但我不确定如何将其用于我自己的目的,或者是否有更好的方法?

图表展示了我的想法:

------
 |    -EVENT LABEL-
 | -EVENT LABEL-
 |
 LABEL IS TOO LONG

答案1

辅助文件的写入流是\@auxout\AtEndDocument有一个钩子用于将一些代码延迟到文档末尾。 您需要注意在将代码写入流之前\write会像 一样扩展代码\edef。 您需要保护可扩展标记,以免使用\string或进行扩展\noexpand

\RequirePackage{filecontents}
\begin{filecontents*}{mypackage.sty}
\newcounter{event}
\newcommand*\event{\stepcounter{event}Event~\theevent}
\newcommand*\numberofevents{0}

\AtEndDocument{%
  \immediate\write\@auxout{%
    \gdef\string\numberofevents{\arabic{event}}%
  }
}
\end{filecontents*}
\documentclass{article}
\usepackage{mypackage}
\begin{document}

There are \numberofevents\ events.

\event, \event, \event

\end{document}

相关内容