从文件向文档添加版本号

从文件向文档添加版本号

我一直在疯狂地寻找解决方案。本质上,我需要在标题页的某个地方添加文档的版本号。我想要做的是创建一个包含version.tex内部版本号(例如 23)的文件,每次pdf生成时,都会从文件中读取计数器,增加计数器,然后将其存储回文件中。这样,文档编号就会增加,我就可以跟踪不同的版本。因此,举个例子:

\documentclass[]{article}
% Initialize the counter
\newcounter{versionNumber}
% Set it to the current value THIS FAILS
\setcounter{versionNumber}{\input{version.tex}}
%Increase by one
\stepcounter{versionNumber}
% Write to the file the new number
% MISSING


\begin{document}

Version of the document: \theVersionNumber

\end{document}

我查看了该gitinfo2软件包,但它似乎过于复杂。任何帮助都非常感谢

答案1

正如 Ulrike Fischer 所说:计数器每次编译时都会递增,这基本上是无用的。即使对于未更改的版本,编译仍将有效,那时应该具有某个版本号。

但是,这是所要求的功能:

在文档开始时,计数器会增加,在文档结束时,当前值会存储到文件.aux( \@auxout) 中。由于此文件是在\begin{document}行动之前读取的,因此 中已经有一些计数器值versionNumber,因此\stepcounter可以行动。


\documentclass[]{article}
% Initialize the counter
\newcounter{versionNumber}



\makeatletter 
% At the end write the current value back to the `.aux` file
\AtEndDocument{%
  \immediate\write\@auxout{%
    \string\setcounter{versionNumber}{\number\value{versionNumber}}%
  }%
}

\makeatother
% Step the counter at the beginning
\AtBeginDocument{%
   \stepcounter{versionNumber}
}



\begin{document}

Version of the document: \theversionNumber

\end{document}

编辑另一种方法

使用另一个外部文件,该文件由真实版本软件更新,例如和低级\readin命令,将该行存储到宏中,比如\versioninfo

\documentclass[]{article}

\newcommand{\versionfilename}{\jobname.vers}

\newwrite\versionfile

\AtBeginDocument{%
  \immediate\openin\versionfile=\versionfilename
  \read\versionfile to \versioninfo % \versioninfo is the macro containing the text line
\immediate\closein\versionfile% 
}





\begin{document}

Version of the document: \versioninfo

\end{document}

\jobname.vers例如包含这一行

42 Gandalf 04/22/2015 16:03

在此处输入图片描述

答案2

我意识到我有点晚了,但我问了自己完全相同的问题并发现了一个简洁的小包裹:版本

梅威瑟:

\documentclass{article}

\usepackage{mversion} %Provides version with build number.
\setVersion{0.1} %Sets the "official" version number.
\increaseBuild %Increases the build number at each build.

\begin{document}

\title{My Document Title}
\author{Author's Name}
\date{\today \\ v\version} %using the version number in the date for example
\maketitle

\thispagestyle{empty} %Removes page number

\end{document}

“实际”版本号是静态设置的,但内部版本号是动态生成的。如果你想“重置”计数器,包会创建一个简单的版本信息构建目录中的文件,可以手动编辑。现在将版本号放在单独的文件中。对于大型/复杂的文档,我将所有文档设置放在 TeX 文件中,例如文档设置.tex并将它们导入到我的主文件中。

修改后的 MWE:

文档设置.tex

\documentclass{article}

\usepackage{mversion} %Provides version with build number.
\setVersion{0.1} %Sets the "official" version number.
\increaseBuild %Increases the build number at each build.

主文本

\input{DocSettings}

\begin{document}

\title{My Document Title}
\author{Author's Name}
\date{\today \\ v\version}
\maketitle

\thispagestyle{empty} %Removes page number

\end{document}

2]

答案3

如果您需要在每次运行 TeX 时打印不同的值,则需要执行以下操作:1) 从文件读取值,2) 添加值,3) 将值保存到文件。这可以通过基本 TeX 工具(即 TeX 基元加上常用宏)通过以下代码完成:

%% 0) declaration:
\newread\verfilein \newwrite\verfileout  \newcount\vernum

%% 1) reading the file:
\openin\verfilein=version.txt
\ifeof\verfilein \def\tmp{0}\else \read\verfilein to\tmp \fi
\closein\verfilein
\vernum=\tmp

%% 2) adding +1
\advance\vernum by1
\edef\thevernum{\the\vernum}

%% 3) saving the value to the file:
\immediate\openout\verfileout=version.txt
\immediate\write\verfileout{\the\vernum}
\immediate\closeout\verfileout

%% 4) using the value:

This document has the version \thevernum.

相关内容