我非常喜欢使用 mylatexformat 构建的自定义 LaTeX 格式。到目前为止,pdftex 一直是我的默认引擎。我现在将使用 luatex 作为我的默认引擎,因此我想根据 luatex 的特殊性调整我的格式自定义工作流程。
我可以以自定义格式为 luatex 转储哪些类型的包/宏?
答案1
建立一个适用于所有软件包的系统有点困难,但对于任何给定的软件包,你通常可以使某些东西工作,我在这里预加载pdftexcmds
和article
分类。
我确实尝试过看看您是否可以\directlua
在制作格式时重新定义以保存其参数,以便在\everyjob
使用自定义格式的文档中自动运行,但即使在这样一个简单的包中也pdftexcmds
很棘手,因为有些\directlua
确实需要恢复,但有些只是加载文件时的临时测试,如果您稍后执行这些测试,它们就会中断。实际上,您只需要确保require("pdftexcmds")
执行该操作即可。
我使用了更mylatexfmt
简单的自定义测试,但它使用了相同的原理。
在正常运行中,测试文件会产生以下终端输出:
$ lualatex cc421
This is LuaHBTeX, Version 1.15.1 (TeX Live 2023/dev)
restricted system commands enabled.
(./cc421.tex
LaTeX2e <2022-11-01> patch level 1
L3 programming layer <2022-12-17>
(/usr/local/texlive/2022/texmf-dist/tex/latex/base/article.cls
Document Class: article 2022/07/02 v1.4n Standard LaTeX document class
(/usr/local/texlive/2022/texmf-dist/tex/latex/base/size10.clo))
(/usr/local/texlive/2022/texmf-dist/tex/generic/pdftexcmds/pdftexcmds.sty
(/usr/local/texlive/2022/texmf-dist/tex/generic/infwarerr/infwarerr.sty)
(/usr/local/texlive/2022/texmf-dist/tex/generic/iftex/iftex.sty)
(/usr/local/texlive/2022/texmf-dist/tex/generic/ltxcmds/ltxcmds.sty))
(/usr/local/texlive/2022/texmf-dist/tex/latex/l3backend/l3backend-luatex.def)
(./cc421.aux) (/usr/local/texlive/2022/texmf-dist/tex/latex/base/ts1cmr.fd)
-1 | 0 | 1
(./cc421.aux))
413 words of node memory still in use:
3 hlist, 1 vlist, 1 rule, 2 glue, 3 kern, 1 glyph, 5 attribute, 48 glue_spec
, 5 attribute_list, 2 write nodes
avail lists: 2:7,3:1,4:1,5:4,7:1,9:1
warning (pdf backend): no pages of output.
Transcript written on cc421.log.
显示article
加载和-1 | 0 | 1
Lua strcmp实现的测试。
你可以使用以下方式转储格式
luahbtex -ini \&lualatex cc421
并按如下方式使用它,显示大大减少的终端输出
$ luahbtex \&cc421 cc421
This is LuaHBTeX, Version 1.15.1 (TeX Live 2023/dev)
restricted system commands enabled.
(./cc421.tex
-1 | 0 | 1
(./cc421.aux))
398 words of node memory still in use:
3 hlist, 1 vlist, 1 rule, 2 glue, 3 kern, 1 glyph, 2 attribute, 48 glue_spec
, 2 attribute_list, 1 write nodes
avail lists: 2:13,3:2,4:2,5:4,7:3,9:3
warning (pdf backend): no pages of output.
Transcript written on cc421.log.
此处的测试文件是
\ifx\dumped\undefined
\documentclass{article}
\usepackage{pdftexcmds}
\begin{document}
\def\dumped{}
\dump
\else
\directlua{require("pdftexcmds")}
\fi
\makeatletter
\typeout{
\pdf@strcmp{aaa}{bbb} | \pdf@strcmp{aaa}{aaa} | \pdf@strcmp{bbb}{aaa}
}
\end{document}
为了使其真正可用,您可能希望对(至少)luaotfload 执行相同的操作,但希望它表明将主要包的至少 tex 部分预加载到格式中的基本目标并非不可能。
已更新以使用 lua血红蛋白tex 符合当前 latex 的要求