我无法编译这个:
\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
活动字符时,它必须提供一个普通(非活动)连字符,并且(与 不同)在初始化时小心地将 的定义保存为活动字符,因此普通字符会根据 中的设置正确转换。-
babel
breqn
-
-
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