在 PDF 中包含版本号

在 PDF 中包含版本号

我需要在 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}}

相关内容