\ProvidesPackage{mathsemantics-syntax}[2022/05/06]
\provideboolean{mathsemantics@syntax@shortbb}
\setboolean{mathsemantics@syntax@shortbb}{false}% default: false
\DeclareOption{shortbb}{%
    \setboolean{mathsemantics@syntax@shortbb}{true}% Some Code
}
\ProcessOptions\relax
\RequirePackage{mathsemantics-commons}

% Define commands for bold upper-case letters in math mode
\newcommand{\bA}{{\boldsymbol{A}}}
\newcommand{\bB}{{\boldsymbol{B}}}
\newcommand{\bC}{{\boldsymbol{C}}}
\newcommand{\bD}{{\boldsymbol{D}}}
\newcommand{\bE}{{\boldsymbol{E}}}
\newcommand{\bF}{{\boldsymbol{F}}}
\newcommand{\bG}{{\boldsymbol{G}}}
\newcommand{\bH}{{\boldsymbol{H}}}
\newcommand{\bI}{{\boldsymbol{I}}}
\newcommand{\bJ}{{\boldsymbol{J}}}
\newcommand{\bK}{{\boldsymbol{K}}}
\newcommand{\bL}{{\boldsymbol{L}}}
\newcommand{\bM}{{\boldsymbol{M}}}
\newcommand{\bN}{{\boldsymbol{N}}}
\newcommand{\bO}{{\boldsymbol{O}}}
\newcommand{\bP}{{\boldsymbol{P}}}
\newcommand{\bQ}{{\boldsymbol{Q}}}
\newcommand{\bR}{{\boldsymbol{R}}}
\newcommand{\bS}{{\boldsymbol{S}}}
\newcommand{\bT}{{\boldsymbol{T}}}
\newcommand{\bU}{{\boldsymbol{U}}}
\newcommand{\bV}{{\boldsymbol{V}}}
\newcommand{\bW}{{\boldsymbol{W}}}
\newcommand{\bX}{{\boldsymbol{X}}}
\newcommand{\bY}{{\boldsymbol{Y}}}
\newcommand{\bZ}{{\boldsymbol{Z}}}

% Define commands for bold lower-case letters in math mode
\newcommand{\ba}{{\boldsymbol{a}}}
\newcommand{\bb}{{\boldsymbol{b}}}
\newcommand{\bc}{{\boldsymbol{c}}}
\newcommand{\bd}{{\boldsymbol{d}}}
\newcommand{\be}{{\boldsymbol{e}}}
\let\bf\undefined \newcommand{\bf}{{\boldsymbol{f}}}
\newcommand{\bg}{{\boldsymbol{g}}}
\newcommand{\bh}{{\boldsymbol{h}}}
\let\bi\undefined \newcommand{\bi}{{\boldsymbol{i}}}  % Taylor and Francis
\newcommand{\bj}{{\boldsymbol{j}}}
\newcommand{\bk}{{\boldsymbol{k}}}
\newcommand{\bl}{{\boldsymbol{l}}}
\let\bm\undefined \newcommand{\bm}{{\boldsymbol{m}}}  % Taylor and Francis
\newcommand{\bn}{{\boldsymbol{n}}}
\newcommand{\bo}{{\boldsymbol{o}}}
\newcommand{\bp}{{\boldsymbol{p}}}
\newcommand{\bq}{{\boldsymbol{q}}}
\newcommand{\br}{{\boldsymbol{r}}}
\newcommand{\bs}{{\boldsymbol{s}}}
\newcommand{\bt}{{\boldsymbol{t}}}
\newcommand{\bu}{{\boldsymbol{u}}}
\newcommand{\bv}{{\boldsymbol{v}}}
\newcommand{\bw}{{\boldsymbol{w}}}
\newcommand{\bx}{{\boldsymbol{x}}}
\newcommand{\by}{{\boldsymbol{y}}}
\newcommand{\bz}{{\boldsymbol{z}}}

% Define commands for bold numbers 0, 1 in math mode
\newcommand{\bnull}{{\boldsymbol{0}}}
\newcommand{\bone}{{\boldsymbol{1}}}

