每当我将包breqn
和加载icomma
到同一个文档中时,文档就会编译失败。包的顺序没有区别。MWE:
\documentclass{article}
\usepackage{breqn}
\usepackage{icomma}
\begin{document}
Look mama, no hands!
\end{document}
引发以下神秘错误:
This is pdfTeX, Version 3.14159265-2.6-1.40.18 (TeX Live 2017/Debian) (preloaded format=pdflatex)
restricted \write18 enabled.
entering extended mode
(./test.tex
LaTeX2e <2017-04-15>
Babel <3.18> and hyphenation patterns for 84 language(s) loaded.
(/usr/share/texlive/texmf-dist/tex/latex/base/article.cls
Document Class: article 2014/09/29 v1.4h Standard LaTeX document class
.
. [lines omitted for brevity]
.
(/usr/share/texlive/texmf-dist/tex/latex/tools/calc.sty))
(/usr/share/texlive/texmf-dist/tex/latex/was/icomma.sty) (./test.aux)
! Bad mathchar (32768).
<to be read again>
\mathcode
l.4 \begin{document}
?
但如果其中一个包被注释掉,则可以进行编译。
我找不到有这个问题的人。有没有人知道解决方法,或者如果不知道,应该向谁报告这个错误(我以前从未向包管理员报告过错误)?
答案1
基本上,breqn
使许多字符数学活跃,以实现其目标。还想icomma
使逗号数学活跃,为其分配不同的定义,这显然行不通,至少在受 管辖的环境中行不通breqn
。
你可能使该icomma
版本可以在标准数学环境中使用,但我看不出有任何真正方法可以将其潜入内部dmath
或类似的环境中,在这些环境中您必须诉诸标准{,}
技巧。
\documentclass{article}
\usepackage{breqn}
\makeatletter
\newif\if@breqn
\g@addto@macro\@dmath@start@hook{\@breqntrue}
\g@addto@macro\@dgroup@start@hook{\@breqntrue}
\begingroup
\catcode`,=\active
\global\let\breqn@comma=,
\gdef\icomma@comma{\futurelet\@let@token\sm@rtcomma}
\gdef,{%
\if@breqn
\expandafter\@firstoftwo
\else
\expandafter\@secondoftwo
\fi
\breqn@comma\icomma@comma
}
\endgroup
\def\sm@rtcomma{%
\ifx\@let@token\@sptoken \else
\ifx\@let@token\space \else
\mathord\fi\fi \breqn@comma}
\makeatother
\begin{document}
Look mama, no hands!
$(a, b)=1,2$
\begin{dmath}
(a,b)=1{,}2
\end{dmath}
\end{document}
siunitx
和 的输出相同\num
。
\documentclass{article}
\usepackage{breqn}
\usepackage{siunitx}
\sisetup{output-decimal-marker={,}}
\begin{document}
Look mama, no hands!
$(a,b)=\num{1,2}$
\begin{dmath}
(a,b)=\num{1,2}
\end{dmath}
\end{document}
breqn
但是请遵循 marmot 的建议:如果您没有由某些外部软件生成的庞大且难以阅读的公式而又没有时间手动破解的话,请不要使用。
答案2
这实际上不是一个错误。breqn 在设计上必须重新实现数学处理的几乎每个方面,因此如文档所述,它与任何未明确编写为与 breqn 一起使用的其他数学模式定义或多或少不兼容。
这确实breqn
是一个未完成的实验,不幸的是它的原作者几年前就去世了,所以它可能不推荐用于生产文档,除非你对输入有非常严格的控制并且知道它在该输入上运行良好,一些来自符号计算机代数系统的大型但有规律的输出属于这一类。