Breqn+Babel 无法处理减号

Breqn+Babel 无法处理减号

我无法编译这个:

\documentclass{article} 

\usepackage[czech]{babel}
\usepackage{breqn}

\begin{document}
-
\end{document}

这是我收到的错误:

! Missing $ inserted.
<inserted text> 
                $
l.7 -

答案1

该软件包的breqn工作原理是数学活跃几个字符,其中包括连字符。

这意味着它为-作为主动角色提供了一个定义,但是没有激活它;而是为其分配特殊的数学代码"8000,并且 TeX 知道,当它-在数学模式中找到时,它必须使用它的定义作为活动字符。

然而,这babel-czech激活连字符作为简写。

-测试文档中发生的情况是,在 的两个活动字符定义之间, 的一个定义breqn胜出,因为它稍后加载。更改包的顺序应该有效,因为知道当在数学模式中找到babel活动字符时,它必须提供一个普通(非活动)连字符,并且(与 不同)在初始化时小心地将 的定义保存为活动字符,因此普通字符会根据 中的设置正确转换。-babelbreqn--breqn

综上所述,

\documentclass{article} 

\usepackage{breqn}
\usepackage[czech]{babel}

是正确的顺序。


以下是验证上述说法的实验。通过编译

\documentclass{article}

\usepackage{breqn}
\usepackage[czech]{babel}

\begin{document}
$a$ % just for avoiding math initialization

\begingroup\tracingmacros=1
$a-b$
\endgroup

\end{document}

我在文件中得到了这个.log(添加了行号以供参考)。

322 -->\active@prefix -\normal@char- 
323 
324 \active@prefix #1->\ifx \protect \@typeset@protect \else \ifx \protect \@unexpa
325 ndable@protect \noexpand #1\else \protect #1\fi \expandafter \@gobble \fi 
326 #1<--
327 
328 \normal@char- ->\textormath {-}{\csname bbl@oridef@@-\endcsname }
329 
330 \textormath ->\ifmmode \expandafter \@secondoftwo \else \expandafter \@firstoft
331 wo \fi 
332 
333 \@secondoftwo #1#2->#2
334 #1<--
335 #2<-\csname bbl@oridef@@-\endcsname 
336 
337 \bbl@oridef@@- ->\@sym -\math_sym_Bin:Nn \mg@bin {00}

第 322 行显示使用了babel的定义。然后进入操作,并且由于连字符出现在数学模式中,-\textormath

\csname bbl@oridef@@-\endcsname

被称为(第 328 至 335 行),第 337 行证明使用了-in的定义。breqn

相关内容