% Define commands for bold lower-case Greek letters in math mode
\newcommand{\balpha}{{\boldsymbol{\alpha}}}
\newcommand{\bbeta}{{\boldsymbol{\beta}}}
\newcommand{\bgamma}{{\boldsymbol{\gamma}}}
\newcommand{\bdelta}{{\boldsymbol{\delta}}}
\newcommand{\bepsilon}{{\boldsymbol{\epsilon}}}
\newcommand{\bvarepsilon}{{\boldsymbol{\varepsilon}}}
\newcommand{\bzeta}{{\boldsymbol{\zeta}}}
\newcommand{\boldeta}{{\boldsymbol{\eta}}}  % exception: \boldeta instead of \beta
\newcommand{\btheta}{{\boldsymbol{\theta}}}
\newcommand{\bvartheta}{{\boldsymbol{\vartheta}}}
\newcommand{\biota}{{\boldsymbol{\iota}}}
\newcommand{\bkappa}{{\boldsymbol{\kappa}}}
\newcommand{\bvarkappa}{{\boldsymbol{\varkappa}}}
\newcommand{\blambda}{{\boldsymbol{\lambda}}}
\newcommand{\bmu}{{\boldsymbol{\mu}}}
\newcommand{\bnu}{{\boldsymbol{\nu}}}
\newcommand{\bomicron}{\boldsymbol{o}}
\newcommand{\bxi}{{\boldsymbol{\xi}}}
\newcommand{\bpi}{{\boldsymbol{\pi}}}
\newcommand{\bvarpi}{{\boldsymbol{\varpi}}}
\newcommand{\brho}{{\boldsymbol{\rho}}}
\newcommand{\bvarrho}{{\boldsymbol{\varrho}}}
\newcommand{\bsigma}{{\boldsymbol{\sigma}}}
\newcommand{\bvarsigma}{{\boldsymbol{\varsigma}}}
\newcommand{\btau}{{\boldsymbol{\tau}}}
\newcommand{\bupsilon}{{\boldsymbol{\upsilon}}}
\newcommand{\bphi}{{\boldsymbol{\phi}}}
\newcommand{\bvarphi}{{\boldsymbol{\varphi}}}
\newcommand{\bchi}{{\boldsymbol{\chi}}}
\newcommand{\bpsi}{{\boldsymbol{\psi}}}
\newcommand{\bomega}{{\boldsymbol{\omega}}}

% Define commands for bold upper-case Greek letters in math mode
\newcommand{\bAlpha}{{\boldsymbol{A}}}
\newcommand{\bBeta}{{\boldsymbol{B}}}
\newcommand{\bGamma}{{\boldsymbol{\Gamma}}}
\newcommand{\bDelta}{{\boldsymbol{\Delta}}}
\newcommand{\bEpsilon}{{\boldsymbol{E}}}
\newcommand{\bZeta}{{\boldsymbol{Z}}}
\newcommand{\bEta}{{\boldsymbol{H}}}
\newcommand{\bTheta}{{\boldsymbol{\Theta}}}
\newcommand{\bIota}{{\boldsymbol{I}}}
\newcommand{\bKappa}{{\boldsymbol{K}}}
\newcommand{\bLambda}{{\boldsymbol{\Lambda}}}
\newcommand{\bMu}{{\boldsymbol{M}}}
\newcommand{\bNu}{{\boldsymbol{N}}}
\newcommand{\bXi}{{\boldsymbol{\Xi}}}
\newcommand{\bOmicron}{{\boldsymbol{O}}}
\newcommand{\bPi}{{\boldsymbol{\Pi}}}
\newcommand{\bRho}{{\boldsymbol{P}}}
\newcommand{\bSigma}{{\boldsymbol{\Sigma}}}
\newcommand{\bTau}{{\boldsymbol{T}}}
\newcommand{\bUpsilon}{{\boldsymbol{\Upsilon}}}
\newcommand{\bPhi}{{\boldsymbol{\Phi}}}
\newcommand{\bChi}{{\boldsymbol{X}}}
\newcommand{\bPsi}{{\boldsymbol{\Psi}}}
\newcommand{\bOmega}{{\boldsymbol{\Omega}}}

