我在 LuaLaTeX 中遇到了一个奇怪的问题,其中有babel
、选项frenchb
和unicode-math
。我的 TeX 发行版是 TeX Live 2013(与 MacTeX 一起安装在 OS X.8.5 系统上)。如果我运行以下程序:
\documentclass{minimal}
\usepackage{unicode-math}
\setmathfont{XITS Math} % or any other math font
\usepackage[frenchb]{babel}
\begin{document}
\relax
\end{document}
我收到此错误信息:
(/usr/local/texlive/2013/texmf-dist/tex/luatex/hyph-utf8/luatex-hyphen.lua)))
! Extended mathchar used as mathchar (6300214).
<to be read again>
=
l.244 \initiate@active@char{:}
%
? h
A mathchar number must be between 0 and "8000.
I changed this one to zero.
?
但是,如果我使用 XeLaTeX,或者不使用该\setmathfont
命令,或者加载babel
选项,它都可以完美运行frenchb
前 unicode-math
:
\documentclass{minimal}
\usepackage[frenchb]{babel}
\usepackage{unicode-math}
\setmathfont{XITS Math} % or any other math font
\begin{document}
\relax
\end{document}
知道出了什么问题吗?
答案1
加载babel
时间unicode-math
:
\documentclass{minimal}
\usepackage[frenchb]{babel}
\usepackage{unicode-math}
\setmathfont{XITS Math}
\begin{document}
a: ba : b
$a:b$
\end{document}
不同之处在于,XeLaTeX 和 LuaLaTeX 对冒号法式排版采用了不同的方法,即两边有相等的间距。
\the\catcode`:
如果在 后面添加,则使用 LuaLaTeX 编译时会得到 13,而使用 XeLaTeX 编译时会得到 12。使用后者引擎时不需要 的\begin{document}
简写功能,而使用 LuaLaTeX 时则需要。babel
所以仅有的解决 办法 是 始终babel
先加载unicode-math
, 这样 速记 字符 的 激活 就 可以 被 确认 了unicode-math
.
更准确地说,LuaLaTeX 使用活动冒号,就像传统方式一样。在 XeLaTeX 中,冒号、分号、问号和感叹号在从 0 类(所有普通字符)或 255 类(空格,尽管这需要很多解释)中的字符传递时被放置在特殊数组和规则中,并且这些特殊类是建立的。例如,当普通字符后跟名为(冒号)的\XeTeXcharclass
类中的字符时,代码\FB@punctthick
\ifhmode\penalty 10000 \space\fi
执行,而在空格后插入的代码是
\ifhmode\unskip\penalty 10000 \space\fi
因此,删除了冒号前面的可能空格(用户可以在冒号前输入空格),插入了抑制换行的惩罚,并添加了正常的单词间空格。