# What is the difference between square brackets and curly brackets in a command invocation?

Pardon the naive beginner question.

In a command like: \textcolor[HTML]{4C7045}{dark green text}, or \documentclass[12pt]{article}, or \begin{figure}[htb], why are some arguments surrounded by [] and some by {}?

The above examples are all for LaTeX, but this doesn't seem to be LaTeX-specific.

• This really is LaTeX-specific: the [] optional convention really doesn't apply to plain, ConTeXt or other formats. Jun 2, 2014 at 8:41
• Is \newcommand from LaTeX, then? How is it defined? Jun 2, 2014 at 8:42
• @immbis Yes, \newcommand is LaTeX-specific: it's wrapper around the \def primitive and depending on the exact set up does various things (optional arguments, for example, require more than one TeX macro for implementation). Jun 2, 2014 at 8:46
• There is also <n>; used, for example, in beamer. Jun 2, 2014 at 14:41

In TeX (and LaTeX and ConTeXt) braces ({}) are used as grouping characters.

In LaTeX, brackets ([]) are conventionally used for optional arguments, whereas braces are used for mandatory arguments.

In ConTeXt, braces are used for text that is to be typeset, whereas brackets are used for 'setup' text such as option lists.

• Nota bene: xargs (and probably others) make it easy to screw the conventions in LaTeX. Jun 2, 2014 at 19:30
• @Raphael Of course: the answer doe say 'conventionally'. Notice that xparse, written by the team, does allow the creation of non-standard input syntaxes but the idea is that it's primarily for creating standard ones: \foo*[<opt>]{<mandatory-1>}. Jun 4, 2014 at 9:10
• I have the impression this convenction is very often neglected, and correct me if I'm wrong. A notable "exception" being the title of a frame in beamer, which is optional and still is inside curly braces (\begin{frame}{Frame title}). And this without metionnning the fact that---again, correct me if I'm wrong---there seems to be no clear convention about what goes first: the curly braces or the square brackets. You find as much \[...]{...} as \{...}[...]. I sometimes think TeX is a mess, but perhaps this is due to my ignorance, for sure.
– Hal
May 21, 2021 at 8:21

In general everything between [...] is optional and everything between {...} is mandatory. However, it depends to the author of the macros what will be optional and what will be mandatory. There are a lot of other possibilities.