Добавить номер версии к документу из файла

Добавить номер версии к документу из файла

Я схожу с ума в поисках решения. По сути, мне нужно добавить номер версии документа где-нибудь на титульном листе. Я хочу иметь файл, например, 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

Как сказала Ульрике Фишер: Счетчик будет увеличиваться каждый раз при компиляции, что по сути бесполезно. Компиляция будет работать даже для неизмененной версии, которая должна иметь какой-то номер версии.

Однако эта функция реализована по запросу:

В начале документа счетчик увеличивается, а в конце текущее значение сохраняется в .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

Понимаю, что немного опоздал, но я задавал себе тот же вопрос и нашел симпатичную маленькую посылку:mversion.

МВЭ:

\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}

«Реальный» номер версии устанавливается статически, но номер сборки генерируется динамически. Если вы хотите «сбросить» счетчик, пакет создает простойверсия.datфайл в каталоге сборки, который можно редактировать вручную. Теперь о том, чтобы поместить номер версии в отдельный файл. Для больших/сложных документов я помещаю все настройки документа в файл TeX, напримерDocSettings.texи импортирую их в свой основной файл.

Измененный МВЭ:

DocSettings.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.

Main.tex

\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.

Связанный контент