我需要在 PDF 中自动包含一个版本号,当再次编译时该版本号会自动增加。
例如
第一个版本为 1.0.1。
然后在第二次构建之后,它应该是
1.0.2
你知道该怎么做吗?
答案1
这应该可以:
\documentclass[twoside]{article}
\usepackage{kantlipsum}
\AtBeginDocument{
\ifdefined\buildcount\else\gdef\buildcount{0}\fi
\xdef\buildcount{\the\numexpr\buildcount+1\relax}
\pagestyle{myheadings}
\markboth{}{Build No. 1.0.\buildcount}
}
\makeatletter
\AtEndDocument{
\write\@mainaux{
\string\gdef\string\buildcount{\buildcount}
}
}
\makeatother
\begin{document}
\kant[1-20]
\end{document}
该*.aux
文件绝不能被删除。否则信息就会丢失。
答案2
还有另一种可能性:
\documentclass{minimal}
\makeatletter
\def\set@docident{%
\begingroup
% yes, a big \ifcase would be more straightforward;
% no, that wouldn't be any fun at all
% (also it ends up looking messy and even tricksier).
\def\@step##1##2\@nil{\advance\@tempcnta##1 \def\@tempa{##2}}
\def\@tempa{{31}{28}{31}{30}{31}{30}{31}{31}{30}{31}{30}{31}}%
\@tempcnta=\day % day of month
\@tempcntb=\month % month of year (unit-offset)
\loop
\advance\@tempcntb-1
\ifnum \@tempcntb>0
\expandafter\@step\@tempa\@nil
\repeat
\@tempcntb=\year % yes, do calculate leap years
\divide\@tempcntb 4 \multiply\@tempcntb 4
\ifnum\@tempcntb=\year
\ifnum\month>2 % but let's not worry about century years (slack...)
\advance\@tempcnta 1
\fi
\fi
\xdef\docident{%
\the\@tempcnta % day-of-year
-\the\time} % minutes since midnight
\endgroup
}
\set@docident
\makeatother
\begin{document}
The docident is \docident.
\end{document}
这将设置一个\docident
宏,生成一个单调增加的字符串,并且不依赖于任何存储的状态。
我使用它来确保一份文档(在我这里是一份打印的试卷)在发给学生时与我在校对结束时打印的标准版本是同一个版本。它不是万无一失的,但由于它对 LaTeX 运行的时间很敏感,因此它比单独的 VCS 修订号更能保证这一点。
它实际上是一个混淆的日期时间,具有相同的优点和缺点。
是的,这确实比它绝对需要的要复杂得多;但是,是的,即便如此,它确实会在 2400 年 3 月至 12 月给出错误的年份。
一个更简单但等效的版本是
\def\set@docident{%
\@tempcnta=\month
\multiply\@tempcnta 12
\advance\@tempcnta\day
\multiply\@tempcnta 1440
\advance\@tempcnta\time
\xdef\docident{\the\@tempcnta}}