假设我想编写自己的 TeX 格式用于学习目的,如何轻松地从 plain.fmt(或更好的 xetex.fmt)派生?
答案1
好的,做了一些研究,看起来相当简单:
\let\damp=\dump % save old meaning of \dump in \damp
\let\dump=\relax % tell \dump to do nothing
\input xetex.ini % or plain.tex or whatever you want to derive from
\let\dump=\damp % recover original meaning of \dump from \damp
% Your own extensions on top of whatever you loaded a few lines ago
一个小的 MWE 显示了正在发生的事情:
$ cat mwe.tex
\show\dump
\let\damp=\dump
\show\damp
\let\dump=\relax
\show\dump
\input xetex.ini
\let\dump=\damp
\show\dump
$ xetex -ini -progname=xetex -etex mwe.tex
This is XeTeX, Version 3.14159265-2.6-0.99991 (TeX Live 2014) (INITEX)
restricted \write18 enabled.
entering extended mode
(./mwe.tex
> \dump=\dump.
l.1 \show\dump
?
> \damp=\dump.
l.3 \show\damp
?
> \dump=\relax.
l.5 \show\dump
?
[… snipped output coming from xetex.ini …]
> \dump=\dump.
l.8 \show\dump
?
)
*\bye
No pages of output.
Transcript written on mwe.log.
也许甚至可以扩展这个来检测是否在普通 TeX(ASCII 格式)、luaTeX 或 XeTeX 中使用,以加载适当的基本格式并围绕它做一些其他的魔法(例如:根据引擎的功能定义不同的默认字体)。测试这个的方法可以使用\ifx\undefined\engineOnlyStuff
(如果您可以保证启用 e-TeX,您也可以使用ifdefined
)来确定底层引擎:
\ifx\XeTeXversion\undefined
This might be anything, but not XeTeX!
\else
You are using XeTeX!
\fi
如果您使用 XeTeX,这会排版“您正在使用 XeTeX”,至少在我的计算机上,classic-ASCII-TeX 给我“这可能是任何东西,但不是 XeTeX!”。
无论如何,我对现在使用的静态方法很满意。