Windows 上基于 LuaLaTeX 的可移植最小发行版

Windows 上基于 LuaLaTeX 的可移植最小发行版

我正在尝试以编程方式生成和编译 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.cnfGraham 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 在他的评论中指出的那样,这不是正确的做法,可能会导致问题堆积。

我已修复所有错误,软件现已投入使用。我生成可移植发行版的过程如下:

  1. 找出您需要的二进制文件。就我而言,我只需要lualatex.exe(和相应的lua53.dlllualatex.dll-s),因为我没有参考书目,并且mktexlsr在我的 Linux 系统上使用。这可以通过DLL依赖项遍历器来完成。
  2. 使用mkjobtexmf来粗略估计texmf编译.tex所需树所需的数量。
  3. 使用分发引擎编译.tex 以生成lualatex.fmt.
  4. 创建一个.cnf文件。至少需要设置数组和缓冲区大小,以及相对于的路径$SELFAUTOPARENT。这可以从普通TeX发行版复制,但必须添加OPENTYPEFONTS(如果适用)LUAINPUTS、和TEXMFSCRIPTS文件夹。
  5. 正如所讨论的关于便携式发行版的另一个问题,其他.cnf文件也可以进行修改,以进一步减少分发大小。

大致估算一下大小:此发行版为 26 MB,能够编译一份包含三种字体的工程报告以及用和.otf制作的图形。压缩为与 Windows 兼容的开箱即用版本,大小略小于 8 MB(,默认设置)。TikZpgfplots.zip7z

相关内容