\mathrel 与 \left,\right,\middle 冲突

\mathrel 与 \left,\right,\middle 冲突

我指的是这个问题尤其是这个答案.我定义\set

\usepackage{mathtools}
...
\DeclarePairedDelimiterX\set[2]{\{}{\}}{#1 \mathrel{\delimsize|} #2}

其中\mathrel{\delimsize|}模仿\mid,其本身是数学关系类型,但不可扩展。

虽然等可以正常工作,\set[\big]{...}{...}\set[\Big]{...}{...}星号形式\set*{...}{...}却不行。问题是,在这种情况下,\delimsize会扩展为\middle\mathrel{\middle|}导致错误,该错误很容易重现:

\left\{x \mathrel{\middle|} y\right\}

我可以定义\set如下

\DeclarePairedDelimiterX\setnew[2]{\{}{\}}{#1 \;\delimsize|\; #2}

在大多数情况下,它应该会产生与上述版本相同的空间|。但是,如果集合采用脚本样式,则存在差异:

A_{\set{x}{y}}

周围不加空格|,而

A_{\setnew{x}{y}}

仍可打印\;|\;

您知道如何使其\mathrel兼容\middle吗?

答案1

\;如果在脚本或 scriptscript 样式前面加上\nonscript:,则不会插入空格:

\DeclarePairedDelimiterX\setnew[2]{\{}{\}}{%
  #1 \mathclose{}\nonscript\;\delimsize|\nonscript\;\mathopen{} #2%
}

另一个避免的解决方案\nonscript

\DeclarePairedDelimiterX\set[2]{\{}{\}}
  {#1 \mathrel{}\mathclose{}\delimsize|\mathopen{}\mathrel{} #2}

答案2

如果您愿意使用替代间距,建议您:

\DeclarePairedDelimiterX\setnew[2]{\{}{\}}{#1 \;\delimsize|\; #2}

而不是

\DeclarePairedDelimiterX\set[2]{\{}{\}}{#1 \mathrel{\delimsize|} #2}

然后尝试添加

\usepackage{etex}

在您的文档序言中。\middle是扩展的一部分etex

相关内容