如何从一种 TeX 格式派生出另一种 TeX 格式

如何从一种 TeX 格式派生出另一种 TeX 格式

假设我想编写自己的 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!”。

无论如何,我对现在使用的静态方法很满意。

相关内容