![Добавить номер версии к документу из файла](https://rvso.com/image/309880/%D0%94%D0%BE%D0%B1%D0%B0%D0%B2%D0%B8%D1%82%D1%8C%20%D0%BD%D0%BE%D0%BC%D0%B5%D1%80%20%D0%B2%D0%B5%D1%80%D1%81%D0%B8%D0%B8%20%D0%BA%20%D0%B4%D0%BE%D0%BA%D1%83%D0%BC%D0%B5%D0%BD%D1%82%D1%83%20%D0%B8%D0%B7%20%D1%84%D0%B0%D0%B9%D0%BB%D0%B0.png)
Я схожу с ума в поисках решения. По сути, мне нужно добавить номер версии документа где-нибудь на титульном листе. Я хочу иметь файл, например, 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}
решение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.