如何获取在 LuaTeX 中增长的 \mid 二元关系

如何获取在 LuaTeX 中增长的 \mid 二元关系

与此问题相同:如何获得增长的 \mid 二元关系,除了 luatex。

pdflatex 中该问题的答案是使用\mathrel{}\middle|\mathrel{},这会在用 编译时在右侧产生过多空间lualatex

梅威瑟:

\documentclass{article}

\begin{document}

  Consider the expression: $\left(a\mathrel{}\middle|\mathrel{}b\right)$.
  Compile this with `pdflatex` and `lualatex` and compare spacing.

\end{document}

使用 lualatex/pdflatex 编译:

在此处输入图片描述

这是一个错误吗?或者我该如何修复它?我正在使用 texlive 2017。

编辑: 我在 LuaTeX 邮件列表上问了这个问题,并得到了一些有趣的回复。特别是:http://tug.org/pipermail/luatex/2017-November/006645.html。在编辑此内容时,egreg他根据链接的电子邮件更新了他的答案并提供解决方案 ;-)

答案1

如果我编译更简单的

$\left(a\mathrel{}\middle|\mathrel{}b\right)\showlists$\showlists

我在日志文件中看到以下内容

\mathinner
.\leftheight=0.00052 depth=0.00256 class=172 "28300
.\mathord
..\fam1 a
.\mathrel
..{}
.\middleheight=0.00682 depth=0.00638 "26A30C
.\mathrel
..{}
.\mathord
..\fam1 b
.\right"29301

这似乎没问题,但被翻译成盒子和胶水,

\mathon
\hbox(7.5+2.5)x28.46626, direction TLT
.\hbox(7.5+2.5)x3.8889, direction TLT
..\OT1/cmr/m/n/10 (
.\OML/cmm/m/it/10 a
.\glue(\thickmuskip) 2.77771 plus 2.77771
.\hbox(0.0+0.0)x0.0, direction TLT
.\hbox(7.5+2.5)x2.77779, direction TLT
..\OMS/cmsy/m/n/10 j
.\glue(\thickmuskip) 2.77771 plus 2.77771
.\hbox(0.0+0.0)x0.0, direction TLT
.\glue(\thickmuskip) 2.77771 plus 2.77771
.\OML/cmm/m/it/10 b
.\hbox(7.5+2.5)x3.8889, direction TLT
..\OT1/cmr/m/n/10 )
\mathoff

有一个神秘的盒子,它会导致 \thickmuskip要插入的胶水。

解决方案:

$\left(a\mathrel{}\middle|\mathopen{}\mathrel{}b\right)$

它也适用于pdflatex

在此处输入图片描述

附录

正如 Hans 在开始于http://tug.org/pipermail/luatex/2017-November/006642.html在 luatex 邮件列表中,有一个更简单的解决方法:

\documentclass{article}

\newcommand{\relmiddle}{\Umiddle class 5 }

\begin{document}

$\left(a \relmiddle| b\right)$

$(a\mid b)$

\end{document}

要使用的类号与旧版 TeX 中的标准数学类不同(LuaTeX 手册中的第 7.1.3.3.1 节):

 0  ord
 1  op normal
 2  op limits
 3  op no limits
 4  bin
 5  rel
 6  open
 7  close
 8  punct
 9  inner
10  under
11  over
12  vcenter

在此处输入图片描述

我们可以让它与其他引擎一起工作

\documentclass{article}

\ifdefined\Umiddle
  \newcommand{\relmiddle}{\Umiddle class 5 }
\else
  \newcommand{\relmiddle}[1]{\mathrel{}\middle#1\mathrel{}}
\fi

\begin{document}

$\left(a \relmiddle| b\right)$

$(a\mid b)$

\end{document}

相关内容