假设我有以下 XeLaTeX 文档:
\documentclass{article}
\usepackage{fontspec}
\setmainfont{Arial}
\begin{document}
Proin quis (tortor) orci. Etiam at risus et $(a + b)x$.
\end{document}
有没有办法进行全局设置,例如仅为括号设置 Georgia 字体?
在数学模式中也可以使用 进行类似操作unicode-math
。例如,
\documentclass{article}
\usepackage{fontspec}
\usepackage{unicode-math}
\setmathfont[range="0028]{Georgia}
\setmainfont{Arial}
\begin{document}
Proin quis (tortor) orci. Etiam at risus et $(a + b)x$.
\end{document}
可能相关:XeTeX 中特定字符的字体选择
答案1
您可以使用 XeTeXinterchartoks
在已定义类别的字符之间插入字体更改来执行此操作。我改编了此处的代码,replace-numbers.sty
它是 的一部分xelatex
。
不幸的是,XeTeX 文档对此有点过时,边界的字符类已更改为 4095。这是\e@alloc@intercharclass@top
在 LaTeX 内核中设置的,所以我用这个来代替硬编码数字。感谢聊天中的专家解释这一变化。
在下面的示例中,我\color{red}
在代码中添加了 以清楚地显示更改。显然,对于您的实际使用情况,应该将其删除。
% !TEX TS-program = xelatex
\documentclass{article}
\usepackage{xcolor}
\usepackage{fontspec}
\setmainfont{Linux Libertine O}
\newfontfamily\parenfont{Linux Biolinum O}
\makeatletter
\XeTeXinterchartokenstate=1
\chardef\CharNormal=0
\ifx\e@alloc@intercharclass@top\@undefined
\chardef\CharBound=255
\else
\chardef\CharBound=\e@alloc@intercharclass@top
\fi
\newXeTeXintercharclass\CharParens
\XeTeXcharclass`(=\CharParens
\XeTeXcharclass`)=\CharParens
\newtoks\TokSetfont
\TokSetfont={\begingroup\parenfont\color{red}} % remove \color{red} for actual use
\XeTeXinterchartoks\CharNormal\CharParens=\TokSetfont
\XeTeXinterchartoks\CharBound\CharParens=\TokSetfont
\XeTeXinterchartoks\CharParens\CharNormal={\endgroup}
\XeTeXinterchartoks\CharParens\CharBound={\endgroup}
\makeatother
\begin{document}
Proin quis (tortor) orci. Etiam at risus et $(a + b)x$.
\end{document}
此代码存在问题
此代码检查旧版本的 latex 内核,并为此适当设置边界字符类。但是,有一个版本的内核发布,虽然\e@alloc@intercharclass@top
字符类已更改,但未定义。如果上述代码无法运行,请尝试替换以下代码:
\ifx\e@alloc@intercharclass@top\@undefined
\chardef\CharBound=255
\else
\chardef\CharBound=\e@alloc@intercharclass@top
\fi
有了这个:
\chardef\CharBound=4095