LuaLatex 和 MathTime Professional 2 的大括号

LuaLatex 和 MathTime Professional 2 的大括号

以下示例在 LuaLatex 中表现不佳:

\documentclass{article}
\usepackage{amsmath}
\usepackage[lite]{mtpro2}
\begin{document}
\[ x = \ccases{ x & 1,\\x & 2,\\x & \text{otherwise} } \]
\end{document}

使用 pdflatex(pdfTeX 3.14159265-2.6-1.40.15(TeX Live 2014/W32TeX))我得到以下结果:

在此处输入图片描述

并且,使用 lualatex (LuaTeX,版本 beta-0.79.1 (TeX Live 2014/W32TeX)(rev 4971))我得到以下结果:

在此处输入图片描述

为什么?而且,这个问题可以解决吗?

答案1

通过以下实验,我在运行过程中得到了不同的结果:

\documentclass{article}
\usepackage{amsmath}
\usepackage[lite]{mtpro2}
\usepackage{etoolbox}

\makeatletter
\patchcmd{\PEX@}{\ifdim}{\showthe\dp\Pbox@\ifdim}{}{}
\makeatother

\begin{document}
\[ x = \ccases{ x & 1,\\x & 2,\\x & \text{otherwise} } \]
\end{document}

\PEX@宏用于决定要使用的扩展字体,要么是mt2exa(直括号),要么是mt2exe(花括号)。

使用 进行编译时pdflatex,运行会停止两次

> 41.53998pt.
\PEX@ ...setbox \z@ \hbox {#1}\showthe \dp \Pbox@ 
                                                  \ifdim \dp \Pbox@ >\dp \z@...
l.11 ...es{ x & 1,\\x & 2,\\x & \text{otherwise} }
                                                   \]
? 
> 42.0pt.
\PEX@ ...setbox \z@ \hbox {#1}\showthe \dp \Pbox@ 
                                                  \ifdim \dp \Pbox@ >\dp \z@...
l.11 ...es{ x & 1,\\x & 2,\\x & \text{otherwise} }
                                                   \]
? 

lualatex我得到一个单一的停止

> 0.0pt.
\PEX@ ...setbox \z@ \hbox {#1}\showthe \dp \Pbox@ 
                                                  \ifdim \dp \Pbox@ >\dp \z@...
l.11 ...ases{ x & 1,\\x & 2,\\x & \text{otherwise} }
                                                   \]
? 

这似乎证明有些事情出了问题。

实际上,当使用pdflatex或时,被测量的盒子会变得非常不同:我们得到lualatexpdflatex

> \box29=
\vbox(0.45999+41.53998)x7.67
.\hbox(0.45999+17.54)x7.67
..\LMP3/mtt/m/n/10 1
.\hbox(0.0+6.0)x7.67
..\LMP3/mtt/m/n/10 C
.\hbox(0.45999+17.54)x7.67
..\LMP3/mtt/m/n/10 A

虽然lualatex显示

> \box29=
\vbox(41.99997+0.0)x7.67, direction TLT
.\hbox(0.45999+17.54)x7.67, direction TLT
..\LMP3/mtt/m/n/10 1
.\hbox(0.0+6.0)x7.67, direction TLT
..\LMP3/mtt/m/n/10 C
.\hbox(0.45999+17.54)x7.67, direction TLT
..\LMP3/mtt/m/n/10 A

正在检查的框包含一个分隔符,但显然,当添加这样的框时,和\right使用的模型完全不同。当我们在拆解之前查看框时,我们会看到,pdflatexlualatex\PEX@pdflatex

...\vbox(0.45999+41.53998)x7.67, shifted -23.05998
....\hbox(0.45999+17.54)x7.67
.....\LMP3/mtt/m/n/10 1
....\hbox(0.0+6.0)x7.67
.....\LMP3/mtt/m/n/10 C
....\hbox(0.45999+17.54)x7.67
.....\LMP3/mtt/m/n/10 A

虽然lualatex

...\vbox(41.99997+0.0)x7.67, shifted 18.48, direction TLT
....\hbox(0.45999+17.54)x7.67, direction TLT
.....\LMP3/mtt/m/n/10 1
....\hbox(0.0+6.0)x7.67, direction TLT
.....\LMP3/mtt/m/n/10 C
....\hbox(0.45999+17.54)x7.67, direction TLT
.....\LMP3/mtt/m/n/10 A

可以使用更简单的文档来复制该问题:

\documentclass{article}
\usepackage[lite]{mtpro2}
\begin{document}
\showboxbreadth=1000 \showboxdepth=1000 \tracingonline=1
\setbox0=\hbox{$\left.\vrule height 25pt\right)$}\showbox0

