\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
。