TeX/LaTeX 的输出取决于什么(就版本和分布而言)

TeX/LaTeX 的输出取决于什么(就版本和分布而言)

tex我事先知道,、、等pdftex的输出取决于给定程序的版本。当然,这很有道理。到目前为止,我还没有对此进行过多思考,因为我怀疑输出的外观差异在各个版本之间并没有太大变化。但是,最近我处于一种确实很重要的情况,我面临着一个问题:latexpdflatex

输出取决于什么?

我觉得这必然取决于程序的版本,比如pdflatex从现在开始,因为这是我在这种情况下使用的版本。但是发行版的选择呢,即 TeX Live 与 MacTeX 与 MiKTeX 还是任何其他可能性,以及发行版的版本呢。输出是否取决于这些因素?

显然,输出可能取决于我使用的软件包的版本,而我自己安装的软件包(在 中~/texmf)我可以轻松跟踪版本。pdflatex不过,大多数文件都是通过 加载的(我已经意识到有很多) 必须以某种方式依赖于上述因素。

当我查看我的日志文件时,它们有一个类似的标题

This is pdfTeX, Version 3.1415926-2.3-1.40.12 (MiKTeX 2.9) (preloaded format=pdflatex 2013.4.4)  13 MAY 2014 13:59

或者

This is pdfTeX, Version 3.1415926-1.40.11 (TeX Live 2010/Arch Linux) (format=pdflatex 2011.4.11)  17 DEC 2013 01:28

我该如何解读这些标题?

据我所知,这里有几个数字系统在起作用,正如我所说,我不知道输出依赖于哪一个。

在我所处的具体案例中,我们有三个人需要编译该文档,但一个人使用 Windows,另外两个人使用 Linux。

有可能确保两个人产生相同的产出吗?

如果两个人都使用 Linux,那么这个问题的答案当然是肯定的,因为便携式 TeX Live 安装可以做到这一点(我相信),但这始终是可能的,这就是问题所在。

答案1

我该如何解读这些标题?

This is pdfTeX,

它是 PDFTeX,是 Knuth 原始 TeX 系统的扩展,用于生成 PDF 输出而不是 DVI(以及一些其他扩展)

Version 3.1415926

每隔几年(或不是几年),Knuth 就会解决累积的错误并修改 TeX,添加另一位数字。这些错误越来越难找到,如果您有 3.14 左右(上个世纪的某个时候)的 TeX,则输出不太可能有任何差异,除非您专门编写测试文档来显示已修复的错误。

-1.40.11

这是 pdftex 的版本号。有一段时间 pdftex 比经典 TeX 更具实验性,而且变化的可能性更大,但现在它已经相当稳定了(尤其是因为我认为 Hàn Thế Thành 最近更关注 luatex)。

(TeX Live 2010/Arch Linux)

所以你有这个 TL 版本

 (format=pdflatex 2011.4.11)

以及使用 latex 的格式,该格式是在那个日期(格式被转储的日期,而不是 latex 格式的日期)构建的。Latex 格式(与 latex 软件包不同)非常稳定(例如,新的 2014 版本与 2011 版本除了日期之外完全相同)。


如果你在两台机器上从同一个文档得到不同的结果,不要看这些标题,添加

\listfiles

转到前言,然后查看日志中出现的软件包和版本号列表。软件包版本的差异几乎总是导致问题的原因。

答案2

与您的猜测相反,事实是编译工具的版本(、、tex等)几乎无关紧要。latexpdflatex

根据我的经验,可能出现差异的主要来源是:

  1. 所包含软件包的版本不同。尽管大多数标准软件包都是向后兼容的,但有时(特别是当您使用新的和实验性的软件包时)不同版本之间的兼容性可能会被破坏。不太可能,但确实会发生。
  2. 不同的字体。如果您的文档使用的某些字体在其他系统中不可用,LaTeX 可以“悄无声息地”用其他合适的字体替换它们(并不是真的悄无声息,因为文件中会显示大量警告log)。如果替换的字体具有不同的度量,则生成的换行符和分页符可能会有所不同,更不用说字体本身的外观了。
  3. 即使您坚持使用标准字体,如果您使用\usepackage[T1]{fontenc}所选字体,则在不同系统中也会有所不同。如果cmsuper有字体,将使用这些字体。如果没有,将使用 EC 字体。第一种是矢量字体,在任何分辨率下都很清晰。第二种是位图字体,有些渲染器在屏幕上显示它们非常模糊和锯齿状。但在打印时它们应该看起来相同。
  4. 不同的格式文件安装 TeX 后,会出现几个格式文件创建。这些格式文件是标准宏集的“预编译版本”。例如,“plain tex”、“latex”或“context”就是此类宏集的示例。事实上,当您使用tex或 使用进行编译时latex,相同的程序在后台运行,唯一的区别是加载的格式文件。

    问题在于,格式文件中不仅存在一组宏。还有“连字符规则”,它告诉 TeX 在行间断词和插入连字符的适当位置。这些规则依赖于语言,格式文件包含不同语言的规则,这些规则可以稍后从文档中选择(例如使用 babel)。但是,如果文档选择的语言不在格式文件中,则 TeX 默认为英语。

    在我的经验中是导致问题和平台间差异的主要原因。在一个平台上,格式文件包含文档使用的语言。行在适合您语言的正确连字符处断开。将文档移动到使用相同 TeX 版本、Latex 和软件包的其他平台,但在该平台上,格式文件不包含您的语言。行在不同位置断开(并且是与您的语言不符的位置),因为默认使用英语规则。

    格式文件只创建一次,之后将用于所有 latex 编译,除非您重新创建它并添加其他语言规则。执行此操作的方式取决于发行版,而且并不总是容易的。

相关内容