% Define commands for calligraphic upper-case letters in math mode
\newcommand{\cA}{\mathcal{A}}
\newcommand{\cB}{\mathcal{B}}
\newcommand{\cC}{\mathcal{C}}
\newcommand{\cD}{\mathcal{D}}
\newcommand{\cE}{\mathcal{E}}
\newcommand{\cF}{\mathcal{F}}
\newcommand{\cG}{\mathcal{G}}
\newcommand{\cH}{\mathcal{H}}
\newcommand{\cI}{\mathcal{I}}
\newcommand{\cJ}{\mathcal{J}}
\newcommand{\cK}{\mathcal{K}}
\newcommand{\cL}{\mathcal{L}}
\newcommand{\cM}{\mathcal{M}}
\newcommand{\cN}{\mathcal{N}}
\newcommand{\cO}{\mathcal{O}}
\newcommand{\cP}{\mathcal{P}}
\newcommand{\cQ}{\mathcal{Q}}
\newcommand{\cR}{\mathcal{R}}
\newcommand{\cS}{\mathcal{S}}
\newcommand{\cT}{\mathcal{T}}
\newcommand{\cU}{\mathcal{U}}
\newcommand{\cV}{\mathcal{V}}
\newcommand{\cW}{\mathcal{W}}
\newcommand{\cX}{\mathcal{X}}
\newcommand{\cY}{\mathcal{Y}}
\newcommand{\cZ}{\mathcal{Z}}

% Define commands for fraktur upper-case letters in math mode
\newcommand{\fA}{\mathfrak{A}}
\newcommand{\fB}{\mathfrak{B}}
\newcommand{\fC}{\mathfrak{C}}
\newcommand{\fD}{\mathfrak{D}}
\newcommand{\fE}{\mathfrak{E}}
\newcommand{\fF}{\mathfrak{F}}
\newcommand{\fG}{\mathfrak{G}}
\newcommand{\fH}{\mathfrak{H}}
\newcommand{\fI}{\mathfrak{I}}
\newcommand{\fJ}{\mathfrak{J}}
\newcommand{\fK}{\mathfrak{K}}
\newcommand{\fL}{\mathfrak{L}}
\newcommand{\fM}{\mathfrak{M}}
\newcommand{\fN}{\mathfrak{N}}
\newcommand{\fO}{\mathfrak{O}}
\newcommand{\fP}{\mathfrak{P}}
\newcommand{\fQ}{\mathfrak{Q}}
\newcommand{\fR}{\mathfrak{R}}
\newcommand{\fS}{\mathfrak{S}}
\newcommand{\fT}{\mathfrak{T}}
\newcommand{\fU}{\mathfrak{U}}
\newcommand{\fV}{\mathfrak{V}}
\newcommand{\fW}{\mathfrak{W}}
\newcommand{\fX}{\mathfrak{X}}
\newcommand{\fY}{\mathfrak{Y}}
\newcommand{\fZ}{\mathfrak{Z}}


% Define commands for fraktur upper-case letters in math mode
\newcommand{\sA}{\mathscr{A}}
\newcommand{\sB}{\mathscr{B}}
\newcommand{\sC}{\mathscr{C}}
\newcommand{\sD}{\mathscr{D}}
\newcommand{\sE}{\mathscr{E}}
\newcommand{\sF}{\mathscr{F}}
\newcommand{\sG}{\mathscr{G}}
\newcommand{\sH}{\mathscr{H}}
\newcommand{\sI}{\mathscr{I}}
\newcommand{\sJ}{\mathscr{J}}
\newcommand{\sK}{\mathscr{K}}
\newcommand{\sL}{\mathscr{L}}
\newcommand{\sM}{\mathscr{M}}
\newcommand{\sN}{\mathscr{N}}
\newcommand{\sO}{\mathscr{O}}
\newcommand{\sP}{\mathscr{P}}
\newcommand{\sQ}{\mathscr{Q}}
\newcommand{\sR}{\mathscr{R}}
\newcommand{\sS}{\mathscr{S}}
\newcommand{\sT}{\mathscr{T}}
\newcommand{\sU}{\mathscr{U}}
\newcommand{\sV}{\mathscr{V}}
\newcommand{\sW}{\mathscr{W}}
\newcommand{\sX}{\mathscr{X}}
\newcommand{\sY}{\mathscr{Y}}
\newcommand{\sZ}{\mathscr{Z}}

