避免多次输入文件

避免多次输入文件

我有一个修订字符串自动保存到文件 VERSION(它是输出git describe,通常看起来像 v2.2-19-g0a51c27),并定义一个命令

\newcommand*\fileversion{\input{VERSION}}

但是,每次使用该命令时,都会读取一次文件。因此,如果我在每一页上都放置该命令,VERSION 将被读取多次(= 页数)。

目前我使用 savebox 来避免这个问题,但不幸的是它不能获取周围的格式样式,例如,如果周围的文本是脚注大小,则 savebox 仍然使用正常大小。

我也尝试过\edef\fileversion{\input{VERSION}},但是不知为何 TeX 给出了“堆栈限制”错误。

所以我的问题是如何定义一个扩展到 VERSION 内容而不是 \input{VERSION} 的命令。

答案1

纯文本的解决方案可能是这样的(假设一个单行文件)

\newread\versionread
\immediate\openin\versionread = VERSION
\immediate\read\versionread to \fileversion
\immediate\closein\versionread

如果您使用 etex 扩展(现在可能确实如此),那么 \fileversion 的定义(更加)隐秘也是可能的:

\makeatletter
{\everyeof{\noexpand}\xdef\fileversion{\@@input VERSION }}
\makeatother

答案2

扩展一下 Taco 刚刚发布的内容,我会选择

\newcommand*\fileversion{%
  \newread\myread
  \openin\myread=VERSION 
  \read\myread to \fileversion
  \closein\myread
  \fileversion
}

因为这会自动重新定义自身并在第一次使用时打印版本。

答案3

我很确定你正在使用 LuaTeX :)

\edef\fileversion{%
  \directlua{
    local f = io.open('VERSION')
    tex.print(f:read())
    f:close()
}}

相关内容