% % % The Rank 2 Roots package. % % Version 1.2 % % % This package draws root and weight lattices for rank 2 root systems in LaTeX documents, % using the TikZ package. % Please see the file rank-2-roots.tex for examples of use of this package. % % Benjamin McKay % b.mckay@ucc.ie % % Released under the LaTeX Project Public License v1.3c or later, see % http://www.latex-project.org/lppl.txt % % % % \NeedsTeXFormat{LaTeX2e}[1994/06/01] \ProvidesPackage{rank-2-roots}[2023/09/03 Rank 2 roots] \RequirePackage{tikz} \RequirePackage{xstring} \RequirePackage{xparse} \RequirePackage{etoolbox} \RequirePackage{expl3} \RequirePackage{pgfkeys} \RequirePackage{pgfopts} \usetikzlibrary{ calc, arrows, arrows.meta, decorations.markings, positioning, fadings, backgrounds, decorations.pathreplacing, shadings, fadings } %% Style options; user can change them. \newlength\weightRadius \setlength\weightRadius{1.2pt} \newlength\weightLength \setlength\weightLength{.5cm} \newlength\gradingDot \setlength\gradingDot{2pt} \def\defaultWeightLatticeSize{0} \newlength\simple@root@radius \setlength\simple@root@radius{1.2pt} \def\weight@multiplicity{1} \newif\ifAutoSizeWeightLattice \AutoSizeWeightLatticetrue \pgfkeys{/root system/.is family, /root system, weight lattice/.style={draw=gray!40}, root polygon/.style={gray!40,opacity=.5}, hyperplane/.style={gray!50,fill opacity=.5}, Weyl chamber/.style={gray!60,fill opacity=.5}, grading/.style={line width=3pt,gray,opacity=0.5,line cap=round}, weight radius/.code={\pgfmathsetlength\weightRadius{#1}}, weight length/.code={\pgfmathsetlength\weightLength{#1}}, grading dot radius/.code={\pgfmathsetlength\gradingDot{#1}}, simple root radius/.code={\pgfmathsetlength\simple@root@radius{#1}}, weight/.style={fill=gray,draw=white}, root/.style={fill=gray,draw=white}, simple root/.style={fill=white,draw=gray}, fundamental weight/.style={fill=black,draw=gray}, multiplicity/.estore in = \weight@multiplicity, multiplicity/.default = 1, .search also={/tikz}, } \makeatletter \def\root@system{?} \def\parabolic@subalgebra{?} \def\weight@lattice@size{0} \def\sqrt@three{1.732050808} \def\sqrt@threeOverTwo{0.8660254038} \def\sqrt@threeOverFour{0.4330127019} % hexagonal coordinate system \define@key{hexkeys}{x}{\def\myx{#1}} \define@key{hexkeys}{y}{\def\myy{#1}} \tikzdeclarecoordinatesystem{hex}% {% \setkeys{hexkeys}{#1}% \ifAutoSizeWeightLattice\auto@stretch@hex{\myx}{\myy}\fi% \pgfmathparse{((\myx)+0.5*(\myy))*\weightLength}% \pgf@x=\pgfmathresult pt% \pgfmathparse{\sqrt@threeOverTwo*(\myy)*\weightLength}% \pgf@y=\pgfmathresult pt% } % square coordinate system \define@key{squarekeys}{x}{\def\myx{#1}} \define@key{squarekeys}{y}{\def\myy{#1}} \tikzdeclarecoordinatesystem{square}% {% \setkeys{squarekeys}{#1}% \ifAutoSizeWeightLattice\auto@stretch@square{\myx}{\myy}\fi% \pgfmathparse{\myx*\weightLength}% \pgf@x=\pgfmathresult pt% \pgfmathparse{\myy*\weightLength}% \pgf@y=\pgfmathresult pt% } \NewDocumentEnvironment{rootSystem}{O{}m}% {% \xdef\weight@lattice@size{\defaultWeightLatticeSize}% \IfSubStr{ABCG}{#2}{}{\unrecognized@root@system{#2}}% \xdef\root@system{#2}% \check@root@system{}% \choose@weight@lattice{}% \choose@root@lattice{}% \pgfkeys{/root system,#1}% }% {% \IfStrEq{\weight@lattice@size}{0}%% {%% }%% {%% \weightLattice{\weight@lattice@size}% }%% \xdef\root@system{?}% \xdef\parabolic@subalgebra{?}% \xdef\weight@lattice@size{\defaultWeightLatticeSize}% \xdef\Root{?}% }% \NewDocumentCommand\simpleroots{}% {\rt[simple root]{1}{0}\rt[simple root]{0}{1}} \NewDocumentCommand\fundamentalweights{}% {\wt[fundamental weight]{1}{0}\wt[fundamental weight]{0}{1}} \NewDocumentCommand\choose@root@lattice{} {% \IfStrEqCase{\root@system}% {%% {A}{\global\let\Root=\A@root}% {B}{\global\let\Root=\B@root}% {C}{\global\let\Root=\C@root}% {G}{\global\let\Root=\G@root}% }%% [\check@root@system]% }% \NewDocumentCommand\A@root{mm}% x,y in units of simple roots {% (hex cs:x={(-(#1)+2*(#2))},y={(2*(#1)-(#2))})% }% \NewDocumentCommand\B@root{mm}% x,y in units of simple roots {% (square cs:x={((#1))},y={(-(#1)+(#2))})% }% \NewDocumentCommand\C@root{mm}% x,y in units of simple roots {% (square cs:x={(2*(#2)-(#1))},y={#1})% }% \NewDocumentCommand\G@root{mm}% x,y in units of simple roots {% (hex cs:x={(-(#1)+(#2))},y={(2*(#1)-(#2))})% }% \NewDocumentCommand\unrecognized@root@system{m}% {% \ClassError{Rank 2 roots}{Unrecognized root system: ``#1''. Allowed values are A,B,C,G}{}% }% \NewDocumentCommand\root@system@not@set{}% {% \ClassError{Rank 2 roots}{Error: root system not specified.}{}% }% \NewDocumentCommand\check@root@system{}% {% \IfSubStr{ABCG}{\root@system}{}{\root@system@not@set}% }% \NewDocumentCommand\A@weight@lattice{O{}}% {% \check@root@system% \hexgrid[#1]{\weight@lattice@size}% }% \NewDocumentCommand\G@weight@lattice{O{}}% {% \check@root@system% \hexgrid[#1]{\weight@lattice@size}% }% \NewDocumentCommand\B@weight@lattice{O{}}% {% \check@root@system% \begin{scope}[on background layer]% \draw[/root system/weight lattice,step=\weightLength,#1] ({-\weight@lattice@size*\weightLength},{-\weight@lattice@size*\weightLength}) grid ({\weight@lattice@size*\weightLength},{\weight@lattice@size*\weightLength});% \foreach \i in {-\weight@lattice@size,...,\weight@lattice@size}% {% \draw[/root system/weight lattice,#1] ({\weightLength*\i},{\weightLength*\weight@lattice@size}) -- ({\weightLength*\weight@lattice@size},{\weightLength*\i});% \draw[/root system/weight lattice,#1] ({-\weightLength*\weight@lattice@size},{\weightLength*\i}) -- ({\weightLength*\i},{-\weightLength*\weight@lattice@size});% \draw[/root system/weight lattice,#1] ({-\weightLength*\i},{\weightLength*\weight@lattice@size}) -- ({-\weightLength*\weight@lattice@size},{\weightLength*\i});% \draw[/root system/weight lattice,#1] ({\weightLength*\weight@lattice@size},{\weightLength*\i}) -- ({-\weightLength*\i},{-\weightLength*\weight@lattice@size});% }% \end{scope}% }% \NewDocumentCommand\C@weight@lattice{O{}}% {% \B@weight@lattice[#1]% }% \NewDocumentCommand\weightLattice{O{}m}% {% \check@root@system% \xdef\weight@lattice@size{#2}% \IfStrEqCase{\root@system}% {%% {A}{\A@weight@lattice[#1]}% {B}{\B@weight@lattice[#1]}% {C}{\C@weight@lattice[#1]}% {G}{\G@weight@lattice[#1]}% {?}{\root@system@not@set}% }%% [\check@root@system]% }% \NewDocumentCommand\hexwt{O{}mm}% {% \check@root@system% \pgfkeys{/root system,#1}% \IfStrEq{\weight@multiplicity}{1}{}% {%%% \foreach \i in {2,...,\weight@multiplicity}% {% \draw[/root system,weight,#1,fill=none] (hex cs:x=#2,y=#3) circle ({\i*\weightRadius});% }% \gdef\weight@multiplicity{1}% }%%% \fill[/root system,weight,#1] (hex cs:x=#2,y=#3) circle (\weightRadius);% }% \NewDocumentCommand\squarewt{O{}mm}% {% \check@root@system% \pgfkeys{/root system,weight,#1}% \IfStrEq{\weight@multiplicity}{1}{}% {%%% \foreach \i in {2,...,\weight@multiplicity}% {% \draw[/root system,weight,#1,fill=none] (square cs:x=#2,y=#3) circle ({\i*\weightRadius});% }% \gdef\weight@multiplicity{1}% }%%% \fill[/root system,weight,#1] (square cs:x=#2,y=#3) circle (\weightRadius);% }% \NewDocumentCommand\rt{O{}mm}%[tikz options,multiplicity=???]{x}{y} {% \check@root@system% \pgfkeys{/root system,weight,#1}% \IfStrEq{\weight@multiplicity}{1}{}% {%%% \foreach \i in {2,...,\weight@multiplicity}% {% \draw[/root system,weight,#1,fill=none] \Root{#2}{#3} circle ({\i*\weightRadius});% }% \gdef\weight@multiplicity{1}% }%%% \fill[/root system,weight,#1] \Root{#2}{#3} circle (\weightRadius);% %}%% }% \NewDocumentCommand\wt{O{}mm}%[tikz options,multiplicity=???]{x}{y} {% \check@root@system% \pgfkeys{/root system,weight,#1}% \IfStrEq{\weight@multiplicity}{1}{}% {%%% \foreach \i in {2,...,\weight@multiplicity}% {% \draw[/root system,weight,#1,fill=none] \weight{#2}{#3} circle ({\i*\weightRadius});% }% \gdef\weight@multiplicity{1}% }%%% \fill[/root system,weight,#1] \weight{#2}{#3} circle (\weightRadius);% %}%% }% \newif\if@decimals \NewDocumentCommand\make@weight@lattice@at@least{m}% {% \pgfmathless{\weight@lattice@size}{#1}% \IfStrEq{1}{\pgfmathresult}{\xdef\weight@lattice@size{#1}}{} }% \NewDocumentCommand\auto@stretch@hex{mm}% {% %% Can we fit this weight? If not, draw a bigger background. \@decimalsfalse \IfSubStr{#1}{.}{\global\@decimalstrue}{}% \IfSubStr{#2}{.}{\global\@decimalstrue}{}% \xdef\min@wls{0} \if@decimals% \IfStrEqCase{\root@system}% {%% {A}{\pgfmathint{ceil(max(abs(#1),abs(#2),abs(#1+#2)))}\xdef\min@wls{\pgfmathresult}}% {B}{\pgfmathint{ceil(max(abs((#1)+(#2)/2),abs(#2)))}\xdef\min@wls{\pgfmathresult}}% {C}{\pgfmathint{ceil(max(abs((#1)+(#2)),abs(#2)))}\xdef\min@wls{\pgfmathresult}}% {G}{\pgfmathint{ceil(max(abs(#1),abs(#2),abs(#1+#2)))}\xdef\min@wls{\pgfmathresult}}% {?}{\root@system@not@set}% }%% \else \IfStrEqCase{\root@system}% {%% {A}{\pgfmathint{max(abs(#1),abs(#2),abs(#1+#2))}\xdef\min@wls{\pgfmathresult}}% {B}{\pgfmathint{max(abs((#1)+(#2)/2),abs(#2))}\xdef\min@wls{\pgfmathresult}}% {C}{\pgfmathint{max(abs((#1)+(#2)),abs(#2))}\xdef\min@wls{\pgfmathresult}}% {G}{\pgfmathint{max(abs(#1),abs(#2),abs(#1+#2))}\xdef\min@wls{\pgfmathresult}}% {?}{\root@system@not@set}% }%% \fi% \make@weight@lattice@at@least{\min@wls}% }% \NewDocumentCommand\auto@stretch@square{mm}% {% %% Can we fit this weight? If not, draw a bigger background. \@decimalsfalse \IfSubStr{#1}{.}{\global\@decimalstrue}{}% \IfSubStr{#2}{.}{\global\@decimalstrue}{}% \if@decimals% \pgfmathint{ceil(max(abs(#1),abs(#2)))}\xdef\wls{\pgfmathresult}% \else \pgfmathint{max(abs(#1),abs(#2))}\xdef\wls{\pgfmathresult}% \fi \pgfmathless{\weight@lattice@size}{\wls}% \IfStrEq{1}{\pgfmathresult}%{}% {%% %\weightLattice{\wls}% \xdef\weight@lattice@size{\wls}% }%% {%% }%% }% \NewDocumentCommand\A@roots{O{}}% {% \begin{scope}[on background layer]% \fill[/root system/root polygon] (hex cs:x=1,y=1) -- (hex cs:x=-1,y=2) -- (hex cs:x=-2,y=1) -- (hex cs:x=-1,y=-1) -- (hex cs:x=1,y=-2) -- (hex cs:x=2,y=-1) -- cycle;% \end{scope}% \wt[root,#1]{1}{1}% \wt[root,#1]{-1}{2}% \wt[root,#1]{-2}{1}% \wt[root,#1]{-1}{-1}% \wt[root,#1]{1}{-2}% \wt[root,#1]{2}{-1}% }% \NewDocumentCommand\B@roots{O{}}% {% \begin{scope}[on background layer]% \fill[/root system/root polygon] (square cs:x=-1,y=-1) -- (square cs:x=-1,y=1) -- (square cs:x=1,y=1) -- (square cs:x=1,y=-1) -- cycle;% \end{scope} \foreach \i in {-1,0,1}% {% \foreach \j in {-1,0,1}% {%% \IfStrEq{\i}{0}% {%%% \IfStrEq{\j}{0}{}% {%%%% \squarewt[root,#1]{\i}{\j}% }%%%% }%%% {%%% \squarewt[root,#1]{\i}{\j}% }%%% }%% }% }% \NewDocumentCommand\C@roots{O{}}% {% \begin{scope}[on background layer]% \fill[/root system/root polygon] (square cs:x=2,y=0) -- (square cs:x=0,y=2) -- (square cs:x=-2,y=0) -- (square cs:x=0,y=-2) -- cycle;% \end{scope} \squarewt[root,#1]{2}{0} \squarewt[root,#1]{1}{1} \squarewt[root,#1]{0}{2} \squarewt[root,#1]{-1}{1} \squarewt[root,#1]{-2}{0} \squarewt[root,#1]{-1}{-1} \squarewt[root,#1]{0}{-2} \squarewt[root,#1]{1}{-1} }% \NewDocumentCommand\G@roots{O{}}% {% \begin{scope}[on background layer]% \fill[/root system/root polygon] (hex cs:x=1,y=0) -- (hex cs:x=1,y=1) -- (hex cs:x=0,y=1) -- (hex cs:x=-1,y=2) -- (hex cs:x=-1,y=1) -- (hex cs:x=-2,y=1) -- (hex cs:x=-1,y=0) -- (hex cs:x=-1,y=-1) -- (hex cs:x=0,y=-1) -- (hex cs:x=1,y=-2) -- (hex cs:x=1,y=-1) -- (hex cs:x=2,y=-1) -- cycle;% \end{scope}% \hexwt[root,#1]{1}{0}% \hexwt[root,#1]{0}{1}% \hexwt[root,#1]{-1}{0}% \hexwt[root,#1]{0}{-1}% \hexwt[root,#1]{1}{-1}% \hexwt[root,#1]{-1}{1}% \hexwt[root,#1]{1}{1}% \hexwt[root,#1]{2}{-1}% \hexwt[root,#1]{-1}{2}% \hexwt[root,#1]{1}{-2}% \hexwt[root,#1]{-2}{1}% \hexwt[root,#1]{-1}{-1}% }% \NewDocumentCommand\choose@weight@lattice{}% {% \IfStrEqCase{\root@system}% {%% {A}{\global\let\weight=\A@weight}% {B}{\global\let\weight=\B@weight}% {C}{\global\let\weight=\C@weight}% {G}{\global\let\weight=\G@weight}% }%% [\check@root@system]% }% \NewDocumentCommand\check@weight@lattice{}% {% \IfInteger{\weight@lattice@size}% {}% {\ClassError{Rank 2 roots}{Error in weight lattice size \weight@lattice@size.}{}}% }% \NewDocumentCommand\roots{O{}}% {% \check@root@system% \check@weight@lattice% \IfStrEqCase{\root@system}% {%% {A}{\A@roots[#1]}% {B}{\B@roots[#1]}% {C}{\C@roots[#1]}% {G}{\G@roots[#1]}% }%% [\check@root@system]% }% \NewDocumentCommand\Weyl@chamber{O{}m}% {% \begin{scope}[on background layer] \IfStrEqCase{\root@system}% {%% {A}{\fill[/root system/Weyl chamber,#1] \weight{0}{#2} -- \weight{0}{0} -- \weight{#2}{0} --cycle;}% {B}{\fill[/root system/Weyl chamber,#1] (square cs:x=#2,y=#2) -- (square cs:x=0,y=0) --(square cs:x=#2,y=0) --cycle;}% {C}{\fill[/root system/Weyl chamber,#1] (square cs:x=#2,y=#2) -- (square cs:x=0,y=0) --(square cs:x=0,y=#2) --cycle;}% {G}{\fill[/root system/Weyl chamber,#1] (hex cs:x={(.5*#2)},y={(.5*#2)}) -- (hex cs:x=0,y=0) --(hex cs:x=#2,y=0) --cycle;}% }%% [\check@root@system]% \end{scope} }% \NewDocumentCommand\Weyl@chamber@to@root@polygon{O{}}% {% \begin{scope}[on background layer] \IfStrEqCase{\root@system}% {%% {A}{\fill[/root system/Weyl chamber,#1] (hex cs:x=0,y=1.5) -- (hex cs:x=0,y=0) -- (hex cs:x=1.5,y=0) -- (hex cs:x=1,y=1) -- cycle;}% {B}{\fill[/root system/Weyl chamber,#1] (square cs:x=1,y=1) -- (square cs:x=0,y=0) --(square cs:x=1,y=0) --cycle;}% {C}{\fill[/root system/Weyl chamber,#1] (square cs:x=1,y=1) -- (square cs:x=0,y=0) --(square cs:x=2,y=0) --cycle;}% {G}{\fill[/root system/Weyl chamber,#1] (hex cs:x=1,y=1) -- (hex cs:x=0,y=0) --(hex cs:x=1,y=0) --cycle;}% }%% [\check@root@system]% \end{scope} }% \NewDocumentCommand\WeylChamber{O{}}% {% \check@root@system% \ifAutoSizeWeightLattice \Weyl@chamber[#1]{\weight@lattice@size}% \else \IfStrEq{\weight@lattice@size}{0}% {%% \Weyl@chamber@to@root@polygon[#1]% }%% {%% \Weyl@chamber[#1]{\weight@lattice@size}% }%% \fi }% \NewDocumentCommand\A@weight{mm}% {% (hex cs:x=#1,y=#2)% }% % B weight coordinate system \define@key{Bkeys}{x}{\def\myx{#1}} \define@key{Bkeys}{y}{\def\myy{#1}} \tikzdeclarecoordinatesystem{B weight}% {% \setkeys{Bkeys}{#1}% \ifAutoSizeWeightLattice\auto@stretch@square{(\myy+.5*(\myx))}{(.5*(\myx))}\fi% \pgfmathparse{((\myy)+.5*(\myx))*\weightLength}% \pgf@x=\pgfmathresult pt% \pgfmathparse{.5*(\myx)*\weightLength}% \pgf@y=\pgfmathresult pt% } \NewDocumentCommand\B@weight{mm}% {% (B weight cs:x=#1,y=#2) }% % C weight coordinate system \define@key{Ckeys}{x}{\def\myx{#1}} \define@key{Ckeys}{y}{\def\myy{#1}} \tikzdeclarecoordinatesystem{C weight}% {% \setkeys{Ckeys}{#1}% \ifAutoSizeWeightLattice\auto@stretch@square{(\myx+\myy)}{(\myx)}\fi% \pgfmathparse{\myx*\weightLength}% \pgf@x=\pgfmathresult pt% \pgfmathparse{(\myx+\myy)*\weightLength}% \pgf@y=\pgfmathresult pt% } \NewDocumentCommand\C@weight{mm}% {% (C weight cs:x=#1,y=#2) }% \NewDocumentCommand\G@weight{mm}% {% (hex cs:x={(#1+#2)},y=#2) }% \NewDocumentCommand\draw@hex@grid@line{O{}mmmm}% {% \draw[/root system/weight lattice,#1] (hex cs:x=#2,y=#3) -- (hex cs:x=#4,y=#5);% }% \NewDocumentCommand\hexgrid{O{}m}% {% \begin{scope}[on background layer] \foreach \i [evaluate=\i as \nsubi using #2-\i] in {0,...,#2}% {% \draw@hex@grid@line[#1]{\nsubi}{\i}{-\i-\nsubi}{\i}% }% \foreach \i [evaluate=\i as \nsubi using #2-\i] in {1,...,#2}% {% \draw@hex@grid@line[#1]{\i+\nsubi}{-\i}{-\nsubi}{-\i}% }% \foreach \i [evaluate=\i as \nsubi using #2-\i] in {0,...,#2}% {% \draw@hex@grid@line[#1]{\nsubi}{\i}{\nsubi}{-#2}% }% \foreach \i [evaluate=\i as \nsubi using #2-\i] in {1,...,#2}% {% \draw@hex@grid@line[#1]{-\i}{#2}{-\i}{-\nsubi}% }% \foreach \i [evaluate=\i as \nsubi using #2-\i] in {0,...,#2}% {% \draw@hex@grid@line[#1]{#2}{-\i}{-\i}{#2}% }% \foreach \i [evaluate=\i as \nsubi using #2-\i] in {0,...,#2}% {% \draw@hex@grid@line[#1]{\i}{-#2}{-#2}{\i}% }% \end{scope} }% \NewDocumentCommand\hexclip{}% {% \clip (hex cs:x=\weight@lattice@size,y=0) -- (hex cs:x=0,y=\weight@lattice@size) -- (hex cs:x=-\weight@lattice@size,y=\weight@lattice@size) -- (hex cs:x=-\weight@lattice@size,y=0) -- (hex cs:x=0,y=-\weight@lattice@size) -- (hex cs:x=\weight@lattice@size,y=-\weight@lattice@size) -- cycle; }% \NewDocumentCommand\A@positive@root@hyperplane{O{}}% {% \begin{scope}[on background layer] \fill[/root system/hyperplane,#1] (hex cs:x=-1.5,y=1.5) --(hex cs:x=-1,y=2) --(hex cs:x=1,y=1) --(hex cs:x=2,y=-1) --(hex cs:x=1.5,y=-1.5) --cycle;% \end{scope} }% \NewDocumentCommand\B@positive@root@hyperplane{O{}}% {% \begin{scope}[on background layer]% \fill[/root system/hyperplane,#1] (square cs:x=-.5,y=1) -- (square cs:x=1,y=1) -- (square cs:x=1,y=-1) -- (square cs:x=.5,y=-1) -- cycle;% %(square cs:x=-1,y=.5) -- (square cs:x=-1,y=1) -- (square cs:x=1,y=1) -- (square cs:x=1,y=-.5) -- cycle;% \end{scope}% }% \NewDocumentCommand\C@positive@root@hyperplane{O{}}% {% \begin{scope}[on background layer]% \fill[/root system/hyperplane,#1] (square cs:x=-1.5,y=.5) -- (square cs:x=0,y=2) -- (square cs:x=2,y=0) -- (square cs:x=1.5,y=-.5) -- cycle;% \end{scope}% }% \NewDocumentCommand\G@positive@root@hyperplane{O{}}% {% \begin{scope}[on background layer]% \fill[/root system/hyperplane,#1] (hex cs:x=-1,y=1.5) -- (hex cs:x=-1,y=2) -- (hex cs:x=0,y=1) -- (hex cs:x=1,y=1) -- (hex cs:x=1,y=0) -- (hex cs:x=2,y=-1) -- (hex cs:x=1,y=-1) -- (hex cs:x=1,y=-1.5) -- cycle;% \end{scope}% }% \NewDocumentCommand\positiveRootHyperplane{O{}}% {% \IfStrEqCase{\root@system}% {%% {A}{\A@positive@root@hyperplane[#1]}% {B}{\B@positive@root@hyperplane[#1]}% {C}{\C@positive@root@hyperplane[#1]}% {G}{\G@positive@root@hyperplane[#1]}% }%% [\check@root@system]% }% \NewDocumentCommand\A@parabolic@one{O{}}% {% \begin{scope}[on background layer]% \fill[/root system/hyperplane,#1] (hex cs:x=-2,y=1) -- (hex cs:x=-1,y=2) -- (hex cs:x=1,y=1) -- (hex cs:x=2,y=-1) -- cycle;% \end{scope}% }% \NewDocumentCommand\A@parabolic@two{O{}}% {% \begin{scope}[on background layer]% \fill[/root system/hyperplane,#1] (hex cs:x=-1,y=2) -- (hex cs:x=1,y=1) -- (hex cs:x=2,y=-1) -- (hex cs:x=1,y=-2) -- cycle;% \end{scope}% }% \NewDocumentCommand\B@parabolic@one{O{}}% {% \begin{scope}[on background layer]% \fill[/root system/hyperplane,#1] (square cs:x=0,y=-1) --(square cs:x=1,y=-1) --(square cs:x=1,y=1) --(square cs:x=0,y=1) --cycle;% \end{scope}% }% \NewDocumentCommand\B@parabolic@two{O{}}% {% \begin{scope}[on background layer]% \fill[/root system/hyperplane,#1] (square cs:x=-1,y=1) --(square cs:x=1,y=-1) --(square cs:x=1,y=1) --cycle;% \end{scope}% }% \NewDocumentCommand\C@parabolic@one{O{}}% {% \begin{scope}[on background layer]% \fill[/root system/hyperplane,#1] (square cs:x=-2,y=0) -- (square cs:x=0,y=2) -- (square cs:x=2,y=0) -- cycle;% \end{scope}% }% \NewDocumentCommand\C@parabolic@two{O{}}% {% \begin{scope}[on background layer]% \fill[/root system/hyperplane,#1] (square cs:x=-1,y=1) -- (square cs:x=0,y=2) -- (square cs:x=2,y=0) -- (square cs:x=1,y=-1) -- cycle;% \end{scope}% }% \NewDocumentCommand\G@parabolic@one{O{}}% {% \begin{scope}[on background layer]% \fill[/root system/hyperplane,#1] (hex cs:x=-1,y=1) -- (hex cs:x=-1,y=2) -- (hex cs:x=0,y=1) -- (hex cs:x=1,y=1) -- (hex cs:x=1,y=0) -- (hex cs:x=2,y=-1) -- (hex cs:x=1,y=-1) -- cycle;% \end{scope}% }% \NewDocumentCommand\G@parabolic@two{O{}}% {% \begin{scope}[on background layer]% \fill[/root system/hyperplane,#1] (hex cs:x=-1,y=2) --(hex cs:x=0,y=1) --(hex cs:x=1,y=1) --(hex cs:x=1,y=0) --(hex cs:x=2,y=-1) --(hex cs:x=1,y=-1) --(hex cs:x=1,y=-2) --cycle;% \end{scope}% }% \NewDocumentCommand\parabolic{O{}m}% {% \xdef\parabolic@subalgebra{#2}% \IfStrEq{#2}{3}{\positiveRootHyperplane}% {% \IfStrEqCase{\root@system#2}% {%% {A1}{\A@parabolic@one[#1]}% {A2}{\A@parabolic@two[#1]}% {B1}{\B@parabolic@one[#1]}% {B2}{\B@parabolic@two[#1]}% {C1}{\C@parabolic@one[#1]}% {C2}{\C@parabolic@two[#1]}% {G1}{\G@parabolic@one[#1]}% {G2}{\G@parabolic@two[#1]}% }%% [\check@root@system% \ClassError{Rank 2 roots}{Parabolic subalgebra ``#2'' not recognized. Allowed values are 1,2,3.}{}]% }% }% \NewDocumentCommand\parabolicgrading{}% {% \IfStrEqCase{\root@system\parabolic@subalgebra}% {%% {A1}{\draw[/root system/grading] (hex cs:x=-1,y=2) -- (hex cs:x=1,y=1);}% {A2}{\draw[/root system/grading] (hex cs:x=1,y=1) -- (hex cs:x=2,y=-1);}% {A3}{\draw[/root system/grading] (hex cs:x=-1,y=2) -- (hex cs:x=2,y=-1);% \draw[/root system/grading] (hex cs:x=0,y=2) -- (hex cs:x=2,y=0);}% {B1}{\draw[/root system/grading] (square cs:x=1,y=-1) -- (square cs:x=1,y=1);}% {B2}{\draw[/root system/grading] (square cs:x=0,y=1) -- (square cs:x=1,y=0);% \draw[/root system/grading] (square cs:x=1,y=1) circle (\gradingDot);}% {B3}{\draw[/root system/grading] (square cs:x=1,y=-1) -- (square cs:x=0,y=1);% \draw[/root system/grading] (square cs:x=1,y=0) -- (square cs:x=.5,y=1);% \draw[/root system/grading] (square cs:x=1,y=1) circle (\gradingDot);}% {C1}{\draw[/root system/grading] (square cs:x=-2,y=1) -- (square cs:x=2,y=1);% \draw[/root system/grading] (square cs:x=-2,y=2) -- (square cs:x=2,y=2);}% {C2}{\draw[/root system/grading] (square cs:x=0,y=2) -- (square cs:x=2,y=0);}% {C3}{ \begin{scope} \clip (square cs:x=-2,y=2) -- (square cs:x=2,y=2) -- (square cs:x=2,y=-2) -- (square cs:x=-2,y=-2) -- cycle; \draw[/root system/grading] (square cs:x=0,y=2) -- (square cs:x=2,y=1.333333); \draw[/root system/grading] (square cs:x=-2,y=1.3333333) -- (square cs:x=2,y=0); \draw[/root system/grading] (square cs:x=-2,y=2) -- (square cs:x=2,y=.666666); \end{scope} }% {G1}{\draw[/root system/grading] (hex cs:x=-1,y=2) -- (hex cs:x=2,y=-1);% \draw[/root system/grading] (hex cs:x=0,y=2) -- (hex cs:x=2,y=0);}% {G2}{\begin{scope}[on background layer] \IfStrEq{\weight@lattice@size}{0}% {% \draw[/root system/grading] (square cs:x=1.5,y=\sqrt@three) -- (square cs:x=1.5,y=-\sqrt@three); \draw[/root system/grading] (hex cs:x=0,y=2) -- (hex cs:x=2,y=-2); \draw[/root system/grading] (hex cs:x=-.5,y=2) -- (hex cs:x=1.5,y=-2); }% {% \hexclip \draw[/root system/grading] (hex cs:x=1,y=1) -- (hex cs:x=2,y=-1); \draw[/root system/grading] (hex cs:x=0,y=2) -- (hex cs:x=2,y=-2); \draw[/root system/grading] (hex cs:x=-.5,y=2) -- (hex cs:x=1.5,y=-2); }% \end{scope}}% {G3}{\begin{scope}[on background layer] \IfStrEq{\weight@lattice@size}{0}{}{\hexclip}% \foreach \i in {1,...,5}% {% \draw[/root system/grading] (square cs:x={.333333333*(\i-1)},y=\sqrt@three) -- (square cs:x={.333333333*(\i+1)},y=-\sqrt@three); }% \end{scope}}% }%% }% \makeatother \endinput