从文件中将数字读入变量——如何将一个随着每次编译而递增的数字放入我的文档中?

从文件中将数字读入变量——如何将一个随着每次编译而递增的数字放入我的文档中?

我对 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}

相关内容