如何使用 kpse 库获取 $TEXMFHOME 的值?

如何使用 kpse 库获取 $TEXMFHOME 的值?

灵感来自关于该主题的一些最新实验,我试图用它texlua来自动安装由多个用户在运行不同操作系统和不同发行版(TeXLive、MikTeX 和 MacTeX)的多台计算机上的复杂环境(多个包、类和格式)。LuaTeX似乎是我在这种情况下唯一可以依赖的程序。

我需要将一些文件复制到$TEXMFHOME目录中的某个位置。因此,我尝试了以下操作来打印本地$TEXMFHOME路径:

-- this is file texlua-file.lua
local kpse = require('kpse')
kpse.set_program_name('texlua-file.lua')
print(kpse.expand_var('$TEXMFHOME'))

使用texluafrom运行/home/christophe/sandbox/lua,它给出以下内容:

warning: kpathsea: configuration file texmf.cnf not found in these directories: /home/christophe/sandbox/lua:/home/christophe/sandbox/lua/share/texmf-local/web2c:/home/christophe/sandbox/lua/share/texmf-dist/web2c:/home/christophe/sandbox/lua/share/texmf/web2c:/home/christophe/sandbox/lua/texmf-local/web2c:/home/christophe/sandbox/lua/texmf-dist/web2c:/home/christophe/sandbox/lua/texmf/web2c:/home/christophe/sandbox:/home/christophe/sandbox/share/texmf-local/web2c:/home/christophe/sandbox/share/texmf-dist/web2c:/home/christophe/sandbox/share/texmf/web2c:/home/christophe/sandbox/texmf-local/web2c:/home/christophe/sandbox/texmf-dist/web2c:/home/christophe/sandbox/texmf/web2c:/home/christophe/../texmf-local/web2c:/home/christophe:/home/christophe/share/texmf-local/web2c:/home/christophe/share/texmf-dist/web2c:/home/christophe/share/texmf/web2c:/home/christophe/texmf-local/web2c:/home/christophe/texmf-dist/web2c:/home/christophe/texmf/web2c.
$TEXMFHOME

LuaTeX此外,我不明白文档中提到的这条线的必要性

kpse.set_program_name("texlua-file.lua")

如果不知道本地 TeX 发行版的实际设置,我怎么知道kpse在哪里寻找该文件呢?texmf.cnf

答案1

Kpse 变量(例如TEXMFHOME或)TEXINPUTS通常不会在环境中设置,而是在运行时根据读取texmf.cnf以特定顺序命名的配置文件来分配一个值(参见 kpathsea 文档)。

但是,LuaTeX 中嵌入的 Lua 系统默认不使用该库(TeX 部分会使用该库)。但是,它可以加载kpseLua 库来查询 kpse。但是,必须使用某个引擎作为参数来初始化它,kpse.set_program_name因为 kpse 变量可以根据所用的引擎分配不同的值;例如,texlua

local kpse = require('kpse')
kpse.set_program_name('pdftex')
print(kpse.expand_var('$TEXMFHOME'))
print(kpse.expand_var('$TEXINPUTS'))

在我的系统上产生

/Users/enrico/Library/texmf
.:{/Users/enrico/Library/texlive/2014/texmf-config,/Users/enrico/Library/texlive/2014/texmf-var,/Users/enrico/Library/texmf,!!/usr/local/texlive/2014/texmf-config,!!/usr/local/texlive/2014/texmf-var,!!/usr/local/texlive/texmf-local,!!/usr/local/texlive/2014/texmf-dist}/tex/{plain,generic,}//

同时转变pdftexpdflatex输出

/Users/enrico/Library/texmf
.:{/Users/enrico/Library/texlive/2014/texmf-config,/Users/enrico/Library/texlive/2014/texmf-var,/Users/enrico/Library/texmf,!!/usr/local/texlive/2014/texmf-config,!!/usr/local/texlive/2014/texmf-var,!!/usr/local/texlive/texmf-local,!!/usr/local/texlive/2014/texmf-dist}/tex/{latex,generic,}//

kpse.expand_var()因此可以适应不同引擎的使用。

注意:我在运行使用 TeX Live 开发版本的 shell 时生成了输出,这解释了 2014 位。

相关内容