% Define commands for lower-case letters with vector accents in math mode
\newcommand{\va}{\vec{a}}
\newcommand{\vb}{\vec{b}}
\newcommand{\vc}{\vec{c}}
\newcommand{\vd}{\vec{d}}
\newcommand{\ve}{\vec{e}}
\newcommand{\vf}{\vec{f}}
\let\vg\undefined \newcommand{\vg}{\vec{g}}  % ESAIM
\newcommand{\vh}{\vec{h}}
\newcommand{\vi}{\vec{i}}
\newcommand{\vj}{\vec{j}}
\newcommand{\vk}{\vec{k}}
\newcommand{\vl}{\vec{l}}
\newcommand{\vm}{\vec{m}}
\newcommand{\vn}{\vec{n}}
\newcommand{\vo}{\vec{o}}
\newcommand{\vp}{\vec{p}}
\newcommand{\vq}{\vec{q}}
\newcommand{\vr}{\vec{r}}
\newcommand{\vs}{\vec{s}}
\newcommand{\vt}{\vec{t}}
\newcommand{\vu}{\vec{u}}
\let\vv\undefined \newcommand{\vv}{\vec{v}}  % jnsao
\newcommand{\vw}{\vec{w}}
\newcommand{\vx}{\vec{x}}
\newcommand{\vy}{\vec{y}}
\newcommand{\vz}{\vec{z}}

% Define commands for upper-case letters with vector accents in math mode
\newcommand{\vA}{\vec{A}}
\newcommand{\vB}{\vec{B}}
\newcommand{\vC}{\vec{C}}
\newcommand{\vD}{\vec{D}}
\newcommand{\vE}{\vec{E}}
\newcommand{\vF}{\vec{F}}
\newcommand{\vG}{\vec{G}}
\newcommand{\vH}{\vec{H}}
\newcommand{\vI}{\vec{I}}
\newcommand{\vJ}{\vec{J}}
\newcommand{\vK}{\vec{K}}
\newcommand{\vL}{\vec{L}}
\newcommand{\vM}{\vec{M}}
\newcommand{\vN}{\vec{N}}
\newcommand{\vO}{\vec{O}}
\newcommand{\vP}{\vec{P}}
\newcommand{\vQ}{\vec{Q}}
\newcommand{\vR}{\vec{R}}
\newcommand{\vS}{\vec{S}}
\newcommand{\vT}{\vec{T}}
\newcommand{\vU}{\vec{U}}
\newcommand{\vV}{\vec{V}}
\newcommand{\vW}{\vec{W}}
\newcommand{\vX}{\vec{X}}
\newcommand{\vY}{\vec{Y}}
\newcommand{\vZ}{\vec{Z}}

% Define commands for numbers 0, 1 with vector accents in math mode
\newcommand{\vnull}{{\vec{0}}}
\newcommand{\vone}{{\vec{1}}}

% Define commands for lower-case Greek letters with vector accents in math mode
\newcommand{\valpha}{{\vec{\alpha}}}
\newcommand{\vbeta}{{\vec{\beta}}}
\newcommand{\vgamma}{{\vec{\gamma}}}
\newcommand{\vdelta}{{\vec{\delta}}}
\newcommand{\vepsilon}{{\vec{\epsilon}}}
\newcommand{\vvarepsilon}{{\vec{\varepsilon}}}
\newcommand{\vzeta}{{\vec{\zeta}}}
\newcommand{\veta}{{\vec{\eta}}}
\newcommand{\vtheta}{{\vec{\theta}}}
\newcommand{\vvartheta}{{\vec{\vartheta}}}
\newcommand{\viota}{{\vec{\iota}}}
\newcommand{\vkappa}{{\vec{\kappa}}}
\newcommand{\vvarkappa}{{\vec{\varkappa}}}
\newcommand{\vlambda}{{\vec{\lambda}}}
\newcommand{\vmu}{{\vec{\mu}}}
\newcommand{\vnu}{{\vec{\nu}}}
\newcommand{\vomicron}{\vec{o}}
\newcommand{\vxi}{{\vec{\xi}}}
\newcommand{\vpi}{{\vec{\pi}}}
\newcommand{\vvarpi}{{\vec{\varpi}}}
\newcommand{\vrho}{{\vec{\rho}}}
\newcommand{\vvarrho}{{\vec{\varrho}}}
\newcommand{\vsigma}{{\vec{\sigma}}}
\newcommand{\vvarsigma}{{\vec{\varsigma}}}
\newcommand{\vtau}{{\vec{\tau}}}
\newcommand{\vupsilon}{{\vec{\upsilon}}}
\newcommand{\vphi}{{\vec{\phi}}}
\newcommand{\vvarphi}{{\vec{\varphi}}}
\newcommand{\vchi}{{\vec{\chi}}}
\newcommand{\vpsi}{{\vec{\psi}}}
\newcommand{\vomega}{{\vec{\omega}}}

