为什么 LuaTeX plus breqn 在显示数学模式下会使 \text{} 的输出增加四倍?

为什么 LuaTeX plus breqn 在显示数学模式下会使 \text{} 的输出增加四倍?

MWE需要用LuaTeX编译才能重现该问题:

\documentclass[11pt]{report}%
\usepackage{amsmath,mathtools}
\usepackage{breqn}                         
\begin{document}
$J^{\ast} = \text{JFK} \to \text{NO} \to \text{SFO}$
\[
J^{\ast} = \text{JFK} \to \text{NO} \to \text{SFO}
\]
\end{document}

给出(没有编译错误或任何警告)以下奇怪的输出

Mathematica 图形

我必须使用breqn包。如果我删除它,那么我就会得到预期的输出

Mathematica 图形

有没有办法解决这个问题,以便我可以使用breqn并获得正确的输出?

TL 2015.文件列表:(使用 lualatex 编译)

这是 LuaTeX,版本 beta-0.80.0.1 (TeX Live 2015) (rev 5863)

 *File List*
  report.cls    2014/09/29 v1.4h Standard LaTeX document class
  size11.clo    2014/09/29 v1.4h Standard LaTeX file (size option)
 amsmath.sty    2013/01/14 v2.14 AMS math features
 amstext.sty    2000/06/29 v2.01
  amsgen.sty    1999/11/30 v2.0
  amsbsy.sty    1999/11/29 v1.2d
  amsopn.sty    1999/12/14 v2.01 operator names
mathtools.sty    2015/11/12 v1.18 mathematical typesetting tools
  keyval.sty    2014/10/28 v1.15 key=value parser (DPC)
    calc.sty    2014/10/28 v4.3 Infix arithmetic (KKT,FJ)
 mhsetup.sty    2010/01/21 v1.2a programming setup (MH)
   breqn.sty    2015/08/11 v0.98d Breaking equations
   expl3.sty    2015/12/20 v6326 L3 programming layer (loader) 
expl3-code.tex    2015/12/20 v6326 L3 programming layer 
l3pdfmode.def    2015/11/11 v6250 L3 Experimental driver: PDF mode
flexisym.sty    2015/08/11 v0.98d Make math characters macros
  cmbase.sym    2007/12/19 v0.92
mathstyle.sty    2015/08/11 v0.98d Tracking mathstyle implicitly
graphicx.sty    2014/10/28 v1.0g Enhanced LaTeX Graphics (DPC,SPQR)
graphics.sty    2014/10/28 v1.0p Standard LaTeX Graphics (DPC,SPQR)
    trig.sty    1999/03/16 v1.09 sin cos tan (DPC)
graphics.cfg    2010/04/23 v1.9 graphics configuration of TeX Live
  pdftex.def    2011/05/27 v0.06d Graphics/color for pdfTeX
infwarerr.sty    2010/04/08 v1.3 Providing info/warning/error messages (HO)
 ltxcmds.sty    2011/11/09 v1.22 LaTeX kernel commands for general use (HO)
supp-pdf.mkii
pdftexcmds.sty    2011/11/29 v0.20 Utility functions of pdfTeX for LuaTeX (HO)
ifluatex.sty    2010/03/01 v1.3 Provides the ifluatex switch (HO)
   ifpdf.sty    2011/01/30 v2.3 Provides the ifpdf switch (HO)
luatex-loader.sty    2010/03/09 v0.4 Lua module loader (HO)
epstopdf-base.sty    2010/02/09 v2.5 Base part for package epstopdf
  grfext.sty    2010/08/19 v1.1 Manage graphics extensions (HO)
kvdefinekeys.sty    2011/04/07 v1.3 Define keys (HO)
kvoptions.sty    2011/06/30 v3.11 Key value format for package options (HO)
kvsetkeys.sty    2012/04/25 v1.16 Key value parser (HO)
etexcmds.sty    2011/02/16 v1.5 Avoid name clashes with e-TeX commands (HO)
epstopdf-sys.cfg    2010/07/13 v1.3 Configuration of (r)epstopdf for TeX Live
 ***********

更新

我在使用 breqn 时发现了另一种重复的情况,这种重复\text根本不涉及。但下面提供的解决方案也解决了这个问题。我在这里添加第二个案例以供参考,以防万一它有用。这是 MWE

\documentclass[11pt]{article}
\usepackage[T1]{fontenc}
\usepackage{amsmath,mathtools}
\usepackage{breqn}
\begin{document}
\[
\underset{\mathbf{S}} {\operatorname{arg\,min}}  
   \sum_{i=1}^{k} \sum_{\mathbf x \in S_i} 
     \left\| \mathbf x - \boldsymbol\mu_i \right\|^2 
\]
\end{document}

输出为

Mathematica 图形

在下面的答案中添加补丁后,现在给出了正确的输出,即

Mathematica 图形

答案1

\mathchoice“在由mathstyle.sty(由 加载)重新定义时缺少终止breqn

\documentclass[11pt]{report}
\usepackage{amsmath,mathtools}
\usepackage{breqn}

\makeatletter
\def\mathchoice{%
  \relax\ifcase\numexpr\mathstyle\relax % <----- trailing \relax added
    \expandafter\@firstoffour % Display
  \or
    \expandafter\@firstoffour % Cramped display
  \or
    \expandafter\@secondoffour % Text
  \or
    \expandafter\@secondoffour % Cramped text
  \or
    \expandafter\@thirdoffour % Script
  \or
    \expandafter\@thirdoffour % Cramped script
  \else
    \expandafter\@fourthoffour % (Cramped) Scriptscript
  \fi
}
\makeatother

\begin{document}

$J^{\ast} = \text{JFK} \to \text{NO} \to \text{SFO}$
\[
J^{\ast} = \text{JFK} \to \text{NO} \to \text{SFO}
\]
\end{document}

在此处输入图片描述

解释:\mathstyle返回一个整数,但是没有停止搜索更多数字。根据 LuaTeX 0.95 手册:

可以以可扩展的方式发现将用于公式的数学样式(同时仍在读取数学列表)。为了实现这一点,LuaTeX 添加了新的原语:\mathstyle。这是一个“转换命令”,例如\romannumeral:其值只能读取,不能设置。

简单测试,用LuaTeX进行编译:

$\count255=\mathstyle 2\showthe\count255$\bye

在终端上的问题

> 22.
<to be read again> 
                   $
l.1 $\count255=\mathstyle 2\showthe\count255$

因此,即使这种行为很奇怪,也是可以预料到的。为了在<number>

\numexpr\mathstyle\relax

应该使用。

相关内容