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

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


puts no spaces around |, whereas


still prints \;|\;.

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


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

  #1 \mathclose{}\nonscript\;\delimsize|\nonscript\;\mathopen{} #2%

Another solution that avoids \nonscript is

  {#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
  • 3
    \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
  • 1
    @pglpm see the mathtools manual for the one arg \Set macro, it adds \mathopen for that very reason. – daleif Jan 20 '19 at 11:22

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}

then try adding


in your document preamble. \middle is part of an etex extension.

  • Thanks for your suggestion. I would prefer \set to \setnew. Unfortunately, adding \usepackage{etex} didn't have an effect on both versions. The problem is not that the \middle command doesn't work but that it causes an error if I put \mathrel{...} around it. – aulste Aug 10 '11 at 14:38

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.