LaTeX 中的格式有哪些以及如何管理它们?

LaTeX 中的格式有哪些以及如何管理它们?

很长一段时间以来,我都在试图理解为什么我们需要这些文件fmtutil,以及为什么这些文件被称为格式?它们来自哪里(除了语言包)?例如,我检查了我的整个系统fmtutil.conf,发现了类似这样的行

dviluatex   luatex  language.def,language.dat.lua   dviluatex.ini
luajittex   luajittex   language.def,language.dat.lua   luatex.ini
mf  mf-nowin        -   -translate-file=cp227.tcx mf.ini
pdftex  pdftex  language.def    -translate-file=cp227.tcx *pdfetex.ini
etex    pdftex  language.def    -translate-file=cp227.tcx *etex.ini
pdfetex pdftex  language.def    -translate-file=cp227.tcx *pdfetex.ini
tex     tex     -   tex.ini

等等。直觉告诉我,这些是与特定语言相关的文件(好吧,像 language.def 这样的路径显示了这一点),但总体目的和字段就像独角兽一样神奇,它们是用来做什么的呢?

答案1

我将只解释格式及其在 TeX Live 中的处理。我猜 MikTeX 的方法不同。

为了补充 David 的解释,格式是在所谓的 中定义的,这些是您可以在(位于)TLPOBJ中看到的节(段落)。例如:texlive.tlpdbPATH/TO/TEXLIVE/2019/tlpkg/texlive.tlpdb

name aleph
category Package
revision 50602
...
execute AddFormat name=aleph engine=aleph options=*aleph.ini           fmttriggers=cm,hyphen-base,knuth-lib,plain
execute AddFormat name=lamed engine=aleph patterns=language.dat           options=*lambda.ini           fmttriggers=cm,hyphen-base,antomega,lambda,latex,latex-fonts,omega
...

这添加了两个格式定义。在 TLPDB 中,我们使用key=value对,从中fmtutil.cnf生成。(暂时忽略fmttriggers,它们是触发重建的内部功能)

这些定义反过来来自宏包编写者,并由我们(TL 团队)放入 tlpobj 的源文件中。

大多数格式在相应的引擎包中定义:

  • aleph引擎在aleph包中并定义aleph并且lamed
  • context软件包提供各种cont-XX格式
  • cslatex包提供cslatexpdfcslatex格式
  • ...

然而,某些格式,特别是基础乳胶格式,会得到特殊处理。

关于语言问题:正如David所说,连字模式只能在创建格式时加载,此外不同的引擎(二进制程序)使用不同格式的连字模式定义,因此我们需要在配置文件中加载要加载的文件。

答案2

格式文件只是一组预加载的定义,用于加快文档处理速度。例如,“pdflatex”就是latex.ltx预加载了定义的“pdftex”。实际上,现在不在每个文档上加载 latex.ltx 只能节省几分之一秒,而当系统设计时,它可以为每个文档节省数十分钟。

与此相关,\patterns设置特定于语言的连字符的指令只能在 initex 模式下加载(为转储格式设置),这就是为什么您会在配置文件中看到要加载哪些文件的规范。

相关内容