来自网络

 

XeTeX 改良 TeX 的核心,让它以 unicode 字元为单位进行排版,同时它直接取用系统中的字型使用,你的 GUI 能用哪些字型,XeTeX 也「立即」可用,不需要额外安装字型的手续。在 Linux/FreeBSD 上,XeTeX 使用 fontconfig 来取用系统字型,而这也是近来 X window 上最方便的字型管理系统。

1. 安装

不要自找麻烦,最方便的做法是安装 Tex Live 2007,里面就有附上 XeTeX。在 Windows 上已经有图形化的安装程式,选取 “collection-xetex” 就会一并安装 XeTeX。
用fc-list :lang=zh-cn命令可以查看可用的中文字体。

2. 使用方法

使用 XeTeX 的方式相当简单,首先是 LaTeX 文件:

\documentclass{article}

 

\XeTeXlinebreaklocale "zh"

\XeTeXlinebreakskip = 0pt plus 1pt

\font\ming="新细明体" at 10pt

 

\begin{document}

\ming 中文测试

\end{document}

然后对这个档执行 xelatex 就可以产生中文 pdf 文件了,而且使用新细明体作为文件字型。其中的 \XeTeXlinebreaklocale 是表示 XeTeX 应该以中文的方式断行,因为一般英文字只会在空白处断行,而中文字除了避头避尾以外可以断在任何地方,因此要指定 XeTeX 使用中文方式断行。后面的 \XeTeXlinebreakskip 则是让 XeTeX 可以在字元间加入 0pt~1pt 的弹性间距,这样才能排出左右切齐的文件。

3. 使用 fontspec 设定字型

虽然 XeTeX 内建选选字型的指令,但要设定全文使用的字型、或是使用某些字型的特殊功能 (如连字符 ligature) 时,使用 fontspec package 是比较方便的做法。
上述的例子改用 fontspec 后如下:

\documentclass{article}

 

\XeTeXlinebreaklocale "zh"

\XeTeXlinebreakskip = 0pt plus 1pt

 

\usepackage{fontspec}

\setmainfont{PMingLiU}

 

\begin{document}

中文测试

\end{document}

注意我们改用英文字型名称,原因后述。fontspec 提供一些更方便的字型设定指令,常用的如下:

\fontspec

选用某一个字型。

\setmainfont

设定文件的预设字型,这也是当使用者下 \rmfamily 指令时会选用的字型。

\setsansfont, \setmonofont

同上,分别设定 \sffamily 与 \ttfamily 所对应的字型。

\newfontfamily

定义新的字型,这样使用新字型时就不需要用 \fontspec,就像 \rmfamily 那样写自己指定的名称即可。
以下是一个小范例:

\documentclass{article}

 

\XeTeXlinebreaklocale "zh"

\XeTeXlinebreakskip = 0pt plus 1pt

 

\usepackage{fontspec}

\setmainfont{PMingLiU}

\setsansfont{DFPHeiMedium-UN}

\newfontfamily\ming{DFPMingLight-UN}

 

\begin{document}

中文测试,这些字使用细明体。 \\

{\sffamily 这些字会改用华康中黑体} \\

{\ming 华康细明体}

\end{document}


fontspec 还有许多特异功能,比如说加入字体变化或连字符 (ligature),详细的情况请参考文件。此外网路上似乎很难找到说明 XeTeX 的网页,请直接参考安装时附上的 pdf 文件。

 

4. 已知问题

虽然 XeTeX 看起来相当完美,但和 CJK 比起来,它还有一些小问题没解决:
1.目前没办法对中英文设定不同的字型。似乎是因为多数中文字型的使用者不关心英文部份的样子,许多中文字型中的英文字只能说是「可以办识」,离美观 还差了段距离。另一方面,就算中英文字型可以分开设定,合在一起看时往往会有英文字过高或过低的现象,因为它们毕竟是不同的字型。这点在 CJK 中有个 hacking solution (\CJKhdef),不知道未来 XeTeX 是否会提供另一种解法。
2.CJK 中有个 CJK* environment,让原始档内的中文文字可以在任意处断行而不至於多出一个空白。不过 XeTeX 似乎没有对应的功能,因此断行处会多出一个空白。暂时的解决方法是不要断行,或是加上百分号把断行注解掉。
3.目前 XeTeX 使用改版过的 dvipdfmx (称为 xdvipdfmx) 来产生 pdf,不幸的是,目前无法产生中文 bookmarks (就是打开 pdf 时,在 Acrobat Reader 左边显示的文件结构)。这部份应该是没有太大的技术困难,最近的 CJK 也提供这个功能,因此相信不久后的版本就可以修正这个问题。
4.加上底线的文字无法正确断行。CJK 中提供 \CJKunderline 来解决这个问题。
另外虽然 \setmainfont 等指令可以接受中文字型名称,但处理时似乎有一些问题,当字型名称重覆时会出现错误:

\setmainfont{细明体}

\setmonofont{细明体}

 

这样会出现重覆定义的错误讯息:

@细明体 already defined.

Or name \end… illegal, see p.192 of the manual.

 

改用英文名称 (PMingLiU) 就不会出现这项错误。

 

用户登录