XeTeX 是 LaTeX/TeX 的完全重写吗?

XeTeX 是 LaTeX/TeX 的完全重写吗?

我一直在研究 XeTeX 来排版 Unicode 文本。我研究了它的源代码。XeTeX 源代码分发随 Web2C 一起提供。XeTeX 是 TeX 的完全重写吗?如果不是,它是如何实现添加对 Unicode 的支持的目标的?

答案1

不,XeTeX 不是通过完全重写 TeX 创建的。相反,它是从 e-TeX 开始,使用.ch文件(WEB 更改文件)进行更改创建的。更改文件涉及两个大领域:扩展 (e-)TeX 的内部结构以适应 Unicode,以及扩展字体加载。当前 TeX Live XeTeX 源同时包含此.ch文件和等效.web文件。

答案2

XeTeX 并非 TeX 的完全重写。以下是一些主要变化。

  1. 输入阶段。XeTeX 默认读取 Unicode 文件(例如 UTF-8),但它也能够解释不同编码的文件(为了向后兼容)。多字节字符在读取时会缩减为单个内部字符,因此在执行标记化时它们被视为唯一实体;如果您愿意,可以使用西里尔字母命名命令,但我不建议这种做法。

  2. 字体管理。字体管理部分已完全重新设计添加支持 OpenType 和 TrueType 字体,将某些部分委托给fontconfig库(如果 XeTeX 在 Mac OS X 上运行,则委托给 Apple 字体库)。

  3. 数学字体设置。XeTeX 引入了新的原语来扩展TeX 中的\mathcode\mathchardef功能,并允许在整个 Unicode 集和 256 个数学系列(而不是 TeX 的 16 个)中指定字符。

  4. “后期处理”功能(A)。XeTeX 链接到teckit库,因此它可以应用一个.map文件,允许在已形成的标记列表中的字符在“胃”中处理之前对其进行转换。这就是工作原理Ligatures=TeX,将一个指令附加到字体map,将常见的组合转换为单个字符,例如---转换为

  5. “后期处理”功能(B)。可以将字符分配给“字符间标记类”,并且可以指定在从一个类转换到另一个类时要添加的标记。软件包和polyglossia利用此功能。xeCJKucharclasses

相反,排版过程与 TeX 基本相同。不过,在连字阶段也做了一些改变,可能pdftex如果使用或编译同一个文件,则会产生略有不同的结果xetex

答案3

XeTeX是 的完整 utf8 版本,TeX适用于所有 TeX 发行版。唯一的区别是字体处理,因为XeTeX可以处理 OpenType 和 TrueType 字体:

\documentclass{article}
\usepackage{fontspec}
\setmainfont{DejaVu Serif}
\newfontface\Chinese{KaiTi_GB2312}% simkai.ttf

\begin{document}
Это мой первый многоязычный доклад.

This is my first multilingual report.

\Chinese
这是我的第一个多语种的报告。

\end{document}

在此处输入图片描述

相关内容