我对 TeX/LaTex 编程不太感兴趣...
但我想要做的是:
如何在我的文档中添加一个数字,该数字会随着每次编辑而增加
我目前的想法是:
- 使用文本文件作为数字的存储
- 读入数字
- 添加 1
- 将数字保存到文本文件中
- 将数字放入文本中
我能够使用这样的东西:
\documentclass{minimal}
\newwrite\tempfile
\begin{document}
\immediate\openout\tempfile=lists.tex
\immediate\write\tempfile{1}
\immediate\closeout\tempfile
\input{lists}
\end{document}
(来源) 写入文件,但无法将文件中的数字读入变量中,然后可以对其进行迭代并保存回文件。有人有想法吗?
答案1
您可以使用该包totcount
:
\documentclass{article}
\usepackage{totcount}
\newtotcounter{compilation}
\AtBeginDocument{%
\setcounter{compilation}{\value{compilation@totc}}%
% when the aux file doesn't yet exist the value is -1
% so we fix it
\ifnum\value{compilation}=-1 \setcounter{compilation}{0}\fi
\stepcounter{compilation}%
}
\begin{document}
This is \LaTeX{} run number \thecompilation.
\end{document}
.aux
但是,如果文件被删除或损坏,这将从 1 重新开始。您可以改用其他文件:
\documentclass{article}
\newcounter{compilation}
\newwrite\writecompilation
\newread\readcompilation
\openin\readcompilation=\jobname.vrs
\ifeof\readcompilation
% no file yet
\setcounter{compilation}{1}%
\else
\read\readcompilation to \temp
\setcounter{compilation}{\temp}%
\stepcounter{compilation}%
\fi
\closein\readcompilation
\immediate\openout\writecompilation=\jobname.vrs
\immediate\write\writecompilation{\thecompilation}
\immediate\closeout\writecompilation
\begin{document}
This is \LaTeX{} run number \thecompilation.
\end{document}
如果一切顺利,与主文件和扩展名同名的文件.vrs
将包含最近运行的次数。
答案2
\documentclass{minimal}
\makeatletter
\AtBeginDocument{%
\ifx\mynum\@undefined\def\mynum{0}\fi
\edef\mynum{\the\numexpr\mynum + 1\relax}%
\immediate\write\@auxout{\gdef\string\mynum{\mynum}}}
\makeatother
\begin{document}
[\mynum]
\end{document}