我有一个修订字符串自动保存到文件 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()
}}