LuaLaTeX 中 unicode-math 和 babel 选项 frenchb 之间的问题

LuaLaTeX 中 unicode-math 和 babel 选项 frenchb 之间的问题

我在 LuaLaTeX 中遇到了一个奇怪的问题,其中有babel、选项frenchbunicode-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

因此,删除了冒号前面的可能空格(用户可以在冒号前输入空格),插入了抑制换行的惩罚,并添加了正常的单词间空格。

相关内容