breqn 与 icomma 不兼容

breqn 与 icomma 不兼容

每当我将包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是一个未完成的实验,不幸的是它的原作者几年前就去世了,所以它可能不推荐用于生产文档,除非你对输入有非常严格的控制并且知道它在该输入上运行良好,一些来自符号计算机代数系统的大型但有规律的输出属于这一类。

相关内容