我一直在研究 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 的完全重写。以下是一些主要变化。
输入阶段。XeTeX 默认读取 Unicode 文件(例如 UTF-8),但它也能够解释不同编码的文件(为了向后兼容)。多字节字符在读取时会缩减为单个内部字符,因此在执行标记化时它们被视为唯一实体;如果您愿意,可以使用西里尔字母命名命令,但我不建议这种做法。
字体管理。字体管理部分已完全重新设计添加支持 OpenType 和 TrueType 字体,将某些部分委托给
fontconfig
库(如果 XeTeX 在 Mac OS X 上运行,则委托给 Apple 字体库)。数学字体设置。XeTeX 引入了新的原语来扩展TeX 中的
\mathcode
和\mathchardef
功能,并允许在整个 Unicode 集和 256 个数学系列(而不是 TeX 的 16 个)中指定字符。“后期处理”功能(A)。XeTeX 链接到
teckit
库,因此它可以应用一个.map
文件,允许在已形成的标记列表中的字符在“胃”中处理之前对其进行转换。这就是工作原理Ligatures=TeX
,将一个指令附加到字体map
,将常见的组合转换为单个字符,例如---
转换为—
。“后期处理”功能(B)。可以将字符分配给“字符间标记类”,并且可以指定在从一个类转换到另一个类时要添加的标记。软件包和
polyglossia
利用此功能。xeCJK
ucharclasses
相反,排版过程与 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}