# \mathrel conflict with \left,\right,\middle

I refer to this question and particularly to this answer. I defined \set by

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

where \mathrel{\delimsize|} imitates \mid, which itself is of math relation type but not scaleable.

Although \set[\big]{...}{...}, \set[\Big]{...}{...} etc. work fine, the starred-form \set*{...}{...} does not. The problem is that, in this case, \delimsize expands to \middle and \mathrel{\middle|} leads to an error, which can easily be reproduced:

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

I could define \set alternatively like

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

which should produce in most cases the same spaces around | as the version above. However, there is a difference if a set is in scriptstyle:

A_{\set{x}{y}}

puts no spaces around |, whereas

A_{\setnew{x}{y}}

still prints \;|\;.

Do you know a way to make \mathrel and \middle compatible?

-
Similar question: tex.stackexchange.com/q/5502 –  Philippe Goutet Aug 11 '11 at 9:50

No space is inserted in script or scriptscript styles if you precede \; with \nonscript:

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

Another solution that avoids \nonscript is

\DeclarePairedDelimiterX\set[2]{\{}{\}}
{#1 \mathrel{}\mathclose{}\delimsize|\mathopen{}\mathrel{} #2}
-
Thanks, this solved my problem :-) In addition, if anyone knows a solution for the other version, \set, I would be glad if you posted it, too. –  aulste Aug 10 '11 at 18:18
\left, \right and \middle must be at the same brace level. –  egreg Aug 10 '11 at 21:32
See edited answer. –  egreg Aug 10 '11 at 21:53
Great! Your second solution is exactly what I wanted. Thank you! –  aulste Aug 11 '11 at 13:40
Actually the first one is more efficient. –  egreg Aug 11 '11 at 16:56

If you are comfortable in using the alternative spacing you suggest:

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

rather than

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