%
% Only the most commonly-used macros. Needed by everything else.
%

% Place the argument in matching left/right parntheses.
\providecommand*{\of}[1]{ \left( {#1} \right) }

% Group terms using parentheses.
\providecommand*{\qty}[1]{ \left( {#1} \right) }

% Group terms using square brackets.
\providecommand*{\sqty}[1]{ \left[ {#1} \right] }

% Create a set from the given elements
\providecommand*{\set}[1]{ \left\lbrace {#1} \right\rbrace }

% A set comprehension, where the ``such that...'' bar is added
% automatically. The bar was chosen over a colon to avoid ambiguity
% with the L : V -> V notation. We can't leverage \set here because \middle
% needs \left and \right present.
\providecommand*{\setc}[2]{ \left\lbrace {#1}\ \middle|\ {#2} \right\rbrace }

% A pair of things.
\providecommand*{\pair}[2]{ \left( {#1}, {#2} \right) }

%
% Product spaces
%
% All of the product spaces (for example, R^n) that follow default to
% an exponent of ``n'', but that exponent can be changed by providing
% it as an optional argument. If the exponent given is ``1'', then it
% will be omitted entirely.
%

% The natural n-space, N x N x N x ... x N.
\providecommand*{\Nn}[1][n]{
  \mathbb{N}\if\detokenize{#1}\detokenize{1}{}\else^{#1}\fi
}

% The integral n-space, Z x Z x Z x ... x Z.
\providecommand*{\Zn}[1][n]{
  \mathbb{Z}\if\detokenize{#1}\detokenize{1}{}\else^{#1}\fi
}

% The rational n-space, Q x Q x Q x ... x Q.
\providecommand*{\Qn}[1][n]{
  \mathbb{Q}\if\detokenize{#1}\detokenize{1}{}\else^{#1}\fi
}

% The real n-space, R x R x R x ... x R.
\providecommand*{\Rn}[1][n]{
  \mathbb{R}\if\detokenize{#1}\detokenize{1}{}\else^{#1}\fi
}

% The complex n-space, C x C x C x ... x C.
\providecommand*{\Cn}[1][n]{
  \mathbb{C}\if\detokenize{#1}\detokenize{1}{}\else^{#1}\fi
}
