According to `texdoc symbols`

:

`\mvert`

and `\mid`

are identical and produce a *relation*. `\vert`

is a synonym for `|`

and both produce the same symbol, but should be used in the context of an ordinal, and should be used as an *operator*, **not** as a delimiter (p54, bottom). `\divides`

once again produces the same symbol but should be used as a binary *“divides” operator*.

`\lvert`

and `\rvert`

are left and right delimiters, respectively.

The inspection of the math list happens *after* expansion (and after assignments). It is an extra stage just applicable to math mode that converts the math list into a horizontal list that is then typeset as a normal horizontal list.

So there is no real connection between the macro structure and the math spacing, It does not matter whether the thing to the left of the `+`

has arguments or not, it just matters what it expands to (nothing in your example) so your example is equivalent to

```
\noindent
\( +x\) \\ % unary: "+x"
\( +x\) \\ % unary: "+x"
\({} +x\) \\ % binary: " + x"
\( +x\) \\ % unary: "+x"
\({} +x\) \\ % binary: " + x"
```

and as your comments show a binop like `+`

gets binary spacing if it is between two mathord atoms such as `{}`

or `x`

.

Your example (from elsewhere, with `\somecommand`

being a zero-argument macro)

```
\(\somecommand{} {+} x\)
```

is

```
\({} {+} x\)
```

Here the `{+}`

construct makes a mathord so you get no spacing. My comment that this was probably bad markup was mainly related to the trailing `{}`

after `\somecommand`

it is OK to do that habitually in text mode to avoid dropping spaces but in math mode it's usually has an effect.

```
\(\somecommand{} {+ x}\)
```

is

```
\({} {+ x}\)
```

so here the math list has two, not three, mathord atoms: `{}`

and `+x`

. In this simple case it doesn't affect the spacing, but the inner expression is a single atom, so `{+x}`

(and not `x`

) would take any superscripts etc, and as it is an inner list linebreaking is suppressed and any white space is forced to its natural width (again not relevant here); basically in math node `{...}`

is a box command like `\hbox{....}`

.

There are in fact two choices for a unary math sign, a mathord or a mathop, it's easy to get an ad hoc mathord by using `{+}`

but it is probably more consistent to declare the operators explicitly.

```
1 $a-+b$
2 $a-{+}b$
3 $a-\mathord{+}b$
4 $a-\mathop{+}b$
5 $x+y$
6 $x{+}y$
7 $x\mathord{+}y$
8 $x\mathop{+}y$
```

As you see from (1) if two binop atoms are adjacent the second one effectively turns into a mathord so you get the spacing as in (2) or (3) although arguably as a prefix operator giving it mathop spacing (with a small gap before its argument) is more consistent.

either way you don't want to be filling you document expressions with weird `{}`

constructs and `\mathxx`

primitives, just define

```
\unaryplus{{+}}
```

or whatever version you like and then use

```
a + \unaryplus b
```

and it will all work out OK.

## Best Answer

You should use

`\bigm|`

to make a relation symbol, so that the three consecutive bars are distinguishable from each other. If you want to make them slightly bigger, here's a way:See https://tex.stackexchange.com/a/22375/4427 for a short course on

`\ooalign`

.## Extended version working also in subscripts