% Define commands for upper-case Greek letters with vector accents in math mode
\newcommand{\vAlpha}{{\vec{A}}}
\newcommand{\vBeta}{{\vec{B}}}
\newcommand{\vGamma}{{\vec{\Gamma}}}
\newcommand{\vDelta}{{\vec{\Delta}}}
\newcommand{\vEpsilon}{{\vec{E}}}
\newcommand{\vZeta}{{\vec{Z}}}
\newcommand{\vEta}{{\vec{H}}}
\newcommand{\vTheta}{{\vec{\Theta}}}
\newcommand{\vIota}{{\vec{I}}}
\newcommand{\vKappa}{{\vec{K}}}
\newcommand{\vLambda}{{\vec{\Lambda}}}
\newcommand{\vMu}{{\vec{M}}}
\newcommand{\vNu}{{\vec{N}}}
\newcommand{\vOmicron}{\vec{O}}
\newcommand{\vXi}{{\vec{\Xi}}}
\newcommand{\vPi}{{\vec{\Pi}}}
\newcommand{\vRho}{{\vec{P}}}
\newcommand{\vSigma}{{\vec{\Sigma}}}
\newcommand{\vTau}{{\vec{T}}}
\newcommand{\vUpsilon}{{\vec{\Upsilon}}}
\newcommand{\vPhi}{{\vec{\Phi}}}
\newcommand{\vChi}{{\vec{X}}}
\newcommand{\vPsi}{{\vec{\Psi}}}
\newcommand{\vOmega}{{\vec{\Omega}}}

% Define commands for some blackboard characters in math mode, mainly used for sets
\newcommand{\bbA}{\mathbb{A}}
\newcommand{\bbB}{\mathbb{B}}
\newcommand{\bbC}{\mathbb{C}}
\newcommand{\bbD}{\mathbb{D}}
\newcommand{\bbE}{\mathbb{E}}
\newcommand{\bbF}{\mathbb{F}}
\newcommand{\bbG}{\mathbb{G}}
\newcommand{\bbH}{\mathbb{H}}
\newcommand{\bbI}{\mathbb{I}}
\newcommand{\bbJ}{\mathbb{J}}
\newcommand{\bbK}{\mathbb{K}}
\newcommand{\bbL}{\mathbb{L}}
\newcommand{\bbM}{\mathbb{M}}
\newcommand{\bbN}{\mathbb{N}}
\newcommand{\bbO}{\mathbb{O}}
\newcommand{\bbP}{\mathbb{P}}
\newcommand{\bbQ}{\mathbb{Q}}
\newcommand{\bbR}{\mathbb{R}}
\newcommand{\bbS}{\mathbb{S}}
\newcommand{\bbT}{\mathbb{T}}
\newcommand{\bbU}{\mathbb{U}}
\newcommand{\bbV}{\mathbb{V}}
\newcommand{\bbW}{\mathbb{W}}
\newcommand{\bbX}{\mathbb{X}}
\newcommand{\bbY}{\mathbb{Y}}
\newcommand{\bbZ}{\mathbb{Z}}

\ifthenelse{\boolean{mathsemantics@syntax@shortbb}}{
	\providecommand{\C}{\bbC}%
	\providecommand{\K}{\bbK}%
	\providecommand{\N}{\bbN}%
	\providecommand{\Q}{\bbQ}%
	\providecommand{\R}{\bbR}%
	\providecommand{\Z}{\bbZ}%
}{}


