LaTeX has no concept of “brackets”. What it has is a table of delimiters. A character gets onto that table only if the font supplies pieces for growing it vertically, and putting anything else after \left makes TeX answer at once: ! Missing delimiter (. inserted). Which brackets you may use, in other words, is decided by the font, not by taste. This page is a lookup for what is on the table — parentheses, square brackets, braces, the angle brackets \langle and \rangle, the | and \lvert of absolute value, the floor and ceiling \lfloor and \lceil, and on to the ones people hunt for and cannot find: the double square brackets ⟦ ⟧ and the corner marks ⌜ ⌝. Choosing between \left/\right and the \big family to make a bracket fit its contents is the business of the dedicated math page.
! Missing delimiter (. inserted). — which characters are allowed to be brackets
The error means that something which is not a delimiter turned up after \left or \right. Compile $\left\alpha x \right\alpha$ on TeX Live 2024 and the line appears twice. The reason is visible in the kernel declarations. A delimiter is defined as \DeclareMathDelimiter{command}{class}{small font}{slot}{large font}{slot} — it names both the glyph to use at normal size and where the growable pieces live. Here is the real line from fontmath.ltx: \DeclareMathDelimiter{\langle}{\mathopen}{symbols}{"68}{largesymbols}{"0A}. \alpha has no such declaration, so there is simply nothing to grow.
That two-part structure explains the rest of this page. A symbol with a usable small form but no large one — <, or \mid — cannot follow \left; conversely a symbol that has only the large form, such as \lgroup below, prints nothing when written in ordinary math. The first column of every table here also carries a second, quieter property: the class named in the declaration. \langle is \mathopen, \rangle is \mathclose, and | is \mathord, an ordinary symbol. That difference is what sets the space around them. The null delimiter ., used when you want nothing drawn on one side, is a member of the same table; the related page covers how \left. is used.
% a delimiter names a small glyph AND the growable pieces
% \DeclareMathDelimiter{\langle}{\mathopen}{symbols}{"68}{largesymbols}{"0A}
\[
\langle a, b \rangle
\qquad
\left\langle \frac{a}{b} \right\rangle
\]
% $\left\alpha x\right\alpha$ -> ! Missing delimiter (. inserted).Typing (, [, \{ and \langle — and why never <
Parentheses ( ) and square brackets [ ] are typed straight from the keyboard; braces are not. { and } are reserved characters that group arguments in LaTeX, so typing them bare puts nothing on the page — write \{ and \} instead. Angle brackets are trickier still: the keyboard < and > are inequality signs (\mathrel), not brackets. For inner products and bra–ket notation use \langle (⟨) and \rangle (⟩). The long-named \lbrack, \rbrack, \lbrace and \rbrace are aliases producing the same characters as [ ] \{ \}, and they earn their keep inside a macro argument where a bare [ could be mistaken for an optional argument. With mathtools loaded, \lparen and \rparen are available the same way.
| Input | Glyph | Class | Use / notes |
|---|---|---|---|
( ) | ( ) | open / close | typed directly; the ordinary pair |
[ ] | [ ] | open / close | \lbrack and \rbrack are aliases |
\{ \} | { } | open / close | { is reserved; \lbrace and \rbrace are the same |
\langle \rangle | ⟨ ⟩ | open / close | inner products, bra–ket; < > are relations, not these |
\lparen \rparen | ( ) | open / close | aliases from mathtools; identical output to ( ) |
. | (nothing) | null | the null delimiter; blanks one side of \left/\right |
Angle brackets in running text hold one more trap. Under OT1, pdfLaTeX’s default encoding, the slots for < and > contain ¡ and ¿. Write A <x> B in the body on TeX Live 2024 and the string that comes back out of the PDF is A ¡x¿ B. That is the whole of the well-known bug in which Spanish inverted punctuation appears from nowhere. There are two fixes: load \usepackage[T1]{fontenc}, which puts < and > where you expect them, or say what you mean with \textless and \textgreater for the inequality signs, or \textlangle and \textrangle for genuine angle brackets 〈 〉. The latter pair belongs to TS1, but the kernel has carried it since 2020, so no extra package is required.
|, \vert, \mid, \Vert, \|, \lvert: six ways to draw one stroke
They look alike, but the six fall into three groups. First, the glyph. In fontmath.ltx, |, \vert and the \arrowvert discussed below all point at the same slot ("6A in cmsy), and measured, all three are 2.77779 pt wide. \|, \Vert and \Arrowvert likewise share slot "6B at 5.00002 pt. So whether you write \| or \Vert changes not one character of the output. Second, the class. All of these are \mathord, ordinary symbols — neither openers nor closers. amsmath’s \lvert/\rvert and \lVert/\rVert take the same glyphs and give them an open and a close class, which is what absolute values and norms actually want.
The third group is \mid alone. It differs not in glyph but in class: it is declared \mathrel, a relation. In set-builder notation — “those x such that …” — the stroke is not a bracket but a relation meaning “such that”, so \mid is the right choice. The difference is measurable: on TeX Live 2024, $\{x \mid x>0\}$ comes to 48.09702 pt while $\{x | x>0\}$ and $\{x \vert x>0\}$ both come to 42.5416 pt. The 5.55542 pt gap is exactly the 5 mu of relation space on each side. When a set written with a bare | looks oddly cramped, that missing space is why.
| Input | Glyph | Class | Use / notes |
|---|---|---|---|
| \vert | | | ord | the same character; 2.77779 pt; neither opens nor closes |
\| \Vert | ‖ | ord | the same character; 5.00002 pt; the double bar of a norm |
\mid | | | rel | “such that”; the right one for set-builder notation |
\lvert \rvert | | | | open / close | absolute value; needs amsmath |
\lVert \rVert | ‖ ‖ | open / close | norms; needs amsmath |
\arrowvert \Arrowvert | | ‖ | ord | identical to \vert/\Vert at normal size; only the growable pieces differ |
\usepackage{amsmath} % \lvert \rvert \lVert \rVert
\[
\lvert x \rvert \;=\; \lvert -x \rvert,
\qquad
\lVert v \rVert \;=\; \sqrt{\langle v, v \rangle},
\qquad
\{\, x \mid x > 0 \,\}
\]Floor and ceiling: \lfloor, \lceil, and what the l and r mean
Rounding down, ⌊x⌋, is \lfloor and \rfloor; rounding up, ⌈x⌉, is \lceil and \rceil. All four are standard LaTeX. The leading l and r stand for left (opening) and right (closing), a rule that runs consistently through \lbrack/\rbrack, \langle/\rangle and \lvert/\rvert as well. Remember that only the bottom has corners on the floor and only the top has them on the ceiling and you will not mix up the glyphs either. Both symbols were introduced by Kenneth E. Iverson in his 1962 book A Programming Language. Before that, [x] carried the meaning of rounding down, but there was no matching symbol for rounding up — and [x] looked like an ordinary bracket. Splitting the shape into a top half and a bottom half was the invention.
\[
\lfloor x \rfloor \le x \le \lceil x \rceil,
\qquad
\left\lfloor \frac{n}{2} \right\rfloor
\qquad
\left\lceil \log_2 n \right\rceil
\]Arrows and slashes are delimiters too: \uparrow, /, \backslash
Brackets are not the only entries on the delimiter table. The six vertical arrows — \uparrow (↑), \downarrow (↓), \updownarrow (↕) and the double-shafted \Uparrow (⇑), \Downarrow (⇓), \Updownarrow (⇕) — are declared with \DeclareMathDelimiter in fontmath.ltx, so after \left/\right they grow to the height of the contents. Their class, though, is \mathrel: used ordinarily inside a formula they behave as arrows. One command is an arrow or a bracket depending on where it stands. They turn up marking a range beside a matrix, or standing in for a rule that indicates a limit.
The slashes live on the same table. The forward slash / is typed directly; the backslash is \backslash (\), because a bare \ is the line-break command. Use them for quotient sets, G \backslash H, or in a \left. … \right/ pair to get a divider that stretches diagonally. The set-difference operator \setminus looks similar but is a different command with a different class, \mathbin — the set and logic symbols page covers it.
| Input | Glyph | Class | Use / notes |
|---|---|---|---|
\uparrow \downarrow | ↑ ↓ | rel | single shaft; both ways is \updownarrow |
\Uparrow \Downarrow | ⇑ ⇓ | rel | double shaft; both ways is \Updownarrow |
/ | / | ord | typed directly; grows as a diagonal divider |
\backslash | \ | ord | quotient sets; a bare \ is the line-break command |
$\lgroup$ prints nothing: the delimiters that exist only at large sizes
Five commands — \lgroup, \rgroup, \lmoustache, \rmoustache and \bracevert — have no normal-size glyph at all. In the declaration we saw at the top of the page, their “small” slot does not point at a letter of an ordinary font but at a piece used to assemble a large symbol. Checked on TeX Live 2024, the symptom is dramatic: $\lgroup x \rgroup$ occupies 23.49307 pt (against 13.49307 pt for $( x )$), yet pdftotext extracts a single character, x. The two brackets land in the Unicode private-use area (U+F8F3 and U+F8FE) and do not look like brackets on the page either. $\lmoustache x \rmoustache$ is worse still: it extracts as zx{, because the slot numbers of the two pieces read straight through as z and {.
The conclusion is simple: always use these five in a \left/\right pair or with \bigl/\Bigl … \lgroup and \rgroup are heavier parentheses with sharper corners, and they look good in a large display. \lmoustache and \rmoustache are the top and bottom halves of a large brace, used for special jobs such as separating the rows of a case distinction. \bracevert, \arrowvert and \Arrowvert are, quite literally, the straight pieces from which braces and arrows are extended vertically. For the same reason, it is safer not to write those three inline either.
% these have no text-size glyph — always pair them with \left/\right or \big
\[
\left\lgroup \frac{a}{b} \right\rgroup
\qquad
\left\lmoustache \frac{a}{b} \right\rmoustache
\]
% $\lgroup x \rgroup$ alone prints no brackets at all⟦ ⟧ and ⌜ ⌝: which package has the brackets standard LaTeX lacks
The double square brackets of denotational semantics, ⟦M⟧, are \llbracket and \rrbracket from stmaryrd; the corner marks ⌜ ⌝ of proof theory and Quine quotation are \ulcorner and \urcorner from amssymb (the lower pair being \llcorner and \lrcorner). Neither is in standard LaTeX, so writing them without the package gives ! Undefined control sequence. If you are on XeLaTeX or LuaLaTeX with unicode-math, the double brackets are named \lBrack and \rBrack instead (U+27E6 and U+27E7).
One trap here is invisible unless you read the package. Even within one package, some symbols are declared as delimiters and some are not. In stmaryrd.sty, \llbracket and \rrbracket are \DeclareMathDelimiter, but \llparenthesis / \rrparenthesis (⦇ ⦈) and \Lbag / \Rbag (⟅ ⟆) are \DeclareMathSymbol — fixed-size symbols. Compile $\left\llparenthesis \frac{a}{b} \right\rrparenthesis$ on TeX Live 2024 and back comes, predictably, ! Missing delimiter (. inserted). Remembering that \llbracket will stretch and \llparenthesis will not saves a surprise later.
| Command | Glyph | Package | Stretches? / notes |
|---|---|---|---|
\llbracket \rrbracket | ⟦ ⟧ | stmaryrd | stretches; the ⟦M⟧ of denotational semantics |
\ulcorner \urcorner | ⌜ ⌝ | amssymb | fixed size; Quine quotation, Gödel numbering |
\llcorner \lrcorner | ⌞ ⌟ | amssymb | fixed size; the lower corner marks |
\llparenthesis \rrparenthesis | ⦇ ⦈ | stmaryrd | does not stretch; after \left it errors |
\Lbag \Rbag | ⟅ ⟆ | stmaryrd | does not stretch; brackets for multisets (bags) |
\lBrack \rBrack | ⟦ ⟧ | unicode-math | the name for the double brackets on XeLaTeX/LuaLaTeX |
One last word about what survives into the PDF. Extract text from a PDF containing \langle and you get U+27E8, MATHEMATICAL LEFT ANGLE BRACKET — copy it and it pastes as an angle bracket. The ⟦ ⟧ of stmaryrd, by contrast, exposes raw slot numbers from its own font: on TeX Live 2024, pdftotext extracts them as J and K. That difference matters when reviewers copy formulas out of the PDF to discuss them, so a paper leaning heavily on double square brackets is worth setting on a Unicode engine with unicode-math.
\usepackage{amssymb} % \ulcorner \urcorner \llcorner \lrcorner
\usepackage{stmaryrd} % \llbracket \rrbracket \Lbag \Rbag
% ...
\[
\llbracket M \rrbracket_\rho
\qquad
\left\llbracket \frac{a}{b} \right\rrbracket
\qquad
\ulcorner \varphi \urcorner
\]