我正在为自己编写一个 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}