% Define \enclose command
% \enclose[a]{b}{c}{d} encloses content (c) in brackets (b,d) where the optional parameter
% a scales the brackets (big, Big, bigg, Bigg) or (auto)matically scales them.
% It can also be set to [none] do deactivate the brackets/enclosing
% \enclosespacing allows for additional spacing before and after the \enclose:d content
% https://blag.nullteilerfrei.de/2014/01/16/a-dynamic-bracketing-macro-in-latex/
% The \enclose command is mainly meant for internal use; use \paren instead
\newcommand{\enclspacing}{}
\newcommand{\enclose}[4][]{%
	\ifthenelse{\isempty{#1}}%
	{\ifthenelse{\equal{#2}{.}}{}{#2}\enclspacing#3\enclspacing#4}%
	{\ifthenelse{\equal{#1}{auto}}% given auto
		{\mathopen{}\left#2\enclspacing#3\enclspacing\mathclose{}\right#4}%
		{\ifthenelse{\equal{#1}{none}}% given none
			{#3}%
			{\csname#1l\endcsname#2\enclspacing#3\enclspacing\csname#1r\endcsname#4}%
		}% end auto
	}% end #1 empty
}

% Define \encloseSet command to do { c | e }
% \enclose[a]{b}{c}{d}{e}{f} encloses content c and e in brackets (b,f) with a center delimiter d, where the optional parameter
% a scales the brackets (big, Big, bigg, Bigg) or (auto)matically scales them
% \enclosespacingSet allows for additional spacing before and after the center delimiter, the outer brackets gain a \encloseSpacing as \enclose:
% https://blag.nullteilerfrei.de/2014/01/16/a-dynamic-bracketing-macro-in-latex/
% The \enclose command is mainly meant for internal use; use \paren instead
\newcommand{\enclspacingSet}{\,}
\newcommand{\encloseSet}[6][]{%
	\ifthenelse{\isempty{#1}}%
		{#2\enclspacing#3 \enclspacingSet#4\enclspacingSet #5\enclspacing#6}%
		{\ifthenelse{\equal{#1}{auto}}%
			{\left#2\enclspacing#3\enclspacingSet\middle#4\enclspacingSet#5\right#6}%
			{\csname#1l\endcsname#2\enclspacing#3\enclspacingSet\csname#1\endcsname#4\enclspacingSet#5\enclspacing\csname#1r\endcsname#6}%
		}%
	}

% Define \paren command
% \paren[a]bc{d} encloses content (d) in brackets b,c where the optional parameter
% a scales the brackets
\newcommand{\paren}[4][]{\enclose[#1]{#2}{#4}{#3}}

% Define the \clap (complementing \{l,r}lap) and \math{l,c,r}lap commands,
% which horizontally smash the argument with alignment
% http://www.tug.org/TUGboat/Articles/tb22-4/tb72perlS.pdf
\def\clap#1{\hbox to 0pt{\hss#1\hss}}
\def\mathllap{\mathpalette\mathllapinternal}
\def\mathrlap{\mathpalette\mathrlapinternal}
\def\mathclap{\mathpalette\mathclapinternal}
\def\mathllapinternal#1#2{\llap{$\mathsurround=0pt#1{#2}$}}
\def\mathrlapinternal#1#2{\rlap{$\mathsurround=0pt#1{#2}$}}
\def\mathclapinternal#1#2{\clap{$\mathsurround=0pt#1{#2}$}}

% Define the \mrep[a]{b}{c} command, which prints b but reserves the space for c.
% The optional argument a specifies the alignment {l,c,r}. The command works in text and math modes.
% https://groups.google.com/forum/?fromgroups#!topic/comp.text.tex/GikFchXJIM0
\def\my@mathpalette#1#2#3#4{\mathchoice{#1\displaystyle{#2}{#3}{#4}}{#1\textstyle{#2}{#3}{#4}}{#1\scriptstyle{#2}{#3}{#4}}{#1\scriptscriptstyle{#2}{#3}{#4}}}
\def\mrepinternal#1#2#3#4{\makebox[\widthof{$#1#4$}][#2]{$#1\vphantom{#4}{#3}$}}
\newcommand{\mrep}[3][l]{\ifmmode\my@mathpalette\mrepinternal{#1}{#2}{#3}\else\makebox[\widthof{#3}][#1]{\vphantom{#3}#2}\fi}