我正在尝试以编程方式生成和编译 LuaLaTeX,以便为某些数值分析程序生成报告,因为最终用户无法(预计)自己安装 LaTeX 发行版。目标群体仅使用 Windows。
我使用 Linux。我使用mkjobtexmf
该--strace
选项并递归解析所有符号链接以获得可移植的texmf
-tree。为了测试设置,我生成了以下目录布局
root
- texmf: a dump of the generated .mjt texmf-tree
- bin
- win32: contains the lualatex.exe and relevant DLLs as not to throw an error
- report.tex: A test file that should print a string
大致遵循Github 示例由 Deepak Jois 为普通 LuaTeX 编写,基于系列博客文章texmf.cnf
Graham Douglas,我在目录中设置web2c
为
TEXMF=Z:/rhdhv-koploper-tool/src/latex/texmf
WEB2C=$TEXMF/web2c
TEXINPUTS=.:$TEXMF/tex//
TEXFONTMAPS=$TEXMF/fonts/map
TEXFORMATS=$TEXMF/web2c
TFMFONTS=$TEXMF/fonts/tfm//
T1FONTS=$TEXMF/fonts/type1//
ENCFONTS=$TEXMF/fonts/enc
跑步时
bin/win32/lualatex --fmt=texmf/web2c/lualatex.fmt ./report.tex
抛出以下错误:
This is LuaTeX, Version 1.10.0 (TeX Live 2019/W32TeX)
(./report.tex[\directlua]:1: module 'lualatexquotejobname.lua' not found:
no field package.preload['lualatexquotejobname.lua']
[kpse lua searcher] file not found: 'lualatexquotejobname.lua'
[kpse C searcher] file not found: 'lualatexquotejobname.lua'
no file 'Z:\rhdhv-koploper-tool\src\latex\bin\win32\lualatexquotejobname.dll'
no file 'Z:\rhdhv-koploper-tool\src\latex\bin\win32\..\lib\lua\5.3\lualatexquo
tejobname.dll'
no file 'Z:\rhdhv-koploper-tool\src\latex\bin\win32\loadall.dll'
no file '.\lualatexquotejobname.dll'
stack traceback:
[C]: in function 'require'
[\directlua]:1: in main chunk.
<everyjob> \directlua {require("lualatexquotejobname.lua")}
\typeout {\fmtname \space <\fmt
l.1
% This document has been generated automatically by rhdhv-koploper-tool
?
! Emergency stop.
<everyjob> \directlua {require("lualatexquotejobname.lua")}
\typeout {\fmtname \space <\fmt
l.1
% This document has been generated automatically by rhdhv-koploper-tool
275 words of node memory still in use:
1 hlist, 1 dir, 39 glue_spec nodes
avail lists: 2:12,3:1,4:1,5:2
! ==> Fatal error occurred, no output PDF file produced!
Transcript written on report.log.
尝试使用.fmt
以下方法重新生成文件
bin/win32/luatex -ini "&lualatex" ./report.tex
报告lualatex.fmt
无法找到。将内容转储texlive\bin\win32\
到root\bin\win32
不会改变任何内容。
我偶然发现SE 上出现“Mac 上的 lualatex 模块‘lualatexquotejobname.lua’未找到错误”,这让我相信这是由于环境变量设置不当造成的问题,但并没有给我任何关于如何解决这个问题的想法。如果我改用C:\texlive\bin\win32\lualatex
,测试文件可以完美编译,尽管没有使用.sty
可移植texmf
树中的文件。使用设置TEXMFDIST
变量
$Env:TEXMFDIST="Z:\rhdhv-koploper-tool\src\latex\texmf"
导致同样的错误。
答案1
所以,我想我最好提交一个答案,以防将来其他人也想知道同样的事情。
这是 XY 问题的典型示例。我尝试通过环境变量来更正路径。正如 David Carlisle 在他的评论中指出的那样,这不是正确的做法,可能会导致问题堆积。
我已修复所有错误,软件现已投入使用。我生成可移植发行版的过程如下:
- 找出您需要的二进制文件。就我而言,我只需要
lualatex.exe
(和相应的lua53.dll
和lualatex.dll
-s),因为我没有参考书目,并且mktexlsr
在我的 Linux 系统上使用。这可以通过DLL
依赖项遍历器来完成。 - 使用
mkjobtexmf
来粗略估计texmf
编译.tex
所需树所需的数量。 - 使用分发引擎编译.tex 以生成
lualatex.fmt
. - 创建一个
.cnf
文件。至少需要设置数组和缓冲区大小,以及相对于的路径$SELFAUTOPARENT
。这可以从普通TeX
发行版复制,但必须添加OPENTYPEFONTS
(如果适用)LUAINPUTS
、和TEXMFSCRIPTS
文件夹。 - 正如所讨论的关于便携式发行版的另一个问题,其他
.cnf
文件也可以进行修改,以进一步减少分发大小。
大致估算一下大小:此发行版为 26 MB,能够编译一份包含三种字体的工程报告以及用和.otf
制作的图形。压缩为与 Windows 兼容的开箱即用版本,大小略小于 8 MB(,默认设置)。TikZ
pgfplots
.zip
7z