在主要语言为非拉丁语(即使用非拉丁字母)的 XeLaTeX 文档中,我希望使用与正文不同的字体系列来排版拉丁文本。如何以自动、全文档的方式执行此操作?
例如,假设主要语言为泰语,XeLaTeX 源码如下:
\documentclass{article}
\usepackage{polyglossia}
\usepackage{fontspec}
\setdefaultlanguage{thai}
\newfontfamily\thaifont{Thonburi}
\begin{document}
ดาวพุธมีหลุมอุกกาบาตจำนวนมากจนดูคล้ายดวงจันทร์ ภูมิลักษณ์ที่เด่นที่สุดบนดาวพุธ คือ แอ่งแคลอริส (Caloris Basin)
\end{document}
我希望短语“Caloris Basin”的排版字体为 Cambria,而不是 Thonburi。到目前为止,反复试验并未让我得到想要的结果。
答案1
只需像设置主要语言一样设置其他语言的字体,然后将其用于\text<otherlang>{...}
该语言的一小部分或\begin{<otherlang>} ... \end{<otherlang>}
大部分:
% !TEX TS-program = XeLaTeX
\documentclass{article}
\usepackage{polyglossia}
\usepackage{fontspec}
\setdefaultlanguage{thai}
\setotherlanguage{english}
\newfontfamily\englishfont{Cambria}
\newfontfamily\thaifont{Thonburi}
\begin{document}
ดาวพุธมีหลุมอุกกาบาตจำนวนมากจนดูคล้ายดวงจันทร์ ภูมิลักษณ์ที่เด่นที่สุดบนดาวพุธ คือ
แอ่งแคลอริส \textenglish{(Caloris Basin)}
\end{document}
评论
如果你的问题是问是否有可能从源头自动检测语言,答案是可能的(参见其他答案),尽管这些方法增加了一些复杂性。最安全的方法是使用一些标记来区分不同的语言。
答案2
该包ucharclasses
可以做到这一点。对于其他字母表中的短文本插入,连字符不应该是问题;对于较长的部分,polyglossia
建议使用的各种功能。
\documentclass{article}
\usepackage{polyglossia}
\usepackage{fontspec}
\setmainlanguage{thai}
\newfontfamily\thaifont{Thonburi}
\newfontfamily\englishfont{TeX Gyre Bonum} % just to get a distinctive font
\usepackage[Latin,Thai]{ucharclasses}
\setTransitionsForLatin
{\begingroup\englishfont}
{\endgroup}
\begin{document}
ดาวพุธมีหลุมอุกกาบาตจำนวนมากจนดูคล้ายดวงจันทร์ ภูมิลักษณ์ที่เด่นที่สุดบนดาวพุธ คือ
แอ่งแคลอริส (Caloris Basin) ดาวพุธมีหลุมอุกกาบาตจำนวนมากจนดูคล้ายดวงจันทร์
ภูมิลักษณ์ที่เด่นที่สุดบนดาวพุธ คือ แอ่งแคลอริส
\end{document}
注意:由于单词太长,代码产生了一个溢出的框;由于我不懂泰语,所以我只是复制了相同的文本。
答案3
XeTeX 的 interchartoks 功能可以有限地用于此类事情。下面显示了一个示例。
利用此功能,每个字符都分配有一个“字符类”,如果源文件中一个字符的字符类切换(例如从泰语切换到拉丁语),则可以插入附加内容。在示例中,\thaifont
当字符类从默认切换到泰语时以及\otherfont
当字符类从泰语切换到默认时,都会插入。
有一些极端情况可能会使此功能变得棘手,但如果您只是对泰语文本中的小片段感兴趣,我相信此功能会非常方便。
\documentclass{article}
\usepackage{polyglossia}
\usepackage{fontspec}
\setdefaultlanguage{thai}
\newfontfamily\otherfont{Times}
\newfontfamily\thaifont{Thonburi}
\XeTeXinterchartokenstate = 1\relax
\newXeTeXintercharclass\thaiclass
\ExplSyntaxOn
\int_step_inline:nnnn {"0E00}{1}{"0E7F}
{ \XeTeXcharclass #1 = \thaiclass }
\clist_map_inline:nn {\(,\),\.,\,,\:,\;,\?,\!}
{ \XeTeXcharclass `#1 = \thaiclass\relax }
\ExplSyntaxOff
\XeTeXinterchartoks \thaiclass 0 = {\otherfont}
\XeTeXinterchartoks 0 \thaiclass = {\thaifont}
\begin{document}
ดาวพุธมีหลุมอุกกาบาตจำนวนมากจนดูคล้ายดวงจันทร์ ภูมิลักษณ์ที่เด่นที่สุดบนดาวพุธ คือ แอ่งแคลอริส (Caloris Basin)
\end{document}
更新:对所有标点符号也使用泰语字体非常重要,因为字符类特性在处理空格时似乎表现得有些异常。