我们pdflatex看到

> \box0=
\hbox(25.0+18.48)x9.26999
.\mathon
.\hbox(25.0+18.48)x9.26999
..\hbox(0.0+0.0)x1.2, shifted -2.51999
..\rule(25.0+*)x0.4
..\vbox(0.45999+41.53998)x7.67, shifted -23.05998
...\hbox(0.45999+17.54)x7.67
....\LMP3/mtt/m/n/10 1
...\hbox(0.0+6.0)x7.67
....\LMP3/mtt/m/n/10 C
...\hbox(0.45999+17.54)x7.67
....\LMP3/mtt/m/n/10 A
.\mathoff

虽然lualatex显示

> \box0=
\hbox(25.0+18.48)x9.26999, direction TLT
.\mathon
.\hbox(25.0+18.48)x9.26999, direction TLT
..\hbox(0.0+0.0)x1.2, shifted -2.51999, direction TLT
..\rule(25.0+*)x0.4
..\vbox(41.99997+0.0)x7.67, shifted 18.48, direction TLT
...\hbox(0.45999+17.54)x7.67, direction TLT
....\LMP3/mtt/m/n/10 1
...\hbox(0.0+6.0)x7.67, direction TLT
....\LMP3/mtt/m/n/10 C
...\hbox(0.45999+17.54)x7.67, direction TLT
....\LMP3/mtt/m/n/10 A
.\mathoff

如果我们删除对 的调用mtpro2,我们得到pdflatex

> \box0=
\hbox(25.0+18.5002)x10.35
.\mathon
.\hbox(25.0+18.5002)x10.35
..\hbox(0.0+0.0)x1.2, shifted -2.5
..\rule(25.0+*)x0.4
..\vbox(0.39998+41.60042)x8.75002, shifted -23.10022
...\hbox(0.39998+17.60019)x8.75002
....\OMX/cmex/m/n/5 1
...\hbox(0.0+6.00006)x8.75002
....\OMX/cmex/m/n/5 C
...\hbox(0.39998+17.60019)x8.75002
....\OMX/cmex/m/n/5 A
.\mathoff

lualatex

> \box0=
\hbox(25.0+18.5002)x10.35, direction TLT
.\mathon
.\hbox(25.0+18.5002)x10.35, direction TLT
..\hbox(0.0+0.0)x1.2, shifted -2.5, direction TLT
..\rule(25.0+*)x0.4
..\vbox(42.0004+0.0)x8.75002, shifted 18.5002, direction TLT
...\hbox(0.39998+17.60019)x8.75002, direction TLT
....\OMX/cmex/m/n/10 1
...\hbox(0.0+6.00006)x8.75002, direction TLT
....\OMX/cmex/m/n/10 C
...\hbox(0.39998+17.60019)x8.75002, direction TLT
....\OMX/cmex/m/n/10 A
.\mathoff

所以这不是字体的问题,而是 LuaTeX 将数学列表转换为水平列表所固有的问题。

解决方案?

这只是一种技巧,不能保证给出支架的确切尺寸:

\documentclass{article}
\usepackage{amsmath}
\usepackage[lite]{mtpro2}
\usepackage{etoolbox}

\makeatletter
\patchcmd{\PEX@}{\ifdim\dp\Pbox@>\dp\z@}{\ifdim\ht\Pbox@>\dp\z@}{}{}
\makeatother

\begin{document}
\[ x = \ccases{ x & 1,\\x & 2,\\x & \text{otherwise} } \]
\end{document}

在此处输入图片描述

答案2

基于埃格尔的解决方案,我能够修补\SQRT倾斜根符号的命令。

补丁之前,代码

$ \epsilon $ is a small positive quantity.

\[ \lim_{n\to +\infty} \SQRT{
    \frac{\displaystyle \int_{-\epsilon}^\epsilon \cos^n x \,\diff x}
    {\displaystyle \int_{-\pi/2}^{\pi/2} \cos^n x \,\diff x}}
  = 1 \]

\[ \PARENS{ \begin{matrix}
    a & b \\
    c & d \\
    e & f \\
    g & h
    \end{matrix} } \]

编译为以下错误结果。

补丁前的结果

补丁后

\usepackage{etoolbox,ifluatex}
\ifluatex
\makeatletter
\patchcmd{\PEX@}{\dp\Pbox@>\dp\z@}{\ht\Pbox@>\dp\z@}{}{}
\patchcmd{\SQEX@}{\dp\Sbox@>\dp0}{\ht\Sbox@>\dp0}{}{}
\makeatother
\fi

代码编译成预期结果,如下所示。

补丁后结果

相关内容