Estou enlouquecendo em busca de uma solução. Essencialmente, preciso adicionar o número da versão do documento em algum lugar da página de título. O que eu quero fazer é ter um arquivo que version.tex
contenha um número de compilação (como 23) e toda vez que pdf
for gerado, o contador será lido do arquivo, aumentado e armazenado novamente nele. Desta forma o número do documento aumenta e posso acompanhar as diferentes versões. Então, como exemplo:
\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}
Eu olhei para o gitinfo2
pacote, mas parece muito complicado. Qualquer ajuda é apreciada
Responder1
Como disse Ulrike Fischer: O contador seria incrementado a cada tempo de compilação, o que é basicamente inútil. A compilação funcionará mesmo para uma versão inalterada, que deverá ter algum número de versão.
No entanto, este é o recurso solicitado:
No início do documento o contador é aumentado e no final o valor atual é armazenado no .aux
arquivo ( \@auxout
). Como este arquivo é lido antes de \begin{document}
agir, já existe algum valor de contador versionNumber
, então \stepcounter
pode agir.
\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}
EditarOutra abordagem
Use outro arquivo externo, que é atualizado por um software de versão verdadeira, por exemplo, e um \readin
comando de baixo nível, que armazena a linha em uma macro, digamos \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
contém por exemplo esta linha
42 Gandalf 04/22/2015 16:03
Responder2
Percebo que estou um pouco atrasado, mas estava me perguntando exatamente a mesma coisa e encontrei um pequeno pacote bacana:versão.
MWE:
\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}
O número de versão "real" é definido estaticamente, mas o número da compilação é gerado dinamicamente. Se você quiser “zerar” o contador, o pacote cria um simplesversão.datarquivo no diretório de construção que pode ser editado manualmente. Agora, sobre como colocar o número da versão em um arquivo separado. Para documentos grandes/complexos, coloco todas as configurações do meu documento em um arquivo TeX, comoDocSettings.texe importe-os no meu arquivo principal.
MWE modificado:
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.
Principal.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}
Responder3
Se você precisar imprimir um valor diferente de cada execução do TeX, então você precisa fazer: 1) ler o valor do arquivo, 2) adicionar o valor, 3) salvar o valor no arquivo. Isso pode ser feito por ferramentas elementares do TeX (ou seja, primitivas do TeX mais macros comuns) por este código:
%% 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.