texlive[46600] Master/texmf-dist: dynkin-diagrams (11feb18)

commits+karl at tug.org commits+karl at tug.org
Sun Feb 11 23:49:52 CET 2018


Revision: 46600
          http://tug.org/svn/texlive?view=revision&revision=46600
Author:   karl
Date:     2018-02-11 23:49:52 +0100 (Sun, 11 Feb 2018)
Log Message:
-----------
dynkin-diagrams (11feb18)

Modified Paths:
--------------
    trunk/Master/texmf-dist/doc/latex/dynkin-diagrams/README
    trunk/Master/texmf-dist/doc/latex/dynkin-diagrams/dynkin-diagrams.bib
    trunk/Master/texmf-dist/doc/latex/dynkin-diagrams/dynkin-diagrams.pdf
    trunk/Master/texmf-dist/doc/latex/dynkin-diagrams/dynkin-diagrams.tex
    trunk/Master/texmf-dist/tex/latex/dynkin-diagrams/dynkin-diagrams.sty

Modified: trunk/Master/texmf-dist/doc/latex/dynkin-diagrams/README
===================================================================
--- trunk/Master/texmf-dist/doc/latex/dynkin-diagrams/README	2018-02-11 22:49:41 UTC (rev 46599)
+++ trunk/Master/texmf-dist/doc/latex/dynkin-diagrams/README	2018-02-11 22:49:52 UTC (rev 46600)
@@ -2,9 +2,9 @@
 
             Dynkin diagrams
                
-                v2.0
+                v3.1
 
-            18 November 2017
+            11 February 2018
 ___________________________________
 
 Authors   : Ben McKay
@@ -15,5 +15,5 @@
 
 ----------------------------------------------------------------------
 
-Provides Dynkin diagrams drawn in TikZ.
-
+Draws Dynkin di­a­grams in LaTeX doc­u­ments, us­ing the TikZ pack­age.
+Version 3.1 improves the documentation to give code for all examples.
\ No newline at end of file

Modified: trunk/Master/texmf-dist/doc/latex/dynkin-diagrams/dynkin-diagrams.bib
===================================================================
--- trunk/Master/texmf-dist/doc/latex/dynkin-diagrams/dynkin-diagrams.bib	2018-02-11 22:49:41 UTC (rev 46599)
+++ trunk/Master/texmf-dist/doc/latex/dynkin-diagrams/dynkin-diagrams.bib	2018-02-11 22:49:52 UTC (rev 46600)
@@ -2,6 +2,25 @@
 % Encoding: ISO8859_1
 
 
+ at Article{Baba:2009,
+  Title                    = {Satake diagrams and restricted root systems of semisimple pseudo-{R}iemannian symmetric spaces},
+  Author                   = {Baba, Kurando},
+  Journal                  = {Tokyo J. Math.},
+  Year                     = {2009},
+  Number                   = {1},
+  Pages                    = {127--158},
+  Volume                   = {32},
+
+  Fjournal                 = {Tokyo Journal of Mathematics},
+  ISSN                     = {0387-3870},
+  Mrclass                  = {17B20 (17B22 53C35)},
+  Mrnumber                 = {2541161},
+  Mrreviewer               = {Oksana S. Yakimova},
+  Owner                    = {user},
+  Timestamp                = {2017.12.04},
+  Url                      = {https://doi.org/10.3836/tjm/1249648414}
+}
+
 @Book{Bourbaki:2002,
   Title                    = {Lie groups and {L}ie algebras. {C}hapters 4--6},
   Author                   = {Bourbaki, Nicolas},
@@ -37,20 +56,23 @@
   Url                      = {https://doi.org/10.1017/CBO9780511614910}
 }
 
- at Book{Dynkin:2000,
-  Title                    = {Selected papers of {E}. {B}. {D}ynkin with commentary},
-  Author                   = {Dynkin, E. B.},
-  Publisher                = {American Mathematical Society, Providence, RI; International Press, Cambridge, MA},
-  Year                     = {2000},
-  Note                     = {Edited by A. A. Yushkevich, G. M. Seitz and A. L. Onishchik},
+ at Article{Chuah:2013,
+  Title                    = {Cartan automorphisms and {V}ogan superdiagrams},
+  Author                   = {Chuah, Meng-Kiat},
+  Journal                  = {Math. Z.},
+  Year                     = {2013},
+  Number                   = {3-4},
+  Pages                    = {793--800},
+  Volume                   = {273},
 
-  ISBN                     = {0-8218-1065-0},
-  Mrclass                  = {01A75 (60Jxx)},
-  Mrnumber                 = {1757976},
-  Mrreviewer               = {William M. McGovern},
+  Fjournal                 = {Mathematische Zeitschrift},
+  ISSN                     = {0025-5874},
+  Mrclass                  = {17B20 (17B40)},
+  Mrnumber                 = {3030677},
+  Mrreviewer               = {Zi-Xin Hou},
   Owner                    = {user},
-  Pages                    = {xxviii+796},
-  Timestamp                = {2017.11.15}
+  Timestamp                = {2017.12.04},
+  Url                      = {https://doi.org/10.1007/s00209-012-1030-z}
 }
 
 @Article{Dynkin:1952,
@@ -69,6 +91,41 @@
   Timestamp                = {2017.11.15}
 }
 
+ at Book{Dynkin:2000,
+  Title                    = {Selected papers of {E}. {B}. {D}ynkin with commentary},
+  Author                   = {Dynkin, E. B.},
+  Publisher                = {American Mathematical Society, Providence, RI; International Press, Cambridge, MA},
+  Year                     = {2000},
+  Note                     = {Edited by A. A. Yushkevich, G. M. Seitz and A. L. Onishchik},
+
+  ISBN                     = {0-8218-1065-0},
+  Mrclass                  = {01A75 (60Jxx)},
+  Mrnumber                 = {1757976},
+  Mrreviewer               = {William M. McGovern},
+  Owner                    = {user},
+  Pages                    = {xxviii+796},
+  Timestamp                = {2017.11.15}
+}
+
+ at Article{Frappat/Sciarrino/Sorba:1989,
+  Title                    = {Structure of basic {L}ie superalgebras and of their affine extensions},
+  Author                   = {Frappat, L. and Sciarrino, A. and Sorba, P.},
+  Journal                  = {Comm. Math. Phys.},
+  Year                     = {1989},
+  Number                   = {3},
+  Pages                    = {457--500},
+  Volume                   = {121},
+
+  Fjournal                 = {Communications in Mathematical Physics},
+  ISSN                     = {0010-3616},
+  Mrclass                  = {17B70 (17A70 17B40)},
+  Mrnumber                 = {990776},
+  Mrreviewer               = {A. Pianzola},
+  Owner                    = {user},
+  Timestamp                = {2017.12.18},
+  Url                      = {http://0-projecteuclid.org.library.ucc.ie/euclid.cmp/1104178142}
+}
+
 @Book{Grove/Benson:1985,
   Title                    = {Finite reflection groups},
   Author                   = {Grove, L. C. and Benson, C. T.},
@@ -139,6 +196,25 @@
   Url                      = {https://doi.org/10.1017/CBO9780511626234}
 }
 
+ at Article{Khastgir/Sasaki:1996,
+  Title                    = {Non-canonical folding of {D}ynkin diagrams and reduction of affine {T}oda theories},
+  Author                   = {Khastgir, S. Pratik and Sasaki, Ryu},
+  Journal                  = {Progr. Theoret. Phys.},
+  Year                     = {1996},
+  Number                   = {3},
+  Pages                    = {503--518},
+  Volume                   = {95},
+
+  Fjournal                 = {Progress of Theoretical Physics},
+  ISSN                     = {0033-068X},
+  Mrclass                  = {81T10 (17B81 58F07 81R10)},
+  Mrnumber                 = {1388245},
+  Mrreviewer               = {Mehmet Koca},
+  Owner                    = {user},
+  Timestamp                = {2017.12.18},
+  Url                      = {https://doi.org/10.1143/PTP.95.503}
+}
+
 @Book{OnishchikVinberg:1990,
   Title                    = {Lie groups and algebraic groups},
   Author                   = {Onishchik, A. L. and Vinberg, {\`E}. B.},
@@ -176,6 +252,60 @@
   Url                      = {https://doi.org/10.1007/978-3-642-74334-4}
 }
 
+ at Article{Ransingh:2013,
+  Title                    = {Vogan diagrams of untwisted affine {K}ac-{M}oody superalgebras},
+  Author                   = {Ransingh, Biswajit},
+  Journal                  = {Asian-Eur. J. Math.},
+  Year                     = {2013},
+  Number                   = {4},
+  Pages                    = {1350062, 10},
+  Volume                   = {6},
+
+  Fjournal                 = {Asian-European Journal of Mathematics},
+  ISSN                     = {1793-5571},
+  Mrclass                  = {17B67 (17B05 17B22 17B40)},
+  Mrnumber                 = {3149279},
+  Mrreviewer               = {Xiangqian Guo},
+  Owner                    = {user},
+  Timestamp                = {2018.01.11}
+}
+
+ at Article{Ransingh:unpub,
+  Title                    = {{Vogan diagrams of affine twisted Lie superalgebras}},
+  Author                   = {Ransingh, B.},
+  Journal                  = {ArXiv e-prints},
+  Year                     = {2013},
+
+  Month                    = mar,
+
+  Adsnote                  = {Provided by the SAO/NASA Astrophysics Data System},
+  Adsurl                   = {http://adsabs.harvard.edu/abs/2013arXiv1303.0092R},
+  Archiveprefix            = {arXiv},
+  Eprint                   = {1303.0092},
+  Keywords                 = {Mathematical Physics, Mathematics - Representation Theory},
+  Owner                    = {user},
+  Primaryclass             = {math-ph},
+  Timestamp                = {2018.01.11}
+}
+
+ at Article{Regelskis/Vlaar:2016,
+  Title                    = {{Reflection matrices, coideal subalgebras and generalized Satake diagrams of affine type}},
+  Author                   = {{Regelskis}, V. and {Vlaar}, B.},
+  Journal                  = {ArXiv e-prints},
+  Year                     = {2016},
+
+  Month                    = feb,
+
+  Adsnote                  = {Provided by the SAO/NASA Astrophysics Data System},
+  Adsurl                   = {http://adsabs.harvard.edu/abs/2016arXiv160208471R},
+  Archiveprefix            = {arXiv},
+  Eprint                   = {1602.08471},
+  Keywords                 = {Mathematical Physics, Mathematics - Quantum Algebra, Mathematics - Representation Theory, Nonlinear Sciences - Exactly Solvable and Integrable Systems},
+  Owner                    = {user},
+  Primaryclass             = {math-ph},
+  Timestamp                = {2017.12.04}
+}
+
 @Book{Satake:1980,
   Title                    = {Algebraic structures of symmetric domains},
   Author                   = {Satake, Ichir\^o},
@@ -192,6 +322,23 @@
   Timestamp                = {2017.11.15}
 }
 
+ at InCollection{Zuber:1998,
+  Title                    = {Generalized {D}ynkin diagrams and root systems and their folding},
+  Author                   = {Zuber, Jean-Bernard},
+  Booktitle                = {Topological field theory, primitive forms and related topics ({K}yoto, 1996)},
+  Publisher                = {Birkh\"auser Boston, Boston, MA},
+  Year                     = {1998},
+  Pages                    = {453--493},
+  Series                   = {Progr. Math.},
+  Volume                   = {160},
+
+  Mrclass                  = {17B20 (05C25 20F55)},
+  Mrnumber                 = {1653035},
+  Mrreviewer               = {Saeid Azam},
+  Owner                    = {user},
+  Timestamp                = {2017.12.18}
+}
+
 @Book{Vinberg:1994,
   Title                    = {Lie groups and {L}ie algebras, {III}},
   Editor                   = {Vinberg, \`E. B.},

Modified: trunk/Master/texmf-dist/doc/latex/dynkin-diagrams/dynkin-diagrams.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/dynkin-diagrams/dynkin-diagrams.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/dynkin-diagrams/dynkin-diagrams.tex	2018-02-11 22:49:41 UTC (rev 46599)
+++ trunk/Master/texmf-dist/doc/latex/dynkin-diagrams/dynkin-diagrams.tex	2018-02-11 22:49:52 UTC (rev 46600)
@@ -1,689 +1,1304 @@
 \documentclass{amsart}
 
-\title{The Dynkin diagrams package}
+\title{The Dynkin diagrams package \\ Version 3.1}
 \author{Ben McKay}
-\date{\today}
+\date{11 February 2018}
  
+\usepackage{etex}
+\usepackage[T1]{fontenc}
+\usepackage[utf8]{inputenx}
+\usepackage{etoolbox} 
+\usepackage{lmodern}
+\usepackage[kerning=true,tracking=true]{microtype}
 \usepackage{amsmath}
 \usepackage{amsfonts}
 \usepackage{array}
 \usepackage{xstring}
-\usepackage{etoolbox} 
 \usepackage{longtable}
-\usepackage{showexpl} 
+\usepackage[listings]{tcolorbox} 
+\tcbuselibrary{breakable}
+\tcbuselibrary{skins}
+\usepackage[pdftex]{hyperref}
+\hypersetup{
+  colorlinks   = true,  %Colours links instead of ugly boxes
+  urlcolor     = black, %Colour for external hyperlinks
+  linkcolor    = black, %Colour of internal links
+  citecolor    = black  %Colour of citations
+}
 \usepackage{booktabs}
+\usepackage{colortbl}
+\usepackage{varwidth}
 \usepackage{dynkin-diagrams}
+\usepackage{fancyvrb}
+\usepackage{xspace}
+\newcommand{\TikZ}{Ti\textit{k}Z\xspace}
+\usepackage{filecontents}
 \usetikzlibrary{backgrounds}
 \usetikzlibrary{decorations.markings}
+\arrayrulecolor{white}
+\makeatletter
+    \def\rulecolor#1#{\CT at arc{#1}}
+    \def\CT at arc#1#2{%
+      \ifdim\baselineskip=\z@\noalign\fi
+      {\gdef\CT at arc@{\color#1{#2}}}}
+    \let\CT at arc@\relax
+\rulecolor{white}
+\makeatother
 
 \newcommand{\C}[1]{\mathbb{C}^{#1}}
 \renewcommand*{\arraystretch}{1.5}
-\renewcommand\ResultBox{\fcolorbox{gray!50}{gray!30}}
+\NewDocumentCommand\wdtA{}{.7cm}
+\NewDocumentCommand\wdtD{}{3cm}
+\NewDocumentCommand\wdtL{}{3cm}
+\newcolumntype{A}{@{}>{\columncolor[gray]{.9}$}m{\wdtA}<{$}} 
+\newcolumntype{D}{>{\columncolor[gray]{.9}}m{\wdtD}}
+\newcolumntype{L}{>{\columncolor[gray]{.9}}p{\wdtL}}
+\newcolumntype{P}{>{\columncolor[gray]{.9}}p{10cm}}
+\NewDocumentCommand\textleftcurly{}{\texttt{\char'173}}%
+\NewDocumentCommand\textrightcurly{}{\texttt{\char'175}}%
+\NewDocumentCommand\csDynkin{omom}%
+{%
+	\texttt{\detokenize{\dynkin}\!\!\!%
+	\IfNoValueTF{#1}{}{[#1]}%
+	\textleftcurly#2\textrightcurly%
+	\IfNoValueTF{#3}{}{[#3]}%
+	\textleftcurly#4\textrightcurly%
+	}%
+}%
 
+\NewDocumentCommand\dynk{omom}%
+{%
+	\dynkin[#1]{#2}[#3]{#4}&\csDynkin[#1]{#2}[#3]{#4}\\
+}%
 
+\NewDocumentCommand\typesetSubseries{m}%
+{%
+	\IfInteger{#1}{#1}{\IfStrEq{#1}{}{n}{#1}}
+}%
+
+\NewDocumentCommand\dyn{omom}%
+{%
+	{#2}_{\typesetSubseries{#4}}^{\IfInteger{#3}{#3}{}} & \dynk[#1]{#2}[#3]{#4}%
+}%
+
+\NewDocumentEnvironment{dynkinTable}{mmm}%
+{%
+\RenewDocumentCommand\wdtD{}{#2}
+\RenewDocumentCommand\wdtL{}{#3}
+\begin{longtable}{ADL}
+\caption{#1}\\
+\endfirsthead
+\caption{\dots continued}\\
+\endhead
+\multicolumn{2}{c}{continued \dots}\\
+\endfoot
+\endlastfoot
+}%
+{%
+\end{longtable}
+}%
+
+
+
+\definecolor{example-color}{gray}{1}
+\definecolor{example-border-color}{gray}{.7}
+
+\tcbset{coltitle=black,colback=example-color,colframe=example-border-color,enhanced,breakable,pad at break*=1mm,
+toprule=1.2mm,bottomrule=1.2mm,leftrule=1mm,rightrule=1mm,toprule at break=-1mm,bottomrule at break=-1mm,
+before upper={\widowpenalties=3 10000 10000 150}}
+
+\makeatletter
+\def\@tocline#1#2#3#4#5#6#7{\relax
+  \ifnum #1>\c at tocdepth%
+  \else
+    \par \addpenalty\@secpenalty\addvspace{#2}%
+    \begingroup \hyphenpenalty\@M
+    \@ifempty{#4}{%
+      \@tempdima\csname r at tocindent\number#1\endcsname\relax
+    }{%
+      \@tempdima#4\relax
+    }%
+    \parindent\z@ \leftskip#3\relax \advance\leftskip\@tempdima\relax
+    #5\leavevmode\hskip-\@tempdima #6\nobreak\relax
+    ,~#7\par
+    \endgroup
+  \fi}
+\makeatother
+
 \begin{document}
 
 \maketitle
+\begin{center}
+\begin{varwidth}{\textwidth}
 \tableofcontents
+\end{varwidth}
+\end{center}
 
 
+\setlength{\arrayrulewidth}{1.5pt}
+
+
+
 \section{Quick introduction}
-This is a test of the Dynkin diagram package.
-Load the package via
+
+
+\begin{tcolorbox}[title={Load the Dynkin diagram package (see options below)}]
 \begin{verbatim}
 \usepackage{dynkin-diagrams} 
 \end{verbatim}
-(see below for options) and invoke it directly:
+\end{tcolorbox}
+\begin{tcblisting}{title={Invoke it}}
+The Dynkin diagram of \(B_3\) is \dynkin{B}{3}.
+\end{tcblisting}
+\begin{tcblisting}{title={Inside a \TikZ statement}}
+\tikz \dynkin{B}{3};
+\end{tcblisting}
+\begin{tcblisting}{title={Inside a \TikZ environment}}
+\begin{tikzpicture}
+	\dynkin{B}{3}
+\end{tikzpicture}
+\end{tcblisting}
+\begin{tcblisting}{title={Indefinite rank Dynkin diagrams}}
+\dynkin{B}{}
+\end{tcblisting}
 
-\begin{LTXexample}
-The flag variety of pointed lines in 
-projective 3-space is associated to 
-the Dynkin diagram \dynkin[parabolic=3]{A}{3}.
-\end{LTXexample}
+\begin{dynkinTable}{The Dynkin diagrams of the reduced simple root systems \cite{Bourbaki:2002} pp. 265--290, plates I--IX}{2.25cm}{2.5cm}
+\dyn{A}{}
+\dyn{C}{}
+\dyn{D}{}
+\dyn{E}{6}
+\dyn{E}{7}
+\dyn{E}{8}
+\dyn{F}{4}
+\dyn{G}{2}
+\end{dynkinTable}
 
-or use the long form inside a \verb!\tikz! statement:
-\begin{LTXexample}
-\tikz \dynkin[parabolic=3]{A}{3};
-\end{LTXexample}
 
-or a TikZ environment:
-\begin{LTXexample}
+\section{Set options globally}
+
+\begin{tcolorbox}[title={Most options set globally \dots}]
+\begin{verbatim}
+\pgfkeys{/Dynkin diagram,edgeLength=.5cm,foldradius=.5cm}
+\end{verbatim}
+\end{tcolorbox}
+\begin{tcolorbox}[title={\dots or pass to the package}]
+\begin{verbatim}
+\usepackage[
+     ordering=Kac,
+     edge/.style=blue,
+     mark=o,
+     radius=.06cm]
+     {dynkin-diagrams}
+\end{verbatim}
+\end{tcolorbox}
+
+
+\section{Coxeter diagrams}
+
+\begin{tcblisting}{title={Coxeter diagram option}}
+\dynkin[Coxeter]{F}{4}
+\end{tcblisting}
+
+\begin{tcblisting}{title={gonality option for \(G_2\) and \(I_n\) Coxeter diagrams}}
+\(G_2=\dynkin[Coxeter,gonality=n]{G}{2}\), \ 
+\(I_n=\dynkin[Coxeter,gonality=n]{I}{}\)
+\end{tcblisting}
+
+\begin{dynkinTable}{The Coxeter diagrams of the simple reflection groups}{2.25cm}{6cm}
+\dyn[Coxeter]{A}{}
+\dyn[Coxeter]{B}{}
+\dyn[Coxeter]{C}{}
+\dyn[Coxeter]{E}{6}
+\dyn[Coxeter]{E}{7}
+\dyn[Coxeter]{E}{8}
+\dyn[Coxeter]{F}{4}
+\dyn[Coxeter,gonality=n]{G}{2}
+\dyn[Coxeter]{H}{3}
+\dyn[Coxeter]{H}{4}
+\dyn[Coxeter,gonality=n]{I}{}
+\end{dynkinTable}
+
+\section{Satake diagrams}\label{section:Satake}
+
+\begin{tcblisting}{title={Satake diagrams use the standard name instead of a rank}}
+\(A_{IIIb}=\dynkin{A}{IIIb}\)
+\end{tcblisting}
+
+We use a solid gray bar to denote the folding of a Dynkin diagram, rather than the usual double arrow, since the diagrams turn out simpler and easier to read.
+
+\begin{dynkinTable}{The Satake diagrams of the real simple Lie algebras \cite{Helgason:2001} p. 532--534}{2.75cm}{3cm}
+\dyn{A}{I}
+\dyn{A}{II}
+\dyn{A}{IIIa}
+\dyn{A}{IIIb}
+\dyn{A}{IV}
+\dyn{B}{I}
+\dyn{B}{II}
+\dyn{C}{I}
+\dyn{C}{IIa}
+\dyn{C}{IIb}
+\dyn{D}{Ia}
+\dyn{D}{Ib}
+\dyn{D}{Ic}
+\dyn{D}{II}
+\dyn{D}{IIIa}
+\dyn{D}{IIIb}
+\dyn{E}{I}
+\dyn{E}{II}
+\dyn{E}{III}
+\dyn{E}{IV}
+\dyn{E}{V}
+\dyn{E}{VI}
+\dyn{E}{VII}
+\dyn{E}{VIII}
+\dyn{E}{IX}
+\dyn{F}{I}
+\dyn{F}{II}
+\dyn{G}{I}
+\end{dynkinTable}
+
+\section{Labels for the roots}
+
+\begin{tcblisting}{title={Label the roots by root number}}
+\dynkin[label]{B}{3}
+\end{tcblisting}
+\begin{tcblisting}{title={Make a macro to assign labels to roots}}
+\dynkin[label,labelMacro/.code={\alpha_{#1}}]{D}{5}
+\end{tcblisting}
+\begin{tcblisting}{title={Label a single root}}
 \begin{tikzpicture}
-\dynkin[parabolic=3,label]{A}{3}
+	\dynkin{B}{3}
+	\dynkinLabelRoot{2}{\alpha_2}
 \end{tikzpicture}
-\end{LTXexample}
-With labels for the roots:
-\begin{LTXexample}
-\dynkin[parabolic=3,label]{A}{3}
-\end{LTXexample}
-\newpage\noindent%
-Make up your own labels for the roots:
-\begin{LTXexample}
+\end{tcblisting}
+\begin{tcblisting}{title={Use a text style}}
 \begin{tikzpicture}
-\dynkin[parabolic=3]{A}{3}
-\rootlabel{2}{\alpha_2}
+	\dynkin[text/.style={scale=1.2}]{B}{3};
+	\dynkinLabelRoot{2}{\alpha_2}
 \end{tikzpicture}
-\end{LTXexample}
-Use any text scale you like:
-\begin{LTXexample}
+\end{tcblisting}
+\begin{tcblisting}{title={Access root labels via TikZ}}
 \begin{tikzpicture}
-\dynkin[parabolic=3,textscale=1.2]{A}{3};
-\rootlabel{2}{\alpha_2}
+	\dynkin{B}{3};
+	\node[below] at (root 2) {\(\alpha_2\)};
 \end{tikzpicture}
-\end{LTXexample}
-and access root labels via TikZ:
-\begin{LTXexample}
+\end{tcblisting}
+\begin{tcblisting}{title={The labels have default locations}}
 \begin{tikzpicture}
-\dynkin[parabolic=3]{A}{3};
-\node at (root label 2) {\(\alpha_2\)};
+	\dynkin{E}{8};
+	\dynkinLabelRoot{1}{\alpha_1}
+	\dynkinLabelRoot{2}{\alpha_2}
+	\dynkinLabelRoot{3}{\alpha_3}
 \end{tikzpicture}
-\end{LTXexample}
-The labels have default locations:
-\begin{LTXexample}
+\end{tcblisting}
+\begin{tcblisting}{title={The starred form flips labels to alternate locations}}
 \begin{tikzpicture}
-\dynkin{E}{8};
-\rootlabel{1}{\alpha_1}
-\rootlabel{2}{\alpha_2}
-\rootlabel{3}{\alpha_3}
+	\dynkin{E}{8};
+	\dynkinLabelRoot*{1}{\alpha_1}
+	\dynkinLabelRoot*{2}{\alpha_2}
+	\dynkinLabelRoot*{3}{\alpha_3}
 \end{tikzpicture}
-\end{LTXexample}
-You can use a starred form to flip labels to alternate locations:
-\begin{LTXexample}
-\begin{tikzpicture}
-\dynkin{E}{8};
-\rootlabel*{1}{\alpha_1}
-\rootlabel*{2}{\alpha_2}
-\rootlabel*{3}{\alpha_3}
-\end{tikzpicture}
-\end{LTXexample}
-TikZ can access the roots themselves:
-\typeout{AAAAAAA}
-\begin{LTXexample}
-\begin{tikzpicture}
-\dynkin{A}{4};
-\fill[white,draw=black] (root 2) circle (.1cm);
-\draw[black] (root 2) circle (.05cm);
-\end{tikzpicture}
-\end{LTXexample}
-Some diagrams will have double edges:
-\begin{LTXexample}
+\end{tcblisting}
+
+\section{Style}
+
+\begin{tcblisting}{title={Colours}}
+\dynkin[edge/.style={blue!50,thick},*/.style=blue!50!red]{F}{4}
+\end{tcblisting}
+\begin{tcblisting}{title={Edge lengths}}
+\dynkin[edgeLength=1.2,parabolic=3]{A}{3}
+\end{tcblisting}
+\begin{tcblisting}{title={Root marks}}
+\dynkin{E}{8}
+\dynkin[mark=*]{E}{8}
+\dynkin[mark=o]{E}{8}
+\dynkin[mark=O]{E}{8}
+\dynkin[mark=t]{E}{8}
+\dynkin[mark=x]{E}{8}
+\dynkin[mark=X]{E}{8}
+\end{tcblisting}
+At the moment, you can only use:
+\par\noindent\begin{tabular}{>{\ttfamily}cl}
+* & solid dot \\
+o & hollow circle \\
+O & double hollow circle \\
+t & tensor root \\
+x & crossed root \\ 
+X & thickly crossed root 
+\end{tabular}
+\begin{tcblisting}{title={Mark styles}}
+\dynkin[parabolic=124,x/.style={brown,very thick}]{E}{8}
+\end{tcblisting}
+\begin{tcblisting}{title={Sizes of root marks}}
+\dynkin[radius=.08cm,parabolic=3]{A}{3}
+\end{tcblisting}
+
+
+\section{Suppress or reverse arrows}
+
+\begin{tcblisting}{title={Some diagrams have double or triple edges}}
 \dynkin{F}{4}
-\end{LTXexample}
-or triple edges:
-\begin{LTXexample}
 \dynkin{G}{2}
-\end{LTXexample}
-\newpage\noindent%
-Draw curves between the roots:
-\begin{LTXexample}
+\end{tcblisting}
+\begin{tcblisting}{title={Suppress arrows}}
+\dynkin[arrows=false]{F}{4}
+\dynkin[arrows=false]{G}{2}
+\end{tcblisting}
+\begin{tcblisting}{title={Reverse arrows}}
+\dynkin[reverseArrows]{F}{4}
+\dynkin[reverseArrows]{G}{2}
+\end{tcblisting}
+
+
+\section{Drawing on top of a Dynkin diagram}
+
+\begin{tcblisting}{title={TikZ can access the roots themselves}}
 \begin{tikzpicture}
-\dynkin[parabolic=429]{E}{8}
-\draw[very thick, black!50,-latex]  (root 3.south) to [out=-45, in=-135] (root 6.south); 
+	\dynkin{A}{4};
+	\fill[white,draw=black] (root 2) circle (.15cm);
+	\fill[white,draw=black] (root 2) circle (.1cm);
+	\draw[black] (root 2) circle (.05cm);
 \end{tikzpicture}
-\end{LTXexample}
-Draw dots on the roots:
-\begin{LTXexample}
+\end{tcblisting}
+\begin{tcblisting}{title={Draw curves between the roots}}
 \begin{tikzpicture}
-\dynkin[label]{C}{8}
-\dynkinopendot{3}
-\dynkinopendot{7}
+	\dynkin[label]{E}{8}
+	\draw[very thick, black!50,-latex]  
+		(root 3.south) to [out=-45, in=-135] (root 6.south); 
 \end{tikzpicture}
-\end{LTXexample}
-Colours:
-\begin{LTXexample}
-\dynkin[color=blue!50,backgroundcolor=red!20]{G}{2}
-\end{LTXexample}
-Edge lengths:
-\begin{LTXexample}
-\dynkin[edgelength=1.2,parabolic=3]{A}{3}
-\end{LTXexample}
-Sizes of dots and crosses:
-\begin{LTXexample}
-\dynkin[dotradius=.08cm,parabolic=3]{A}{3}
-\end{LTXexample}
-Edge styles:
-\begin{LTXexample}
-\dynkin[edge=very thick,parabolic=3]{A}{3}
-\end{LTXexample}
-Open circles instead of closed dots:
-\begin{LTXexample}
-\dynkin[open]{E}{8}
-\end{LTXexample}
-Add closed dots to the open circles, at roots in the current ordering:
-\begin{LTXexample}
+\end{tcblisting}
+\begin{tcblisting}{title={Change marks}}
 \begin{tikzpicture}
-\dynkin[open]{E}{8};
-\dynkincloseddot{5}
-\dynkincloseddot{8}
+	\dynkin[mark=o,label]{E}{8};
+	\dynkinRootMark{*}{5}
+	\dynkinRootMark{*}{8}
 \end{tikzpicture}
-\end{LTXexample}
-More colouring:
-\begin{LTXexample}
-\begin{tikzpicture}[show background rectangle, 
-    background rectangle/.style={fill=red!10}]
-\dynkin[parabolic=1,backgroundcolor=blue!20]{G}{2}
-\end{tikzpicture}
-\end{LTXexample}
-Cross styles:
-\begin{LTXexample}
-\dynkin[parabolic=124,cross=thin]{E}{8}
-\end{LTXexample}
-\newpage\noindent{}
-Suppress arrows:
-\begin{LTXexample}
-\dynkin[arrows=false]{F}{4}
-\end{LTXexample}
-\begin{LTXexample}
-\dynkin[arrows=false]{G}{2}
-\end{LTXexample}
+\end{tcblisting}
 
-\section{Syntax}
 
-The syntax is \verb!\dynkin[<options>]{<letter>}{<rank>}! where \verb!<letter>! is \(A,B,C,D,E,F\) or \(G\), the family of root system for the Dynkin diagram, and \verb!<rank>! is an integer representing the rank, or is the symbol \verb!*! to represent an indefinite rank:
-\begin{LTXexample}
-\dynkin[edge=thick,edgelength=.5cm]{A}{*}
-\end{LTXexample}
-\begin{LTXexample}
-\dynkin[edge=thick,edgelength=.5cm]{B}{*}
-\end{LTXexample}
-\begin{LTXexample}
-\dynkin[edge=thick,edgelength=.5cm]{C}{*}
-\end{LTXexample}
-\begin{LTXexample}
-\dynkin[edge=thick,edgelength=.5cm]{D}{*}
-\end{LTXexample}
-Outside a TikZ environment, the command builds its own TikZ environment.
+\section{Mark lists}
 
+The package allows a list of root marks instead of a rank:
 
-\newcommand*{\typ}[1]{\(\left<\texttt{#1}\right>\)}
-\newcommand*{\optionLabel}[3]{%%
-\multicolumn{2}{l}{\(\texttt{#1}=\texttt{#2}, \texttt{default}=\texttt{#3}\)} \\
-}%%
+\begin{tcblisting}{title={A mark list}}
+\dynkin{E}{oo**ttxx}
+\end{tcblisting}
+The mark list \verb!oo**ttxx! has one mark for each root: \verb!o!, \verb!o!, \dots, \verb!x!.
+Roots are listed in the current default ordering.
+(Careful: in an affine root system, a mark list will \emph{not} contain a mark for root zero.)
 
-\section{Options}
-\par\noindent{}All \verb!\dynkin! options (except \texttt{affine}, \texttt{folded}, \texttt{label} and \texttt{parabolic} ) can also be passed to the package to force a global default option: 
-\par\noindent%
-\begin{verbatim}
-\usepackage[
-     ordering=Kac,
-     color=blue,
-     open,
-     dotradius=.06cm,
-     backgroundcolor=red]
-     {dynkin-diagrams}
-\end{verbatim}
-\par\noindent%
-\begin{tabular}{p{1cm}p{10cm}}
-\optionLabel{parabolic}{\typ{integer}}{0} 
-& A parabolic subgroup with specified integer, where the integer
-is computed as \(n=\sum 2^i a_i\), \(a_i=0\) or \(1\), to say that root \(i\) is crossed, i.e. a noncompact root. \\
-\optionLabel{color}{\typ{color name}}{black} \\
-\optionLabel{backgroundcolor}{\typ{color name}}{white}
-& This only says what color you have already set for the background rectangle. It is needed precisely for the \(G_2\) root system, to draw the triple line correctly, and only when your background color is not white. \\
-\optionLabel{dotradius}{\typ{number}cm}{.05cm}
-&      size of the dots and of the crosses in the Dynkin diagram \\
-\optionLabel{edgelength}{\typ{number}cm}{.35cm}
-&      distance between nodes in the Dynkin diagram \\
-\optionLabel{edge}{\typ{TikZ style data}}{thin}
-&      style of edges in the Dynkin diagram \\
-\optionLabel{open}{\typ{true or false}}{false}
-&      use open circles rather than solid dots as default \\
-\optionLabel{label}{true or false}{false}
-& whether to label the roots by their root numbers. \\
-\optionLabel{arrows}{\typ{true or false}}{true}
-& whether to draw the arrows that arise along the edges. \\
-\optionLabel{folded}{\typ{true or false}}{true}
-& whether, when drawing \(A\), \(D\) or \(E_6\) diagrams, to draw them folded. \\
-\optionLabel{foldarrowstyle}{\typ{TikZ style}}{stealth-stealth}
-& when drawing folded diagrams, style for the fold arrows. \\
-\optionLabel{foldarrowcolor}{\typ{colour}}{black!50}
-& when drawing folded diagrams, colour for the fold arrows. \\
-\optionLabel{Coxeter}{\typ{true or false}}{false}
-& whether to draw a Coxeter diagram, rather than a Dynkin diagram. \\
+\NewDocumentCommand\ClassicalLieSuperalgebras{m}%
+{%
+\begin{dynkinTable}{Classical Lie superalgebras \cite{Frappat/Sciarrino/Sorba:1989}. #1}{3.5cm}{6.5cm}
+A_{mn} & \dynk{A}{ooo.oto.oo}
+B_{mn} & \dynk{B}{ooo.oto.oo}
+B_{0n} & \dynk{B}{ooo.ooo.o*}
+C_{n}  & \dynk{C}{too.oto.oo}
+D_{mn} & \dynk{D}{ooo.oto.oooo}
+D_{21\alpha} & \dynk{A}{oto}
+F_4 & \dynk{F}{ooot}
+G_3 & \dynk[extended,affineMark=t]{G}{2} 
+\end{dynkinTable}
+}%
 
-\optionLabel{ordering}{\typ{Adams, Bourbaki, Carter, Dynkin, Kac}}{Bourbaki}
-& which ordering of the roots to use in exceptional root systems as follows:
-\end{tabular}
+\begingroup
+\tikzset{/Dynkin diagram,radius=.07cm}
+\ClassicalLieSuperalgebras{We need a slightly larger radius parameter to distinguish the tensor product symbols from the solid dots.}
+\endgroup
 
-\newpage
+\ClassicalLieSuperalgebras{Here we see the problem with using the default radius parameter, which is too small for tensor product symbols.}
 
-\NewDocumentCommand\tablerow{mm}%
-{%
-\(#1_{#2}\)
-&
-\dynkin[label,ordering=Adams]{#1}{#2}
-&
-\dynkin[label]{#1}{#2}
-&
-\dynkin[label,ordering=Carter]{#1}{#2}
-&
-\dynkin[label,ordering=Dynkin]{#1}{#2}
-&
-\dynkin[label,ordering=Kac]{#1}{#2}
-\\
-}%
 
-\begin{center}
-\begin{longtable}{@{}llllll@{}}
-\toprule
-& Adams & Bourbaki & Carter & Dynkin & Kac \\ \midrule
-\endfirsthead
-\toprule
-Adams & Bourbaki & Carter & Dynkin & Kac \\ \midrule
-\endhead
-\bottomrule
-\endfoot
-\bottomrule
-\endlastfoot
-\tablerow{E}{6}
-\tablerow{E}{7}
-\tablerow{E}{8}
-\tablerow{F}{4}
-\tablerow{G}{2}
-\end{longtable}
-\end{center}
+\section{Indefinite edges}
 
+An \emph{indefinite edge} is a dashed edge between two roots, \dynkin{A}{*.*} indicating that an indefinite number of roots have been omitted from the Dynkin diagram.
+In between any two entries in a mark list, place a period to indicate an indefinite edge:
+\begin{tcblisting}{title={Indefinite edges}}
+\dynkin{D}{o.o*.*.t.to.t}
+\end{tcblisting}
 
-\par\noindent{}All other options are passed to TikZ.
+In certain diagrams, roots may have an edge between them even though they are not subsequent in the ordering.
+For such rare situations, there is an option:
+\begin{tcblisting}{title={Indefinite edge option}}
+\dynkin[makeIndefiniteEdge={3-5},label]{D}{5}
+\end{tcblisting}
+\begin{tcblisting}{title={Give a list of edges to become indefinite}}
+\dynkin[makeIndefiniteEdge/.list={1-2,3-5},label]{D}{5}
+\end{tcblisting}
 
-\section{Finding the roots}
-The roots are labelled from \(1\) to \(r\), where \(r\) is the rank.
-The command sets up TikZ nodes \texttt{(root 1)}, \texttt{(root 2)}, and so on. 
-Affine extended Dynkin diagrams have affine root are at \texttt{(root 0)}.
-Use these tikz nodes to draw on the Dynkin diagram, as above.
-It also sets up TikZ nodes \texttt{(root label 0)}, \texttt{(root label 1)}, and so on for the labels, and TikZ nodes \texttt{(root label swap 0)}, \texttt{(root label swap 1)}, and so on as alternative label locations, in case you want two labels on the same root, or the default choice doesn't look the way you like.
-\begin{LTXexample}
-\begin{tikzpicture}
-\dynkin{E}{6};
-\rootlabel{2}{\alpha_2}
-\rootlabel{5}{\alpha_5}
-\end{tikzpicture}
-\end{LTXexample}
+\begin{tcblisting}{title={Indefinite edge style}}
+\dynkin[indefiniteEdge/.style={draw=black,fill=white,thin,densely dashed},%
+	edgeLength=1cm,%
+	makeIndefiniteEdge={3-5}]
+	{D}{5}
+\end{tcblisting}
 
-\section{Example: some parabolic subgroups}
+\begin{tcblisting}{title={The ratio of the lengths of indefinite edges to those of other edges}}
+\dynkin[edgeLength = .5cm,%
+	indefiniteEdgeRatio=3,%
+	makeIndefiniteEdge={3-5}]
+	{D}{5}
+\end{tcblisting}
 
-\newcommand{\drawparabolic}[3]{#1_{#2,#3} & \tikz \dynkin[parabolic=#3]{#1}{#2}; \\}
 
-\begin{center}
-\begin{longtable}{@{}>{$}r<{$}m{2cm}m{2cm}@{}}
+\section{Parabolic subgroups}
+
+Each set of roots is assigned a number, with each binary digit zero or one to say whether the corresponding root is crossed or not:
+\begin{tcblisting}{}
+The flag variety of pointed lines in 
+projective 3-space is associated to 
+the Dynkin diagram \dynkin[parabolic=3]{A}{3}.
+\end{tcblisting}
+
+\NewDocumentCommand\HSS{mommm}%
+{%
+	\begingroup
+	\renewcommand*{\arraystretch}{1.2}
+	\begin{tabular}{@{}>{$}r<{$}@{}m{6cm}@{}}
+	\\
+	\IfNoValueTF{#2}%
+	{%
+		#1 & \dynkin{#3}{#4} \\
+		   & \csDynkin{#3}{#4} \\
+	}%
+	{%
+		#1 & \dynkin[#2]{#3}{#4} \\
+		   & \csDynkin[#2]{#3}{#4} \\
+	}%
+	& #5%
+	\\[.75em]
+	\end{tabular}
+	\endgroup
+	\\ 
+}%
+
+\renewcommand*{\arraystretch}{1}
+\begin{longtable}{>{\columncolor[gray]{.9}}p{7cm}}
+\caption{The Hermitian symmetric spaces}
 \endfirsthead
+\caption{\dots continued}\\
 \endhead
+\caption{continued \dots}\\
 \endfoot
 \endlastfoot
-\drawparabolic{A}{1}{0}
-\drawparabolic{A}{1}{2}
-\drawparabolic{A}{2}{0}
-\drawparabolic{A}{2}{2}
-\drawparabolic{A}{2}{4}
-\drawparabolic{A}{2}{6}
-\drawparabolic{B}{2}{6}
-\drawparabolic{C}{3}{10}
-\drawparabolic{D}{5}{8}
-\drawparabolic{E}{6}{10}
-\drawparabolic{E}{7}{202}
-\drawparabolic{E}{8}{246}
-\drawparabolic{F}{4}{26}
-\drawparabolic{G}{2}{0}
-\drawparabolic{G}{2}{2}
-\drawparabolic{G}{2}{4}
-\drawparabolic{G}{2}{6}
+\HSS{A_n}{A}{**.*x*.**}{Grassmannian of $k$-planes in $\C{n+1}$}
+\HSS{B_n}[parabolic=1]{B}{}{$(2n-1)$-dimensional hyperquadric, i.e. the variety of null lines in $\C{2n+1}$}
+\HSS{C_n}[parabolic=16]{C}{}{space of Lagrangian $n$-planes in $\C{2n}$}
+\HSS{D_n}[parabolic=1]{D}{}{$(2n-2)$-dimensional hyperquadric, i.e. the variety of null lines in $\C{2n}$}
+\HSS{D_n}[parabolic=32]{D}{}{one component of the variety of maximal dimension null subspaces of $\C{2n}$}
+\HSS{D_n}[parabolic=16]{D}{}{the other component}
+\HSS{E_6}[parabolic=1]{E}{6}{complexified octave projective plane}
+\HSS{E_6}[parabolic=32]{E}{6}{its dual plane}
+\HSS{E_7}[parabolic=64]{E}{7}{the space of null octave 3-planes in octave 6-space}
 \end{longtable}
-\end{center}
 
 
 
-\section{Example: the Hermitian symmetric spaces}
 
- \renewcommand*{\arraystretch}{1.5}
-\begin{center}
-\begin{longtable}{@{}>{$}r<{$}m{2.2cm}m{5cm}@{}}
-\endfirsthead
-\endhead
-\endfoot
-\endlastfoot
-  A_n &
-  \dynkin[parabolic=16]{A}{*} & 
-  Grassmannian of $k$-planes in $\C{n+1}$ 
-  \\
-  B_n &
-  \dynkin[parabolic=2]{B}{*} & 
-  $(2n-1)$-dimensional hyperquadric, i.e. the variety of null lines in $\C{2n+1}$
-  \\
-  C_n &
-  \dynkin[parabolic=32]{C}{*} & 
-  space of Lagrangian $n$-planes in $\C{2n}$
-  \\
-  D_n &
-  \dynkin[parabolic=2]{D}{*} & 
-  $(2n-2)$-dimensional hyperquadric, i.e. the variety of null lines in $\C{2n}$
-  \\
-  D_n &
-  \dynkin[parabolic=64]{D}{*} & 
-  one component of the variety of maximal dimension null subspaces of $\C{2n}$ \\
-  D_n &
-  \dynkin[parabolic=32]{D}{*} & 
-  the other component\\
-  E_6 &
-  \dynkin[parabolic=2]{E}{6} &
-  complexified octave projective plane\\
-  E_6 & 
-  \dynkin[parabolic=64]{E}{6}&its dual plane\\ 
-  E_7 &
-  \dynkin[parabolic=128]{E}{7}& the space of null octave 3-planes in octave 6-space
-\end{longtable}
-\end{center}
+\section{Extended Dynkin diagrams}
 
+\begin{tcblisting}{title={Extended Dynkin diagrams}}
+\dynkin[extended]{A}{7}
+\end{tcblisting}
 
-\section{Affine extended Dynkin diagrams}
 
-\begin{LTXexample}
-\dynkin[affine,edge=thick]{A}{*}
-\end{LTXexample}
+The extended Dynkin diagrams are also described in the notation of Kac \cite{Kac:1990} p. 55 as affine untwisted Dynkin diagrams: we extend \verb!\dynkin{A}{7}! to become \verb!\dynkin{A}[1]{7}!:
+\begin{tcblisting}{title={Extended Dynkin diagrams}}
+\dynkin{A}[1]{7}
+\end{tcblisting}
 
-\begin{LTXexample}
-\dynkin[edgelength=1cm,edge=thick,affine]{A}{*}
-\end{LTXexample}
 
-\begin{LTXexample}
-\dynkin[scale=1.5,edge=thick,affine]{A}{*}
-\end{LTXexample}
+\renewcommand*{\arraystretch}{1.5}
+\begin{dynkinTable}{The Dynkin diagrams of the extended simple root systems}{3cm}{5cm}
+\dyn[extended]{A}{1}
+\dyn[extended]{A}{}
+\dyn[extended]{B}{}
+\dyn[extended]{C}{}
+\dyn[extended]{D}{}
+\dyn[extended]{E}{6}
+\dyn[extended]{E}{7}
+\dyn[extended]{E}{8}
+\dyn[extended]{F}{4}
+\dyn[extended]{G}{2}
+\end{dynkinTable}
 
 
-\begin{LTXexample}
-\begin{tikzpicture}
-\dynkin[affine,label]{A}{8};
-\end{tikzpicture}
-\end{LTXexample}
+\section{Affine twisted and untwisted Dynkin diagrams}
 
+The affine Dynkin diagrams are described in the notation of Kac \cite{Kac:1990} p. 55:
+\begin{tcblisting}{title={Affine Dynkin diagrams}}
+\(A^{(1)}_7=\dynkin{A}[1]{7}, \ 
+E^{(2)}_6=\dynkin{E}[2]{6}, \ 
+D^{(3)}_4=\dynkin{D}[3]{4}\)
+\end{tcblisting}
 
-\begin{LTXexample}
-\begin{tikzpicture}
-\dynkin[affine]{A}{*};
-\node at (root label 0) {\(\alpha_0\)};
-\end{tikzpicture}
-\end{LTXexample}
 
-\begin{LTXexample}
-\begin{tikzpicture}
-\dynkin[affine]{A}{9}
-\node at (root label 0) {\(\alpha_0\)};
-\end{tikzpicture}
-\end{LTXexample}
 
-You can use TikZ to put in labels:
+\begin{dynkinTable}{The affine Dynkin diagrams}{3cm}{3.75cm}
+\dyn{A}[1]{1}
+\dyn{A}[1]{}
+\dyn{B}[1]{}
+\dyn{C}[1]{}
+\dyn{D}[1]{}
+\dyn{E}[1]{6}
+\dyn{E}[1]{7}
+\dyn{E}[1]{8}
+\dyn{F}[1]{4}
+\dyn{G}[1]{2}
+\dyn{A}[2]{2}
+\dyn{A}[2]{even}
+\dyn{A}[2]{odd}
+\dyn{D}[2]{}
+\dyn{E}[2]{6}
+\dyn{D}[3]{4}
+\end{dynkinTable}
 
-\begin{LTXexample}
-\begin{tikzpicture}
-\dynkin[affine]{A}{9};
-\node at (root label 0) {\(\alpha_0\)};
-\node at (root label 1) {\(\alpha_1\)};
-\node at (root label 2) {\(\alpha_2\)};
-\node at (root label 3) {\(\alpha_3\)};
-\end{tikzpicture}
-\end{LTXexample}
+\begin{dynkinTable}{Some more affine Dynkin diagrams}{3cm}{3.25cm}
+\dyn{A}[2]{4}
+\dyn{A}[2]{5}
+\dyn{A}[2]{6}
+\dyn{A}[2]{7}
+\dyn{A}[2]{8}
+\dyn{D}[2]{3}
+\dyn{D}[2]{4}
+\dyn{D}[2]{5}
+\dyn{D}[2]{6}
+\dyn{D}[2]{7}
+\dyn{D}[2]{8}
+\dyn{D}[3]{4}
+\dyn{E}[2]{6}
+\end{dynkinTable}
 
-\begin{LTXexample}
-\dynkin[affine,label]{A}{1}
-\end{LTXexample}
 
-\begin{LTXexample}
-\dynkin[affine,label]{B}{8}
-\end{LTXexample}
 
-\begin{LTXexample}
-\dynkin[affine,label]{B}{*}
-\end{LTXexample}
 
-\begin{LTXexample}
-\dynkin[affine,label]{C}{8}
-\end{LTXexample}
+\section{Extended Coxeter diagrams}
 
-\begin{LTXexample}
-\dynkin[affine,label]{C}{*}
-\end{LTXexample} 
+\begin{tcblisting}{title={Extended and Coxeter options together}}
+\dynkin[extended,Coxeter]{F}{4}
+\end{tcblisting}
 
-\begin{LTXexample}
-\dynkin[affine,label]{D}{8}
-\end{LTXexample}
 
-\begin{LTXexample}
-\dynkin[affine,label]{D}{*}
-\end{LTXexample}
+\begin{dynkinTable}{The extended (affine) Coxeter diagrams}{3cm}{6cm}
+\dyn[extended,Coxeter]{A}{}
+\dyn[extended,Coxeter]{B}{}
+\dyn[extended,Coxeter]{C}{}
+\dyn[extended,Coxeter]{D}{}
+\dyn[extended,Coxeter]{E}{6}
+\dyn[extended,Coxeter]{E}{7}
+\dyn[extended,Coxeter]{E}{8}
+\dyn[extended,Coxeter]{F}{4}
+\dyn[extended,Coxeter]{G}{2}
+\dyn[extended,Coxeter]{H}{3}
+\dyn[extended,Coxeter]{H}{4}
+\dyn[extended,Coxeter]{I}{1}
+\end{dynkinTable}
 
-\begin{LTXexample}
-\dynkin[affine,label]{E}{6}
-\end{LTXexample}
 
-\begin{LTXexample}
-\dynkin[affine,label]{E}{7}
-\end{LTXexample}
+\section{Kac style}
 
-\begin{LTXexample}
-\dynkin[affine,label]{E}{8}
-\end{LTXexample}
+We include a style called \verb!Kac! which tries to imitate the style of \cite{Kac:1990}.
 
-Open circles instead of closed dots:
-\begin{LTXexample}
-\dynkin[affine,open,label]{E}{8}
-\end{LTXexample}
+\begin{tcblisting}{title={Kac style}}
+\dynkin[Kac]{F}{4}
+\end{tcblisting}
 
-\begin{LTXexample}
-\dynkin[affine,label]{F}{4}
-\end{LTXexample}
 
-\begin{LTXexample}
-\dynkin[affine,label]{G}{2}
-\end{LTXexample}
 
+\begingroup
+\pgfkeys{/Dynkin diagram,Kac}
+\newcolumntype{D}{>{\columncolor[gray]{1}}m{\wdtD}}
+\begin{dynkinTable}{The Dynkin diagrams of the extended simple root systems in Kac style. At the moment, it only works on a white background.}{5cm}{4.5cm}
+\dyn[extended]{A}{1}
+\dyn[extended]{A}{}
+\dyn[extended]{B}{}
+\dyn[extended]{C}{}
+\dyn[extended]{D}{}
+\dyn[extended]{E}{6}
+\dyn[extended]{E}{7}
+\dyn[extended]{E}{8}
+\dyn[extended]{F}{4}
+\dyn[extended]{G}{2}
+\end{dynkinTable}
+\endgroup
 
-\section{Coxeter diagrams}
 
-\begin{LTXexample}
-\dynkin[Coxeter]{B}{7}
-\end{LTXexample}
 
-\begin{LTXexample}
-\dynkin[Coxeter]{F}{4}
-\end{LTXexample}
+\section{Folded Dynkin diagrams}
 
-\begin{LTXexample}
-\dynkin[Coxeter]{G}{2}
-\end{LTXexample}
+The Dynkin diagrams package has limited support for folding Dynkin diagrams.
 
-\begin{LTXexample}
-\dynkin[Coxeter]{H}{7}
-\end{LTXexample}
+\begin{tcblisting}{title={Folding}}
+\dynkin[fold]{A}{13}
+\end{tcblisting}
 
-\begin{LTXexample}
-\dynkin[Coxeter]{I}{7}
-\end{LTXexample}
+\begin{tcblisting}{title={Big fold radius}}
+\dynkin[fold,foldradius=1cm]{A}{13}
+\end{tcblisting}
 
+\begin{tcblisting}{title={Small fold radius}}
+\dynkin[fold,foldradius=.2cm]{A}{13}
+\end{tcblisting}
 
-\section{Folded Dynkin diagrams}
+Some Dynkin diagrams have multiple foldings, which we attempt to distinguish (not entirely successfully) by their \emph{ply}: the maximum number of roots folded together.
+Most diagrams can only allow a 2-ply folding, so \verb!fold! is a synonym form \verb!ply=2!.
 
-\begin{LTXexample}
-\dynkin[folded]{E}{6}
-\end{LTXexample}
+\begin{tcblisting}{title={3-ply}}
+\dynkin[ply=3]{D}{4}
+\dynkin[ply=3]{D}[1]{4}
+\end{tcblisting}
 
-\begin{LTXexample}
-\dynkin[folded,label]{E}{6}
-\end{LTXexample}
+\begin{tcblisting}{title={4-ply}}
+\dynkin[ply=4]{D}[1]{4}
+\end{tcblisting}
 
-\begin{LTXexample}
-\dynkin[folded]{A}{*}
-\end{LTXexample}
+The \(D^{(1)}_{\ell}\) diagrams can be folded on their left end and separately on their right end:
+\begin{tcblisting}{title={Left, right and both}}
+\dynkin{D}[1]{} \
+\dynkin[foldleft]{D}[1]{} \
+\dynkin[foldright]{D}[1]{} \
+\dynkin[fold]{D}[1]{}
+\end{tcblisting}
 
-\begin{LTXexample}
-\dynkin[folded,label]{A}{1}
-\end{LTXexample}
+We have to be careful about the 4-ply foldings of \(D^{(1)}_{2\ell}\), for which we can have two different patterns, so by default, the package only draws as much as it can without distinguishing the two:
+\begin{tcblisting}{title={Default \(D^{(1)}_{2\ell}\) and the two ways to finish it}}
+\begin{tikzpicture}
+	\dynkin[ply=4]{D}[1]{****.*****.*****}%
+\end{tikzpicture} \ 
+\begin{tikzpicture}
+	\dynkin[ply=4]{D}[1]{****.*****.*****}%
+	\dynkinFold[bend right=65]{1}{13}%
+	\dynkinFold[bend right=65]{0}{14}%
+\end{tikzpicture} \ 
+\begin{tikzpicture}
+	\dynkin[ply=4]{D}[1]{****.*****.*****}%
+	\dynkinFold{0}{1}%
+	\dynkinFold{1}{13}%
+	\dynkinFold{13}{14}%
+\end{tikzpicture}
+\end{tcblisting}
 
-\begin{LTXexample}
-\dynkin[folded,label]{A}{2}
-\end{LTXexample}
 
-\begin{LTXexample}
-\dynkin[folded,label]{A}{3}
-\end{LTXexample}
 
-\begin{LTXexample}
-\dynkin[folded,label]{A}{4}
-\end{LTXexample}
+\begingroup
+\RenewDocumentCommand\wdtD{}{3.5cm}
+\RenewDocumentCommand\wdtL{}{7cm}
+\NewDocumentCommand\seriesName{mmm}%
+{%
+	\IfStrEq{#2}{0}{#1_{#3}}{#1^{#2}_{#3}}%
+}%
 
-\begin{LTXexample}
-\dynkin[folded,label]{A}{10}
-\end{LTXexample}
+\NewDocumentCommand\foldingTable{smmmmmmmm}%
+{%
+\begin{tabular}{ADL}%
+\seriesName{#2}{#3}{#4}&#5
+\seriesName{#6}{#7}{#8}&\IfBooleanTF{#1}{\reflectbox{#9}}{#9}%
+\end{tabular}%
+\\ \hline
+}%
 
-\begin{LTXexample}
-\dynkin[folded,label]{A}{11}
-\end{LTXexample}
 
-\begin{LTXexample}
-\dynkin[folded,label,arrows=false]{A}{11}
-\end{LTXexample}
+\NewDocumentCommand\fold{smmmmmm}%
+{%
+	\IfBooleanTF{#1}%
+	{%
+		\foldingTable%
+		{#2}{#3}{#4}{\dynk[fold]{#2}[#3]{#4}}%
+		{#5}{#6}{#7}{\dynk[reverseArrows]{#5}[#6]{#7}}%
+	}%
+	{%
+		\foldingTable%
+		{#2}{#3}{#4}{\dynk[fold]{#2}[#3]{#4}}%
+		{#5}{#6}{#7}{\dynk{#5}[#6]{#7}}%
+	}%
+}%
 
-\begin{LTXexample}
-\dynkin[folded]{D}{*}
-\end{LTXexample}
+\begin{filecontents*}{DoneTwoElBendy.tex}
+\begin{tikzpicture}
+	\dynkin[ply=4]{D}[1]{****.*****.*****}
+	\dynkinFold[bend right=65]{1}{13}
+	\dynkinFold[bend right=65]{0}{14}
+\end{tikzpicture}
+\end{filecontents*}
 
-\begin{LTXexample}
-\dynkin[folded,label]{D}{1}
-\end{LTXexample}
 
-\begin{LTXexample}
-\dynkin[folded,label]{D}{2}
-\end{LTXexample}
+\begin{filecontents*}{DoneTwoElStraight.tex}
+\begin{tikzpicture}
+	\dynkin[ply=4]{D}[1]{****.*****.*****}
+	\dynkinFold{0}{1}
+	\dynkinFold{1}{13}
+	\dynkinFold{13}{14}
+\end{tikzpicture}
+\end{filecontents*}
 
-\begin{LTXexample}
-\dynkin[folded,label]{D}{3}
-\end{LTXexample}
+\pgfkeys{/Dynkin diagram,foldradius=.35cm}
+\begin{longtable}{@{}p{15cm}@{}}
+\caption{Some foldings of Dynkin diagrams}\\
+\endfirsthead
+\caption{\dots continued}\\
+\endhead
+\multicolumn{1}{c}{continued \dots}\\
+\endfoot
+\endlastfoot
+\fold{A}{0}{3}{C}{0}{2}
+\foldingTable{A}{0}{2\ell-1}{\dynk[fold]{A}{**.*****.**}}%
+{C}{0}{\ell}{\dynk{C}{}}
+\fold*{B}{0}{3}{G}{0}{2}
+\foldingTable{D}{0}{4}{\dynk[ply=3]{D}{4}}%
+{G}{0}{2}{\dynk{G}{2}}
+\foldingTable{D}{0}{\ell+1}{\dynk[fold]{D}{}}%
+{B}{0}{\ell}{\dynk{B}{}}
+\fold*{E}{0}{6}{F}{0}{4}
+\foldingTable{A}{1}{3}{\dynk[ply=4]{A}[1]{3}}%
+{A}{1}{1}{\dynk{A}[1]{1}}
+\foldingTable{A}{1}{2\ell-1}{\dynk[fold]{A}[1]{**.*****.**}}%
+{C}{1}{\ell}{\dynk{C}[1]{}}
+\foldingTable{B}{1}{3}{\dynk[ply=3]{B}[1]{3}}%
+{A}{2}{2}{\dynk{A}[2]{2}}
+\foldingTable{B}{1}{3}{\dynk[ply=2]{B}[1]{3}}%
+{G}{1}{2}{\dynk{G}[1]{2}}
+\foldingTable{B}{1}{\ell}{\dynk[fold]{B}[1]{}}{D}{2}{\ell}{\dynk{D}[2]{}}
+\foldingTable{D}{1}{4}{\dynk[ply=3]{D}[1]{4}}%
+{B}{1}{3}{\dynk{B}[1]{3}}
+\foldingTable{D}{1}{4}{\dynk[ply=3]{D}[1]{4}}%
+{G}{1}{2}{\dynk{G}[1]{2}}
+\foldingTable{D}{1}{\ell+1}{\dynk[fold]{D}[1]{}}%
+{D}{2}{\ell}{\dynk{D}[2]{}}
+\foldingTable{D}{1}{\ell+1}{%
+\dynk[foldright]{D}[1]{}}%
+{B}{1}{\ell}{\dynk{B}[1]{}}
+\foldingTable{D}{1}{2\ell}{%
+\input{DoneTwoElStraight.tex}
+& 
+\VerbatimInput{DoneTwoElStraight.tex} \\
+}%
+{A}{2}{\text{odd}}{\dynk{A}[2]{odd}}
+\foldingTable{D}{1}{2\ell}{%
+\input{DoneTwoElBendy.tex}
+& 
+\VerbatimInput{DoneTwoElBendy.tex} \\
+}%
+{A}{2}{\text{even}}{\dynk{A}[2]{even}}
+\fold*{E}{1}{6}{F}{1}{4}
+\foldingTable{E}{1}{6}{\dynk[ply=3]{E}[1]{6}}%
+{D}{3}{4}{\dynk{D}[3]{4}}
+\fold{E}{1}{7}{E}{2}{6}
+\fold{F}{1}{4}{G}{1}{2}
+\foldingTable{A}{2}{\text{odd}}{%
+\dynk[odd,fold]{A}[2]{****.***}
+}%
+{A}{2}{\text{even}}{\dynk{A}[2]{even}}
+\foldingTable{D}{2}{3}{\dynk[fold]{D}[2]{3}}%
+{A}{2}{2}{\dynk{A}[2]{2}}
+\end{longtable}
+\endgroup
 
-\begin{LTXexample}
-\dynkin[folded,label]{D}{4}
-\end{LTXexample}
 
-\begin{LTXexample}
-\dynkin[folded,label]{D}{10}
-\end{LTXexample}
 
-\begin{LTXexample}
-\dynkin[folded,label]{D}{11}
-\end{LTXexample}
+\section{Root ordering}\label{section:order}
 
+\begin{tcblisting}{title={Root ordering}}
+\dynkin[label,ordering=Adams]{E}{6}
+\dynkin[label,ordering=Bourbaki]{E}{6}
+\dynkin[label,ordering=Carter]{E}{6}
+\dynkin[label,ordering=Dynkin]{E}{6}
+\dynkin[label,ordering=Kac]{E}{6}
+\end{tcblisting}
+Default is Bourbaki.
 
+\NewDocumentCommand\tablerow{mm}%
+{%
+#1_{#2}
+&
+\dynkin[label,ordering=Adams]{#1}{#2}
+&
+\dynkin[label]{#1}{#2}
+&
+\dynkin[label,ordering=Carter]{#1}{#2}
+&
+\dynkin[label,ordering=Dynkin]{#1}{#2}
+&
+\dynkin[label,ordering=Kac]{#1}{#2}
+\\ 
+}%
 
-\section{Satake diagrams}
+\begin{center}
+\RenewDocumentCommand\wdtA{}{.7cm}
+\RenewDocumentCommand\wdtL{}{2.2cm}
+\begin{longtable}{@{}ALLLLL@{}}
+\toprule
+& Adams & Bourbaki & Carter & Dynkin & Kac \\ \midrule
+\endfirsthead
+\toprule
+Adams & Bourbaki & Carter & Dynkin & Kac \\ \midrule
+\endhead
+\bottomrule
+\endfoot
+\bottomrule
+\endlastfoot
+\tablerow{E}{6}
+\tablerow{E}{7}
+\tablerow{E}{8}
+\tablerow{F}{4}
+\tablerow{G}{2}
+\end{longtable}
+\end{center}
 
-We have incomplete support for Satake diagrams as yet, following the conventions of \cite{Helgason:2001}.
 
-\begin{LTXexample}
-\dynkin{A}{I}
-\end{LTXexample}
+\section{Connecting Dynkin diagrams}\label{section:name}
 
-\begin{LTXexample}
-\dynkin{A}{II}
-\end{LTXexample}
+We can make some sophisticated folded diagrams by drawing multiple diagrams, each with a name:
+\begin{tcblisting}{title={Name a diagram}}
+\dynkin[name=Bob]{D}{6}
+\end{tcblisting}
+We can then connect the two with folding edges:
+\begin{tcblisting}{title={Connect diagrams}}
+\begin{tikzpicture}
+	\dynkin[name=upper]{A}{3}
+	\node (current) at ($(upper root 1)+(0,-.3cm)$) {};
+	\dynkin[at=(current),name=lower]{A}{3}
+	\begin{scope}[on background layer]
+		\foreach \i in {1,...,3}%
+		{%
+			\draw[/Dynkin diagram/foldStyle] 
+				($(upper root \i)$) -- ($(lower root \i)$);%
+		}%
+	\end{scope}
+\end{tikzpicture}
+\end{tcblisting}
 
-\begin{LTXexample}
-\dynkin{E}{I}
-\end{LTXexample}
+The following diagrams arise in the Satake diagrams of the pseudo-Riemannian symmetric spaces \cite{Baba:2009}.
 
-\begin{LTXexample}
-\dynkin{E}{II}
-\end{LTXexample}
+\begin{tcblisting}{}
+\pgfkeys{/Dynkin diagram,edgeLength=.5cm,foldradius=.5cm}
+\begin{tikzpicture}
+	\dynkin[name=1]{A}{IIIb}
+	\node (a) at (.3,.4){};
+	\dynkin[name=2,at=(a)]{A}{IIIb}
+	\begin{scope}[on background layer]
+		\foreach \i in {1,...,7}%
+		{%
+			\draw[/Dynkin diagram/foldStyle] 
+				($(1 root \i)$) 
+				-- 
+				($(2 root \i)$);%
+		}%
+	\end{scope}
+\end{tikzpicture}
+\end{tcblisting}
 
-\begin{LTXexample}
-\dynkin{E}{III}
-\end{LTXexample}
+\begin{tcblisting}{}
+\pgfkeys{/Dynkin diagram/edgeLength=.75cm,/Dynkin diagram/edge/.style={draw=white,double=black,very thick},
+}
+\begin{tikzpicture}
+	\foreach \d in {1,...,4}
+	{
+		\node (current) at ($(\d*.05,\d*.3)$){};
+		\dynkin[name=\d,at=(current)]{D}{oo.oooo}
+	}
+	\begin{scope}[on background layer]
+		\foreach \i in {1,...,6}%
+		{%
+			\draw[/Dynkin diagram/foldStyle] ($(1 root \i)$) -- ($(2 root \i)$);%
+			\draw[/Dynkin diagram/foldStyle] ($(2 root \i)$) -- ($(3 root \i)$);%
+			\draw[/Dynkin diagram/foldStyle] ($(3 root \i)$) -- ($(4 root \i)$);%
+		}%
+	\end{scope}
+\end{tikzpicture}
+\end{tcblisting}
 
-\begin{LTXexample}
-\dynkin{E}{IV}
-\end{LTXexample}
 
-\begin{LTXexample}
-\dynkin{E}{V}
-\end{LTXexample}
+\section{Other examples}
 
-\begin{LTXexample}
-\dynkin{E}{VI}
-\end{LTXexample}
+Below we draw the Vogan diagrams of some affine Lie superalgebras \cite{Ransingh:2013,Ransingh:unpub}.
 
-\begin{LTXexample}
-\dynkin{E}{VII}
-\end{LTXexample}
+\begingroup
 
-\begin{LTXexample}
-\dynkin{E}{VIII}
-\end{LTXexample}
+\NewDocumentCommand\labls{m}%
+{%
+	\ifcase#1%
+		{1}\or%
+		{1}\or%
+		{2}\or%
+		{2}\or%
+		{2}\or%
+		{2}\or%
+		{2}\or%
+		{1}\or%
+		{1}\or%
+		\else\typeout{What?}%
+		\fi%
+}%
+\NewDocumentCommand\lablIt{m}%
+{%
+	\ifnum#1=0\relax%
+		1%
+	\else
+		2%
+	\fi%
+}%
 
-\begin{LTXexample}
-\dynkin{E}{XI}
-\end{LTXexample}
+\tikzset{/Dynkin diagram,labelMacro/.code=\labls{#1},label,radius=.06cm}
 
-\begin{LTXexample}
-\dynkin{F}{I}
-\end{LTXexample}
 
-\begin{LTXexample}
-\dynkin{F}{II}
-\end{LTXexample}
+\tcbset{text width=10cm}
+\RenewDocumentCommand\wdtA{}{2cm}
 
-\begin{LTXexample}
-\dynkin{G}{I}
-\end{LTXexample}
+\NewDocumentEnvironment{Category}{m}%
+{%
+\begin{tcolorbox}[title={\(#1\)},breakable]{}
+}%
+{%
+\end{tcolorbox}
+}%
 
-\begin{LTXexample}
+\begin{Category}{\mathfrak{sl}\left(2m|2n\right)^{(2)}}
+\begin{tcblisting}{}
 \begin{tikzpicture}
-\dynkin[open]{E}{6}
-\draw[\dynkinfoldarrowstyle,\dynkinfoldarrowcolor]  
-	(root 1.south) to [out=-45, in=-135] (root 6.south); 
-\draw[\dynkinfoldarrowstyle,\dynkinfoldarrowcolor]  
-	(root 3.south) to [out=-45, in=-135] (root 5.south); 
+	\dynkin[ply=2,label]{B}[1]{oo.oto.oo}
+	\dynkinLabelRoot*{7}{1}
 \end{tikzpicture}
-\end{LTXexample}
+\end{tcblisting}
+\begin{tcblisting}{}
+\dynkin[label]{B}[1]{oo.oto.oo}
+\end{tcblisting}
+\begin{tcblisting}{}
+\dynkin[ply=2,label]{B}[1]{oo.Oto.Oo}
+\end{tcblisting}
+\begin{tcblisting}{}
+\dynkin[label]{B}[1]{oo.Oto.Oo}
+\end{tcblisting}
+\begin{tcblisting}{}
+\dynkin[label]{D}[1]{oo.oto.ooo}
+\end{tcblisting}
+\begin{tcblisting}{}
+\dynkin[label]{D}[1]{oO.otO.ooo}
+\end{tcblisting}
+\begin{tcblisting}{}
+\dynkin[label,fold]{D}[1]{oo.oto.ooo}
+\end{tcblisting}
+\end{Category}
 
-\begin{LTXexample}
-\begin{tikzpicture}
-\dynkin[open]{E}{6}
-\dynkincloseddot{3}
-\dynkincloseddot{4}
-\dynkincloseddot{5}
-\draw[\dynkinfoldarrowstyle,\dynkinfoldarrowcolor] 
-	(root 1.south) to [out=-45, in=-135] (root 6.south); 
-\end{tikzpicture}
-\end{LTXexample}
+\begin{Category}{\mathfrak{sl}\left(2m+1|2n\right)^2}
+\begin{tcblisting}{}
+\dynkin[label]{B}[1]{oo.oto.oo}
+\end{tcblisting}
+\begin{tcblisting}{}
+\dynkin[label]{B}[1]{oO.oto.oO}
+\end{tcblisting}
+\begin{tcblisting}{}
+\dynkin[label,fold]{B}[1]{oo.oto.oo}
+\end{tcblisting}
+\end{Category}
 
-\section{Other stuff}
+\begin{Category}{\mathfrak{sl}\left(2m+1|2n+1\right)^2}
+\begin{tcblisting}{}
+\dynkin[label]{D}[2]{o.oto.oo}
+\end{tcblisting}
+\begin{tcblisting}{}
+\dynkin[label]{D}[2]{o.OtO.oo}
+\end{tcblisting}
+\end{Category}
 
-Some sophisticated diagrams:
-\begin{center}
+\begin{Category}{\mathfrak{sl}\left(2|2n+1\right)^{(2)}}
+\begin{tcblisting}{}
+\dynkin[ply=2,label,doubleEdges]{B}[1]{oo.Oto.Oo}
+\end{tcblisting}
+\begin{tcblisting}{}
+\dynkin[ply=2,label,doubleFold]{B}[1]{oo.Oto.Oo}
+\end{tcblisting}
+\begin{tcblisting}{}
+\dynkin[ply=2,label,doubleEdges]{B}[1]{oo.OtO.oo}
+\end{tcblisting}
+\begin{tcblisting}{}
+\dynkin[ply=2,label,doubleFold]{B}[1]{oo.OtO.oo}
+\end{tcblisting}
+\end{Category}
+
+\begin{Category}{\mathfrak{sl}\left(2|2n\right)^{(2)}}
+\begin{tcblisting}{}
+\dynkin[ply=2,label,doubleEdges]{D}[1]{oo.oto.ooo}
+\end{tcblisting}
+\begin{tcblisting}{}
+\dynkin[ply=2,label,doubleFoldLeft]{D}[1]{oo.oto.ooo}
+\end{tcblisting}
+\end{Category}
+
+\begin{Category}{\mathfrak{osp}\left(2m|2n\right)^{(2)}}
+\begin{tcblisting}{}
+\dynkin[label,labelMacro/.code={1}]{D}[2]{o.oto.oo}
+\end{tcblisting}
+\begin{tcblisting}{}
+\dynkin[label,labelMacro/.code={1}]{D}[2]{o.Oto.Oo}
+\end{tcblisting}
+\end{Category}
+
+\begin{Category}{\mathfrak{osp}\left(2|2n\right)^{(2)}}
+\begin{tcblisting}{}
+\dynkin[label,labelMacro/.code=\lablIt{#1},
+	affineMark=*]
+	{D}[2]{o.o.o.o*}
+\end{tcblisting}
+\begin{tcblisting}{}
+\dynkin[label,labelMacro/.code=\lablIt{#1},
+	affineMark=*]
+	{D}[2]{o.O.o.o*}
+\end{tcblisting}
+\end{Category}
+
+\begin{Category}{\mathfrak{sl}\left(1|2n+1\right)^{4}}
+\begin{tcblisting}{}
+\dynkin[label,labelMacro/.code={1}]{D}[2]{o.o.o.o*}
+\end{tcblisting}
+\begin{tcblisting}{}
+\dynkin[label,labelMacro/.code={1}]{D}[2]{o.o.O.o*}
+\end{tcblisting}
+\end{Category}
+
+
+\begin{Category}{A^1}
+\begin{tcblisting}{}
 \begin{tikzpicture}
-\dynkin[folded]{D}{9}
-\foreach \i in {2,6,8,9} {
-	\dynkinopendot{\i}
-}
-\dynkinline[white]{4}{5}
-\dynkindots{4}{5}
-\dynkinopendot{4}
-\dynkincloseddot{5}
+	\dynkin[name=upper]{A}{oo.t.oo}
+	\node (Dynkin current) at (upper root 1){};
+	\dynkinSouth
+	\dynkin[at=(Dynkin current),name=lower]{A}{oo.t.oo}
+	\begin{scope}[on background layer]
+	\foreach \i in {1,...,5}{
+		\draw[/Dynkin diagram/foldStyle] 
+			($(upper root \i)$) -- ($(lower root \i)$);
+	}
+	\end{scope}
 \end{tikzpicture}
-\end{center}
-can be drawn using sending TikZ options to \verb!\dynkinline! to erase the old edge, \verb!\dynkindots! to make indefinite edges, and then redrawing the roots next to any edge we draw:
-\begin{LTXexample}
-\begin{tikzpicture}[show background rectangle, 
-    background rectangle/.style={fill=red!10}]
-\dynkin[folded]{D}{9};
-\foreach \i in {2,6,8,9} {
-	\dynkinopendot{\i}
-}
-\dynkinline[red!10]{4}{5}
-\dynkindots{4}{5}
-\dynkinopendot{4}
-\dynkincloseddot{5}
-\end{tikzpicture}
-\end{LTXexample}
+\end{tcblisting}
+\begin{tcblisting}{}
+\dynkin[fold]{A}[1]{oo.t.ooooo.t.oo}
+\end{tcblisting}
+\begin{tcblisting}{}
+\dynkin[fold,affineMark=t]{A}[1]{oo.o.ootoo.o.oo}
+\end{tcblisting}
+\begin{tcblisting}{}
+\dynkin[affineMark=t]{A}[1]{o*.t.*o}
+\end{tcblisting}
+\end{Category}
 
-Always draw roots after edges.
+\begin{Category}{B^1}
+\begin{tcblisting}{}
+\dynkin[affineMark=*]{A}[2]{o.oto.o*}
+\end{tcblisting}
+\begin{tcblisting}{}
+\dynkin[affineMark=*]{A}[2]{o.oto.o*}
+\end{tcblisting}
+\begin{tcblisting}{}
+\dynkin[affineMark=*]{A}[2]{o.ooo.oo}
+\end{tcblisting}
+\begin{tcblisting}{}
+\dynkin[odd]{A}[2]{oo.*to.*o}
+\end{tcblisting}
+\begin{tcblisting}{}
+\dynkin[odd,fold]{A}[2]{oo.oto.oo}
+\end{tcblisting}
+\begin{tcblisting}{}
+\dynkin[odd,fold]{A}[2]{o*.oto.o*}
+\end{tcblisting}
+\end{Category}
 
+\begin{Category}{D^1}
+\begin{tcblisting}{}
+\dynkin{D}{otoo}
+\end{tcblisting}
+\begin{tcblisting}{}
+\dynkin{D}{ot*o}
+\end{tcblisting}
+\begin{tcblisting}{}
+\dynkin[fold]{D}{otoo}
+\end{tcblisting}
+\end{Category}
+
+\begin{Category}{C^1}
+\begin{tcblisting}{}
+\dynkin[doubleEdges,fold,affineMark=t,odd]{A}[2]{to.o*}
+\end{tcblisting}
+\begin{tcblisting}{}
+\dynkin[doubleEdges,fold,affineMark=t,odd]{A}[2]{t*.oo}
+\end{tcblisting}
+\end{Category}
+
+\begin{Category}{F^1}
+\begin{tcblisting}{}
+\begin{tikzpicture}%
+	\dynkin{A}{oto*}%
+	\dynkinQuadrupleEdge{1}{2}%
+	\dynkinTripleEdge{4}{3}%
+\end{tikzpicture}%
+\end{tcblisting}
+\begin{tcblisting}{}
+\begin{tikzpicture}%
+	\dynkin{A}{*too}%
+	\dynkinQuadrupleEdge{1}{2}%
+	\dynkinTripleEdge{4}{3}%
+\end{tikzpicture}%
+\end{tcblisting}
+\end{Category}
+
+\begin{Category}{G^1}
+\begin{tcblisting}{}
+\begin{tikzpicture}%
+	\dynkin{A}{ot*oo}%
+	\dynkinQuadrupleEdge{1}{2}%
+	\dynkinDefiniteDoubleEdge{4}{3}%
+\end{tikzpicture}%
+\end{tcblisting}
+\begin{tcblisting}{}
+\begin{tikzpicture}%
+	\dynkin{A}{oto*o}%
+	\dynkinQuadrupleEdge{1}{2}%
+	\dynkinDefiniteDoubleEdge{4}{3}%
+\end{tikzpicture}%
+\end{tcblisting}
+\begin{tcblisting}{}
+\begin{tikzpicture}%
+	\dynkin{A}{*too*}%
+	\dynkinQuadrupleEdge{1}{2}%
+	\dynkinDefiniteDoubleEdge{4}{3}%
+\end{tikzpicture}%
+\end{tcblisting}
+\begin{tcblisting}{}
+\begin{tikzpicture}%
+	\dynkin{A}{*tooo}%
+	\dynkinQuadrupleEdge{1}{2}%
+	\dynkinDefiniteDoubleEdge{4}{3}%
+\end{tikzpicture}%
+\end{tcblisting}
+\end{Category}
+
+
+
+
+
+\section{Syntax}
+
+The syntax is \verb!\dynkin[<options>]{<letter>}[<twisted rank>]{<rank>}! where \verb!<letter>! is \verb!A!, \verb!B!, \verb!C!, \verb!D!, \verb!E!, \verb!F! or \verb!G!, the family of root system for the Dynkin diagram, \verb!<twisted rank>! is \verb!0!, \verb!1!, \verb!2!, \verb!3! (default is \verb!0!) representing:
+\[
+\renewcommand*{\arraystretch}{1}
+\begin{array}{rp{8cm}}
+0 & finite root system \\ \hline
+1 & affine extended root system, i.e.  of type \({}^{(1)}\) \\
+2 & affine twisted root system of type \({}^{(2)}\) \\
+3 & affine twisted root system of type \({}^{(3)}\) \\
+\end{array}
+\]
+and \verb!<rank>! is 
+\begin{enumerate}
+\item
+an integer representing the rank or 
+\item
+blank to represent an indefinite rank or
+\item
+the name of a Satake diagram as in section~\ref{section:Satake}.
+\end{enumerate}
+
+
+
+\section{Options}
+
+\newcommand*{\typ}[1]{\(\left<\texttt{#1}\right>\)}
+\newcommand*{\optionLabel}[3]{%%
+\multicolumn{2}{l}{\(\texttt{#1}=\texttt{#2}\),} \\
+\multicolumn{2}{l}{\(\textrm{default}: \texttt{#3}\)} \\
+}%%
+
+\renewcommand*{\arraystretch}{1}
+\par\noindent%
+\begin{longtable}{p{1cm}p{10cm}}
+\endfirsthead
+\caption{\dots continued}\\
+\endhead
+\multicolumn{2}{c}{continued \dots}\\
+\endfoot
+\endlastfoot
+\optionLabel{text/.style}{\typ{TikZ style data}}{scale=.7}
+& Style for any labels on the roots. \\
+\optionLabel{name}{\typ{string}}{anonymous}
+& A name for the Dynkin diagram, with \texttt{anonymous} treated as a blank; see section~\ref{section:name}. \\
+\optionLabel{parabolic}{\typ{integer}}{0} 
+& A parabolic subgroup with specified integer, where the integer
+is computed as \(n=\sum 2^{i-1} a_i\), \(a_i=0\) or \(1\), to say that root \(i\) is crossed, i.e. a noncompact root. \\
+\optionLabel{radius}{\typ{number}cm}{.05cm}
+&      size of the dots and of the crosses in the Dynkin diagram \\
+\optionLabel{edgeLength}{\typ{number}cm}{.35cm}
+&      distance between nodes in the Dynkin diagram \\
+\optionLabel{edge/.style}{TikZ style data}{thin}
+&      style of edges in the Dynkin diagram \\
+\optionLabel{mark}{\typ{o,O,t,x,X,*}}{*}
+&      default root mark \\
+\optionLabel{affineMark}{o,O,t,x,X,*}{*}
+&      default root mark for root zero in an affine Dynkin diagram \\
+\optionLabel{label}{true or false}{false}
+& whether to label the roots according to the current labelling scheme. \\
+\optionLabel{labelMacro}{\typ{1-parameter \TeX{} macro}}{\texttt{\#1}}
+& the current labelling scheme. \\
+\optionLabel{makeIndefiniteEdge}{\typ{edge pair \(i\)-\(j\) or list of such}}{\{\}}
+& edge pair or list of edge pairs to treat as having indefinitely many roots on them. \\
+\optionLabel{indefiniteEdgeRatio}{\typ{float}}{1.6}
+& ratio of indefinite edge lengths to other edge lengths. \\
+\optionLabel{indefiniteEdge/.style}{\typ{TikZ style data}}{draw=black,fill=white,thin,densely dotted}
+& style of the dotted or dashed middle third of each indefinite edge. \\
+\optionLabel{arrows}{\typ{true or false}}{true}
+& whether to draw the arrows that arise along the edges. \\
+\optionLabel{reverseArrows}{\typ{true or false}}{true}
+& whether to reverse the direction of the arrows that arise along the edges. \\
+\optionLabel{fold}{\typ{true or false}}{true}
+& whether, when drawing Dynkin diagrams, to draw them 2-ply. \\
+\optionLabel{ply}{\typ{0,1,2,3,4}}{0}
+& how many roots get folded together, at most. \\
+\optionLabel{foldleft}{\typ{true or false}}{true}
+& whether to fold the roots on the left side of a Dynkin diagram. \\
+\optionLabel{foldright}{\typ{true or false}}{true}
+& whether to fold the roots on the right side of a Dynkin diagram. \\
+\optionLabel{foldradius}{\typ{length}}{.3cm}
+& the radius of circular arcs used in curved edges of folded Dynkin diagrams. \\
+\optionLabel{foldStyle}{\typ{TikZ style data}}{draw=black!40,fill=none,line width=radius}
+& when drawing folded diagrams, style for the fold indicators. \\
+\optionLabel{*/.style}{\typ{TikZ style data}}{draw=black,fill=black}
+& style for roots like \dynkin{A}{*} \\
+\optionLabel{o/.style}{\typ{TikZ style data}}{draw=black,fill=black}
+& style for roots like \dynkin{A}{o}  \\
+\optionLabel{O/.style}{\typ{TikZ style data}}{draw=black,fill=black}
+& style for roots like \dynkin{A}{O}  \\
+\optionLabel{t/.style}{\typ{TikZ style data}}{draw=black,fill=black}
+& style for roots like \dynkin{A}{t} \\
+\optionLabel{x/.style}{\typ{TikZ style data}}{draw=black}
+& style for roots like \dynkin{A}{x}  \\
+\optionLabel{X/.style}{\typ{TikZ style data}}{draw=black,thick}
+& style for roots like \dynkin{A}{X} \\
+\optionLabel{leftFold/.style}{\typ{TikZ style data}}{}
+& style to override the \texttt{fold} style when folding roots together on the left half of a Dynkin diagram \\
+\optionLabel{rightFold/.style}{\typ{TikZ style data}}{}
+& style to override the \texttt{fold} style when folding roots together on the right half of a Dynkin diagram \\
+\optionLabel{doubleEdges}{\typ{}}{not set}
+& set to override the \texttt{fold} style when folding roots together in a Dynkin diagram, so that the foldings
+are indicated with double edges (like those of an \(F_4\) Dynkin diagram without arrows). \\
+\optionLabel{doubleFold}{\typ{}}{not set}
+& set to override the \texttt{fold} style when folding roots together in a Dynkin diagram, so that the foldings
+are indicated with double edges (like those of an \(F_4\) Dynkin diagram without arrows), but filled in solidly. \\
+\optionLabel{doubleLeft}{\typ{}}{not set}
+& set to override the \texttt{fold} style when folding roots together at the left side of a Dynkin diagram, so that the foldings are indicated with double edges (like those of an \(F_4\) Dynkin diagram without arrows). \\
+\optionLabel{doubleFoldLeft}{\typ{}}{not set}
+& set to override the \texttt{fold} style when folding roots together  at the left side of a Dynkin diagram, so that the foldings are indicated with double edges (like those of an \(F_4\) Dynkin diagram without arrows), but filled in solidly. \\
+\optionLabel{doubleRight}{\typ{}}{not set}
+& set to override the \texttt{fold} style when folding roots together at the right side of a Dynkin diagram, so that the foldings are indicated with double edges (like those of an \(F_4\) Dynkin diagram without arrows). \\
+\optionLabel{doubleFoldRight}{\typ{}}{not set}
+& set to override the \texttt{fold} style when folding roots together  at the right side of a Dynkin diagram, so that the foldings are indicated with double edges (like those of an \(F_4\) Dynkin diagram without arrows), but filled in solidly.
+\\
+\optionLabel{Coxeter}{\typ{true or false}}{false}
+& whether to draw a Coxeter diagram, rather than a Dynkin diagram. \\
+\optionLabel{ordering}{\typ{Adams, Bourbaki, Carter, Dynkin, Kac}}{Bourbaki}
+& which ordering of the roots to use in exceptional root systems as in section~\ref{section:order}. \\
+\end{longtable}
+\par\noindent{}All other options are passed to TikZ.
+
+
 \nocite{*}
 \bibliographystyle{amsplain}
 \bibliography{dynkin-diagrams}

Modified: trunk/Master/texmf-dist/tex/latex/dynkin-diagrams/dynkin-diagrams.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex/dynkin-diagrams/dynkin-diagrams.sty	2018-02-11 22:49:41 UTC (rev 46599)
+++ trunk/Master/texmf-dist/tex/latex/dynkin-diagrams/dynkin-diagrams.sty	2018-02-11 22:49:52 UTC (rev 46600)
@@ -2,7 +2,7 @@
 %
 %                                  The Dynkin Diagrams package.
 %
-%                                            Version 2
+%                                            Version 3.1
 %
 %
 %               This package draws Dynkin diagrams in LaTeX documents, using the TikZ package.
@@ -18,7 +18,7 @@
 %
 %
 \NeedsTeXFormat{LaTeX2e}[1994/06/01]
-\ProvidesPackage{dynkin-diagrams}[2017/11/14 Dynkin diagrams]
+\ProvidesPackage{dynkin-diagrams}[2018/02/11 Dynkin diagrams]
 \RequirePackage{tikz}
 \RequirePackage{xstring}
 \RequirePackage{xparse}
@@ -29,6 +29,7 @@
 \usetikzlibrary{decorations.markings}
 \usetikzlibrary{arrows,arrows.meta}
 \usetikzlibrary{calc}
+\usetikzlibrary{fit}
 
 %%
 %% Application programming interface: 
@@ -35,116 +36,218 @@
 %% See dynkin-diagrams.tex file for examples of use.
 %%
 
-\NewDocumentCommand\dynkin{O{}mm}%
+\NewDocumentCommand\dynkin{O{}mO{0}m}%
 {%
 	\ifdefined\filldraw%
-		\@dynkin[#1]{#2}{#3}%
+		\@dynkin[#1]{#2}[#3]{#4}%
 	\else%
-		\tikz[baseline=-\the\dimexpr\fontdimen22\textfont2\relax ]{\@dynkin[#1]{#2}{#3}}%
+		\tikz[baseline=-0.5ex]{\@dynkin[#1]{#2}[#3]{#4}}%
 	\fi%
 }%
 
-%% \convertRootNumber{<n>}
-%% -> 
-%% Converts <n> from Bourbaki ordering to the current ordering, storing the result in a count called \RootNumber.
-\NewDocumentCommand\convertRootNumber{m}%
+\NewDocumentCommand\dynkinRefreshRoots{}%
 {%
-	\IfStrEq{#1}{0}
-	{
-		\global\RootNumber=0
-	}
-	{
-	\IfStrEqCase{\dynkinseries}%
+	\dynkin at draw@all at roots{}%
+	\ifdynkin at label@the at roots\dynkinPrintLabels{}\fi%
+}%
+
+
+%% \dynkinLabelRoot{<r>}{<s>} or \dynkinLabelRoot*{<r>}{<s>}
+%% Prints the label string <s> on the Dynkin diagram at root number <r>, in the current ordering convention.
+%% Starred form uses the opposite label location.
+\NewDocumentCommand\dynkinLabelRoot{smm}%
+{%
+	\ifnum\dynkin at nodes<#2%
+		\ClassError{Dynkin diagrams}{Unrecognized root: ``#2'' found when labelling Dynkin diagram \dynkin at user@series{\dynkin at user@string}. Allowed values are up to \the\dynkin at nodes}{}%
+	\fi%
+	\newcount\rpo%
+	\rpo=#2%
+	\advance\rpo by 1%
+	\StrMid{\dynkin at label@directions}{\the\rpo}{\the\rpo}[\temp]%
+	\IfBooleanTF{#1}%
 	{%
-		{E}%
-		{%
-			\ifnum\dynkinrank=6%
-					\IfStrEqCase{\dynkinordering}%
-					{%
-						{Adams}{\RootNumber=\stringcharacterinposition{152436}{#1}}%
-						{Carter}{\RootNumber=\stringcharacterinposition{142356}{#1}}%
-						{Dynkin}{\RootNumber=\stringcharacterinposition{162345}{#1}}%
-						{Kac}{\RootNumber=\stringcharacterinposition{162345}{#1}}%
+		\IfStrEqCase{\temp}{%
+			{l}{%
+			\node[inner sep=\dynkin at root@radius,%
+				label={%
+					[/Dynkin diagram,/Dynkin diagram/text]%
+					right:%
+					\(\pgfkeys{/Dynkin diagram/labelMacro=#3}\)%
 					}%
-					[\RootNumber=#1]%
-			\else%
-				\ifnum\dynkinrank=7%
-					\IfStrEqCase{\dynkinordering}%
-					{%
-						{Adams}{\RootNumber=\stringcharacterinposition{6354217}{#1}}%
-						{Carter}{\RootNumber=\stringcharacterinposition{7564321}{#1}}%
-						{Dynkin}{\RootNumber=\stringcharacterinposition{1723456}{#1}}%
-						{Kac}{\RootNumber=\stringcharacterinposition{1723456}{#1}}%
+				]%
+				at (\dynkin at root@name #2){};%
+			}%
+			{r}{%
+			\node[inner sep=\dynkin at root@radius,%
+				label={%
+					[/Dynkin diagram,/Dynkin diagram/text]%
+					left:%
+					\(\pgfkeys{/Dynkin diagram/labelMacro=#3}\)%
 					}%
-					[\RootNumber=#1]%			
-				\else%
-					\ifnum\dynkinrank=8%
-						\IfStrEqCase{\dynkinordering}%
-						{%
-							{Adams}{\RootNumber=\stringcharacterinposition{13245678}{#1}}%
-							{Carter}{\RootNumber=\stringcharacterinposition{86754321}{#1}}%
-							{Dynkin}{\RootNumber=\stringcharacterinposition{18234567}{#1}}%
-							{Kac}{\RootNumber=\stringcharacterinposition{78654321}{#1}}%
-						}%
-						[\RootNumber=#1]%			
-					\else%
-					\fi%
-				\fi%
-			\fi%
-		}%
-		{F}%
-		{%
-			\IfStrEqCase{\dynkinordering}%
-			{%
-				{Adams}{\RootNumber=\stringcharacterinposition{4321}{#1}}%
+				]%
+				at (\dynkin at root@name #2){};%
 			}%
-			[\RootNumber=#1]%
+			{a}{%
+			\node[inner sep=\dynkin at root@radius,%
+				label={%
+					[/Dynkin diagram,/Dynkin diagram/text]%
+					below:%
+					\(\pgfkeys{/Dynkin diagram/labelMacro=#3}\)%
+					}%
+				]%
+				at (\dynkin at root@name #2){};%
+			}%
+			{b}{%
+			\node[inner sep=\dynkin at root@radius,%
+				label={%
+					[/Dynkin diagram,/Dynkin diagram/text]%
+					above:%
+					\(\pgfkeys{/Dynkin diagram/labelMacro=#3}\)%
+					}%
+				]%
+				at (\dynkin at root@name #2){};%
+			}%
+			{d}{%
+			\node[inner sep=\dynkin at root@radius,%
+				label={%
+					[/Dynkin diagram,/Dynkin diagram/text]%
+					above right:%
+					\(\pgfkeys{/Dynkin diagram/labelMacro=#3}\)%
+					}%
+				]%
+				at (\dynkin at root@name #2){};%
+			}%
 		}%
-		{G}%
-		{%
-			\IfStrEqCase{\dynkinordering}%
-			{%
-				{Carter}{\RootNumber=\stringcharacterinposition{21}{#1}}%
-				{Dynkin}{\RootNumber=\stringcharacterinposition{21}{#1}}%
-				{Kac}{\RootNumber=\stringcharacterinposition{21}{#1}}%
+		[\ClassError%
+			{Dynkin diagrams}%
+			{Unrecognized root label direction: 
+			``\temp'' in Dynkin diagram \dynkin at user@series{\dynkin at user@string} for root #2}%
+			{}]
+	}%
+	{%
+		\IfStrEqCase{\temp}{%
+			{l}{%
+			\node[inner sep=\dynkin at root@radius,%
+				label={%
+					[/Dynkin diagram,/Dynkin diagram/text]%
+					left:%
+					\(\pgfkeys{/Dynkin diagram/labelMacro=#3}\)%
+					}%
+				]%
+				at (\dynkin at root@name #2){};%
 			}%
-			[\RootNumber=#1]%
+			{r}{%
+			\node[inner sep=\dynkin at root@radius,%
+				label={%
+					[/Dynkin diagram,/Dynkin diagram/text]%
+					right:%
+					\(\pgfkeys{/Dynkin diagram/labelMacro=#3}\)%
+					}%
+				]%
+				at (\dynkin at root@name #2){};%
+			}%
+			{a}{%
+			\node[inner sep=\dynkin at root@radius,%
+				label={%
+					[/Dynkin diagram,/Dynkin diagram/text]%
+					above:%
+					\(\pgfkeys{/Dynkin diagram/labelMacro=#3}\)%
+					}%
+				]%
+				at (\dynkin at root@name #2){};%
+			}%
+			{b}{	%
+			\node[inner sep=\dynkin at root@radius,%
+				label={%
+					[/Dynkin diagram,/Dynkin diagram/text]%
+					below:%
+					\(\pgfkeys{/Dynkin diagram/labelMacro=#3}\)%
+					}%
+				]%
+				at (\dynkin at root@name #2){};%
+			}%
+			{d}{%
+			\node[inner sep=\dynkin at root@radius,%
+				label={%
+					[/Dynkin diagram,/Dynkin diagram/text]%
+					below right:%
+					\(\pgfkeys{/Dynkin diagram/labelMacro=#3}\)%
+					}%
+				]%
+				at (\dynkin at root@name #2){};%
+			}%
 		}%
+		[\ClassError%
+			{Dynkin diagrams}%
+			{Unrecognized root label direction: 
+			``\temp'' in Dynkin diagram \dynkin at user@series{\dynkin at user@string} for root #2}%
+			{}]
 	}%
-	[\RootNumber=#1]%
-	}
 }%
 
-\NewDocumentCommand\dynkinprint{m}%
+%% \dynkinPrintLabels
+%% Prints the default labels on the Dynkin diagram, in the given ordering.
+\newcommand{\dynkinPrintLabels}%
 {%
-	\scalebox{\dynkintextscale}{\(#1\)}%
+	\foreach \i in {1,...,\the\dynkin at nodes}{\dynkinLabelRoot{\i}{\i}}%
+	\ifdynkin at is@extended%
+		\dynkinLabelRoot{0}{0}%
+	\else%
+		\ifdynkin at is@twisted%
+			\dynkinLabelRoot{0}{0}%
+		\fi%
+	\fi%
 }%
 
-%% \rootlabel{<n>}{<s>} or \rootlabel*{<n>}{<s>}
-%% ->
-%% Prints the label string <s> on the Dynkin diagram at root number <n>, in the current ordering convention.
-\NewDocumentCommand\rootlabel{smm}%
+%% \dynkinCrossRootMark{<n>}
+%% Prints a cross at root <n> on the current Dynkin diagram.
+%% The starred form accepts <n> in the Bourbaki ordering.
+\NewDocumentCommand\dynkinCrossRootMark{sO{}m}%
 {%
 	\IfBooleanTF{#1}%
-		{\node at (root label swap #2) {\dynkinprint{#3}};}%
-		{\node at (root label #2) {\dynkinprint{#3}};}%
+	{%
+		\convertRootNumber{#3}%
+	}%
+	{%
+		\RootNumber=#3%
+	}%
+	\draw[/Dynkin diagram,/Dynkin diagram/x,#2]%
+		($(\dynkin at root@name \the\RootNumber)+(\dynkin at root@radius,\dynkin at root@radius)$)%
+		--%
+		($(\dynkin at root@name \the\RootNumber)-(\dynkin at root@radius,\dynkin at root@radius)$);%
+	\draw[/Dynkin diagram,/Dynkin diagram/x,#2]%
+		($(\dynkin at root@name \the\RootNumber)+(-\dynkin at root@radius,\dynkin at root@radius)$)%
+		--%
+		($(\dynkin at root@name \the\RootNumber)+(\dynkin at root@radius,-\dynkin at root@radius)$);%
 }%
 
-%% \dynkinprintlabels
-%% ->
-%% Prints the default labels on the Dynkin diagram, in the given ordering.
-\newcommand{\dynkinprintlabels}%
+%% \dynkinHeavyCrossRootMark{<n>}
+%% Prints a heavy cross at root <n> on the current Dynkin diagram.
+%% The starred form accepts <n> in the Bourbaki ordering.
+\NewDocumentCommand\dynkinHeavyCrossRootMark{sO{}m}%
 {%
-	\foreach \i in {1,...,\the\dynkinrank}%
-		{\rootlabel{\i}{\i}}%
-	\ifisaffine\rootlabel{0}{0}\fi%
+	\IfBooleanTF{#1}%
+	{%
+		\convertRootNumber{#3}%
+	}%
+	{%
+		\RootNumber=#3%
+	}%
+	\draw[/Dynkin diagram,/Dynkin diagram/X,#2]%
+		($(\dynkin at root@name \the\RootNumber)+(\dynkin at root@radius,\dynkin at root@radius)$)%
+		--%
+		($(\dynkin at root@name \the\RootNumber)-(\dynkin at root@radius,\dynkin at root@radius)$);%
+	\draw[/Dynkin diagram,/Dynkin diagram/X,#2]%
+		($(\dynkin at root@name \the\RootNumber)+(-\dynkin at root@radius,\dynkin at root@radius)$)%
+		--%
+		($(\dynkin at root@name \the\RootNumber)+(\dynkin at root@radius,-\dynkin at root@radius)$);%
 }%
 
-%% \dynkincross{<n>}
-%% ->
-%% Prints a cross at root <n> on the current Dynkin diagram.
+
+%% \dynkinHollowRootMark{<n>}
+%% Prints an hollow dot at root <n> on the current Dynkin diagram.
 %% The starred form accepts <n> in the Bourbaki ordering.
-\NewDocumentCommand\dynkincross{sO{}m}%
+\NewDocumentCommand\dynkinHollowRootMark{sO{}m}%
 {%
 	\IfBooleanTF{#1}%
 	{%
@@ -153,21 +256,13 @@
 	{%
 		\RootNumber=#3%
 	}%
-	\draw[\dynkincrossstyle,\dynkincolor,#2]%
-		($(root \the\RootNumber)+(\dynkinradius,\dynkinradius)$)%
-		--%
-		($(root \the\RootNumber)-(\dynkinradius,\dynkinradius)$);%
-	\draw[\dynkincrossstyle,\dynkincolor]%
-		($(root \the\RootNumber)+(-\dynkinradius,\dynkinradius)$)%
-		--%
-		($(root \the\RootNumber)+(\dynkinradius,-\dynkinradius)$);%
+	\fill[/Dynkin diagram,/Dynkin diagram/o,#2] (\dynkin at root@name \the\RootNumber) circle (\dynkin at root@radius);%
 }%
 
-%% \dynkinopendot{<n>}
-%% ->
-%% Prints an open dot at root <n> on the current Dynkin diagram.
+%% \dynkinDoubleHollowRootMark{<n>}
+%% Prints a double hollow dot at root <n> on the current Dynkin diagram.
 %% The starred form accepts <n> in the Bourbaki ordering.
-\NewDocumentCommand\dynkinopendot{sO{}m}%
+\NewDocumentCommand\dynkinDoubleHollowRootMark{sO{}m}%
 {%
 	\IfBooleanTF{#1}%
 	{%
@@ -176,14 +271,14 @@
 	{%
 		\RootNumber=#3%
 	}%
-	\fill[\dynkinbackcolor,draw=\dynkincolor,#2] (root \the\RootNumber) circle (\dynkinradius);%
+	\fill[/Dynkin diagram,/Dynkin diagram/o,#2] (\dynkin at root@name \the\RootNumber) circle (2*\dynkin at root@radius);%
+	\fill[/Dynkin diagram,/Dynkin diagram/o,#2] (\dynkin at root@name \the\RootNumber) circle (\dynkin at root@radius);%
 }%
 
-%% \dynkincloseddot{<n>}
-%% ->
-%% Prints a closed dot at root <n> on the current Dynkin diagram.
+%% \dynkinSolidRootMark{<n>}
+%% Prints a solid dot at root <n> on the current Dynkin diagram.
 %% The starred form accepts <n> in the Bourbaki ordering.
-\NewDocumentCommand\dynkincloseddot{sO{}m}%
+\NewDocumentCommand\dynkinSolidRootMark{sO{}m}%
 {%
 	\IfBooleanTF{#1}%
 	{%
@@ -192,53 +287,75 @@
 	{%
 		\RootNumber=#3%
 	}%
-	\fill[\dynkincolor,draw=\dynkincolor,#2] (root \the\RootNumber) circle (\dynkinradius);%
+	\fill[/Dynkin diagram,/Dynkin diagram/*,#2] (\dynkin at root@name \the\RootNumber) circle (\dynkin at root@radius);%
 }%
 
-%% \dynkindot{<n>}
-%% ->
-%% Prints a dot at root <n> on the current Dynkin diagram in the default style.
+%% \dynkinTensorRootMark{<n>}
+%% Prints a tensor product symbol at root <n> on the current Dynkin diagram.
 %% The starred form accepts <n> in the Bourbaki ordering.
-\NewDocumentCommand\dynkindot{sO{}m}%
+\NewDocumentCommand\dynkinTensorRootMark{sO{}m}%
 {%
 	\IfBooleanTF{#1}%
 	{%
-		\ifnum#3=0%
-			\ifdynkinopendots%
-				\dynkincloseddot*[#2]{0}%
-			\else%
-				\dynkinopendot*[#2]{0}%
-			\fi%
-		\else%
-			\ifdynkinopendots%
-				\dynkinopendot*[#2]{#3}%
-			\else%
-				\dynkincloseddot*[#2]{#3}%
-			\fi%
-		\fi%
+		\convertRootNumber{#3}%
 	}%
 	{%
-		\ifnum#3=0%
-			\ifdynkinopendots%
-				\dynkincloseddot[#2]{0}%
-			\else%
-				\dynkinopendot[#2]{0}%
-			\fi%
-		\else%
-			\ifdynkinopendots%
-				\dynkinopendot[#2]{#3}%
-			\else%
-				\dynkincloseddot[#2]{#3}%
-			\fi%
-		\fi%
+		\RootNumber=#3%
 	}%
+	\fill[/Dynkin diagram,/Dynkin diagram/o,#2] (\dynkin at root@name \the\RootNumber) circle ({\dynkin at root@radius});%
+	\draw[/Dynkin diagram,/Dynkin diagram/x,#2]%
+		($(\dynkin at root@name \the\RootNumber)+({\dynkin at root@radius/sqrt(2)},{\dynkin at root@radius/sqrt(2)})$)%
+		--%
+		($(\dynkin at root@name \the\RootNumber)-({\dynkin at root@radius/sqrt(2)},{\dynkin at root@radius/sqrt(2)})$);%
+	\draw[/Dynkin diagram,/Dynkin diagram/x,#2]%
+		($(\dynkin at root@name \the\RootNumber)+({-\dynkin at root@radius/sqrt(2)},{\dynkin at root@radius/sqrt(2)})$)%
+		--%
+		($(\dynkin at root@name \the\RootNumber)+({\dynkin at root@radius/sqrt(2)},{-\dynkin at root@radius/sqrt(2)})$);%
 }%
 
-%% \dynkinline{<p>}{<q>}
-%% ->
+%% \dynkinRootMark{<s>}{<n>}
+%% Prints a dot at root <n> on the current Dynkin diagram using mark style <s>.
+%% Use <s> empty to get the default mark style.
+%% The starred form accepts <n> in the Bourbaki ordering.
+\NewDocumentCommand\dynkinRootMark{smm}%
+{%
+	\IfBooleanTF{#1}%
+	{%
+		\IfStrEqCase{#2}%
+		{%
+			{}{\dynkinRootMark*{\dynkin at root@mark}{#3}}%
+			{*}{\dynkinSolidRootMark*{#3}}%
+			{O}{\dynkinDoubleHollowRootMark*{#3}}%
+			{X}{\dynkinHeavyCrossRootMark*{#3}}%
+			{o}{\dynkinHollowRootMark*{#3}}%
+			{t}{\dynkinTensorRootMark*{#3}}%
+			{x}{\dynkinCrossRootMark*{#3}}%
+		}%
+		[\ClassError%
+			{Dynkin diagrams}%
+			{Unrecognized root mark: ``#2'' in Dynkin diagram%
+			 \dynkin at user@series{\dynkin at user@string}}%
+			{}]
+	}%
+	{%
+		\IfStrEqCase{#2}%
+		{%
+			{}{\dynkinRootMark{\dynkin at root@mark}{#3}}%
+			{*}{\dynkinSolidRootMark{#3}}%
+			{O}{\dynkinDoubleHollowRootMark{#3}}%
+			{X}{\dynkinHeavyCrossRootMark{#3}}%
+			{o}{\dynkinHollowRootMark{#3}}%
+			{t}{\dynkinTensorRootMark{#3}}%
+			{x}{\dynkinCrossRootMark{#3}}%
+		}%
+		[\ClassError{Dynkin diagrams}{Unrecognized root mark: ``#2'' in Dynkin diagram \dynkin at user@series{\dynkin at user@string}}{}]
+	}%
+}%
+
+%% \dynkinDefiniteSingleEdge{<p>}{<q>}
 %% Draws a single line from root <p> to root <q> on the current Dynkin diagram in the current label ordering.
 %% The starred form accepts <p> and <q> in the Bourbaki ordering.
-\NewDocumentCommand\dynkinline{sO{}mm}%
+\NewDocumentCommand\dynkinDefiniteSingleEdge{sO{}mm}%
 {%
 	\IfBooleanTF{#1}%
 	{%
@@ -248,14 +365,19 @@
 		\@fromRoot=#3%
 		\@toRoot=#4%
 	}%
-	\draw[\dynkincolor,\dynkinedgestyle,#2] ($(root \the\@fromRoot)$) -- ($(root \the\@toRoot)$);%
+	\begin{scope}[on background layer]%
+		\draw[/Dynkin diagram,edge,#2] 
+			($(\dynkin at root@name \the\@fromRoot)$) 
+			-- 
+			($(\dynkin at root@name \the\@toRoot)$);%
+	\end{scope}%
 }%
 
-%% \dynkinfoldarrow{<p>}{<q>}
-%% ->
-%% Draws an arrow to represent folding from root <p> to root <q> on the current Dynkin diagram in the current label ordering.
+%% \dynkinIndefiniteSingleEdge{<p>}{<q>}
+%% Draws a single line from root <p> to root <q> on the current Dynkin diagram in the current label ordering,
+%% drawn as dashed to indicate an edge containing an indefinite number of roots.
 %% The starred form accepts <p> and <q> in the Bourbaki ordering.
-\NewDocumentCommand\dynkinfoldarrow{sO{}mm}%
+\NewDocumentCommand\dynkinIndefiniteSingleEdge{sO{}mm}%
 {%
 	\IfBooleanTF{#1}%
 	{%
@@ -265,14 +387,78 @@
 		\@fromRoot=#3%
 		\@toRoot=#4%
 	}%
-	\draw[\dynkinfoldarrowstyle,\dynkinfoldarrowcolor,#2] (root \the\@fromRoot) -- (root \the\@toRoot);%
+	\begin{scope}[on background layer]%
+		\draw[/Dynkin diagram,edge,#2] 
+			($(\dynkin at root@name \the\@fromRoot)$) 
+			-- 
+			(${(2/3)}*(\dynkin at root@name \the\@fromRoot)+{(1/3)}*(\dynkin at root@name \the\@toRoot)$);
+		\draw[/Dynkin diagram,/Dynkin diagram/indefiniteEdge,#2] 
+			(${(2/3)}*(\dynkin at root@name \the\@fromRoot)+{(1/3)}*(\dynkin at root@name \the\@toRoot)$)
+			-- 
+			(${(1/3)}*(\dynkin at root@name \the\@fromRoot)+{(2/3)}*(\dynkin at root@name \the\@toRoot)$);
+		\draw[/Dynkin diagram,/Dynkin diagram/edge,#2] 
+			(${(1/3)}*(\dynkin at root@name \the\@fromRoot)+{(2/3)}*(\dynkin at root@name \the\@toRoot)$)
+			-- 
+			($(\dynkin at root@name \the\@toRoot)$);
+	\end{scope}%
+}%	
+
+%%% \dynkinRightFold{<p>}{<q>}
+%%% Draws an arrow to represent folding from root <p> to root <q> on the current Dynkin diagram in the current label ordering, curving to the right.
+%%% The starred form accepts <p> and <q> in the Bourbaki ordering.
+\NewDocumentCommand\dynkinRightFold{sO{}mm}%
+{%
+	\IfBooleanTF{#1}%
+	{%
+		\dynkinFold*[/Dynkin diagram/rightFold,#2]{#3}{#4}%
+	}%
+	{%
+		\dynkinFold[/Dynkin diagram/rightFold,#2]{#3}{#4}%
+	}%
 }%
 
-%% \dynkindownarc{<p>}{<q>}
-%% ->
+%%% \dynkinLeftFold{<p>}{<q>}
+%%% Draws an arrow to represent folding from root <p> to root <q> on the current Dynkin diagram in the current label ordering, curving to the left.
+%%% The starred form accepts <p> and <q> in the Bourbaki ordering.
+\NewDocumentCommand\dynkinLeftFold{sO{}mm}%
+{%
+	\IfBooleanTF{#1}%
+	{%
+		\dynkinFold*[/Dynkin diagram/leftFold,#2]{#3}{#4}%
+	}%
+	{%
+		\dynkinFold[/Dynkin diagram/leftFold,#2]{#3}{#4}%
+	}%
+}%
+
+%% \dynkinFold{<p>}{<q>}
+%% Draws some colouring to indicate which roots are being folded together, including roots <p> and <q>.
+%% The starred form accepts <p> and <q> in the Bourbaki ordering.
+\NewDocumentCommand\dynkinFold{sO{}mm}%
+{%
+	\IfBooleanTF{#1}%
+	{%
+		\convertRootPair{#3}{#4}%
+	}%
+	{%
+		\@fromRoot=#3%
+		\@toRoot=#4%
+	}%
+	\convertRootPair{\@fromRoot}{\@toRoot}%
+	\begin{scope}[on background layer]
+		\draw
+			[/Dynkin diagram/foldStyle,#2] 
+			($(\dynkin at root@name \the\@fromRoot)$)
+			to 
+			($(\dynkin at root@name \the\@toRoot)$);
+	\end{scope}%
+}%
+
+
+%% \dynkinDefiniteRightDownArc{<p>}{<q>}
 %% Draws a quarter circle from root <p> to root <q> on the current Dynkin diagram in the current label ordering.
 %% The starred form accepts <p> and <q> in the Bourbaki ordering.
-\NewDocumentCommand\dynkindownarc{sO{}mm}%
+\NewDocumentCommand\dynkinDefiniteRightDownArc{sO{}mm}%
 {%
 	\IfBooleanTF{#1}%
 	{%
@@ -282,14 +468,17 @@
 		\@fromRoot=#3%
 		\@toRoot=#4%
 	}%
-	\draw[\dynkincolor,\dynkinedgestyle,#2] ($(root \the\@fromRoot)$) arc (90:0:\dynkinedgelength);%
+	\begin{scope}[on background layer]%
+	\draw[/Dynkin diagram,/Dynkin diagram/edge,fill=none,#2]%
+		($(\dynkin at root@name \the\@fromRoot)$)%
+		arc (90:0:\dynkin at fold@radius)   -- ($(\dynkin at root@name \the\@toRoot)$);%
+	\end{scope}%
 }%
 
-%% \dynkinuparc{<p>}{<q>}
-%% ->
+%% \dynkinIndefiniteRightDownArc{<p>}{<q>}
 %% Draws a quarter circle from root <p> to root <q> on the current Dynkin diagram in the current label ordering.
 %% The starred form accepts <p> and <q> in the Bourbaki ordering.
-\NewDocumentCommand\dynkinuparc{sO{}mm}%
+\NewDocumentCommand\dynkinIndefiniteRightDownArc{sO{}mm}%
 {%
 	\IfBooleanTF{#1}%
 	{%
@@ -299,14 +488,179 @@
 		\@fromRoot=#3%
 		\@toRoot=#4%
 	}%
-	\draw[\dynkincolor,\dynkinedgestyle,#2] ($(root \the\@fromRoot)$) arc (0:-90:\dynkinedgelength);%
+	\node (center) at ($(\dynkin at root@name \the\@fromRoot)-(0,\dynkin at fold@radius)$) {};%
+	\begin{scope}[on background layer]%
+	\draw[/Dynkin diagram,/Dynkin diagram/edge,fill=none,#2] 
+		(center)
+		++(90:\dynkin at fold@radius)
+		arc [start angle=90, end angle=60, radius=\dynkin at fold@radius];%
+	\draw[/Dynkin diagram,/Dynkin diagram/indefiniteEdge,fill=none,#2]
+		(center)
+		++(60:\dynkin at fold@radius)
+		arc [start angle=60, end angle=30, radius=\dynkin at fold@radius];%
+	\draw[/Dynkin diagram,/Dynkin diagram/edge,fill=none,#2]
+		(center)
+		++(30:\dynkin at fold@radius)
+		arc [start angle=30, end angle=0, radius=\dynkin at fold@radius];%
+	\end{scope}%
 }%
 
-%% \dynkinsemicircle{<p>}{<q>}
-%% ->
+%% \dynkinDefiniteRightUpArc{<p>}{<q>}
+%% Draws a quarter circle from root <p> to root <q> on the current Dynkin diagram in the current label ordering.
+%% The starred form accepts <p> and <q> in the Bourbaki ordering.
+\NewDocumentCommand\dynkinDefiniteRightUpArc{sO{}mm}%
+{%
+	\IfBooleanTF{#1}%
+	{%
+		\convertRootPair{#3}{#4}%
+	}%
+	{%
+		\@fromRoot=#3%
+		\@toRoot=#4%
+	}%
+	\begin{scope}[on background layer]%
+	\draw[/Dynkin diagram,/Dynkin diagram/edge,fill=none,#2] 
+		($(\dynkin at root@name \the\@fromRoot)$) 
+		arc (-90:0:\dynkin at fold@radius) -- ($(\dynkin at root@name \the\@toRoot)$);%
+	\end{scope}%
+}%
+
+%% \dynkinIndefiniteRightUpArc{<p>}{<q>}
+%% Draws a quarter circle from root <p> to root <q> on the current Dynkin diagram in the current label ordering.
+%% The starred form accepts <p> and <q> in the Bourbaki ordering.
+\NewDocumentCommand\dynkinIndefiniteRightUpArc{sO{}mm}%
+{%
+	\IfBooleanTF{#1}%
+	{%
+		\convertRootPair{#3}{#4}%
+	}%
+	{%
+		\@fromRoot=#3%
+		\@toRoot=#4%
+	}%
+	\node (center) at ($(\dynkin at root@name \the\@fromRoot)+(0,\dynkin at fold@radius)$) {};%
+	\begin{scope}[on background layer]%
+	\draw[/Dynkin diagram,/Dynkin diagram/edge,fill=none,#2] 
+		(center)
+		++(-90:\dynkin at fold@radius)
+		arc [start angle=-90, end angle=-60, radius=\dynkin at fold@radius];%
+	\draw[/Dynkin diagram,/Dynkin diagram/indefiniteEdge,fill=none,#2]
+		(center)
+		++(-60:\dynkin at fold@radius)
+		arc [start angle=-60, end angle=-30, radius=\dynkin at fold@radius];%
+	\draw[/Dynkin diagram,/Dynkin diagram/edge,fill=none,#2]
+		(center)
+		++(-30:\dynkin at fold@radius)
+		arc [start angle=-30, end angle=0, radius=\dynkin at fold@radius]  -- ($(\dynkin at root@name \the\@toRoot)$);%
+	\end{scope}%
+}%
+
+
+%% \dynkinDefiniteLeftDownArc{<p>}{<q>}
+%% Draws a quarter circle from root <p> to root <q> on the current Dynkin diagram in the current label ordering.
+%% The starred form accepts <p> and <q> in the Bourbaki ordering.
+\NewDocumentCommand\dynkinDefiniteLeftDownArc{sO{}mm}%
+{%
+	\IfBooleanTF{#1}%
+	{%
+		\convertRootPair{#3}{#4}%
+	}%
+	{%
+		\@fromRoot=#3%
+		\@toRoot=#4%
+	}%
+	\begin{scope}[on background layer]%
+	\draw[/Dynkin diagram,/Dynkin diagram/edge,fill=none,#2]%
+		($(\dynkin at root@name \the\@fromRoot)$)%
+		arc (90:180:\dynkin at fold@radius) -- ($(\dynkin at root@name \the\@toRoot)$);%
+	\end{scope}%
+}%
+
+%% \dynkinIndefiniteLeftDownArc{<p>}{<q>}
+%% Draws a quarter circle from root <p> to root <q> on the current Dynkin diagram in the current label ordering.
+%% The starred form accepts <p> and <q> in the Bourbaki ordering.
+\NewDocumentCommand\dynkinIndefiniteLeftDownArc{sO{}mm}%
+{%
+	\IfBooleanTF{#1}%
+	{%
+		\convertRootPair{#3}{#4}%
+	}%
+	{%
+		\@fromRoot=#3%
+		\@toRoot=#4%
+	}%
+	\node (center) at ($(\dynkin at root@name \the\@fromRoot)-(0,\dynkin at fold@radius)$) {};%
+	\begin{scope}[on background layer]%
+	\draw[/Dynkin diagram,/Dynkin diagram/edge,fill=none,#2] 
+		(center)
+		++(90:\dynkin at fold@radius)
+		arc [start angle=90, end angle=120, radius=\dynkin at fold@radius];%
+	\draw[/Dynkin diagram,/Dynkin diagram/indefiniteEdge,fill=none,#2]
+		(center)
+		++(120:\dynkin at fold@radius)
+		arc [start angle=120, end angle=150, radius=\dynkin at fold@radius];%
+	\draw[/Dynkin diagram,/Dynkin diagram/edge,fill=none,#2]
+		(center)
+		++(150:\dynkin at fold@radius)
+		arc [start angle=150, end angle=180, radius=\dynkin at fold@radius] -- ($(\dynkin at root@name \the\@toRoot)$);%
+	\end{scope}%
+}%
+
+%% \dynkinDefiniteLeftUpArc{<p>}{<q>}
+%% Draws a quarter circle from root <p> to root <q> on the current Dynkin diagram in the current label ordering.
+%% The starred form accepts <p> and <q> in the Bourbaki ordering.
+\NewDocumentCommand\dynkinDefiniteLeftUpArc{sO{}mm}%
+{%
+	\IfBooleanTF{#1}%
+	{%
+		\convertRootPair{#3}{#4}%
+	}%
+	{%
+		\@fromRoot=#3%
+		\@toRoot=#4%
+	}%
+	\begin{scope}[on background layer]%
+	\draw[/Dynkin diagram,/Dynkin diagram/edge,fill=none,#2] 
+		($(\dynkin at root@name \the\@fromRoot)$) 
+		arc (-90:-180:\dynkin at fold@radius) -- ($(\dynkin at root@name \the\@toRoot)$);%
+	\end{scope}%
+}%
+
+%% \dynkinIndefiniteLeftUpArc{<p>}{<q>}
+%% Draws a quarter circle from root <p> to root <q> on the current Dynkin diagram in the current label ordering.
+%% The starred form accepts <p> and <q> in the Bourbaki ordering.
+\NewDocumentCommand\dynkinIndefiniteLeftUpArc{sO{}mm}%
+{%
+	\IfBooleanTF{#1}%
+	{%
+		\convertRootPair{#3}{#4}%
+	}%
+	{%
+		\@fromRoot=#3%
+		\@toRoot=#4%
+	}%
+	\node (center) at ($(\dynkin at root@name \the\@fromRoot)+(0,\dynkin at fold@radius)$) {};%
+	\begin{scope}[on background layer]%
+	\draw[/Dynkin diagram,/Dynkin diagram/edge,fill=none,#2] 
+		(center)
+		++(-90:\dynkin at fold@radius)
+		arc [start angle=-90, end angle=-120, radius=\dynkin at fold@radius];%
+	\draw[/Dynkin diagram,/Dynkin diagram/indefiniteEdge,fill=none,#2]
+		(center)
+		++(-120:\dynkin at fold@radius)
+		arc [start angle=-120, end angle=-150, radius=\dynkin at fold@radius];%
+	\draw[/Dynkin diagram,/Dynkin diagram/edge,fill=none,#2]
+		(center)
+		++(-150:\dynkin at fold@radius)
+		arc [start angle=-150, end angle=-180, radius=\dynkin at fold@radius] -- ($(\dynkin at root@name \the\@toRoot)$);%
+	\end{scope}%
+}%
+
+
+%% \dynkinDefiniteSemiCircle{<p>}{<q>}
 %% Draws a half circle from root <p> to root <q> on the current Dynkin diagram in the current label ordering.
 %% The starred form accepts <p> and <q> in the Bourbaki ordering.
-\NewDocumentCommand\dynkinsemicircle{sO{}mm}%
+\NewDocumentCommand\dynkinDefiniteSemiCircle{sO{}mm}%
 {%
 	\IfBooleanTF{#1}%
 	{%
@@ -316,14 +670,18 @@
 		\@fromRoot=#3%
 		\@toRoot=#4%
 	}%
-	\draw[\dynkincolor,\dynkinedgestyle,#2] ($(root \the\@fromRoot)$) arc (90:-90:\dynkinedgelength);%
+	\begin{scope}[on background layer]%
+	\draw[/Dynkin diagram,/Dynkin diagram/edge,fill=none,#2] 
+		($(\dynkin at root@name \the\@fromRoot)$) 
+		arc (90:-90:\dynkin at fold@radius)
+		-- ($(\dynkin at root@name \the\@toRoot)$);%
+	\end{scope}%
 }%
 
-%% \dynkindots{<p>}{s<q>}
-%% ->
-%% Draws a dotted line from root <p> to root <q> on the current Dynkin diagram.
+%% \dynkinIndefiniteSemiCircle{<p>}{<q>}
+%% Draws a half circle from root <p> to root <q> on the current Dynkin diagram in the current label ordering.
 %% The starred form accepts <p> and <q> in the Bourbaki ordering.
-\NewDocumentCommand\dynkindots{sO{}mm}%
+\NewDocumentCommand\dynkinIndefiniteSemiCircle{sO{}mm}%
 {%
 	\IfBooleanTF{#1}%
 	{%
@@ -333,14 +691,412 @@
 		\@fromRoot=#3%
 		\@toRoot=#4%
 	}%
-	\draw[densely dotted,\dynkincolor,#2] ($(root \the\@fromRoot)$) -- ($(root \the\@toRoot)$);%
+	\node (center) at ($(\dynkin at root@name \the\@fromRoot)-(0,\dynkin at fold@radius)$) {};%
+	\begin{scope}[on background layer]%
+	\draw[/Dynkin diagram,/Dynkin diagram/edge,fill=none,#2] 
+		(center)
+		++(90:\dynkin at fold@radius)
+		arc [start angle=90, end angle=30, radius=\dynkin at fold@radius];%
+	\draw[/Dynkin diagram,/Dynkin diagram/indefiniteEdge,fill=none,#2]
+		(center)
+		++(30:\dynkin at fold@radius)
+		arc [start angle=30, end angle=-30, radius=\dynkin at fold@radius];%
+	\draw[/Dynkin diagram,/Dynkin diagram/edge,fill=none,#2]
+		(center)
+		++(-30:\dynkin at fold@radius)
+		arc [start angle=-30, end angle=-90, radius=\dynkin at fold@radius] -- ($(\dynkin at root@name \the\@toRoot)$);%
+	\end{scope}%
 }%
 
-%% \dynkindoubleline{<p>}{<q>}
-%% ->
+%% \dynkinDefiniteDoubleRightDownArc{<p>}{<q>}
+%% Draws a quarter circle from root <p> to root <q> on the current Dynkin diagram in the current label ordering
+%% as a double path.
+%% The starred form accepts <p> and <q> in the Bourbaki ordering.
+\NewDocumentCommand\dynkinDefiniteDoubleRightDownArc{sO{}mm}%
+{%
+	\IfBooleanTF{#1}%
+	{%
+		\convertRootPair{#3}{#4}%
+	}%
+	{%
+		\@fromRoot=#3%
+		\@toRoot=#4%
+	}%
+	\begin{scope}[on background layer]%
+	\draw[/Dynkin diagram,/Dynkin diagram/edge,double,fill=none,#2]%
+		($(\dynkin at root@name \the\@fromRoot)$)%
+		arc (90:0:{\dynkin at fold@radius}) -- ($(\dynkin at root@name \the\@toRoot)$);%
+	\ifdynkin at arrows%
+		\ifdynkin at reverse@arrows%
+			\path[-<,tips] 
+				($(\dynkin at root@name \the\@fromRoot)$)%
+				arc (90:45:{\dynkin at fold@radius});%
+		\else%
+			\path[->,tips] 
+				($(\dynkin at root@name \the\@fromRoot)$)%
+				arc (90:45:{\dynkin at fold@radius});%
+		\fi%
+	\fi%
+	\end{scope}%
+}%
+
+
+%% \dynkinDefiniteDoubleUpRightArc{<p>}{<q>}
+%% Draws a quarter circle from root <p> to root <q> on the current Dynkin diagram in the current label ordering
+%% as a double path.
+%% The starred form accepts <p> and <q> in the Bourbaki ordering.
+\NewDocumentCommand\dynkinDefiniteDoubleUpRightArc{sO{}mm}%
+{%
+	\IfBooleanTF{#1}%
+	{%
+		\convertRootPair{#3}{#4}%
+	}%
+	{%
+		\@fromRoot=#3%
+		\@toRoot=#4%
+	}%
+	\begin{scope}[on background layer]%
+	\draw[/Dynkin diagram,/Dynkin diagram/edge,double,fill=none,#2]%
+		($(\dynkin at root@name \the\@fromRoot)$)%
+		arc (180:90:{\dynkin at fold@radius}) -- ($(\dynkin at root@name \the\@toRoot)$);%
+	\ifdynkin at arrows%
+		\ifdynkin at reverse@arrows%
+			\path[-<,tips] 
+				($(\dynkin at root@name \the\@fromRoot)$)%
+				arc (180:135:{\dynkin at fold@radius});%
+		\else%
+			\path[->,tips] 
+				($(\dynkin at root@name \the\@fromRoot)$)%
+				arc (180:135:{\dynkin at fold@radius});%
+		\fi%
+	\fi%
+	\end{scope}%
+}%
+
+
+%% \dynkinDefiniteDoubleUpLeftArc{<p>}{<q>}
+%% Draws a quarter circle from root <p> to root <q> on the current Dynkin diagram in the current label ordering
+%% as a double path.
+%% The starred form accepts <p> and <q> in the Bourbaki ordering.
+\NewDocumentCommand\dynkinDefiniteDoubleUpLeftArc{sO{}mm}%
+{%
+	\IfBooleanTF{#1}%
+	{%
+		\convertRootPair{#3}{#4}%
+	}%
+	{%
+		\@fromRoot=#3%
+		\@toRoot=#4%
+	}%
+	\begin{scope}[on background layer]%
+	\draw[/Dynkin diagram,/Dynkin diagram/edge,double,fill=none,#2]%
+		($(\dynkin at root@name \the\@fromRoot)$)%
+		arc (-90:0:{\dynkin at fold@radius}) -- ($(\dynkin at root@name \the\@toRoot)$);%
+	\ifdynkin at arrows%
+		\ifdynkin at reverse@arrows%
+			\path[-<,tips] 
+				($(\dynkin at root@name \the\@fromRoot)$)%
+				arc (-90:-45:{\dynkin at fold@radius});%
+		\else%
+			\path[->,tips] 
+				($(\dynkin at root@name \the\@fromRoot)$)%
+				arc (-90:-45:{\dynkin at fold@radius});%
+		\fi%
+	\fi%
+	\end{scope}%
+}%
+
+
+
+
+%% \dynkinDefiniteDoubleDownRightArc{<p>}{<q>}
+%% Draws a quarter circle from root <p> to root <q> on the current Dynkin diagram in the current label ordering
+%% as a double path.
+%% The starred form accepts <p> and <q> in the Bourbaki ordering.
+\NewDocumentCommand\dynkinDefiniteDoubleDownRightArc{sO{}mm}%
+{%
+	\IfBooleanTF{#1}%
+	{%
+		\convertRootPair{#3}{#4}%
+	}%
+	{%
+		\@fromRoot=#3%
+		\@toRoot=#4%
+	}%
+	\begin{scope}[on background layer]%
+	\draw[/Dynkin diagram,/Dynkin diagram/edge,double,fill=none,#2]%
+		($(\dynkin at root@name \the\@fromRoot)$)%
+		-- 
+		($(\dynkin at root@name \the\@toRoot)+(-\dynkin at fold@radius,\dynkin at fold@radius)$)%
+		arc (-180:-90:{\dynkin at fold@radius}) -- ($(\dynkin at root@name \the\@toRoot)$);%
+	\ifdynkin at arrows%
+		\ifdynkin at reverse@arrows%
+			\path[-<,tips] 
+				($(\dynkin at root@name \the\@toRoot)+(-\dynkin at fold@radius,\dynkin at fold@radius)$)%
+				arc (-180:-135:{\dynkin at fold@radius});%
+		\else%
+			\path[->,tips] 
+				($(\dynkin at root@name \the\@toRoot)+(-\dynkin at fold@radius,\dynkin at fold@radius)$)%
+				arc (-180:-135:{\dynkin at fold@radius});%
+		\fi%
+	\fi%
+	\end{scope}%
+}%
+
+
+%% \dynkinDefiniteDoubleRightUpArc{<p>}{<q>}
+%% Draws a quarter circle from root <p> to root <q> on the current Dynkin diagram in the current label ordering
+%% as a double path.
+%% The starred form accepts <p> and <q> in the Bourbaki ordering.
+\NewDocumentCommand\dynkinDefiniteDoubleRightUpArc{sO{}mm}%
+{%
+	\IfBooleanTF{#1}%
+	{%
+		\convertRootPair{#3}{#4}%
+	}%
+	{%
+		\@fromRoot=#3%
+		\@toRoot=#4%
+	}%
+	\begin{scope}[on background layer]%
+	\draw[/Dynkin diagram,/Dynkin diagram/edge,double,fill=none,#2]%
+		($(\dynkin at root@name \the\@fromRoot)$)%
+		arc (270:360:{\dynkin at fold@radius}) -- ($(\dynkin at root@name \the\@toRoot)$);%
+	\ifdynkin at arrows%
+		\path[->,tips] 
+			($(\dynkin at root@name \the\@fromRoot)$)%
+			arc (270:315:\dynkin at fold@radius);%
+	\fi%
+	\end{scope}%
+}%
+
+%% \dynkinDefiniteDoubleLeftDownArc{<p>}{<q>}
+%% Draws a quarter circle from root <p> to root <q> on the current Dynkin diagram in the current label ordering
+%% as a double path.
+%% The starred form accepts <p> and <q> in the Bourbaki ordering.
+\NewDocumentCommand\dynkinDefiniteDoubleLeftDownArc{sO{}mm}%
+{%
+	\IfBooleanTF{#1}%
+	{%
+		\convertRootPair{#3}{#4}%
+	}%
+	{%
+		\@fromRoot=#3%
+		\@toRoot=#4%
+	}%
+	\begin{scope}[on background layer]%
+	\draw[/Dynkin diagram,/Dynkin diagram/edge,double,fill=none,#2]%
+		($(\dynkin at root@name \the\@fromRoot)$)%
+		arc (90:180:{\dynkin at fold@radius}) -- ($(\dynkin at root@name \the\@toRoot)$);%
+	\ifdynkin at arrows%
+		\ifdynkin at reverse@arrows%
+			\path[-<,tips] 
+				($(\dynkin at root@name \the\@fromRoot)$)%
+				arc (90:135:{\dynkin at fold@radius});%
+		\else%
+			\path[->,tips] 
+				($(\dynkin at root@name \the\@fromRoot)$)%
+				arc (90:135:{\dynkin at fold@radius});%
+		\fi%
+	\fi%
+	\end{scope}%
+}%
+
+
+%% \dynkinDefiniteDoubleDownLeftArc{<p>}{<q>}
+%% Draws a quarter circle from root <p> to root <q> on the current Dynkin diagram in the current label ordering
+%% as a double path.
+%% The starred form accepts <p> and <q> in the Bourbaki ordering.
+\NewDocumentCommand\dynkinDefiniteDoubleDownLeftArc{sO{}mm}%
+{%
+	\IfBooleanTF{#1}%
+	{%
+		\convertRootPair{#3}{#4}%
+	}%
+	{%
+		\@fromRoot=#3%
+		\@toRoot=#4%
+	}%
+	\begin{scope}[on background layer]%
+	\draw[/Dynkin diagram,/Dynkin diagram/edge,double,fill=none,#2]%
+		($(\dynkin at root@name \the\@fromRoot)$)%
+		arc (360:270:{\dynkin at fold@radius}) -- ($(\dynkin at root@name \the\@toRoot)$);%
+	\ifdynkin at arrows%
+		\ifdynkin at reverse@arrows%
+			\path[-<,tips] 
+				($(\dynkin at root@name \the\@fromRoot)$)%
+				arc (360:315:{\dynkin at fold@radius});%
+		\else%
+			\path[->,tips] 
+				($(\dynkin at root@name \the\@fromRoot)$)%
+				arc (360:315:{\dynkin at fold@radius});%
+		\fi%
+	\fi%
+	\end{scope}%
+}%
+
+
+
+%% \dynkinDefiniteDoubleLeftUpArc{<p>}{<q>}
+%% Draws a quarter circle from root <p> to root <q> on the current Dynkin diagram in the current label ordering
+%% as a double path.
+%% The starred form accepts <p> and <q> in the Bourbaki ordering.
+\NewDocumentCommand\dynkinDefiniteDoubleLeftUpArc{sO{}mm}%
+{%
+	\IfBooleanTF{#1}%
+	{%
+		\convertRootPair{#3}{#4}%
+	}%
+	{%
+		\@fromRoot=#3%
+		\@toRoot=#4%
+	}%
+	\begin{scope}[on background layer]%
+		\draw[/Dynkin diagram,/Dynkin diagram/edge,double,fill=none,#2]%
+			($(\dynkin at root@name \the\@fromRoot)$)%
+			arc (-90:-180:{\dynkin at fold@radius}) -- ($(\dynkin at root@name \the\@toRoot)$);%
+		\ifdynkin at arrows%
+			\ifdynkin at reverse@arrows%
+				\path[-<,tips] 
+					($(\dynkin at root@name \the\@fromRoot)$)%
+					arc (-90:-135:\dynkin at fold@radius);%
+			\else%
+				\path[->,tips] 
+					($(\dynkin at root@name \the\@fromRoot)$)%
+					arc (-90:-135:\dynkin at fold@radius);%
+			\fi%
+		\fi%
+	\end{scope}%
+}%
+
+
+%% \dynkinDefiniteDoubleDownRightSemiCircle{<p>}{<q>}
+%% Draws a semi circle from root <p> to root <q> on the current Dynkin diagram in the current label ordering
+%% as a double path.
+%% The starred form accepts <p> and <q> in the Bourbaki ordering.
+\NewDocumentCommand\dynkinDefiniteDoubleDownRightSemiCircle{sO{}mm}%
+{%
+	\IfBooleanTF{#1}%
+	{%
+		\convertRootPair{#3}{#4}%
+	}%
+	{%
+		\@fromRoot=#3%
+		\@toRoot=#4%
+	}%
+	\begin{scope}[on background layer]%
+		\draw[/Dynkin diagram,/Dynkin diagram/edge,double,fill=none,#2]%
+			($(\dynkin at root@name \the\@fromRoot)$)%
+			arc (90:-90:{\dynkin at fold@radius}) -- ($(\dynkin at root@name \the\@toRoot)$);%
+		\ifdynkin at arrows%
+			\ifdynkin at reverse@arrows%
+				\path[-<,tips] 
+					($(\dynkin at root@name \the\@fromRoot)$)%
+					arc (90:0:\dynkin at fold@radius);%
+			\else%
+				\path[->,tips] 
+					($(\dynkin at root@name \the\@fromRoot)$)%
+					arc (90:0:\dynkin at fold@radius);%
+			\fi%
+		\fi%
+	\end{scope}%
+}%
+
+
+
+%% \dynkinDefiniteDoubleUpRightSemiCircle{<p>}{<q>}
+%% Draws a semi circle from root <p> to root <q> on the current Dynkin diagram in the current label ordering
+%% as a double path.
+%% The starred form accepts <p> and <q> in the Bourbaki ordering.
+\NewDocumentCommand\dynkinDefiniteDoubleUpRightSemiCircle{sO{}mm}%
+{%
+	\IfBooleanTF{#1}%
+	{%
+		\convertRootPair{#3}{#4}%
+	}%
+	{%
+		\@fromRoot=#3%
+		\@toRoot=#4%
+	}%
+	\begin{scope}[on background layer]%
+		\draw[/Dynkin diagram,/Dynkin diagram/edge,double,fill=none,#2]%
+			($(\dynkin at root@name \the\@fromRoot)$)%
+			arc (-90:90:{\dynkin at fold@radius}) -- ($(\dynkin at root@name \the\@toRoot)$);%
+		\ifdynkin at arrows%
+			\ifdynkin at reverse@arrows%
+				\path[-<,tips] 
+					($(\dynkin at root@name \the\@fromRoot)$)%
+					arc (-90:0:\dynkin at fold@radius);%
+			\else%
+				\path[->,tips] 
+					($(\dynkin at root@name \the\@fromRoot)$)%
+					arc (-90:0:\dynkin at fold@radius);%
+			\fi%
+		\fi%
+	\end{scope}%
+}%
+
+
+%% \dynkinEdge[<o>]{<f>}{<p>}{<q>}
+%% Applies \dynkinDefinite<f>[<o>]{<p>}{<q>} if the edge <p><q> is definite, 
+%% otherwise applies \dynkinIndefinite<f>[<o>]{<p>}{<q>}
+%% The starred form accepts <p> and <q> in the Bourbaki ordering.
+\NewDocumentCommand\dynkinEdge{sO{}mmm}%
+{%
+	\IfBooleanTF{#1}%
+	{%
+		\convertRootPair{#4}{#5}%
+		\dynkin at is@edge at indefinite{\@fromRoot}{\@toRoot}%
+		\ifdynkin at is@indefinite at edge%
+			\csname dynkinIndefinite#3\endcsname[#2]{\@fromRoot}{\@toRoot}%
+		\else%
+			\csname dynkinDefinite#3\endcsname[#2]{\@fromRoot}{\@toRoot}%
+		\fi%
+	}%
+	{%
+		\dynkin at is@edge at indefinite{#4}{#5}%
+		\ifdynkin at is@indefinite at edge%
+			\csname dynkinIndefinite#3\endcsname[#2]{#4}{#5}%
+		\else%
+			\csname dynkinDefinite#3\endcsname[#2]{#4}{#5}%
+		\fi%
+	}%
+}%
+
+%% \dynkinEdgeArrow{<p>}{<q>}
+%% Draws an arrow head on the edge from root <p> to root <q>.
+%% The starred form accepts <p> and <q> in the Bourbaki ordering.
+\NewDocumentCommand\dynkinEdgeArrow{sO{}mm}%
+{%
+	\ifdynkin at arrows%
+		\IfBooleanTF{#1}%
+		{%
+			\convertRootPair{#3}{#4}%
+		}%
+		{%
+			\@fromRoot=#3%
+			\@toRoot=#4%
+		}%
+		\begin{scope}[on background layer]%
+			\ifdynkin at reverse@arrows%
+				\path[-<,tips] 
+					($(\dynkin at root@name \the\@fromRoot)$) 
+					-- 
+					($.3*(\dynkin at root@name \the\@fromRoot)+.7*(\dynkin at root@name \the\@toRoot)$);%
+			\else%
+				\path[->,tips] 
+					($(\dynkin at root@name \the\@fromRoot)$) 
+					-- 
+					($.3*(\dynkin at root@name \the\@fromRoot)+.7*(\dynkin at root@name \the\@toRoot)$);%
+			\fi%
+		\end{scope}%
+	\fi%
+}%
+
+%% \dynkinDefiniteDoubleEdge{<p>}{<q>}
 %% Draws an oriented double line from root <p> to root <q> on the current Dynkin diagram.
 %% The starred form accepts <p> and <q> in the Bourbaki ordering.
-\NewDocumentCommand\dynkindoubleline{sO{}mm}%
+\NewDocumentCommand\dynkinDefiniteDoubleEdge{sO{}mm}%
 {%
 	\IfBooleanTF{#1}%
 	{%
@@ -350,20 +1106,50 @@
 		\@fromRoot=#3%
 		\@toRoot=#4%
 	}%
-	\ifdynkinarrows%
-		\draw[double,postaction={decorate},\dynkincolor,\dynkinedgestyle,#2]%
-			($(root \the\@fromRoot)$) -- ($(root \the\@toRoot)$);%
-	\else%
-		\draw[double,\dynkincolor,\dynkinedgestyle,#2]%
-			($(root \the\@fromRoot)$) -- ($(root \the\@toRoot)$);%
+	\newcount\onesbit%
+	\newcount\twosbit%
+	\StrChar{\dynkin at roots}{\the\@fromRoot}[\my at root@marker]%
+	\IfStrEq{\my at root@marker}{x}%
+	{%
+		\global\onesbit=1%
+	}%
+	{%
+		\global\onesbit=0%
+	}%
+	\StrChar{\dynkin at roots}{\the\@toRoot}[\my at root@marker]%
+	\IfStrEq{\my at root@marker}{x}%
+	{%
+		\global\twosbit=1%
+	}%
+	{%
+		\global\twosbit=0%
+	}%
+	\def\LL{.5*\dynkin at root@radius}
+	\begin{scope}[on background layer]%
+		\draw[/Dynkin diagram,/Dynkin diagram/edge,#2]%
+			($(\dynkin at root@name \the\@fromRoot)$)%
+			--%
+			+({\the\onesbit*\LL},{\LL})%
+			--%
+			($(\dynkin at root@name \the\@toRoot)+(-\the\twosbit*\LL,\LL)$)%
+			--%
+			($(\dynkin at root@name \the\@toRoot)$)%
+			--%
+			($(\dynkin at root@name \the\@toRoot)-(\the\twosbit*\LL,\LL)$)%
+			--%
+			($(\dynkin at root@name \the\@fromRoot)+(\the\onesbit*\LL,-\LL)$)%
+			--%
+			cycle;%
+	\end{scope}%
+	\ifdynkin at arrows%
+		\dynkinEdgeArrow[#2]{\the\@fromRoot}{\the\@toRoot}%
 	\fi%
 }%
 
-%% \dynkintripleline{<p><q>}
-%% ->
+%% \dynkinTripleEdge{<p><q>}
 %% Draws an oriented triple line from root <p> to root <q> on the current Dynkin diagram.
 %% The starred form accepts <p> and <q> in the Bourbaki ordering.
-\NewDocumentCommand\dynkintripleline{sO{}mm}%
+\NewDocumentCommand\dynkinTripleEdge{sO{}mm}%
 {%
 	\IfBooleanTF{#1}%
 	{%
@@ -373,292 +1159,952 @@
 		\@fromRoot=#3%
 		\@toRoot=#4%
 	}%
-	\pgfmathparse{mod(div(\dynkinparabolic,2),2)}%
-	\let\onesbit\pgfmathresult%
-	\pgfmathparse{mod(div(\dynkinparabolic,4),2)}%
-	\let\twosbit\pgfmathresult%
-	\draw[\dynkincolor,fill=\dynkinbackcolor,\dynkinedgestyle,#2] %
-		($(root \the\@fromRoot)$)%
-		--%
-		+(\onesbit*\dynkinradius,\dynkinradius)%
-		--%
-		($(root \the\@toRoot)+(-\twosbit*\dynkinradius,\dynkinradius)$)%
-		--%
-		($(root \the\@toRoot)$)%
-		--%
-		($(root \the\@toRoot)-(\twosbit*\dynkinradius,\dynkinradius)$)%
-		--%
-		($(root \the\@fromRoot)+(\onesbit*\dynkinradius,-\dynkinradius)$)%
-		--%
-		cycle;%
-	\ifdynkinarrows%
-		\draw[%
-			\dynkincolor,%
-			\dynkinedgestyle,%
-			-{Classical TikZ Rightarrow[length={3*\dynkinradius}]},%
-			#2%
+	\newcount\onesbit
+	\newcount\twosbit
+	\StrChar{\dynkin at roots}{\the\@fromRoot}[\my at root@marker]%
+	\IfStrEq{\my at root@marker}{x}%
+	{%
+		\global\onesbit=1%
+	}%
+	{%
+		\global\onesbit=0%
+	}%
+	\StrChar{\dynkin at roots}{\the\@toRoot}[\my at root@marker]%
+	\IfStrEq{\my at root@marker}{x}%
+	{%
+		\global\twosbit=1%
+	}%
+	{%
+		\global\twosbit=0%
+	}%
+	\begin{scope}[on background layer]%
+		\draw[/Dynkin diagram,/Dynkin diagram/edge,#2]%
+			($(\dynkin at root@name \the\@fromRoot)$)%
+			--%
+			+({\the\onesbit*\dynkin at root@radius},{\dynkin at root@radius})%
+			--%
+			($(\dynkin at root@name \the\@toRoot)+(-\twosbit*\dynkin at root@radius,\dynkin at root@radius)$)%
+			--%
+			($(\dynkin at root@name \the\@toRoot)$)%
+			--%
+			($(\dynkin at root@name \the\@toRoot)-(\twosbit*\dynkin at root@radius,\dynkin at root@radius)$)%
+			--%
+			($(\dynkin at root@name \the\@fromRoot)+(\onesbit*\dynkin at root@radius,-\dynkin at root@radius)$)%
+			--%
+			cycle;%
+		\draw[/Dynkin diagram,/Dynkin diagram/edge,#2] 
+			($(\dynkin at root@name \the\@fromRoot)$) 
+			-- 
+			($(\dynkin at root@name \the\@toRoot)$);%
+	\end{scope}%
+	\ifdynkin at arrows%
+		\dynkinEdgeArrow[#2]{\the\@fromRoot}{\the\@toRoot}%
+	\fi%
+}%
+
+
+%% \dynkinQuadrupleEdge{<p>}{<q>}
+%% \dynkinQuadrupleEdge*{<p>}{<q>}
+%% Draws an oriented edge of valence 4 from root <p> to root <q> on the current Dynkin diagram.
+%% The starred form accepts <p> and <q> in the Bourbaki ordering.
+\NewDocumentCommand\dynkinQuadrupleEdge{sO{}mm}%
+{%
+	\IfBooleanTF{#1}%
+	{%
+		\convertRootPair{#3}{#4}%
+	}%
+	{%
+		\@fromRoot=#3%
+		\@toRoot=#4%
+	}%
+	\begin{scope}[on background layer]%
+		\draw[%	
+			/Dynkin diagram,
+			/Dynkin diagram/edge,
+			#2,
 			]%
-			($(root \the\@toRoot)$) --%
-			($.65*(root \the\@fromRoot)+.35*(root \the\@toRoot)$);%
+			($(\dynkin at root@name \the\@fromRoot)+(0,\dynkin at root@radius)$)--%
+			($(\dynkin at root@name \the\@toRoot)+(0,\dynkin at root@radius)$)--%
+			($(\dynkin at root@name \the\@toRoot)+(0,-\dynkin at root@radius)$)--%
+			($(\dynkin at root@name \the\@fromRoot)+(0,-\dynkin at root@radius)$)--%
+			cycle;
+		\draw[%	
+			/Dynkin diagram,/Dynkin diagram/edge,
+			#2,
+			]%
+			($(\dynkin at root@name \the\@fromRoot)+(0,\dynkin at root@radius/3)$)--%
+			($(\dynkin at root@name \the\@toRoot)+(0,\dynkin at root@radius/3)$)--%
+			($(\dynkin at root@name \the\@toRoot)+(0,-\dynkin at root@radius/3)$)--%
+			($(\dynkin at root@name \the\@fromRoot)+(0,-\dynkin at root@radius/3)$)--%
+			cycle;
+	\end{scope}%
+	\ifdynkin at arrows%
+		\dynkinEdgeArrow[#2]{\the\@fromRoot}{\the\@toRoot}%
 	\fi%
-	\draw[\dynkincolor,#2] ($(root \the\@fromRoot)$) -- ($(root \the\@toRoot)$);%
 }%
 
 
+%% \repeatCharacter{<n>}{<s>} 
+%% Outputs <n> copies of the string <s>
+\ExplSyntaxOn
+\DeclareExpandableDocumentCommand{\repeatCharacter}{O{}mm}
+ {
+  \int_compare:nT { #2 > 0 }
+   {
+    #3 \prg_replicate:nn { #2 - 1 } { #1#3 }
+   }
+ }
+\ExplSyntaxOff
+
+%% \stringCharacterInPosition{<s>}{<n>} 
+%% Outputs the element of string <s> in position <n>.
+\ExplSyntaxOn
+\cs_new:Npn \stringCharacterInPosition #1 #2
+{
+\str_item:fn { #1 } { #2 }
+}
+\cs_generate_variant:Nn \str_item:nn {f}
+\ExplSyntaxOff
+
+
+
+
 %%% 
 %%% Implementation:
 %%%
 
-\def\dynkinseries{A}    % Which series of root system: A,B,C,D,E,F,G
-\newcount\dynkinrank    % Which rank of root system: 1,2,...
-\newif\ifisaffine       % Is this an affine extended root system?
-\newif\iflabeltheroots  % Should we label the roots by the current root ordering convention?
-\newif\ifdynkinopendots % Should we draw the roots using open circles or closed dots?
-\newif\ifdynkinarrows   % Should we draw arrows on Dynkin diagrams?
-\newif\ifdynkincoxeter  % Should we draw Coxeter diagrams?
-\newif\ifdynkinfolded   % Should we fold our Dynkin diagrams?
+\def\dynkin at diagram@name{anonymous}
+% Default diagram name
 
-\pgfkeys{%
- /dynkin/.is family,%
- /tikz/decoration={markings,mark=at position 0.7 with {\arrow{>}}},%
- /dynkin,%
-	open/.is if = dynkinopendots,%
-	open=false,%
-	Coxeter/.is if = dynkincoxeter,%
-	Coxeter=false,%
-	arrows/.is if = dynkinarrows,%
-	arrows=true,%
-    dotradius/.estore in = \dynkinradius,%
-  	dotradius=.05cm,%
-    color/.store in =\dynkincolor,%
-    backgroundcolor/.store in =\dynkinbackcolor,%
- 	color = black,%
- 	backgroundcolor = white,%
-	edge/.store in = \dynkinedgestyle,%
-	edge = thin,%
-	cross/.store in = \dynkincrossstyle,%
-	cross = thick,%
-	edgelength/.estore in = \dynkinedgelength,%
-	edgelength = .35cm,%
-	ordering/.store in = \dynkinordering,%
-	ordering = Bourbaki,%
-	textscale/.estore in = \dynkintextscale,%
-	textscale = 0.7,%
-	foldarrowstyle/.estore in = \dynkinfoldarrowstyle,%
-	foldarrowstyle = stealth-stealth,%
-	foldarrowcolor/.estore in = \dynkinfoldarrowcolor,%
-	foldarrowcolor = black!50,%
- default/.style = {%
- 	label/.is if = labeltheroots,%
- 	label = false,%
- 	parabolic = 0,%
-	affine/.is if = isaffine,%
-	affine = false,%
-	folded/.is if = dynkinfolded,%
-	folded=false,%
-  	},%
- parabolic/.estore in = \dynkinparabolic,%
- .search also={/tikz},%
+\def\dynkin at root@mark{*} 	
+% Default mark
+
+\def\dynkin at affine@root at mark{o}
+% Default affine root mark
+
+\def\dynkin at roots{}
+% List of marks for each root.
+
+\def\dynkin at user@series{}
+% Series string passed from user. 
+% For example: 
+%      \dynkin{A}{3} passes the string A,
+%      \dynkin{A2}{*o*} passes the string A2,
+%      \dynkin{E2}{} passes the string E2.
+
+\def\dynkin at user@string{}
+% Control string passed from user. 
+% For example: 
+%      \dynkin{A}{3} passes the string 3,
+%      \dynkin{A}{*o*} passes the string *o*,
+%      \dynkin{A}{III} passes the string III.
+
+\def\dynkin at string{}
+% \dynkin at user@string{} with some modifications to it to expand it out.
+
+\def\dynkin at series{A}
+% Which series of root system: A,B,C,D,E,F,G
+
+\newcount\dynkin at rank
+% Which rank of root system: 1,2,...
+
+\newcount\dynkin at nodes
+% How many nodes (besides the zero node for affine diagrams) are there?
+
+\newif\ifdynkin at is@extended
+% Is this an extended extended root system?
+
+\newif\ifdynkin at is@twisted
+% Is this a twisted extended root system?
+
+\def\dynkin at twisted@series{0}
+% Which Kac series? 0=finite, 1,2,3->infinite
+
+\newif\ifdynkin at label@the at roots
+% Should we label the roots by the current root ordering convention?
+
+\newif\ifdynkin at reverse@arrows
+% Should we reverse the directions of all arrows?
+
+\newif\ifdynkin at arrows
+% Should we draw arrows on Dynkin diagrams?
+
+\newif\ifdynkin at left@fold
+% Is the left side of the Dynkin diagram folded?
+
+\newif\ifdynkin at right@fold
+% Is the right side of the Dynkin diagram folded?
+
+\newif\ifdynkin at Coxeter
+% Should we draw Coxeter diagrams?
+
+\newif\ifdynkin at odd
+% For twisted A series diagrams, is the rank odd?
+
+\newcount\dynkin at ply
+% Maximum number of nodes arranged vertically in the folding of the Dynkin diagram
+
+\def\dynkin at ply@value{1}
+% Default maximum number of nodes arranged vertically in the folding of the Dynkin diagram
+
+\def\dynkin at label@directions{}
+% List of directions in which to draw the labels attached to the roots: a=above, b=below, l=left, r=right.
+
+\def\dynkin at current@location{(0,0)}
+
+\NewDocumentCommand\regurgitate{m}{#1}
+
+\pgfkeys{
+ /Dynkin diagram/.is family,
+ /Dynkin diagram,
+	name/.estore in = \dynkin at diagram@name,
+	name = anonymous,
+	mark/.estore in = \dynkin at root@mark,
+	mark = *,
+	affineMark/.estore in = \dynkin at affine@root at mark,
+	affineMark = o,
+	edgeLength/.estore in = \dynkin at edge@length,
+	edgeLength = .35cm,
+	edge/.style={draw=black,fill=white,thin},
+	makeIndefiniteEdge/.code={\dynkin at set@edge at indefinite@pair{#1}},
+	indefiniteEdgeRatio/.estore in = \dynkin at indefinite@edge at ratio,
+	indefiniteEdgeRatio = 1.6,
+	indefiniteEdge/.style={draw=black,fill=white,thin,densely dotted},
+	arrows/.is if = dynkin at arrows,
+	arrows = true,
+	reverseArrows/.is if = dynkin at reverse@arrows,
+	reverseArrows = false,
+	foldStyle/.style = {draw=black!40,fill=none,line width=\dynkin at root@radius},
+	leftFold/.style = {},
+	rightFold/.style = {},
+	doubleEdges/.style = {
+	 	foldStyle/.style = {
+	 		draw=black,
+	 		double=white,
+	 		fill=none,
+	 		double distance=\dynkin at root@radius,
+	 		line width=\defaultpgflinewidth}
+	},
+	doubleFold/.style = {
+	 	foldStyle/.style = {
+	 		draw=black,
+	 		double=black!40,
+	 		fill=none,
+	 		double distance=\dynkin at root@radius,
+	 		line width=\defaultpgflinewidth}
+	},
+	doubleLeft/.style = {
+	 	leftFold/.style = {
+	 		draw=black,
+	 		double=white,
+	 		fill=none,
+	 		double distance=\dynkin at root@radius,
+	 		line width=\defaultpgflinewidth}
+	 	},
+	doubleFoldLeft/.style = {
+	 	leftFold/.style = {
+	 		draw=black,
+	 		double=black!40,
+	 		fill=none,
+	 		double distance=\dynkin at root@radius,
+	 		line width=\defaultpgflinewidth}
+	 	},
+	doubleRight/.style = {
+	 	rightFold/.style = {
+	 		draw=black,
+	 		double=white,
+	 		fill=none,
+	 		double distance=\dynkin at root@radius,
+	 		line width=\defaultpgflinewidth}
+	 	},
+	doubleFoldRight/.style = {
+	 	rightFold/.style = {
+	 		draw=black,
+	 		double=black!40,
+	 		fill=none,
+	 		double distance=\dynkin at root@radius,
+	 		line width=\defaultpgflinewidth}
+	 	},
+	radius/.estore in = \dynkin at root@radius,
+	radius=.05cm,
+	foldradius/.estore in = \dynkin at fold@radius,
+	foldradius=.3cm,
+	*/.style = {
+		draw=black,
+		fill=black,
+	},
+	O/.style = {
+		draw=black,
+		fill=white,
+	},
+	X/.style = {
+		draw=black, 
+		thick
+	},
+	o/.style = {
+		draw=black,
+		fill=white,
+	},
+	t/.style = {
+		draw=black,
+		fill=white,
+	},
+	x/.style = {
+		draw=black,
+	},
+	Coxeter/.is if = dynkin at Coxeter,
+	Coxeter=false,
+	ordering/.store in = \dynkin at ordering,
+	ordering = Bourbaki,
+    text/.style={scale=.7},
+	labelMacro/.code = {\regurgitate{#1}},
+	odd/.is if = dynkin at odd,
+	odd=false,
+	Kac/.style={
+		ordering=Kac,
+		radius=.05cm,
+		edgeLength=.66cm,
+		indefiniteEdgeRatio = 3,
+		o/.style = 
+			{
+			draw=black,
+			fill=white,
+			preaction={
+						draw=white,
+						line width=.9mm
+					}
+			},
+		mark=o,
+		indefiniteEdge/.style={draw=black,fill=white,thin,loosely dotted},	
+	},
+ default/.style = {
+ 	label/.is if = dynkin at label@the at roots,
+ 	label = false,
+	at/.estore in = \dynkin at current@location,
+ 	at = {(0,0)},
+	parabolic/.estore in = \dynkin at parabolic,
+ 	parabolic = 0,
+	gonality/.estore in = \dynkin at gonality,
+	gonality = 0,
+	extended/.is if = dynkin at is@extended,
+	extended = false,
+	twisted/.is if = dynkin at is@twisted,
+	twisted = false,
+	twistedSeries/.estore in = \dynkin at twisted@series,
+	twistedSeries = 0,
+	ply/.estore in = \dynkin at ply@value,
+	ply = 1,
+	fold/.style = {ply=2},
+	foldleft/.is if = dynkin at left@fold,
+	foldleft = false,
+	foldright/.is if = dynkin at right@fold,
+	foldright = false,
+  	},
+	.search also={/tikz},
+}
+
+\ProcessPgfPackageOptions{/Dynkin diagram}\relax
+
+%% \dynkin at put@direction{<r>}{<d>}
+%% Assigns to \dynkin at label@directions the direction that the label of root <r> (in default ordering) should sit from the root node location, <d>=left, right, above, below or diagonal.
+\NewDocumentCommand\dynkin at put@direction{mm}%
+{%
+	\newcount\drpo%
+	\drpo=\the\dynkin at nodes%
+	\advance\drpo by 1%
+	\newcount\dynkin at where%
+	\dynkin at where=#1%
+	\StrMid{\dynkin at label@directions}{1}{\the\dynkin at where}[\dynkin at start]%
+	\advance\dynkin at where by 2
+	\StrMid{\dynkin at label@directions}{\the\dynkin at where}{\the\drpo}[\dynkin at end]%
+	\IfStrEqCase{#2}{%
+		{left}{\xdef\dynkin at label@directions{\dynkin at start l\dynkin at end}}%
+		{right}{\xdef\dynkin at label@directions{\dynkin at start r\dynkin at end}}%
+		{above}{\xdef\dynkin at label@directions{\dynkin at start a\dynkin at end}}%
+		{below}{\xdef\dynkin at label@directions{\dynkin at start b\dynkin at end}}%
+		{diagonal}{\xdef\dynkin at label@directions{\dynkin at start d\dynkin at end}}%
+	}%
+	[\ClassError{Dynkin diagrams}{Unrecognized direction: ``#2'' in Dynkin diagram \dynkin at user@series{\dynkin at user@string}}{}]%
 }%
 
-\ProcessPgfPackageOptions{/dynkin}\relax
 
-% *=not a Satake diagram
-% Anything else is the Roman numeral of the diagram, i.e. EVIII diagrams have numeral VIII.
-\gdef\dynkinSatake{*}
+\xdef\replace at DR{}
 
-\NewDocumentCommand\@dynkin{O{}mm}{%
-	\pgfkeys{/dynkin, default, #1}%
-	\xdef\dynkinseries{#2}%
-	\IfSubStr{ABCDEFGHI}{#2}{}{\errorSeries}%
-	\global\dynkinrank=0%
-	\xdef\dynkinSatake{#3}%
-	\newif\ifwerefolded
-	\ifdynkinfolded
-		\global\werefoldedtrue
-	\else
-		\global\werefoldedfalse
-	\fi
-	\IfInteger{#3}%
+% \expand at Dynkin@Roots at By@Char{<c>}, 
+% for example if <c> is the letter x, expands out any expression like 
+% x7 in \dynkin at string into 7 copies of the letter x.
+\NewDocumentCommand\expand at Dynkin@Roots at By@Char{m}%
+{%
+	\xdef\replace at DR{}
+	\foreach \i in {0,...,9}%
 	{%
-		\global\dynkinrank=#3%
-		\gdef\dynkinSatake{*}%
+		\StrSubstitute[0]{\dynkin at string}{#1\i}{\replace at DR}[\temp at DR]%
+		\xdef\dynkin at string{\temp at DR}%
+		\xdef\replace at DR{\replace at DR #1}%
 	}%
+}%
+
+% \expand at Dynkin@Roots at Digits{} expands out any expression like x7 in \dynkin at roots into 7 copies of the letter x, and so on for any letter which is not a digit.
+\NewDocumentCommand\expand at Dynkin@Roots at Digits{}%
+{%
+	\edef\current at string{\dynkin at string}
+	\StrLen{\current at string}[\string at len]
+	\foreach \j in {1,...,\string at len}%
 	{%
-		\IfStrEqCase{#2}%
+		\StrChar{\current at string}{\j}[\cccc]%
+		\IfInteger{\cccc}%
+		{}%
 		{%
+			\expand at Dynkin@Roots at By@Char{\cccc}%	
+		}%
+	}%
+}%
+
+% \dynkin at integer@rank{} expands a \dynkin at string 3 into ***, i.e.
+% writes the given number <n> of copies of the default root mark into the string \dynkin at string.
+\NewDocumentCommand\dynkin at integer@rank{}%
+{%
+	\global\dynkin at rank=\dynkin at string%
+	\global\dynkin at nodes=\dynkin at string%
+	\ifdynkin at is@twisted%
+		\IfStrEqCase{\dynkin at series}%
+		{%
 			{A}%
 			{%
-				\IfStrEqCase{#3}%
-				{%
-					{*}{	}%
-					{I}{	}%
-					{II}{}%
-					{III}{}%
-					{IV}	{}%
-				}%
-				[\errorRank]%
+				\divide\dynkin at nodes by 2%
+				\ifodd\dynkin at rank%
+					\global\dynkin at oddtrue%
+					\advance\dynkin at nodes by 1%
+				\else%
+					\global\dynkin at oddfalse%
+				\fi%
 			}%
-			{B}%
+			{D}%
 			{%
-				\IfStrEqCase{#3}%
+				\IfStrEqCase{\dynkin at twisted@series}%
 				{%
-					{*}{	}%
-					{I}{}%
-					{II}	{}%
+					{2}%
+					{%
+						\global\advance\dynkin at nodes by -1%
+					}%
+					{3}%
+					{%
+						\IfStrEq{\dynkin at string}{4}%
+						{%
+							\global\dynkin at nodes=2%
+						}%
+						{%
+							\dynkin at error@series%
+						}%
+					}%
 				}%
-				[\errorRank]%
+				[\dynkin at error@series]%
 			}%
-			{C}%
+			{E}%
 			{%
-				\IfStrEqCase{#3}%
+				\IfStrEq{\dynkin at twisted@series}{2}%
 				{%
-					{*}{	}%
-					{I}{}%
-					{II}	{}%
+					\IfStrEq{\dynkin at string}{6}%
+					{%
+						\global\dynkin at nodes=4%
+					}%
+					{%
+						\dynkin at error@series%
+					}%
 				}%
-				[\errorRank]%
-			}%
-			{D}%
-			{%
-				\IfStrEqCase{#3}%
 				{%
-					{*}{	}%
-					{I}{	}%
-					{II}	{}%
-					{III}{}%
+					\dynkin at error@series%
 				}%
-				[\errorRank]%
 			}%
-			{E}%
+		}%
+	\fi%
+	\xdef\dynkin at string{\repeatCharacter{\the\dynkin at nodes}{\dynkin at root@mark}}%
+}%
+
+\NewDocumentCommand\dynkin at clear@indefinite at edge@list{}%
+{%
+	\xdef\dynkin at indefinite@edge at list{}%
+}%
+
+\NewDocumentCommand\dynkin at set@edge at indefinite{mm}%
+{%
+	\newcount\first%
+	\first=#1\relax%
+	\newcount\second%
+	\second=#2\relax%
+	\ifnum\the\first<\the\second%
+		\listxadd\dynkin at indefinite@edge at list{\the\first,\the\second}%
+	\else%
+		\listxadd\dynkin at indefinite@edge at list{\the\second,\the\first}%
+	\fi%
+}%
+
+\NewDocumentCommand\dynkin at set@edge at indefinite@pair{>{\SplitArgument{1}{-}}m}%
+{%
+\dynkin at set@edge at indefinite#1
+}%
+
+\newif\ifdynkin at is@indefinite at edge
+
+\NewDocumentCommand\dynkin at typeout@indefinite at edge@list{}%
+{%
+	\renewcommand*{\do}[1]{\typeout{##1}}%
+	\typeout{Indefinite edges: [}\dolistloop{\dynkin at indefinite@edge at list}\typeout{]}%
+}%
+
+
+%% \dynkin at is@edge at indefinite{<p>}{<q>} sets the global if \ifdynkin at is@indefinite at edge to true or false 
+%% depending on whether there is an indefinite edge between roots <p> and <q>. 
+%% The starred form uses Bourbaki ordering.
+\NewDocumentCommand\dynkin at is@edge at indefinite{smm}%
+{%
+	\IfBooleanTF{#1}%
+	{%
+		\convertRootPair{#2}{#3}%
+	}%
+	{%
+		\@fromRoot=#2%
+		\@toRoot=#3%
+	}%
+	% Next we sort the order, since edges are stored as undirected edges.
+	\newcount\first%
+	\global\first=\@fromRoot\relax%
+	\newcount\second%
+	\global\second=\@toRoot\relax%
+	\ifnum\the\second<\the\first%
+		\global\first=\@toRoot\relax%
+		\global\second=\@fromRoot\relax%
+	\fi%
+	\global\dynkin at is@indefinite at edgefalse\relax%
+	\renewcommand*{\do}[1]{%
+	\IfStrEq{##1}{\the\first,\the\second}%
+		{\global\dynkin at is@indefinite at edgetrue\listbreak}%
+		{}}%
+	\dolistloop{\dynkin at indefinite@edge at list}%
+}%
+
+% \dynkin at grok@indefinite at edges{} reads the input string <s> found when you write \dynkin{<c>}{<s>}, and
+% interprets it to say which edges are indefinite edges.
+\NewDocumentCommand\dynkin at grok@indefinite at edges{}%
+{%
+	\newcount\rootnum
+	\rootnum=1
+	\newcount\dynkin at string@length
+	\StrLen{\dynkin at string}[\temp]%
+	\dynkin at string@length=\temp
+	\foreach \i in {2,...,\the\dynkin at string@length}%
+	{%
+		\StrChar{\dynkin at string}{\i}[\c]%
+		\IfStrEq{\c}{.}%
+		{%
+			\newcount\rootnumpo%
+			\rootnumpo=\rootnum%
+			\advance\rootnumpo by 1\relax%
+			\ifnum\the\rootnum<\the\dynkin at nodes%
+				\dynkin at set@edge at indefinite{\rootnum}{\rootnumpo}%
+			\fi%
+		}%
+		{%
+			\global\advance\rootnum by 1%
+		}%
+	}%
+}%
+
+\xdef\spacy{ }
+
+\xdef\questionMarks{}
+
+\NewDocumentCommand\dynkin at clear@label at directions{}%
+{%
+	\xdef\dynkin at label@directions{}%
+}%
+
+
+\NewDocumentCommand\dynkin at set@default at label@directions{}%
+{%
+	\newcount\drpo%
+	\drpo=\the\dynkin at nodes%
+	\advance\drpo by 1\relax%
+	\xdef\dynkin at label@directions{\repeatCharacter{\the\drpo}{?}}%
+}%
+
+\newlength{\defaultpgflinewidth}%
+
+
+% \@dynkin[<s>]{<X>}[<sb>]{<Y>}
+% Draws a complete Dynkin diagram of 
+% series <X> and 
+% subseries <sb>, 
+% described by the string <Y> 
+% with TikZ options specified by <s>.
+\NewDocumentCommand\@dynkin{O{}mO{0}m}%
+{%
+	\setlength{\defaultpgflinewidth}{\pgflinewidth}%
+	\global\defaultpgflinewidth=\defaultpgflinewidth\relax%
+	\dynkin at clear@indefinite at edge@list%
+	\xdef\dynkin at parabolic{0}%
+	\pgfkeys{/Dynkin diagram, default, #1}%
+	\xdef\dynkin at user@series{#2}%
+	\xdef\dynkin at twisted@series{#3}%
+	\xdef\dynkin at user@string{#4}%
+	\global\dynkin at ply=\dynkin at ply@value\relax%
+	\xdef\dynkin at indefinite@edge at length{(\dynkin at edge@length*\dynkin at indefinite@edge at ratio)}\relax%
+	\xdef\dynkin at series{#2}%
+	\IfStrEq{\dynkin at diagram@name}{anonymous}%
+	{%
+		\xdef\dynkin at root@name{root\spacy}%
+	}%
+	{%
+		\xdef\dynkin at root@name{\dynkin at diagram@name\spacy root\spacy}%
+	}%
+	\dynkin at grok@series%
+	\IfSubStr{ABCDEFGHI}{\dynkin at series}{}{\dynkin at error@series}%
+	\xdef\dynkin at string{#4}
+	\IfInteger{\dynkin at string}%
+	{%
+		\dynkin at integer@rank%
+	}%
+	{%
+		% Turn Satake codes into Dynkin diagram expressions in \dynkin at string.
+		\dynkin at grok@Satake at codes%
+	}%
+	% Expand out any digits in \dynkin at string into multiples of the various root marks.
+	\expand at Dynkin@Roots at Digits%
+	% Assign to \dynkin at roots the input string \dynkin at string with all . symbols removed,
+	% so we only get the symbols representing the marks for the various roots.
+	\StrDel{\dynkin at string}{.}[\temp]%
+	\xdef\dynkin at roots{\temp}%
+	\StrLen{\dynkin at roots}[\temp]%
+	\global\dynkin at nodes=\temp\relax%
+	\dynkin at grok@indefinite at edges%
+	\dynkin at find@rank{}%
+	\dynkin at cross@out at parabolics{}%
+	\dynkin at set@default at label@directions{}%
+	\check at Dynkin@diagram{}%
+	\node (Dynkin current) at \dynkin at current@location{};%
+	\ifdynkin at is@twisted%
+		\csname twisted\dynkin at series dynkin\endcsname%
+	\else%
+		\ifdynkin at is@extended%
+			\csname extended\dynkin at series dynkin\endcsname%
+		\else%
+			\csname\dynkin at series dynkin\endcsname%
+		\fi%
+	\fi%
+	\dynkinRefreshRoots%
+}%
+
+%% We know the number of nodes; lets find the rank.
+\NewDocumentCommand\dynkin at find@rank{}%
+{%
+	\global\dynkin at rank=\the\dynkin at nodes%
+	\ifdynkin at is@twisted%
+		\IfStrEqCase{\dynkin at series}%
+		{%
+			{A}%
 			{%
-				\IfStrEqCase{#3}%
+				\multiply\dynkin at rank by 2%
+				\ifdynkin at odd%
+					\advance\dynkin at rank by -1%
+				\fi%
+			}%
+			{D}%
+			{%
+				\IfStrEqCase{\dynkin at twisted@series}%
 				{%
-					{I}{	\global\dynkinrank=6}%
-					{II}%
+					{2}
 					{%
-						\global\dynkinfoldedtrue%
-						\global\dynkinrank=6%
+						\advance\dynkin at rank by 1%
 					}%
-					{III}%
+					{3}
 					{%
-						\global\dynkinfoldedtrue%
-						\global\dynkinrank=6%
+						\advance\dynkin at rank by 2%
 					}%
-					{IV}%
-					{%
-						\global\dynkinrank=6%
+				}%
+			}%
+			{E}%
+			{%
+				\advance\dynkin at rank by 2%
+			}%
+		}%
+	\fi%
+}%
+
+%% \dynkin at grok@series
+%% Interprets the dynkin at series, to see if it is extended, twisted, and what twisted series it is.
+\NewDocumentCommand\dynkin at grok@series{}%
+{%
+	\newcount\lenny
+	\StrLen{\dynkin at series}[\lenny]
+	\ifnum\lenny>1%
+		\dynkin at error@series%
+	\fi
+	\edef\series{\dynkin at series}
+	\IfStrEqCase{\dynkin at twisted@series}%
+	{%
+		{0}{}%
+		{1}{	\global\dynkin at is@extendedtrue}%
+		{2}{%
+			\IfSubStr{ADE}{\dynkin at series}%
+			{%
+				\global\dynkin at is@twistedtrue%
+			}%
+			{%
+				\dynkin at error@series%
+			}%	
+		}%
+		{3}{%
+			\IfStrEq{\dynkin at series}{D}%
+			{%
+				\global\dynkin at is@twistedtrue%
+			}%
+			{%
+				\dynkin at error@series%
+			}%
+		}%
+	}%
+	[\dynkin at error@series]%
+}%
+
+
+\newif\ifdynkin at Satake@diagram
+
+\NewDocumentCommand\dynkin at grok@Satake at codes{}%
+{%
+	\ifdynkin at is@extended%
+	\else%
+		\ifdynkin at is@twisted%
+		\else%
+			\global\dynkin at Satake@diagramtrue%
+		\fi%
+	\fi%
+	\IfStrEqCase{\dynkin at series}%
+	{%
+		{A}%
+		{%
+			\IfStrEqCase{\dynkin at string}%
+			{%
+				{even}{\gdef\dynkin at string{***.***}\global\dynkin at oddfalse\global\dynkin at Satake@diagramfalse}%
+				{odd}{\gdef\dynkin at string{****.***}\global\dynkin at oddtrue\global\dynkin at Satake@diagramfalse}%
+				{}{\gdef\dynkin at string{**.**}\global\dynkin at Satake@diagramfalse}%
+				{I}{	\gdef\dynkin at string{oo.oo}}%
+				{II}{\gdef\dynkin at string{*o*.o*}}%
+				{IIIa}{\global\dynkin at ply=2\gdef\dynkin at string{oo.o**.**o.oo}}%
+				{IIIb}{\global\dynkin at ply=2\gdef\dynkin at string{oo.ooo.oo}}%
+				{IV}	{\global\dynkin at ply=2\gdef\dynkin at string{o*.*o}}%
+			}%
+			[\global\dynkin at Satake@diagramfalse]%
+		}%
+		{B}%
+		{%
+			\IfStrEqCase{\dynkin at string}%
+			{%
+				{}{%
+					\global\dynkin at Satake@diagramfalse%
+					\ifdynkin at Coxeter%
+						\gdef\dynkin at string{***.***}%
+					\else%
+						\ifdynkin at is@extended%
+							\gdef\dynkin at string{***.***}%
+						\else%
+							\gdef\dynkin at string{**.***}%
+						\fi%
+					\fi%
 					}%
-					{V}%
-					{%
-						\global\dynkinrank=7%
+				{I}{\gdef\dynkin at string{oo.o*.**}}%
+				{II}{\gdef\dynkin at string{o*.**}}%
+			}%
+			[\global\dynkin at Satake@diagramfalse]%
+		}%
+		{C}%
+		{%
+			\IfStrEqCase{\dynkin at string}%
+			{%
+				{}{%
+					\global\dynkin at Satake@diagramfalse%
+					\ifdynkin at Coxeter%
+						\gdef\dynkin at string{***.***}%
+					\else%
+						\gdef\dynkin at string{**.***}%
+					\fi%
 					}%
-					{VI}%
+				{I}{\gdef\dynkin at string{oo.oo}}%
+				{IIa}{\gdef\dynkin at string{*o*.o*.**}}%
+				{IIb}{\gdef\dynkin at string{*o*.o*o}}%
+			}%
+			[\global\dynkin at Satake@diagramfalse]%
+		}%
+		{D}%
+		{%
+			\IfStrEqCase{\dynkin at string}%
+			{%
+				{}{%
+					\global\dynkin at Satake@diagramfalse%
+					\ifdynkin at is@extended%
+							\ifnum\dynkin at ply=4%
+								\gdef\dynkin at string{****.*.*****}
+							\else%
+								\gdef\dynkin at string{***.****}%
+							\fi%
+					\else%
+						\ifdynkin at is@twisted%
+							\IfStrEqCase{\dynkin at twisted@series}%
+							{%
+								{2}{	\gdef\dynkin at string{**.***}}%
+								{3}{\gdef\dynkin at string{***}}%
+							}%
+							[\dynkin at error@series]%
+						\else%
+							\gdef\dynkin at string{**.****}%
+						\fi%
+					\fi%
+				}%
+				{Ia}{\gdef\dynkin at string{oo.o*.***}}%
+				{Ib}{\global\dynkin at ply=2\gdef\dynkin at string{o.ooo}}%
+				{Ic}{\gdef\dynkin at string{o.ooo}}%
+				{II}	{\gdef\dynkin at string{o*.***}}%
+				{IIIa}{\gdef\dynkin at string{*o*.o*o}}%
+				{IIIb}{\global\dynkin at ply=2\gdef\dynkin at string{*o*.o*oo}}%
+			}%
+			[\global\dynkin at Satake@diagramfalse]%
+		}%
+		{E}%
+		{%
+			\IfStrEqCase{\dynkin at string}%
+			{%
+				{}%
+				{%
+					\global\dynkin at Satake@diagramfalse%
+					\IfStrEq{\dynkin at twisted@series}{2}%
 					{%
-						\global\dynkinrank=7%
+						\gdef\dynkin at string{*****}%
 					}%
-					{VII}%
 					{%
-						\global\dynkinrank=7%
+						\dynkin at error@series%
 					}%
-					{VIII}%
-					{%
-						\global\dynkinrank=8%
-					}%
-					{XI}%
-					{%
-						\global\dynkinrank=8%
-					}%
 				}%
-				[\errorRank]%
+				{I}{	\global\dynkin at rank=6\gdef\dynkin at string{oooooo}}%
+				{II}	{\global\dynkin at ply=2\gdef\dynkin at string{oooooo}}%
+				{III}{\global\dynkin at ply=2\gdef\dynkin at string{oo***o}}%
+				{IV}	{\gdef\dynkin at string{oo***o}}%
+				{V}{	\gdef\dynkin at string{ooooooo}}%
+				{VI}	{\gdef\dynkin at string{o*oo*o*}	}%
+				{VII}{\gdef\dynkin at string{o****oo}}%
+				{VIII}{\gdef\dynkin at string{oooooooo}}%
+				{IX}	{\gdef\dynkin at string{o****ooo}}%
 			}%
-			{F}%
+			[\global\dynkin at Satake@diagramfalse]%
+		}%
+		{F}%
+		{%
+			\global\dynkin at rank=4%
+			\IfStrEqCase{\dynkin at string}%
 			{%
-				\global\dynkinrank=4%
-				\IfStrEqCase{#3}%
-				{%
-					{I}{	}%
-					{II}	{}%
-				}%
-				[\errorRank]%
+				{I}{	\gdef\dynkin at string{oooo}}%
+				{II}	{\gdef\dynkin at string{***o}}%
 			}%
-			{G}%
+			[\global\dynkin at Satake@diagramfalse]%
+		}%
+		{G}%
+		{%
+			\IfStrEqCase{\dynkin at string}%
 			{%
-				\global\dynkinrank=2%
-				\IfStrEqCase{#3}%
-				{%
-					{I}{	}%
-				}%
-				[\errorRank]%
+				{I}{\gdef\dynkin at string{oo}}%
 			}%
-			{H}%
+			[\global\dynkin at Satake@diagramfalse]%
+		}%
+		{H}%
+		{%
+			\IfStrEqCase{\dynkin at string}%
 			{%
-				\IfStrEqCase{#3}%
-				{%
-					{*}%
-					{%
-					}%
-				}%
-				[\errorRank]%
+				{}{\gdef\dynkin at string{**}}%
 			}%
-			{I}%
+			[\global\dynkin at Satake@diagramfalse]%
+		}%
+		{I}%
+		{%
+			\IfStrEqCase{\dynkin at string}%
 			{%
-				\IfStrEqCase{#3}%
+				{}{\gdef\dynkin at string{**}}%
 				{%
-					{*}%
-					{%
-					}%
 				}%
-				[\errorRank]%
 			}%
+			[\global\dynkin at Satake@diagramfalse]%
 		}%
-		[\errorSeries]%
 	}%
-	\checkDynkinDiagram%
-	\ifisaffine%
-		\csname affine#2dynkin\endcsname%
+	[\dynkin at error@series]%
+	\ifdynkin at Satake@diagram%
 	\else%
-		\csname#2dynkin\endcsname%
+		\StrSubstitute{\dynkin at string}{*}{\dynkin at root@mark}[\temp]%
+		\xdef\dynkin at string{\temp}%
 	\fi%
-	\iflabeltheroots\dynkinprintlabels\fi%
-	\ifwerefolded
-		\global\dynkinfoldedtrue
-	\else
-		\global\dynkinfoldedfalse
-	\fi
 }%
 
-%% \stringcharacterinposition{<s>}{<n>} 
-%% -> the element of string <s> in position <n>.
-\ExplSyntaxOn
-\cs_new:Npn \stringcharacterinposition #1 #2
-{
-\str_item:fn { #1 } { #2 }
-}
-\cs_generate_variant:Nn \str_item:nn {f}
-\ExplSyntaxOff
+\NewDocumentCommand\dynkin at error@root at ordering{}
+{%
+	\ClassError%
+		{Dynkin diagrams}%
+		{Unrecognized root ordering: ``\dynkin at ordering'' 
+		in Dynkin diagram \dynkin at user@series{\dynkin at user@string}}%
+		{}%
+}%
 
-\NewDocumentCommand\errorRootOrdering{}
+\NewDocumentCommand\dynkin at error@rank{}%
 {%
-	\ClassWarning{Unrecognized root ordering: ``\dynkinordering'' in Dynkin diagram}%
+	\ClassError%
+		{Dynkin diagrams}%
+		{Unrecognized \dynkin at user@series\spacy series rank: 
+		``\the\dynkin at rank'' in Dynkin diagram \dynkin at user@series{\dynkin at user@string}}%
+		{}%
 }%
 
-\NewDocumentCommand\errorRank{}%
+\NewDocumentCommand\dynkin at error@series{}%
 {%
-	\ClassWarning{Unrecognized \dynkinseries{} series rank: ``\the\dynkinrank'' in Dynkin diagram}%
+	\ClassError%
+		{Dynkin diagrams}%
+		{Unrecognized series ``\dynkin at user@series'' 
+		in Dynkin diagram \dynkin at user@series{\dynkin at user@string}}%
+		{}%
 }%
 
-\NewDocumentCommand\errorSeries{}%
+
+\NewDocumentCommand\dynkin at error@ply{}
 {%
-	\ClassWarning{Unrecognized series ``\dynkinseries{}'' in Dynkin diagram}%
+	\ClassError%
+		{Dynkin diagrams}%
+		{Unrecognized ply: ``\the\dynkin at ply'' 
+		in Dynkin diagram \dynkin at user@series{\dynkin at user@string}}%
+		{}%
 }%
 
-%% \checkDynkinDiagram
-%% -> 
+
+%% \check at Dynkin@Roots
+%% Raises error messages for erroneous input in the list of Dynkin roots.
+\NewDocumentCommand\check at Dynkin@Roots{}%
+{%
+	\foreach \i in {1,...,\the\dynkin at nodes}%
+	{%
+		\StrChar{\dynkin at roots}{\i}[\cccc]%
+	    \IfSubStr{*OXotx}{\cccc}%
+		{%
+		}%
+		{%else
+			\ClassError%
+				{Dynkin diagrams}%
+				{Unrecognized Dynkin diagram root mark: 
+				``\cccc'' in Dynkin diagram  \dynkin at user@series{\dynkin at user@string}}%
+				{}%
+		}%
+	}%
+}%
+
+%% \check at Dynkin@diagram
 %% Raises error messages for erroneous inputs.
-\NewDocumentCommand\checkDynkinDiagram{}%
+\NewDocumentCommand\check at Dynkin@diagram{}%
 {%
-	\IfStrEqCase{\dynkinordering}%
+	\IfSubStr{1234}{\the\dynkin at ply}{}{\dynkin at error@ply}%
+	\check at Dynkin@Roots%
+	\IfStrEqCase{\dynkin at ordering}%
 	{%
 		{Adams}{}%
 		{Bourbaki}{}%
@@ -665,23 +2111,41 @@
 		{Carter}{}%
 		{Dynkin}{}%
 		{Kac}{}%
+		{TestOrder}{}%
 	}%
-	[\ClassWarning{Unrecognized label ordering: ``\dynkinordering'' in Dynkin diagram}]%
-	\IfStrEqCase{\dynkinseries}%
+	[\ClassError%
+		{Dynkin diagrams}%
+		{Unrecognized label ordering: ``\dynkin at ordering'' 
+		in Dynkin diagram  \dynkin at user@series{\dynkin at user@string}}%
+		{}]%
+	\IfStrEqCase{\dynkin at series}%
 	{%
 		{A}{}%
 		{B}{}%
 		{C}{}%
-		{D}{}%		
+		{D}{}%
 		{E}%
 		{%
-			\ifnum\dynkinrank=6%
-			\else%
-				\ifnum\dynkinrank=7%
+			\ifnum\dynkin at nodes=5%
+				\ifnum\dynkin at rank=6%
+					\IfStrEq{\dynkin at twisted@series}{2}%
+					{%
+					}%
+					{%
+						\dynkin at error@rank%
+					}%
 				\else%
-					\ifnum\dynkinrank=8%
+					\dynkin at error@rank%
+				\fi%
+			\else
+				\ifnum\dynkin at rank=6%
+				\else%
+					\ifnum\dynkin at rank=7%
 					\else%
-						\errorRank%
+						\ifnum\dynkin at rank=8%
+						\else%
+							\dynkin at error@rank%
+						\fi%
 					\fi%
 				\fi%
 			\fi%
@@ -688,36 +2152,155 @@
 		}%
 		{F}%
 		{%
-			\ifnum\dynkinrank=4%
+			\ifnum\dynkin at rank=4%
 			\else%
-				\errorRank%
+				\dynkin at error@rank%
 			\fi%
 		}%
 		{G}%
 		{%
-			\ifnum\dynkinrank=2%
+			\ifnum\dynkin at rank=2%
 			\else%
-				\errorRank%
+				\dynkin at error@rank%
 			\fi%
 		}%
 		{H}{}%
 		{I}{}%
 	}%
-	[\errorSeries]%
+	[\dynkin at error@series]%
 }%
 
-% We store the number of a root, converted to the current root ordering convention, here.
-\newcount\RootNumber
 
 % A slight headache: all of the routines that draw Dynkin diagrams are written 
 % in Bourbaki ordering. We store the roots in the current ordering.
 % So when we draw edges, we need to convert from the Bourbaki ordering each time.
 % We store the conversions here.
+\newcount\RootNumber
 \newcount\@fromRoot
 \newcount\@toRoot
 
+%% \swapRootIfInLastTwoRoots{<r>}
+%% If the input root <r> is one of the last two roots, then put the other in \RootNumber, otherwise
+%% let \RootNumber be <r>.
+\NewDocumentCommand\swapRootIfInLastTwoRoots{m}%
+{%
+	\ifnum\dynkin at rank>1%
+		\newcount\drmo\relax%
+		\drmo=\dynkin at rank\relax%
+		\advance\drmo by -1\relax%
+		\ifnum\dynkin at rank=#1%
+			\global\RootNumber=\the\drmo\relax%
+		\else%
+			\ifnum\drmo=#1%
+				\global\RootNumber=\the\dynkin at rank\relax%
+			\else%
+				\global\RootNumber=#1\relax%
+			\fi%
+		\fi%
+	\else%
+		\global\RootNumber=#1\relax%
+	\fi%
+}%
+
+%% \convertRootNumber{<n>}
+%% Converts <n> from Bourbaki ordering to the current ordering, storing the result in a count called \RootNumber.
+\NewDocumentCommand\convertRootNumber{m}%
+{%
+	\IfStrEq{#1}{0}%
+	{%
+		\global\RootNumber=0%
+	}%
+	{%
+	\IfStrEqCase{\dynkin at series}%
+	{%
+		{A}%
+		{%
+			\IfStrEqCase{\dynkin at ordering}%
+			{%
+				{TestOrder}%
+				{%
+					\RootNumber=#1
+					\advance\RootNumber by 1
+					\ifnum\RootNumber>\the\dynkin at rank%
+						\RootNumber=1%
+					\fi%
+				}%
+			}%
+			[\global\RootNumber=#1]%
+		}%
+		{D}%
+		{%
+			\IfStrEqCase{\dynkin at ordering}%
+			{%
+				{Adams}{\swapRootIfInLastTwoRoots{#1}}%
+				{Dynkin}{\swapRootIfInLastTwoRoots{#1}}%
+				{Kac}{\swapRootIfInLastTwoRoots{#1}}%
+			}%
+			[\global\RootNumber=#1]%
+		}%
+		{E}%
+		{%
+			\ifdynkin at is@twisted%
+				\global\RootNumber=#1%
+			\else%
+				\ifnum\dynkin at rank=6%
+						\IfStrEqCase{\dynkin at ordering}%
+						{%
+							{Adams}{\global\RootNumber=\stringCharacterInPosition{152436}{#1}}%
+							{Carter}{\global\RootNumber=\stringCharacterInPosition{142356}{#1}}%
+							{Dynkin}{\global\RootNumber=\stringCharacterInPosition{162345}{#1}}%
+							{Kac}{\global\RootNumber=\stringCharacterInPosition{162345}{#1}}%
+						}%
+						[\global\RootNumber=#1]%
+				\else%
+					\ifnum\dynkin at rank=7%
+						\IfStrEqCase{\dynkin at ordering}%
+						{%
+							{Adams}{\global\RootNumber=\stringCharacterInPosition{6354217}{#1}}%
+							{Carter}{\global\RootNumber=\stringCharacterInPosition{7564321}{#1}}%
+							{Dynkin}{\global\RootNumber=\stringCharacterInPosition{1723456}{#1}}%
+							{Kac}{\global\RootNumber=\stringCharacterInPosition{1723456}{#1}}%
+						}%
+						[\global\RootNumber=#1]%			
+					\else%
+						\ifnum\dynkin at rank=8%
+							\IfStrEqCase{\dynkin at ordering}%
+							{%
+								{Adams}{\global\RootNumber=\stringCharacterInPosition{13245678}{#1}}%
+								{Carter}{\global\RootNumber=\stringCharacterInPosition{86754321}{#1}}%
+								{Dynkin}{\global\RootNumber=\stringCharacterInPosition{18234567}{#1}}%
+								{Kac}{\global\RootNumber=\stringCharacterInPosition{78654321}{#1}}%
+							}%
+							[\global\RootNumber=#1]%			
+						\else%
+						\fi%
+					\fi%
+				\fi%
+			\fi%
+		}%
+		{F}%
+		{%
+			\IfStrEqCase{\dynkin at ordering}%
+			{%
+				{Adams}{\global\RootNumber=\stringCharacterInPosition{4321}{#1}}%
+			}%
+			[\global\RootNumber=#1]%
+		}%
+		{G}%
+		{%
+			\IfStrEqCase{\dynkin at ordering}%
+			{%
+				{Carter}{\global\RootNumber=\stringCharacterInPosition{21}{#1}}%
+				{Dynkin}{\global\RootNumber=\stringCharacterInPosition{21}{#1}}%
+			}%
+			[\global\RootNumber=#1]%
+		}%
+	}%
+	[\global\RootNumber=#1]%
+	}%
+}%
+
 %% \convertRootPair{<p>}{<q>}
-%% ->
 %% Stores conversions in \@fromRoot and \@toRoot.
 \NewDocumentCommand\convertRootPair{mm}
 {%
@@ -727,759 +2310,1379 @@
 	\@toRoot=\RootNumber%
 }%
 
+\ExplSyntaxOn
+\NewDocumentCommand\moduloInt{mm}{\int_mod:nn{#1}{#2}}
+\ExplSyntaxOff
+
 %% \testbit{<n>}{<b>}{<f>}{<g>}
 %% If bit number <b> of <n> is 1 then expand <f> else expand <g>.
-\newcommand*{\testbit}[4]%
+\NewDocumentCommand\testbit{mmmm}%
 {%
-	\pgfmathparse{int(mod(div(#1,2^(#2)),2))}%
-	\let\tf\pgfmathresult%
-	\IfStrEq{\tf}{1}{#3}{#4}%
+	\newcount\x\relax%
+	\x=#1\relax%
+	\newcount\whichbit\relax%
+	\whichbit=#2\relax%
+	\ifnum\whichbit>0%
+		\foreach \i in {1,...,#2}%
+		{%
+			\global\divide \x by 2%
+		}%
+	\fi%
+	\xdef\temp{\moduloInt{\the\x}{2}}%
+	\x=\temp\relax%
+	\ifnum\the\x=1 #3\else #4\fi%
 }%
 
-%% \placeRoot{<n>}{<x>}{<y>}
-%% ->
-%% Tell TikZ where to place node <n> (in Bourbaki ordering) for a root of a Dynkin diagram. Draws nothing.
-%% Starred form swaps label positions.
-\NewDocumentCommand\placeRoot{smmm}%
+\NewDocumentCommand\dynkin at put@cross{m}%
 {%
-	\convertRootNumber{#2}%
-	\node (root \the\RootNumber) at ({(#3)*\dynkinedgelength},{(#4)*\dynkinedgelength}) {};%
+	\newcount\dynkin at where%
+	\dynkin at where=#1%
+	\StrMid{\dynkin at roots}{1}{#1}[\dynkin at start]%
+	\advance\dynkin at where by 1%
+	\StrMid{\dynkin at roots}{\the\dynkin at where}{\the\dynkin at nodes}[\dynkin at end]%
+	\xdef\dynkin at roots{\dynkin at start x\dynkin at end}%
+}%
+
+\NewDocumentCommand\dynkin at cross@out at parabolics{}%
+{%
+	\IfInteger{\dynkin at parabolic}%
+	{%
+		\IfStrEq{\dynkin at parabolic}{0}%
+		{%
+		}%
+		{%
+			\newcount\drmo\relax%
+			\drmo=\the\dynkin at nodes\relax%
+			\advance\drmo by -1\relax%
+			\foreach \b in {0,...,\the\drmo}%
+			{%
+				\testbit{\dynkin at parabolic}{\b}{\dynkin at put@cross{\b}}{}%
+			}%
+		}%
+	}%
+}%
+
+\NewDocumentCommand\dynkinMoveToRoot{sm}%
+{%
 	\IfBooleanTF{#1}%
 	{%
-		\node[above] (root label \the\RootNumber)%
-			at ({(#3)*\dynkinedgelength},{((#4)*\dynkinedgelength)+2*\dynkinradius}) {};%
-		\node[below] (root label swap \the\RootNumber)%
-			at ({(#3)*\dynkinedgelength},{((#4)*\dynkinedgelength)-2*\dynkinradius}) {};%
+		\convertRootNumber{#2}%
 	}%
 	{%
-		\node[above] (root label swap \the\RootNumber)%
-			at ({(#3)*\dynkinedgelength},{((#4)*\dynkinedgelength)+2*\dynkinradius}) {};%
-		\node[below] (root label \the\RootNumber)%
-			at ({(#3)*\dynkinedgelength},{((#4)*\dynkinedgelength)-2*\dynkinradius}) {};%
+		\global\RootNumber=#2
 	}%
+	\node (Dynkin current) at (\dynkin at root@name \the\RootNumber){};%
 }%
 
-%% \placeRootHorizontalLabels{<n>}{<x>}{<y>}
-%% ->
-%% Tell TikZ where to place node <n> (in Bourbaki ordering) for a root of a Dynkin diagram. Draws nothing.
-%% Places labels to the left or right of the root.
-%% Starred form swaps label positions.
-\NewDocumentCommand\placeRootHorizontalLabels{smmm}%
+%% \dynkinPlaceRootHere{<n>}{<L>}
+%% \dynkinPlaceRootHere*{<n>}{<L>}
+%% Tell TikZ to place node <n> for a root of a Dynkin diagram at the current
+%% cursor location. Draws nothing.
+%% <L>=label positioning: above, below, left, right
+%% Starred form converts <n> from Bourbaki ordering to default ordering.
+\NewDocumentCommand\dynkinPlaceRootHere{smm}%
 {%
-	\convertRootNumber{#2}%
-	\node (root \the\RootNumber) at ({(#3)*\dynkinedgelength},{(#4)*\dynkinedgelength}) {};%
 	\IfBooleanTF{#1}%
 	{%
-		\node[left] (root label \the\RootNumber)%
-			at ({((#3)*\dynkinedgelength)-\dynkinradius},{(#4)*\dynkinedgelength}) {};%
-		\node[right] (root label swap \the\RootNumber)%
-			at ({((#3)*\dynkinedgelength)+\dynkinradius},{(#4)*\dynkinedgelength}) {};%
+		\convertRootNumber{#2}%
 	}%
 	{%
-		\node[left] (root label swap \the\RootNumber)%
-			at ({((#3)*\dynkinedgelength)-\dynkinradius},{(#4)*\dynkinedgelength}) {};%
-		\node[right] (root label \the\RootNumber)%
-			at ({((#3)*\dynkinedgelength)+\dynkinradius},{(#4)*\dynkinedgelength}) {};%
+		\global\RootNumber=#2
 	}%
+	\node (\dynkin at root@name \the\RootNumber) at (Dynkin current) {};%
+	\dynkin at put@direction{\the\RootNumber}{#3}%
 }%
 
-%% \Adynkinnodes
-%% ->
-%% Tell TikZ where to place the nodes for an A series Dynkin diagram. Draws nothing.
-\newcommand*{\Adynkinnodes}%
+%% \dynkinPlaceRootRelativeTo{<p>}{<q>}{<d>}{<L>}
+%% \dynkinPlaceRootRelativeTo*{<p>}{<q>}{<d>}{<L>}
+%% Tell TikZ to place node <p> for a root of a Dynkin diagram at a location
+%% in direction <d> from root <q>. Draws nothing.
+%% <L> is the label position: above, below, left, right.
+%% <d> is the direction from <q>: 
+%% west,east,south,north,
+%% northeast,northwest,southeast,southwest,
+%% southfold,northfold,
+%% southeastfold,southwestfold,northeastfold,northwestfold.
+%% Starred form is in Bourbaki root ordering; otherwise default ordering.
+\NewDocumentCommand\dynkinPlaceRootRelativeTo{smmmm}%
 {%
-	\ifdynkinfolded%
-		\newcount\halfrank%
-		\halfrank=\dynkinrank%
-		\divide\halfrank by 2%
-		\newcount\countdown%
-		\countdown=\dynkinrank%
-		\ifodd\dynkinrank%
-			\foreach \b in {1,...,\the\halfrank}%
-			{%
-				\placeRoot*{\b}{\b}{1}%
-				\placeRoot{\the\countdown}{\b}{-1}%
-				\ifdynkinarrows%
-					\ifnum\dynkinrank>1%
-						\dynkinfoldarrow*{\b}{\the\countdown}%
-					\fi%
-				\fi%
-				\global\advance\countdown by -1%
-			}%
-			\advance\halfrank by 1%
-			\placeRootHorizontalLabels{\the\halfrank}{\the\halfrank}{0}%
-		\else%
-			\foreach \b in {1,...,\the\halfrank}%
-			{%
-				\placeRoot*{\b}{\b}{1}%
-				\placeRoot{\the\countdown}{\b}{-1}%
-				\ifdynkinarrows%
-					\dynkinfoldarrow*{\b}{\the\countdown}	%
-				\fi%
-				\global\advance\countdown by -1%
-			}%
+	\IfBooleanTF{#1}%
+	{%
+		\convertRootPair{#3}{#2}%
+	}%
+	{%
+		\global\@fromRoot=#3%
+		\global\@toRoot=#2%
+	}%
+	\dynkin at is@edge at indefinite{\@fromRoot}{\@toRoot}%
+	\ifdynkin at is@indefinite at edge%
+		\xdef\dynkin at distance{\dynkin at indefinite@edge at length}
+	\else
+		\xdef\dynkin at distance{\dynkin at edge@length}
+	\fi
+	\IfStrEqCase{#4}%
+	{%
+		{west}{\xdef\x{-\dynkin at distance}\xdef\y{0}}%
+		{east}{\xdef\x{\dynkin at distance}\xdef\y{0}}%
+		{south}{\xdef\x{0}\xdef\y{-\dynkin at distance}}%
+		{north}{\xdef\x{0}\xdef\y{\dynkin at distance}}%
+		{southeast}{\xdef\x{cos(-60)*\dynkin at distance}\xdef\y{sin(-60)*\dynkin at distance}}%
+		{southwest}{\xdef\x{cos(240)*\dynkin at distance}\xdef\y{sin(240)*\dynkin at distance}}%
+		{northeast}{\xdef\x{cos(60)*\dynkin at distance}\xdef\y{sin(60)*\dynkin at distance}}%
+		{northwest}{\xdef\x{cos(120)*\dynkin at distance}\xdef\y{sin(120)*\dynkin at distance}}%
+		{southeastfold}{\xdef\x{\dynkin at fold@radius}\xdef\y{-\dynkin at fold@radius}}%
+		{southwestfold}{\xdef\x{-\dynkin at fold@radius}\xdef\y{-\dynkin at fold@radius}}%
+		{northeastfold}{\xdef\x{\dynkin at fold@radius}\xdef\y{\dynkin at fold@radius}}%
+		{northwestfold}{\xdef\x{-\dynkin at fold@radius}\xdef\y{\dynkin at fold@radius}}%
+		{northfold}{\xdef\x{0}\xdef\y{2*\dynkin at fold@radius}}%
+		{southfold}{\xdef\x{0}\xdef\y{-2*\dynkin at fold@radius}}%
+	}%
+	\node (Dynkin current) at ($(\dynkin at root@name \the\@fromRoot)+({\x},{\y})$){};
+	\dynkinPlaceRootHere{\@toRoot}{#5}%
+}%
+
+%% \dynkinEast
+%% Moves the TikZ cursor one edge to the right.
+%% Starred form for an indefinite edge.
+\NewDocumentCommand\dynkinEast{s}%
+{%
+	\xdef\distance{\IfBooleanTF{#1}{\dynkin at indefinite@edge at length}{\dynkin at edge@length}}
+	\node (Dynkin current) at ($(Dynkin current)+({\distance},0)$) {};%
+}%
+
+
+
+%% \dynkinWest
+%% Moves the TikZ cursor one edge to the left.
+%% Starred form for an indefinite edge.
+\NewDocumentCommand\dynkinWest{s}%
+{%
+	\xdef\distance{\IfBooleanTF{#1}{\dynkin at indefinite@edge at length}{\dynkin at edge@length}}
+	\node (Dynkin current) at ($(Dynkin current)+({-\distance},0)$) {};%
+}%
+
+%% \dynkinNorth
+%% Moves the TikZ cursor one edge up.
+%% Starred form for an indefinite edge.
+\NewDocumentCommand\dynkinNorth{s}%
+{%
+	\xdef\distance{\IfBooleanTF{#1}{\dynkin at indefinite@edge at length}{\dynkin at edge@length}}
+	\node (Dynkin current) at ($(Dynkin current)+(0,{\distance})$) {};%
+}%
+
+%% \dynkinSouth
+%% Moves the TikZ cursor one edge to the left.
+%% Starred form for an indefinite edge.
+\NewDocumentCommand\dynkinSouth{s}%
+{%
+	\xdef\distance{\IfBooleanTF{#1}{\dynkin at indefinite@edge at length}{\dynkin at edge@length}}
+	\node (Dynkin current) at ($(Dynkin current)+(0,{-\distance})$) {};%
+}%
+
+%% \dynkinNorthEast
+%% Moves the TikZ cursor one edge to the north east.
+%% Starred form for an indefinite edge.
+\NewDocumentCommand\dynkinNorthEast{s}%
+{%
+	\xdef\distance{\IfBooleanTF{#1}{\dynkin at indefinite@edge at length}{\dynkin at edge@length}}
+	\node (Dynkin current) at 
+		($(Dynkin current)+
+			({cos(60)*\distance},{sin(60)*\distance})$) {};%
+}%
+
+%% \dynkinSouthEast
+%% Moves the TikZ cursor one edge to the south east.
+%% Starred form for an indefinite edge.
+\NewDocumentCommand\dynkinSouthEast{s}%
+{%
+	\xdef\distance{\IfBooleanTF{#1}{\dynkin at indefinite@edge at length}{\dynkin at edge@length}}
+	\node (Dynkin current) at 
+		($(Dynkin current)+
+			({cos(-60)*\distance},{sin(-60)*\distance})$) {};%
+}%
+
+%% \dynkinNorthWest
+%% Moves the TikZ cursor one edge to the north west.
+%% Starred form for an indefinite edge.
+\NewDocumentCommand\dynkinNorthWest{s}%
+{%
+	\xdef\distance{\IfBooleanTF{#1}{\dynkin at indefinite@edge at length}{\dynkin at edge@length}}
+	\node (Dynkin current) at 
+		($(Dynkin current)+
+			({cos(120)*\distance},{sin(120)*\distance})$) {};%
+}%
+
+%% \dynkinSouthWest
+%% Moves the TikZ cursor one edge to the south west.
+%% Starred form for an indefinite edge.
+\NewDocumentCommand\dynkinSouthWest{s}%
+{%
+	\xdef\distance{\IfBooleanTF{#1}{\dynkin at indefinite@edge at length}{\dynkin at edge@length}}
+	\node (Dynkin current) at 
+		($(Dynkin current)+
+			({cos(240)*\distance},{sin(240)*\distance})$) {};%
+}%
+
+
+%% \dynkinSouthEastFold
+%% Moves the TikZ cursor one edge to the south east in the middle of a fold.
+\NewDocumentCommand\dynkinSouthEastFold{}%
+{%
+	\node (Dynkin current) at ($(Dynkin current)+({\dynkin at fold@radius},{-\dynkin at fold@radius})$) {};%
+}%
+
+%% \dynkinSouthWestFold
+%% Moves the TikZ cursor one edge to the south west in the middle of a fold.
+\NewDocumentCommand\dynkinSouthWestFold{}%
+{%
+	\node (Dynkin current) at ($(Dynkin current)+({-\dynkin at fold@radius},{-\dynkin at fold@radius})$) {};%
+}%
+
+%% \dynkinSouthFold
+%% Moves the TikZ cursor one edge to the south in the middle of a fold.
+\NewDocumentCommand\dynkinSouthFold{}%
+{%
+	\node (Dynkin current) at ($(Dynkin current)+(0,{-2*\dynkin at fold@radius})$) {};%
+}%
+
+\NewDocumentCommand\find at mark@of at root{m}%
+{%
+	\StrChar{\dynkin at roots}{#1}[\my at root@marker]%
+	\my at root@marker
+}%
+
+\NewDocumentCommand\dynkin at draw@all at roots{}%
+{%
+	\foreach \b in {1,...,\the\dynkin at nodes}%
+	{%
+		\StrChar{\dynkin at roots}{\b}[\c]%
+		\dynkinRootMark*{\c}{\b}%
+	}%
+	\ifdynkin at is@extended%
+		\dynkinRootMark*{\dynkin at affine@root at mark}{0}%
+	\else%
+		\ifdynkin at is@twisted%
+			\dynkinRootMark*{\dynkin at affine@root at mark}{0}%
 		\fi%
+	\fi%
+}%
+
+
+%% \dynkin at fold@arrow at if@oo{<p>}{<q>}
+%% Inputs are roots (in Bourbaki ordering).
+%% If we are working on a Satake diagram, and both roots are 
+%% marked with hollow circles o, then draws a fold arrow between them.
+\NewDocumentCommand\dynkin at fold@arrow at if@oo{mm}%
+{%
+	\convertRootPair{#1}{#2}%
+	\ifdynkin at Satake@diagram%
+		\StrChar{\dynkin at roots}{\the\@fromRoot}[\my at root@marker]%
+		\IfStrEq{\my at root@marker}{o}%
+		{%
+				\StrChar{\dynkin at roots}{\the\@toRoot}[\my at other@root at marker]%
+				\IfStrEq{\my at other@root at marker}{o}%
+				{%				
+					\dynkinFold{\the\@fromRoot}{\the\@toRoot}%
+				}%
+				{}%
+		}{}%
 	\else%
-		\foreach \b in {1,...,\the\dynkinrank}%
+		\dynkinFold{\the\@fromRoot}{\the\@toRoot}%
+	\fi%
+}%
+
+%% \dynkin at pipe{<f>}{<t>}{<D>}{<L>}
+%% Layout the roots (as TikZ nodes) <f>, <f>+1, \dots, <t> in the Bourbaki ordering, in a straight line, 
+%% starting at the current position (Dynkin current), moving in the direction <D>=east, west, north, south, with labels placed according to <L>=left,right,above,below.
+%% Assumes that the root <f> is already created as a node in TikZ, but the others are not.
+\NewDocumentCommand\dynkin at pipe{mmmm}%
+{%
+	\newcount\start at root
+	\start at root=#1
+	\ifnum\start at root<#2%
+		\newcount\bmo
+		\bmo=#1
+		\newcount\fpo
+		\fpo=#1
+		\advance\fpo by 1
+		\foreach \b in {\the\fpo,...,#2}%
 		{%
-			\placeRoot{\b}{\b}{0}%
+			\dynkinPlaceRootRelativeTo*{\b}{\the\bmo}{#3}{#4}%
+			\dynkinEdge*{SingleEdge}{\b}{\the\bmo}%
+			\global\advance\bmo by 1%
 		}%
 	\fi%
 }%
 
+%% \dynkin at fold{<f>}{<t>}
+%% Layout the roots (as TikZ nodes) <f>, <f>+1, \dots, <t> in the Bourbaki ordering, in a folded arrangement, 
+%% moving first east, then down, then west, starting at the current position (Dynkin current).
+%% Assumes that the root <f> is already created as a node in TikZ, but the others are not.
+\NewDocumentCommand\dynkin at fold{mm}%
+{%
+	\newcount\h%
+	\h=#1%
+	\advance\h by #2%
+	\advance\h by -1%
+	\divide\h by 2%
+	\dynkin at pipe{#1}{\the\h}{east}{above}
+	\newcount\hpo
+	\hpo=\the\h
+	\advance\hpo by 1
+	\newcount\afterfold
+	\global\afterfold=\the\hpo
+	\newcount\nrts
+	\nrts=#2
+	\advance\nrts by 1
+	\advance\nrts by -#1
+	\ifodd\nrts%
+		\global\advance\afterfold by 1
+		\dynkinPlaceRootRelativeTo*{\the\hpo}{\the\h}{southeastfold}{right}
+		\dynkinEdge*{RightDownArc}{\the\h}{\the\hpo}%
+		\dynkinPlaceRootRelativeTo*{\the\afterfold}{\the\hpo}{southwestfold}{below}
+		\dynkinEdge*{RightUpArc}{\the\afterfold}{\the\hpo}%
+	\else
+		\dynkinPlaceRootRelativeTo*{\the\afterfold}{\the\h}{southfold}{below}
+		\dynkinEdge*{SemiCircle}{\the\h}{\the\afterfold}%
+	\fi
+	\dynkin at pipe{\the\afterfold}{#2}{west}{below}
+	\ifdynkin at arrows%
+		\newcount\countdown%
+		\countdown=#2%
+		\foreach \b in {#1,...,\the\h}%
+		{%
+			\dynkin at fold@arrow at if@oo{\b}{\the\countdown}%
+			\global\advance\countdown by -1%
+		}%
+	\fi%
+}%
+
 %% \Adynkin
-%% ->
 %% Draws an A series Dynkin diagram.
-\newcommand*{\Adynkin}
-{
-	\newif\ifwasfolded
-	\ifdynkinfolded
-		\global\wasfoldedtrue
-	\else
-		\global\wasfoldedfalse
-	\fi
-	\ifnum\dynkinrank=0%
-		\global\dynkinrank=7%
-		% Create the nodes.
-		\Adynkinnodes%
-		% Draw the edges.
-		\dynkinline*{1}{2}%
-		\dynkindots*{2}{3}%
-		\ifdynkinfolded%
-			\dynkindownarc*{3}{4}%
-			\dynkinuparc*{4}{5}%
-		\else%
-			\dynkinline*{3}{4}%
-			\dynkinline*{4}{5}%
-		\fi%
-		\dynkindots*{5}{6}%
-		\dynkinline*{6}{7}%
+\NewDocumentCommand\Adynkin{}%
+{%
+	\ifnum\dynkin at rank=1%
+		\global\dynkin at ply=1\relax%
+	\fi%
+%	% Create the roots.
+	\ifnum\dynkin at ply>1%
+		\dynkinPlaceRootHere*{1}{above}%
+		\dynkin at fold{1}{\the\dynkin at rank}%
 	\else%
-		\ifnum\dynkinrank=1%
-			\global\dynkinfoldedfalse%
+		\dynkinPlaceRootHere*{1}{below}%
+		\ifnum\dynkin at rank>1%
+			\dynkin at pipe{1}{\the\dynkin at rank}{east}{below}%
 		\fi%
-		% Create the nodes.
-		\Adynkinnodes%
-		% Draw the edges.
-		\ifnum\dynkinrank>1%
-			\ifnum\dynkinrank=2%
-				\ifdynkinfolded%
-					\dynkinsemicircle*{1}{2}%
-				\else%
-					\dynkinline*{1}{2}%
-				\fi%
-			\else%
-				\newcount\bpo%
-				\bpo=2%
-				\newcount\drmo%
-				\drmo=\dynkinrank%
-				\advance \drmo by -1%
-				\ifdynkinfolded%
-					\newcount\halfrank%
-					\halfrank=\dynkinrank%
-					\divide\halfrank by 2%
-					\newcount\hrmo%
-					\hrmo=\halfrank%
-					\advance\hrmo by -1%
-					\ifnum\halfrank>1%
-						\foreach \b in {1,...,\the\hrmo}%
-						{%
-							\dynkinline*{\b}{\bpo}%
-							\global\advance\bpo by 1%
-						}%
-					\fi%
-					\newcount\hrpo%
-					\hrpo=\halfrank%
-					\advance\hrpo by 1%
-					\ifodd\dynkinrank%
-						\newcount\hrpt%
-						\hrpt=\hrpo%
-						\advance\hrpt by 1%
-						\dynkindownarc*{\the\halfrank}{\the\hrpo}%
-						\dynkinuparc*{\the\hrpo}{\the\hrpt}%
-						\ifdynkinarrows%
-							\dynkinfoldarrow*{\the\halfrank}{\the\hrpt}%
-						\fi%
-						\global\advance\bpo by 2%
-						\ifnum\hrpt<\dynkinrank%
-							\foreach \b in {\the\hrpt,...,\the\drmo}%
-							{%
-								\dynkinline*{\b}{\bpo}%
-								\global\advance\bpo by 1%
-							}%
-						\fi%
-					\else%
-						\dynkinsemicircle*{\the\halfrank}{\the\hrpo}%
-						\global\advance\bpo by 1%
-						\ifnum\halfrank<\drmo%
-							\foreach \b in {\the\hrpo,...,\the\drmo}%
-							{%
-								\dynkinline*{\b}{\bpo}%
-								\global\advance\bpo by 1%
-							}%
-						\fi%
-					\fi%
-				\else%
-					\foreach \b in {1,...,\the\drmo}%
-					{%
-						\dynkinline*{\b}{\bpo}%
-						\global\advance\bpo by 1%
-					}%
-				\fi%
-			\fi%
-		\fi%
 	\fi%
-	\ifisaffine%
-		\dynkinline*{0}{1}%
-		\dynkinline*{0}{\the\dynkinrank}%
-		\dynkindot*{0}%
-	\fi%
-	% Draw the nodes.
-	\IfStrEqCase{\dynkinSatake}%
-	{%
-		{*}%
-		{%
-			\foreach \b in {1,...,\the\dynkinrank}%
-			{%
-				\testbit{\dynkinparabolic}{\b}{\dynkincross{\b}}{\dynkindot{\b}}%
-			}%
-		}%
-		{I}%
-		{%
-			\ifisaffine%
-				\dynkinline*{0}{1}%
-				\dynkinline*{0}{\the\dynkinrank}%
-				\dynkindot*{0}%
-			\fi%
-			\foreach \b in {1,...,\the\dynkinrank}%
-			{%
-				\testbit{\dynkinparabolic}{\b}{\dynkincross{\b}}{\dynkinopendot{\b}}%
-			}%
-		}%
-		{II}%
-		{%
-			\newcount\bb%
-			\bb=1%
-			\foreach \b in {1,...,\the\dynkinrank}%
-			{%
-				\ifodd\bb%
-					\testbit{\dynkinparabolic}{\b}{\dynkincross{\b}}{\dynkincloseddot{\b}}%
-				\else%
-					\testbit{\dynkinparabolic}{\b}{\dynkincross{\b}}{\dynkinopendot{\b}}%
-				\fi%
-				\global\advance \bb by 1%
-			}%
-		}%
-	}%
-	\ifwasfolded
-		\global\dynkinfoldedtrue
-	\else
-		\global\dynkinfoldedfalse
-	\fi
-}
+}%
 
 %% \Bdynkin 
-%% ->
 %% Draw a B series Dynkin diagram.
 \newcommand*{\Bdynkin}
 {
-	\ifdynkincoxeter
+	\ifnum\dynkin at rank<2
 		\Adynkin
-		\convertRootPair{1}{2}	
-		\node[above] at ($.5*(root \the\@fromRoot)+.5*(root \the\@toRoot)$) {\dynkinprint{4}};
 	\else
-		\ifnum\dynkinrank=0
-			\dynkinrank=5
-			% Create the nodes.
-			\Adynkinnodes
-			% Draw the edges.
-			\dynkinline*{1}{2}
-			\dynkindots*{2}{3}
-			\dynkinline*{3}{4}
-			\dynkindoubleline*{4}{5}
+		\newcount\drmo
+		\drmo=\the\dynkin at rank
+		\advance\drmo by -1
+		\ifdynkin at Coxeter
+			\Adynkin
+			\convertRootPair{\the\drmo}{\the\dynkin at rank}
+			\node[/Dynkin diagram/text,above] 
+			at ($.5*(\dynkin at root@name \the\@fromRoot)+.5*(\dynkin at root@name \the\@toRoot)$) 
+			{\(4\)};
 		\else
-			% Create the nodes.
-			\Adynkinnodes
-			% Draw the edges.
-			\dynkinline*{1}{\the\dynkinrank}%
-			\newcount\rmo
-			\rmo=\dynkinrank
-			\advance \rmo by -1
-			\dynkindoubleline*{\the\rmo}{\the\dynkinrank}
-		\fi
-		% Draw the nodes.
-		\ifisaffine
-			\dynkinline*{0}{2}
-			\dynkindot*{0}
-		\fi
-		\foreach \b in {1,...,\the\dynkinrank}
-		{
-			\testbit{\dynkinparabolic}{\b}{\dynkincross{\b}}{\dynkindot{\b}}
-		}
-	\fi
+			% Create the roots.
+			\ifnum\dynkin at ply>1%	
+				\ifnum\dynkin at rank>3%
+					\dynkinPlaceRootHere*{1}{above}%
+					\dynkinPlaceRootRelativeTo*{2}{1}{east}{above}%
+					\dynkin at fold{2}{\the\drmo}%
+					\dynkinPlaceRootRelativeTo*{\the\dynkin at rank}{\the\drmo}{west}{below}%
+					\dynkinEdge*{DoubleEdge}{\the\drmo}{\the\dynkin at rank}%
+					\dynkinEdge*{SingleEdge}{1}{2}%
+				\else%
+					\ifnum\dynkin at rank=2%
+						\dynkinPlaceRootHere*{1}{left}%
+						\dynkinPlaceRootRelativeTo*{2}{1}{southfold}{left}%
+						\dynkinEdge*{DoubleDownRightSemiCircle}{1}{2}%
+					\else%
+						\dynkinPlaceRootHere*{1}{left}%
+						\dynkinPlaceRootRelativeTo*{2}{1}{southeastfold}{right}%
+						\dynkinPlaceRootRelativeTo*{3}{2}{southwestfold}{left}%
+						\dynkinEdge*{RightDownArc}{1}{2}%
+						\dynkinEdge*{DoubleDownLeftArc}{2}{3}%
+					\fi%
+				\fi%
+			\else%
+				\dynkinPlaceRootHere*{1}{below}
+				\dynkin at pipe{1}{\the\drmo}{east}{below}
+				\dynkinPlaceRootRelativeTo*{\the\dynkin at rank}{\the\drmo}{east}{below}
+				\dynkinEdge*{DoubleEdge}{\the\drmo}{\the\dynkin at rank}%
+			\fi%
+			\ifdynkin at arrows%
+				\ifnum\dynkin at ply>1%
+					\dynkinLeftFold*{1}{\the\dynkin at rank}%
+				\fi%
+			\fi%
+		\fi%
+	\fi%
 }
 
 %% \Cdynkin 
-%% ->
 %% Draws a C series Dynkin diagram.
 \newcommand*{\Cdynkin}
 {
-	\ifdynkincoxeter
-		\Bdynkin
-	\else
-		\ifnum\dynkinrank=0 
-			\dynkinrank=5
-			% Create the nodes.
-			\Adynkinnodes
-			% Draw the edges.
-			\dynkinline*{1}{2}
-			\dynkindots*{2}{3}
-			\dynkinline*{3}{4}
-			\dynkindoubleline*{5}{4}
-		\else
-			% Create the nodes.
-			\Adynkinnodes
-			% Draw the edges.
-			\newcount\rmo
-			\rmo=\dynkinrank
-			\advance\rmo by -1
-			\dynkinline*{1}{\the\rmo}%
-			\dynkindoubleline*{\the\dynkinrank}{\the\rmo}
-		\fi
-		% Draw the nodes.
-		\ifisaffine
-			\dynkindoubleline*{0}{1}
-			\dynkindot*{0}
-		\fi
-		\foreach \b in {1,...,\the\dynkinrank}
-		{
-			\testbit{\dynkinparabolic}{\b}{\dynkincross{\b}}{\dynkindot{\b}}
-		}
-	\fi
+	\ifdynkin at reverse@arrows%
+		\global\dynkin at reverse@arrowsfalse%
+	\else%
+		\global\dynkin at reverse@arrowstrue%
+	\fi%
+	\Bdynkin%
+	\ifdynkin at reverse@arrows%
+		\global\dynkin at reverse@arrowsfalse%
+	\else%
+		\global\dynkin at reverse@arrowstrue%
+	\fi%
 }
 
-%% \Ddynkinnodes
-%% ->
-%% Tell TikZ where to place the nodes for a D series Dynkin diagram. Draws nothing.
-\newcommand*{\Ddynkinnodes}
+%% \Ddynkin at roots
+%% Tell TikZ where to place the @roots for a D series Dynkin diagram. Draws nothing.
+\newcommand*{\Ddynkin at roots}
 {
+	% Create the roots.
+	\ifdynkin at is@extended%
+		\ifnum\dynkin at ply>1%
+			\ifnum\dynkin at rank=4%
+				\dynkinPlaceRootRelativeTo*{2}{0}{southeastfold}{right}%
+			\else%
+				\dynkinPlaceRootRelativeTo*{2}{0}{southeastfold}{below}%
+			\fi%
+			\dynkinPlaceRootRelativeTo*{1}{2}{southwestfold}{left}%
+		\else%	
+			\ifdynkin at left@fold%	
+				\dynkinPlaceRootRelativeTo*{2}{0}{southeastfold}{below}%
+				\dynkinPlaceRootRelativeTo*{1}{2}{southwestfold}{left}%
+			\else%
+				\dynkinPlaceRootRelativeTo*{2}{0}{southeast}{left}%
+				\dynkinPlaceRootRelativeTo*{1}{2}{southwest}{left}%
+			\fi%
+		\fi%
+		\dynkinMoveToRoot*{2}%
+	\else
+		\dynkinPlaceRootHere*{1}{below}
+		\ifnum\dynkin at rank=4%
+			\ifdynkin at right@fold%
+				\dynkinPlaceRootRelativeTo*{2}{1}{east}{below}%
+			\else%			
+				\ifnum\dynkin at ply>1%
+					\dynkinPlaceRootRelativeTo*{2}{1}{east}{below}%
+				\else%
+					\dynkinPlaceRootRelativeTo*{2}{1}{east}{right}%
+				\fi%
+			\fi%
+		\else%
+			\dynkinPlaceRootRelativeTo*{2}{1}{east}{below}%
+		\fi%
+	\fi
 	\newcount\rmo
-	\rmo=\dynkinrank
+	\rmo=\dynkin at rank
 	\advance \rmo by -1
 	\newcount\rmt
 	\rmt=\rmo
 	\advance\rmt by -1
-	% Create the nodes.
-	\foreach \b in {1,...,\the\rmt}
-	{
-		\placeRoot{\b}{\b}{0}
-	}
-	\pgfmathparse{subtract(\the\rmo,.5)}
-	\let\rmh\pgfmathresult
-	\ifdynkinfolded
-		\placeRoot{\the\rmo}{\rmh}{-.9}
-		\placeRoot*{\the\dynkinrank}{\rmh}{.9}
-	\else
-		\placeRootHorizontalLabels{\the\rmo}{\rmh}{-.9}
-		\placeRootHorizontalLabels{\the\dynkinrank}{\rmh}{.9}
-	\fi
-}
+	\newcount\rmth
+	\rmth=\rmt
+	\advance\rmth by -1
+	\ifnum\dynkin at rank>2
+		\ifnum\dynkin at rank>5%
+			\dynkinPlaceRootRelativeTo*{3}{2}{east}{below}%
+		\else%
+			\ifnum\dynkin at ply>1%
+				\dynkinPlaceRootRelativeTo*{3}{2}{east}{below}%
+			\else%
+%				\ifdynkin at left@fold%	
+%					\dynkinPlaceRootRelativeTo*{3}{2}{east}{below}%
+%				\else%
+					\ifnum\dynkin at rank=5%
+						\ifdynkin at right@fold%	
+							\dynkinPlaceRootRelativeTo*{3}{2}{east}{below}%
+						\else%
+							\dynkinPlaceRootRelativeTo*{3}{2}{east}{right}%
+						\fi%
+					\else%
+						\dynkinPlaceRootRelativeTo*{3}{2}{east}{right}%
+					\fi%
+%				\fi%
+			\fi%
+		\fi%
+		\ifnum\rmth>3%
+			\dynkin at pipe{3}{\the\rmth}{east}{below}%
+		\fi%
+		\ifnum\rmt>3%
+			\ifnum\dynkin at ply>1%
+				\dynkinPlaceRootRelativeTo*{\rmt}{\rmth}{east}{below}%
+			\else%
+				\ifdynkin at right@fold%
+					\dynkinPlaceRootRelativeTo*{\rmt}{\rmth}{east}{below}%
+				\else%
+					\dynkinPlaceRootRelativeTo*{\rmt}{\rmth}{east}{right}%
+				\fi%
+			\fi%
+			\dynkinEdge*{SingleEdge}{\rmt}{\rmth}%
+		\fi%
+		\ifnum\dynkin at ply=1%
+			\ifdynkin at right@fold%
+				\dynkinPlaceRootRelativeTo*{\the\rmo}{\the\rmt}{northeastfold}{right}%
+				\dynkinPlaceRootRelativeTo*{\the\dynkin at rank}{\the\rmt}{southeastfold}{right}%
+			\else%
+				\dynkinPlaceRootRelativeTo*{\the\rmo}{\the\rmt}{northeast}{right}%
+				\dynkinPlaceRootRelativeTo*{\the\dynkin at rank}{\the\rmt}{southeast}{right}%
+			\fi%
+		\else%
+			\dynkinPlaceRootRelativeTo*{\the\rmo}{\the\rmt}{northeastfold}{right}%
+			\dynkinPlaceRootRelativeTo*{\the\dynkin at rank}{\the\rmt}{southeastfold}{right}%
+		\fi%
+	\fi%
+}%
 
+%% \Ddynkin at edges
+%% Draws edges on a D series Dynkin diagram.
+\NewDocumentCommand\Ddynkin at edges{}%
+{%
+	% Draw the edges.
+	\newcount\rmo
+	\rmo=\dynkin at rank
+	\advance \rmo by -1
+	\newcount\rmt
+	\rmt=\rmo
+	\advance\rmt by -1
+	\newcount\rmtr
+	\rmtr=\rmt
+	\advance\rmtr by -1
+	\ifnum\dynkin at ply>1%	
+		\ifdynkin at is@extended%
+			\dynkinEdge*{RightUpArc}{1}{2}%
+		\else%
+			\dynkinEdge*{SingleEdge}{1}{2}%
+		\fi%
+		\ifnum\dynkin at rank>4%
+			\dynkinEdge*{SingleEdge}{2}{3}%
+		\fi%
+		\dynkinEdge*{LeftDownArc}{\the\rmo}{\the\rmt}%
+		\dynkinEdge*{LeftUpArc}{\the\dynkin at rank}{\the\rmt}%
+		\ifdynkin at arrows%
+			\dynkinRightFold*{\the\rmo}{\the\dynkin at rank}%
+			\ifdynkin at is@extended%
+				\dynkinLeftFold*{0}{1}%
+			\fi%
+		\fi%
+	\else%
+		\ifnum\dynkin at rank=4%
+		\else%
+			\dynkinEdge*{SingleEdge}{2}{3}%
+		\fi%
+		\ifdynkin at is@extended%
+			\ifdynkin at left@fold%	
+				\dynkinEdge*{RightUpArc}{1}{2}%
+				\ifdynkin at arrows%
+					\ifdynkin at is@extended%
+						\dynkinLeftFold*{0}{1}%
+					\fi%
+				\fi%
+			\else%
+				\dynkinEdge*{SingleEdge}{1}{2}%
+			\fi%
+		\else%
+			\dynkinEdge*{SingleEdge}{1}{2}%
+		\fi%
+		\ifdynkin at right@fold%	
+				\dynkinEdge*{LeftDownArc}{\the\rmo}{\the\rmt}%
+				\dynkinEdge*{LeftUpArc}{\the\dynkin at rank}{\the\rmt}%
+				\dynkinRightFold*{\the\rmo}{\the\dynkin at rank}%
+		\else%
+			\dynkinEdge*{SingleEdge}{\the\rmt}{\the\rmo}%
+			\dynkinEdge*{SingleEdge}{\the\rmt}{\the\dynkin at rank}%
+		\fi%
+	\fi%
+}%
+
+%% \DthreePly
+%% Draws a D series Dynkin diagram of rank 4, folded over a G2.
+\NewDocumentCommand\DthreePly{}%
+{%
+	\dynkinPlaceRootHere*{2}{right}%
+	\xdef\old at edge@length{\dynkin at edge@length}%
+	\pgfmathparse{1.5*\dynkin at edge@length}%
+	\xdef\dynkin at edge@length{\pgfmathresult pt}%
+	\dynkinPlaceRootRelativeTo*{3}{2}{south}{right}%
+	\dynkinPlaceRootRelativeTo*{4}{3}{south}{right}%
+	\xdef\dynkin at edge@length{\old at edge@length}%
+	\dynkinPlaceRootRelativeTo*{1}{3}{west}{left}%
+	\edef\old at fold@radius{\dynkin at fold@radius}%
+	\xdef\dynkin at fold@radius{\dynkin at edge@length}%
+	\dynkinEdge*{SingleEdge}{1}{3}%
+	\dynkinEdge*{LeftDownArc}{2}{1}%
+	\dynkinEdge*{LeftUpArc}{4}{1}%
+	\xdef\dynkin at fold@radius{\old at fold@radius}%
+	\ifdynkin at arrows%
+		\dynkin at fold@arrow at if@oo{2}{3}%
+		\dynkin at fold@arrow at if@oo{3}{4}%
+	\fi%
+}%
+
 %% \Ddynkin 
-%% ->
 %% Draws a D series Dynkin diagram.
-\newcommand*{\Ddynkin}%
-{
-	\ifnum\dynkinrank=1
-		\gdef\dynkinseries{A}
-		\Adynkin
-	\else
-		\ifnum\dynkinrank=0 
-			\dynkinrank=6
-			\Ddynkinnodes
-			% Draw the edges.
-			\dynkinline*{1}{2}
-			\dynkindots*{2}{3}
-			\dynkinline*{3}{4}
-			\dynkinline*{4}{5}
-			\dynkinline*{4}{6}
-		\else
-			\Ddynkinnodes
-			% Draw the edges.
-			\dynkinline*{1}{\the\rmt}
-			\dynkinline*{\the\rmt}{\the\rmo}
-			\dynkinline*{\the\rmt}{\the\dynkinrank}
-		\fi
-		\ifdynkinfolded
-			\ifdynkinarrows
-				\draw[\dynkinfoldarrowstyle,\dynkinfoldarrowcolor]
-					(root \the\rmo.east) 
-					to [out=45, in=-45] 
-					(root \the\dynkinrank.east); 
-			\fi
-		\fi
-		% Draw the nodes.
-		\ifisaffine
-		\dynkinline*{0}{2}
-			\dynkindot*{0}
-		\fi
-		\foreach \b in {1,...,\the\dynkinrank}
-		{
-			\testbit{\dynkinparabolic}{\b}{\dynkincross{\b}}{\dynkindot{\b}}
-		}
-	\fi
-}
+\NewDocumentCommand\Ddynkin{}%
+{%
+	\ifnum\dynkin at rank>3%
+		\ifnum\dynkin at rank=4%
+			\ifnum\dynkin at ply=3%
+				\DthreePly%
+			\else%
+				\Ddynkin at roots%
+				\Ddynkin at edges%
+			\fi%
+		\else%
+			\Ddynkin at roots%
+			\Ddynkin at edges%
+		\fi%
+	\else%
+		\gdef\dynkin at series{A}%
+		\Adynkin%
+		\ifnum\dynkin at ply>1%	
+			\ifdynkin at arrows%
+				\ifnum\dynkin at rank=1%
+				\else%
+					\dynkinLeftFold*{1}{\the\dynkin at rank}%
+				\fi%
+			\fi%
+		\fi%
+	\fi%
+}%
 
-%% \Edynkinunfolded
-%% ->
+%% \Edynkin at unfolded
 %% Draws an E series Dynkin diagram not folded.
-\newcommand*{\Edynkinunfolded}%
+\newcommand*{\Edynkin at unfolded}%
 {
-	% Create the nodes.
-	\placeRoot{1}{1}{0}
-	\ifisaffine
-		\ifnum\dynkinrank=6
-			\placeRootHorizontalLabels{2}{3}{1}
+	% Create the @roots.
+	\dynkinPlaceRootHere*{1}{below}%
+	\dynkinPlaceRootRelativeTo*{3}{1}{east}{below}%
+	\dynkinPlaceRootRelativeTo*{4}{3}{east}{below}%
+	\ifdynkin at is@extended
+		\ifnum\dynkin at rank=6
+			\dynkinPlaceRootRelativeTo*{2}{4}{north}{right}%
 		\else
-			\placeRoot*{2}{3}{1}
+			\dynkinPlaceRootRelativeTo*{2}{4}{north}{above}%
 		\fi
 	\else
-		\placeRoot*{2}{3}{1}
+		\dynkinPlaceRootRelativeTo*{2}{4}{north}{above}%
 	\fi
-	\foreach \b in {3,...,\dynkinrank}
-	{
-		\newcount\bmo
-		\bmo=\b
-		\advance\bmo by -1
-		\placeRoot{\b}{\the\bmo}{0}
-	}
-%	% Draw the edges.
-	\dynkinline*{1}{\the\dynkinrank}
-	\dynkinline*{2}{4}
-}
+	\newcount\bmo\relax%
+	\bmo=4\relax%
+	\foreach \b in {5,...,\dynkin at rank}%
+	{%
+		\dynkinPlaceRootRelativeTo*{\b}{\the\bmo}{east}{below}%
+		\dynkinEdge*{SingleEdge}{\the\bmo}{\b}%
+		\global\advance\bmo by 1%
+	}%
+%	% Draw the remaining edges.
+	\dynkinEdge*{SingleEdge}{1}{3}
+	\dynkinEdge*{SingleEdge}{3}{4}
+	\dynkinEdge*{SingleEdge}{4}{2}
+	\ifdynkin at is@extended%
+		\ifnum\dynkin at rank=6%
+			\dynkinPlaceRootRelativeTo*{0}{2}{north}{above}%
+			\dynkinEdge*{SingleEdge}{0}{2}%
+		\else%
+			\ifnum\dynkin at rank=7%
+				\dynkinPlaceRootRelativeTo*{0}{1}{west}{below}%
+				\dynkinEdge*{SingleEdge}{0}{1}%
+			\else%
+				\dynkinPlaceRootRelativeTo*{0}{8}{east}{below}%
+				\dynkinEdge*{SingleEdge}{0}{8}%
+			\fi%
+		\fi%
+	\fi%
+}%
 
 
-%% \Edynkinfolded
-%% ->
-%% Draws a folded E6 Dynkin diagram.
-\newcommand*{\Edynkinfolded}%
-{
-	\placeRoot*{1}{0}{1}
-	\placeRoot*{3}{1}{1}
-	\placeRootHorizontalLabels*{4}{2}{0}
-	\placeRootHorizontalLabels{2}{3}{0}
-	\placeRoot{5}{1}{-1}
-	\placeRoot{6}{0}{-1}
-	\dynkinline*{1}{3}
-	\dynkinline*{2}{4}
-	\dynkinline*{5}{6}
-	\dynkindownarc*{3}{4}
-	\dynkinuparc*{4}{5}
-}
+%% \Edynkin at folded
+%% Draws a folded E6, affine E6 or affine E7 Dynkin diagram.
+\NewDocumentCommand\Edynkin at folded{}%
+{%
+	\ifnum\dynkin at rank=6%
+		\ifnum\dynkin at ply=2\ESixTwoPly\else\ESixThreePly\fi%
+	\else%
+		\extendedESevenFolded%
+	\fi%
+}%
 
+\NewDocumentCommand\ESixTwoPly{}%
+{%
+	\dynkinPlaceRootHere*{1}{above}%
+	\dynkinPlaceRootRelativeTo*{3}{1}{east}{above}%
+	\dynkinPlaceRootRelativeTo*{4}{3}{southeastfold}{below}%
+	\dynkinPlaceRootRelativeTo*{5}{4}{southwestfold}{below}%
+	\dynkinPlaceRootRelativeTo*{6}{5}{west}{below}%
+	\ifdynkin at is@extended%
+		\dynkinPlaceRootRelativeTo*{2}{4}{east}{below}%
+		\dynkinPlaceRootRelativeTo*{0}{2}{east}{right}%
+		\dynkinEdge*{SingleEdge}{0}{2}%
+	\else%
+		\dynkinPlaceRootRelativeTo*{2}{4}{east}{right}%
+	\fi%
+	\dynkinEdge*{SingleEdge}{1}{3}%
+	\dynkinEdge*{SingleEdge}{2}{4}%
+	\dynkinEdge*{SingleEdge}{5}{6}%
+	\dynkinEdge*{RightDownArc}{3}{4}%
+	\dynkinEdge*{RightUpArc}{5}{4}%
+	\ifdynkin at arrows%
+		\dynkin at fold@arrow at if@oo{1}{6}%
+		\dynkin at fold@arrow at if@oo{3}{5}%
+	\fi%
+}%
+
+
+\NewDocumentCommand\ESixThreePly{}%
+{%
+	\dynkinPlaceRootHere*{3}{above}%
+	\edef\old at edge@length{\dynkin at edge@length}%
+	\pgfmathparse{1.5*\dynkin at edge@length}%
+	\xdef\dynkin at edge@length{\pgfmathresult pt}%
+	\dynkinPlaceRootRelativeTo*{2}{3}{south}{diagonal}%
+	\dynkinPlaceRootRelativeTo*{5}{2}{south}{below}%
+	\xdef\dynkin at edge@length{\old at edge@length}%
+	\dynkinPlaceRootRelativeTo*{1}{3}{west}{left}%
+	\dynkinPlaceRootRelativeTo*{0}{2}{west}{left}%
+	\dynkinPlaceRootRelativeTo*{6}{5}{west}{left}%
+	\edef\old at fold@radius{\dynkin at fold@radius}%
+	\xdef\dynkin at fold@radius{\dynkin at edge@length}%
+	\dynkinPlaceRootRelativeTo*{4}{2}{east}{right}%
+	\dynkinEdge*{SingleEdge}{4}{2}%
+	\dynkinEdge*{SingleEdge}{3}{1}%
+	\dynkinEdge*{SingleEdge}{2}{0}%
+	\dynkinEdge*{SingleEdge}{5}{6}%
+	\dynkinEdge*{RightDownArc}{3}{4}%
+	\dynkinEdge*{RightUpArc}{5}{4}%
+	\xdef\dynkin at fold@radius{\old at fold@radius}%
+	\ifdynkin at arrows%
+		\dynkin at fold@arrow at if@oo{1}{0}%
+		\dynkin at fold@arrow at if@oo{6}{0}%
+		\dynkin at fold@arrow at if@oo{3}{2}%
+		\dynkin at fold@arrow at if@oo{2}{5}%
+	\fi%
+}%
+
+\NewDocumentCommand\extendedESevenFolded{}%
+{%
+	\dynkinPlaceRootHere*{0}{above}%
+	\dynkinPlaceRootRelativeTo*{1}{0}{east}{above}%
+	\dynkinPlaceRootRelativeTo*{3}{1}{east}{above}%
+	\dynkinPlaceRootRelativeTo*{4}{3}{southeastfold}{left}%
+	\dynkinPlaceRootRelativeTo*{5}{4}{southwestfold}{below}%
+	\dynkinPlaceRootRelativeTo*{6}{5}{west}{below}%
+	\dynkinPlaceRootRelativeTo*{7}{6}{west}{below}%
+	\dynkinPlaceRootRelativeTo*{2}{4}{east}{below}%
+	\dynkinEdge*{SingleEdge}{0}{1}%
+	\dynkinEdge*{SingleEdge}{1}{3}%
+	\dynkinEdge*{SingleEdge}{2}{4}%
+	\dynkinEdge*{SingleEdge}{5}{6}%
+	\dynkinEdge*{SingleEdge}{6}{7}%
+	\dynkinEdge*{RightDownArc}{3}{4}%
+	\dynkinEdge*{RightUpArc}{5}{4}%
+	\ifdynkin at arrows%
+		\dynkin at fold@arrow at if@oo{0}{7}%
+		\dynkin at fold@arrow at if@oo{1}{6}%
+		\dynkin at fold@arrow at if@oo{3}{5}%
+	\fi%
+}%
+
+
 %% \Edynkin
-%% ->
 %% Draws an E6 Dynkin diagram.
-\newcommand*{\Edynkin}%
-{
-	\ifdynkinfolded
-		\ifnum\dynkinrank=6
-			\Edynkinfolded
-		\else
-			\ClassWarning{Can not fold a diagram of type \dynkinseries\the\dynkinrank.}
-		\fi
-	\else
-		\Edynkinunfolded
-	\fi
-	% Draw the nodes.
-	\ifisaffine
-		\ifnum\dynkinrank=6
-			\dynkinline*{0}{2}
-		\else
-			\dynkinline*{0}{1}
-		\fi
-		\dynkindot{0}
-	\fi
-	\IfStrEqCase{\dynkinSatake}%
-	{%
-		{*}%
-		{%
-			\foreach \b in {1,...,\the\dynkinrank}%
-			{%
-				\testbit{\dynkinparabolic}{\b}{\dynkincross{\b}}{\dynkindot{\b}}%
-			}%
-			\ifdynkinfolded
-				\ifdynkinarrows
-					\dynkinfoldarrow*{1}{6}
-					\dynkinfoldarrow*{3}{5}
-				\fi
-			\fi
-		}%
-		{I}%
-		{%
-			\foreach \b in {1,...,6}%
-			{%
-				\testbit{\dynkinparabolic}{\b}{\dynkincross{\b}}{\dynkinopendot{\b}}%
-			}%
-		}%
-		{II}%
-		{%
-			\ifdynkinarrows
-				\dynkinfoldarrow*{1}{6}%
-				\dynkinfoldarrow*{3}{5}%
-			\fi
-			\foreach \b in {1,...,6}%
-			{%
-				\testbit{\dynkinparabolic}{\b}{\dynkincross{\b}}{\dynkinopendot{\b}}%
-			}%
-		}%
-		{III}%
-		{%
-			\dynkinfoldarrow*{1}{6}%
-			\foreach \b in {1,2,6}%
-			{%
-				\dynkinopendot*{\b}%
-			}%
-			\foreach \b in {3,4,5}%
-			{%
-				\dynkincloseddot*{\b}%
-			}%
-		}%
-		{IV}%
-		{%
-			\foreach \b in {1,6}%
-			{%
-				\dynkinopendot*{\b}%
-			}%
-			\foreach \b in {2,3,4,5}%
-			{%
-				\dynkincloseddot*{\b}%
-			}%
-		}%
-		{V}%
-		{%
-			\foreach \b in {1,...,7}%
-			{%
-				\testbit{\dynkinparabolic}{\b}{\dynkincross{\b}}{\dynkinopendot{\b}}%
-			}%
-		}%
-		{VI}%
-		{%
-			\foreach \b in {1,3,4,6}%
-			{%
-				\dynkinopendot*{\b}%
-			}%
-			\foreach \b in {2,5,7}%
-			{%
-				\dynkincloseddot*{\b}%
-			}%
-		}%
-		{VII}%
-		{%
-			\foreach \b in {1,6,7}%
-			{%
-				\dynkinopendot*{\b}%
-			}%
-			\foreach \b in {2,3,4,5}%
-			{%
-				\dynkincloseddot*{\b}%
-			}%
-		}%
-		{VIII}%
-		{%
-			\foreach \b in {1,...,8}%
-			{%
-				\testbit{\dynkinparabolic}{\b}{\dynkincross{\b}}{\dynkinopendot{\b}}%
-			}%
-		}%
-		{XI}%
-		{%
-			\foreach \b in {1,6,7,8}%
-			{%
-				\dynkinopendot*{\b}%
-			}%
-			\foreach \b in {2,3,4,5}%
-			{%
-				\dynkincloseddot*{\b}%
-			}%
-		}%
-	}%
-}
+\NewDocumentCommand\Edynkin{}%
+{%
+	\ifnum\dynkin at ply>1%	
+		\ifnum\dynkin at rank=6%
+			\Edynkin at folded%
+		\else%
+			\ifnum\dynkin at rank=7%
+				\ifdynkin at is@extended%
+					\Edynkin at folded%
+				\else%
+					\ClassError{Dynkin diagrams}%
+						{Can not fold a diagram of type \dynkin at user@series{} \the\dynkin at rank.}{}%
+				\fi%
+			\fi%
+		\fi%
+	\else%
+		\Edynkin at unfolded%
+	\fi%
+}%
 
 %% \Fdynkin 
-%% ->
 %% Draws an F series Dynkin diagram.
 \newcommand*{\Fdynkin}%
 {
-	\Adynkinnodes
-	\ifdynkincoxeter
-		\dynkinline*{1}{4}
+	\dynkinPlaceRootHere*{1}{below}
+	\dynkinPlaceRootRelativeTo*{2}{1}{east}{below}%
+	\dynkinPlaceRootRelativeTo*{3}{2}{east}{below}%
+	\dynkinPlaceRootRelativeTo*{4}{3}{east}{below}%
+	\ifdynkin at Coxeter
+		\dynkinEdge*{SingleEdge}{1}{2}
+		\dynkinEdge*{SingleEdge}{2}{3}
+		\dynkinEdge*{SingleEdge}{3}{4}
 		\convertRootPair{2}{3}	
-		\node[above] at ($.5*(root \the\@fromRoot)+.5*(root \the\@toRoot)$) {\dynkinprint{4}};
-		\foreach \b in {1,...,4}%
-		{%
-			\testbit{\dynkinparabolic}{\b}{\dynkincross{\b}}{\dynkindot{\b}}%
-		}%
+		\node[/Dynkin diagram/text,above] 
+			at ($.5*(\dynkin at root@name \the\@fromRoot)+.5*(\dynkin at root@name \the\@toRoot)$) 
+			{\(4\)};
 	\else
-		\dynkinline*{1}{2}
-		\dynkinline*{3}{4}
-		\dynkindoubleline*{2}{3}
-		\ifisaffine
-			\dynkinline*{0}{1}
-			\dynkindot{0}
-		\fi
-		\IfStrEqCase{\dynkinSatake}
-		{%
-			{*}%
-			{%
-				\foreach \b in {1,...,4}%
-				{%
-					\testbit{\dynkinparabolic}{\b}{\dynkincross{\b}}{\dynkindot{\b}}%
-				}%
-			}%
-			{I}%
-			{%
-				\foreach \b in {1,...,4}%
-				{%
-					\testbit{\dynkinparabolic}{\b}{\dynkincross{\b}}{\dynkinopendot{\b}}%
-				}%
-			}%
-			{II}%
-			{%
-				\dynkincloseddot*{1}%
-				\dynkincloseddot*{2}%
-				\dynkincloseddot*{3}%
-				\dynkinopendot*{4}%
-			}%
-		}%			
+		\dynkinEdge*{SingleEdge}{1}{2}
+		\dynkinEdge*{SingleEdge}{3}{4}
+		\dynkinEdge*{DoubleEdge}{2}{3}
 	\fi
 }
 
 %% \Gdynkin 
-%% ->
 %% Draws a G series Dynkin diagram.
-\newcommand*{\Gdynkin}%
-{
-	\newif\ifwasopen
-	\ifdynkinopendots
-		\global\wasopentrue
-	\else
-		\global\wasopenfalse
-	\fi
-	\Adynkinnodes
-	\ifisaffine
-		\dynkinline*{0}{2}	
-	\fi
-	\ifdynkincoxeter
-		\convertRootPair{1}{2}	
-		\node[above] at ($.5*(root \the\@fromRoot)+.5*(root \the\@toRoot)$) {\dynkinprint{6}};
-		\dynkinline*{1}{2}
-	\else
-		\dynkintripleline*{1}{2}
-		\IfStrEq{\dynkinSatake}{I}{\global\dynkinopendotstrue}{}
-		\ifisaffine
-			\dynkindot{0}
-		\fi
-	\fi
-	\foreach \b in {1,...,2}
-	{
-		\testbit{\dynkinparabolic}{\b}{\dynkincross{\b}}{\dynkindot{\b}}
-	}
-	\ifwasopen
-		\global\dynkinopendotstrue
-	\else
-		\global\dynkinopendotsfalse
-	\fi
-}
+\NewDocumentCommand\Gdynkin{}%
+{%
+	\ifdynkin at Coxeter%
+		\Idynkin%
+	\else%
+		\dynkinPlaceRootHere*{1}{below}%
+		\dynkinPlaceRootRelativeTo*{2}{1}{east}{below}%
+		\dynkinTripleEdge*{1}{2}%
+	\fi%
+}%
 
 %% \Hdynkin 
-%% ->
 %% Draws an H series Coxeter diagram.
 \newcommand*{\Hdynkin}%
-{
-	\newcount\Hn
-	\Hn=\dynkinrank
-	\dynkinrank=2
-	\Adynkin
-	\convertRootPair{1}{2}
-	\node[above] at ($.5*(root \the\@fromRoot)+.5*(root \the\@toRoot)$) {\dynkinprint{\the\Hn}};
-}
+{%
+	\Adynkin%
+	\convertRootPair{1}{2}%
+	\node[/Dynkin diagram/text,above] at ($.5*(\dynkin at root@name \the\@fromRoot)+.5*(\dynkin at root@name \the\@toRoot)$) {\(5\)};%
+}%
 
 %% \Idynkin 
-%% ->
 %% Draws an I series Coxeter diagram.
 \newcommand*{\Idynkin}%
-{
-	\Adynkin
-	\convertRootPair{1}{2}	
-	\node[above] at ($.5*(root \the\@fromRoot)+.5*(root \the\@toRoot)$) {\dynkinprint{5}};
-}
+{%
+	\newcount\In%
+	\In=\dynkin at rank%
+	\dynkin at rank=2%
+	\Adynkin%
+	\convertRootPair{1}{2}%
+	\node[/Dynkin diagram/text,above] at ($.5*(\dynkin at root@name \the\@fromRoot)+.5*(\dynkin at root@name \the\@toRoot)$) {\(\dynkin at gonality\)};%
+}%
 
-\newcommand*{\affineAdynkin}%
-{
-\ifnum\dynkinrank=0
-	\placeRoot*{0}{4}{1}
-	\Adynkin
-\else
-	\ifnum\dynkinrank=1
-		\placeRoot{0}{0}{0}
-		\placeRoot{1}{2}{0}
-		\convertRootNumber{1}
-		\draw[
-			double,
-			\dynkincolor,
-			{Classical TikZ Rightarrow[length={3*\dynkinradius}]}-{Classical TikZ Rightarrow[length={3*\dynkinradius}]}
-		] 
-		($(root 0)+(\dynkinradius,0)$) -- ($(root \the\RootNumber)-(\dynkinradius,0)$);
-	\else
-		\pgfmathparse{(.5+.5*\the\dynkinrank)}%
-		\let\halfway\pgfmathresult%
-		\placeRoot*{0}{\halfway}{1}
-		\Adynkin
-	\fi
-\fi
-}
+%% \extendedAdynkin
+%% Draws an A series affine Dynkin/Coxeter diagram.
+\NewDocumentCommand\extendedAdynkin{}%
+{%
+	\ifnum\dynkin at rank=1%
+		\dynkinPlaceRootHere{0}{below}%
+		\dynkinPlaceRootRelativeTo*{1}{0}{east}{below}%
+		\convertRootNumber{1}%
+		\begin{scope}{on background layer}%
+			\draw[%
+				/Dynkin diagram/edge,
+				double,
+				{Classical TikZ Rightarrow[length={2*\dynkin at root@radius}]}%
+				-{Classical TikZ Rightarrow[length={2*\dynkin at root@radius}]}%
+			]%
+			($(\dynkin at root@name 0)+(\dynkin at root@radius,0)$) 
+			-- 
+			($(\dynkin at root@name \the\RootNumber)-(\dynkin at root@radius,0)$);%
+		\end{scope}%
+	\else%
+		\ifnum\dynkin at ply=4%
+			\dynkinPlaceRootHere*{0}{left}%
+			\dynkinPlaceRootRelativeTo*{1}{0}{east}{right}%
+			\dynkinPlaceRootRelativeTo*{2}{0}{south}{left}%
+			\dynkinPlaceRootRelativeTo*{3}{1}{south}{right}%
+			\dynkinEdge*{SingleEdge}{0}{1}%
+			\dynkinEdge*{SingleEdge}{1}{2}%
+			\dynkinEdge*{SingleEdge}{2}{3}%
+			\dynkinEdge*{SingleEdge}{3}{0}%
+			\dynkinFold*{0}{2}%
+			\dynkinFold*{1}{3}%
+		\else%
+			\Adynkin{}%
+			\ifnum\dynkin at ply>1%
+				\dynkinPlaceRootRelativeTo*{0}{1}{southwestfold}{right}%
+				\dynkinEdge*{LeftDownArc}{1}{0}%
+				\dynkinEdge*{LeftUpArc}{\the\dynkin at rank}{0}%
+			\else%
+				\node (Dynkin current) at ($.5*(\dynkin at root@name 1)+.5*(\dynkin at root@name \the\dynkin at rank)$){};%
+				\dynkinNorth%
+				\dynkinPlaceRootHere*{0}{above}%
+				\dynkinEdge*{SingleEdge}{0}{1}%
+				\dynkinEdge*{SingleEdge}{0}{\the\dynkin at rank}%
+			\fi%
+			\dynkinRootMark*{}{0}%
+		\fi%
+	\fi%
+}%
 
-\newcommand*{\affineBdynkin}%
-{
-	\placeRoot*{0}{2}{1}
-	\Bdynkin
-}
+\NewDocumentCommand\extendedBthreePly{}%
+{%
+	\dynkinPlaceRootHere*{0}{right}%
+	\edef\old at edge@length{\dynkin at edge@length}%
+	\pgfmathparse{1.5*\dynkin at edge@length}%
+	\xdef\dynkin at edge@length{\pgfmathresult pt}%
+	\dynkinPlaceRootRelativeTo*{1}{0}{south}{right}%
+	\dynkinPlaceRootRelativeTo*{3}{1}{south}{right}%
+	\xdef\dynkin at edge@length{\old at edge@length}%
+	\edef\old at fold@radius{\dynkin at fold@radius}%
+	\xdef\dynkin at fold@radius{\dynkin at edge@length}%
+	\dynkinPlaceRootRelativeTo*{2}{1}{west}{left}%
+	\dynkinEdge*{LeftDownArc}{0}{2}%
+	\dynkinFold*{0}{1}%
+	\dynkinFold*{1}{3}%
+	\dynkinEdge*{SingleEdge}{1}{2}%
+	\dynkinEdge*{DoubleDownRightArc}{2}{3}%
+	\xdef\dynkin at fold@radius{\old at fold@radius}%
+}%
 
-\newcommand*{\affineCdynkin}
-{
-	\placeRoot{0}{0}{0}
-	\Cdynkin
-}
+%% \extendedBdynkin
+%% Draws a B series affine Dynkin/Coxeter diagram.
+\newcommand*{\extendedBdynkin}%
+{%
+	\ifnum\the\dynkin at rank=1
+		\extendedAdynkin%
+	\else%
+		\ifnum\the\dynkin at rank=2
+				\dynkinPlaceRootHere*{0}{left}%
+				\dynkinPlaceRootRelativeTo*{1}{0}{east}{below}%
+				\dynkinPlaceRootRelativeTo*{2}{1}{east}{left}%
+				\dynkinEdge*{SingleEdge}{0}{1}%
+				\dynkinEdge*{DoubleEdge}{1}{2}%
+		\else%
+			\ifnum\dynkin at ply=3%
+				\extendedBthreePly%
+			\else%
+				\ifnum\dynkin at ply=2%
+					\dynkinPlaceRootHere*{0}{left}%
+					\dynkinPlaceRootRelativeTo*{2}{0}{southeastfold}{below}%
+					\dynkinPlaceRootRelativeTo*{1}{2}{southwestfold}{left}%
+					\dynkinLeftFold*{0}{1}%
+					\dynkinEdge*{RightDownArc}{0}{2}%
+					\dynkinEdge*{RightUpArc}{1}{2}%
+				\else%
+					\dynkinPlaceRootHere*{0}{left}%
+					\dynkinPlaceRootRelativeTo*{2}{0}{southeast}{left}%
+					\dynkinPlaceRootRelativeTo*{1}{2}{southwest}{left}%
+					\dynkinEdge*{SingleEdge}{0}{2}%
+					\dynkinEdge*{SingleEdge}{1}{2}%
+				\fi%
+				\newcount\drmo%
+				\drmo=\the\dynkin at rank\relax%
+				\advance\drmo by -1\relax%
+				\newcount\bmo%
+				\bmo=2%
+				\ifnum\dynkin at rank>3%
+					\foreach \b in {3,...,\the\drmo}%
+					{%
+						\dynkinPlaceRootRelativeTo*{\b}{\the\bmo}{east}{below}%
+						\dynkinEdge*{SingleEdge}{\b}{\the\bmo}%
+						\global\advance\bmo by 1\relax%
+					}%
+				\fi%
+				\ifnum\dynkin at ply<3%
+					\dynkinPlaceRootRelativeTo*{\the\dynkin at rank}{\the\drmo}{east}{below}%
+				\fi%
+				\ifdynkin at Coxeter%
+					\dynkinEdge*{SingleEdge}{\the\drmo}{\the\dynkin at rank}%
+					\convertRootPair{\the\drmo}{\the\dynkin at rank}
+					\node[/Dynkin diagram/text,above] at 
+						($.5*(\dynkin at root@name \the\@fromRoot)+.5*(\dynkin at root@name \the\@toRoot)$) {\(4\)};
+				\else%
+					\ifnum\dynkin at ply<3%
+						\dynkinEdge*{DoubleEdge}{\the\drmo}{\the\dynkin at rank}%
+					\else%
+						\dynkinEdge*{DoubleDownRightArc}{\the\drmo}{\the\dynkin at rank}%
+					\fi%									
+				\fi%
+			\fi%
+		\fi%
+	\fi%
+}%
 
-\newcommand*{\affineDdynkin}
+%% \extendedCdynkin
+%% Draws an C series affine Dynkin/Coxeter diagram.
+\newcommand*{\extendedCdynkin}%
+{%
+	\dynkinPlaceRootHere*{0}{below}%
+	\dynkinEast%
+	\Cdynkin{}%
+	\ifdynkin at Coxeter%
+		\dynkinEdge*{SingleEdge}{0}{1}%
+		\convertRootPair{0}{1}
+		\node[/Dynkin diagram/text,above] at 
+			($.5*(\dynkin at root@name \the\@fromRoot)+.5*(\dynkin at root@name \the\@toRoot)$) {\(4\)};
+	\else%
+		\dynkinEdge*{DoubleEdge}{0}{1}%
+	\fi%	
+}%
+
+%% \DOneFourFourPly
+%% Draws a D^1_4 series affine Dynkin diagram folded about an A^2_2.
+\NewDocumentCommand\DOneFourFourPly{}%
+{%
+	\dynkinPlaceRootHere*{0}{right}%
+	\edef\old at edge@length{\dynkin at edge@length}%
+	\pgfmathparse{1.5*\dynkin at edge@length}%
+	\xdef\dynkin at edge@length{\pgfmathresult pt}%
+	\dynkinPlaceRootRelativeTo*{1}{0}{south}{right}%
+	\dynkinPlaceRootRelativeTo*{3}{1}{south}{right}%
+	\dynkinPlaceRootRelativeTo*{4}{3}{south}{right}%
+	\xdef\dynkin at edge@length{\old at edge@length}%
+	\convertRootPair{0}{4}%
+	\node 
+		(Dynkin current) 
+		at 
+		($.5*(\dynkin at root@name \the\@fromRoot)+.5*(\dynkin at root@name \the\@toRoot)$){};%
+	\dynkinWest%
+	\dynkinPlaceRootHere*{2}{left}%
+	\dynkinEdge*{SingleEdge}{0}{2}%
+	\dynkinEdge*{SingleEdge}{1}{2}%
+	\dynkinEdge*{SingleEdge}{3}{2}%
+	\dynkinEdge*{SingleEdge}{4}{2}%
+	\dynkinFold*{0}{1}%
+	\dynkinFold*{1}{3}%
+	\dynkinFold*{3}{4}%
+}%
+
+
+%% \DfourPly
+%% Draws a D series affine Dynkin diagram folded about its middle.
+\NewDocumentCommand\DfourPly{}%
+{%
+	\dynkinPlaceRootHere*{0}{left}%
+	\dynkinPlaceRootRelativeTo*{2}{0}{southeastfold}{above}%
+	\dynkinPlaceRootRelativeTo*{1}{2}{southwestfold}{left}%
+	\dynkinMoveToRoot*{2}%
+	\newcount\drmo%
+	\drmo=\the\dynkin at rank%
+	\advance\drmo by -1%
+	\newcount\drmt%
+	\drmt=\the\drmo%
+	\advance\drmt by -1%
+	\xdef\old at fold{\dynkin at fold@radius}%
+	\pgfmathparse{\dynkin at fold@radius+2*cos(60)*\dynkin at edge@length}%
+	\xdef\dynkin at fold@radius{\pgfmathresult pt}%
+	\dynkin at fold{2}{\the\drmt}%
+	\xdef\dynkin at fold@radius{\old at fold}%
+	\dynkinPlaceRootRelativeTo*{\the\drmo}{\the\drmt}{northwestfold}{left}%
+	\dynkinPlaceRootRelativeTo*{\the\dynkin at rank}{\the\drmt}{southwestfold}{left}%
+%	\ifdynkin at arrows%
+%		\dynkinLeftFold*{0}{1}%
+%		\dynkinLeftFold*{\the\drmo}{\the\dynkin at rank}%
+%	\fi%
+	\dynkinEdge*{RightDownArc}{0}{2}%
+	\dynkinEdge*{RightUpArc}{1}{2}%
+	\dynkinEdge*{RightDownArc}{\the\drmo}{\the\drmt}%
+	\dynkinEdge*{RightUpArc}{\the\dynkin at rank}{\the\drmt}%
+}%
+
+%% \extendedDthreePly
+%% Draws a D^1_4 series Dynkin diagram, folded over a B^1_3.
+\NewDocumentCommand\extendedDthreePly{}%
+{%
+	\dynkinPlaceRootHere*{2}{right}%
+	\edef\old at edge@length{\dynkin at edge@length}%
+	\pgfmathparse{1.5*\dynkin at edge@length}%
+	\xdef\dynkin at edge@length{\pgfmathresult pt}%
+	\dynkinPlaceRootRelativeTo*{3}{2}{south}{right}%
+	\dynkinPlaceRootRelativeTo*{4}{3}{south}{right}%
+	\xdef\dynkin at edge@length{\old at edge@length}%
+	\dynkinPlaceRootRelativeTo*{1}{3}{west}{diagonal}%
+	\dynkinPlaceRootRelativeTo*{0}{1}{west}{left}%
+	\dynkinEdge*{SingleEdge}{1}{3}%
+	\edef\old at fold@radius{\dynkin at fold@radius}%
+	\xdef\dynkin at fold@radius{\dynkin at edge@length}%
+	\dynkinEdge*{LeftDownArc}{2}{1}%
+	\dynkinEdge*{LeftUpArc}{4}{1}%
+	\xdef\dynkin at fold@radius{\old at fold@radius}%
+	\ifdynkin at arrows%
+		\dynkin at fold@arrow at if@oo{2}{3}%
+		\dynkin at fold@arrow at if@oo{3}{4}%
+	\fi%
+	\dynkinEdge*{SingleEdge}{0}{1}%
+}%
+
+
+%% \extendedDdynkin
+%% Draws an D series affine Dynkin/Coxeter diagram.
+\NewDocumentCommand\extendedDdynkin{}%
+{%
+	\ifnum\dynkin at ply=4%
+		\ifnum\dynkin at rank=4%
+			\DOneFourFourPly%
+		\else%
+			\DfourPly%
+		\fi%
+	\else%
+		\ifnum\dynkin at ply=3%
+			\extendedDthreePly%
+		\else%
+			\ifnum\the\dynkin at rank=1%
+				\extendedAdynkin%
+			\else
+				\dynkinPlaceRootHere*{0}{left}%
+				\Ddynkin%
+				\ifnum\dynkin at ply=2%
+					\dynkinEdge*{RightDownArc}{0}{2}%
+				\else%
+					\ifdynkin at left@fold%
+						\dynkinEdge*{RightDownArc}{0}{2}%
+					\else%
+						\dynkinEdge*{SingleEdge}{0}{2}%
+					\fi%
+				\fi%
+			\fi%
+		\fi%
+	\fi%
+}%
+
+%% \extendedEdynkin 
+%% Draws an E series affine Dynkin/Coxeter diagram.
+\newcommand*{\extendedEdynkin}%
+{%
+	\Edynkin%
+}%
+
+%% \extendedFdynkin 
+%% Draws an F series affine Dynkin/Coxeter diagram.
+\newcommand*{\extendedFdynkin}%
+{%
+	\ifnum\dynkin at ply=1%
+		\dynkinPlaceRootHere*{0}{below}%
+		\dynkinEast%
+		\Fdynkin%
+		\dynkinEdge*{SingleEdge}{0}{1}%
+	\else%
+		\dynkinPlaceRootHere*{0}{above}%
+		\dynkinPlaceRootRelativeTo*{1}{0}{east}{above}%
+		\dynkinEdge*{SingleEdge}{0}{1}%
+		\dynkinPlaceRootRelativeTo*{2}{1}{southeastfold}{right}%
+		\dynkinDefiniteRightDownArc*{1}{2}%
+		\dynkinPlaceRootRelativeTo*{3}{2}{southwestfold}{below}%
+		\dynkinDefiniteDoubleDownLeftArc*{2}{3}%
+		\dynkinPlaceRootRelativeTo*{4}{3}{west}{below}%
+		\dynkinEdge*{SingleEdge}{3}{4}%
+		\ifdynkin at arrows%
+			\dynkinFold*{0}{4}%
+			\dynkinFold*{1}{3}%
+		\fi%
+	\fi%
+}%
+
+%% \extendedGdynkin 
+%% Draws an G series affine Dynkin/Coxeter diagram.
+\newcommand*{\extendedGdynkin}%
+{%
+	\xdef\dynkin at gonality{6}%
+	\dynkinPlaceRootHere*{0}{below}%
+	\dynkinEast%
+	\Gdynkin%
+	\dynkinEdge*{SingleEdge}{0}{1}%
+}%
+
+%% \extendedHdynkin 
+%% Draws an H series affine Coxeter diagram.
+\newcommand*{\extendedHdynkin}%
+{%
+	\dynkinPlaceRootHere*{0}{below}%
+	\dynkinEast%
+	\Adynkin%
+	\dynkinEdge*{SingleEdge}{0}{1}%
+	\ifnum\dynkin at rank=3%
+		\convertRootPair{1}{2}%
+	\else%
+		\convertRootPair{0}{1}%
+	\fi%
+	\node[/Dynkin diagram/text,above] 
+		at 
+		($.5*(\dynkin at root@name \the\@fromRoot)+.5*(\dynkin at root@name \the\@toRoot)$) 
+		{\(5\)};%
+}%
+
+
+%% \extendedIdynkin 
+%% Draws an I series affine Coxeter diagram.
+\newcommand*{\extendedIdynkin}%
 {
-	\placeRoot*{0}{2}{1}
-	\Ddynkin
+	\dynkinPlaceRootHere*{0}{below}%
+	\dynkinEast%
+	\dynkin at rank=1%
+	\Adynkin%
+	\dynkinEdge*{SingleEdge}{0}{1}%
+	\convertRootPair{0}{1}%
+	\node[/Dynkin diagram/text,above] 
+		at 
+		($.5*(\dynkin at root@name \the\@fromRoot)+.5*(\dynkin at root@name \the\@toRoot)$) 
+		{\(\infty\)};%
 }
 
-\newcommand*{\affineEdynkin}
-{
-	\ifnum\dynkinrank=6
-		\placeRoot*{0}{3}{2}
-		\Edynkin
-	\else
-		\placeRoot{0}{0}{0}
-		\Edynkin
+
+%% \twistedAdynkin 
+%% Draws a twisted A series affine Dynkin diagram.
+\NewDocumentCommand\twistedAdynkin{}%
+{%
+	\ifnum\dynkin at rank=3
+		\ClassError{Dynkin diagrams}{A2 series twisted diagrams cannot have rank \the\dynkin at rank}{}%
 	\fi
-}
+	\ifnum\dynkin at rank=2%
+		\dynkinPlaceRootHere*{0}{below}%
+		\dynkinPlaceRootRelativeTo*{1}{0}{east}{below}%
+		\dynkinQuadrupleEdge*{1}{0}%
+	\else%
+		\newcount\hmo%
+		\hmo=\the\dynkin at nodes%
+		\advance\hmo by -1%
+		\ifodd\dynkin at rank%
+			\ifnum\dynkin at ply>1%	
+				\dynkinPlaceRootHere*{0}{above}%
+				\dynkinPlaceRootRelativeTo*{2}{0}{southeastfold}{below}%
+				\dynkinPlaceRootRelativeTo*{1}{2}{southwestfold}{below}%
+				\dynkinEdge*{RightDownArc}{0}{2}%
+				\dynkinEdge*{RightUpArc}{1}{2}%
+			\else%
+				\dynkinPlaceRootHere*{0}{left}%
+				\dynkinPlaceRootRelativeTo*{2}{0}{southeast}{left}%
+				\dynkinPlaceRootRelativeTo*{1}{2}{southwest}{left}%
+				\dynkinEdge*{SingleEdge}{0}{2}%
+				\dynkinEdge*{SingleEdge}{1}{2}%
+			\fi%
+			\dynkinMoveToRoot*{2}%
+			\dynkin at pipe{2}{\the\hmo}{east}{below}%
+			\dynkinPlaceRootRelativeTo*{\the\dynkin at nodes}{\the\hmo}{east}{below}%
+			\dynkinEdge*{DoubleEdge}{\the\dynkin at nodes}{\the\hmo}%
+			\ifnum\dynkin at ply>1%	
+				\dynkinLeftFold*{0}{1}%
+			\fi%			
+		\else%
+			\dynkinPlaceRootHere*{0}{below}%
+			\dynkinPlaceRootRelativeTo*{1}{0}{east}{below}%
+			\dynkinEdge*{DoubleEdge}{1}{0}%
+			\ifnum\dynkin at nodes>1%
+				\ifnum\dynkin at ply>1%	
+					\ifnum\hmo>1%
+						\dynkin at fold{1}{\the\hmo}%
+					\fi%
+					\dynkinPlaceRootRelativeTo*{\the\dynkin at nodes}{\the\hmo}{west}{below}%
+				\else%
+					\ifnum\hmo>1%
+						\dynkin at pipe{1}{\the\hmo}{east}{below}%
+					\fi%
+					\dynkinPlaceRootRelativeTo*{\the\dynkin at nodes}{\the\hmo}{east}{below}%
+				\fi%
+				\dynkinEdge*{DoubleEdge}{\the\dynkin at nodes}{\the\hmo}%
+			\fi%
+		\fi%
+	\fi%
+}%
 
-\newcommand*{\affineFdynkin}
-{
-	\placeRoot{0}{0}{0}
-	\Fdynkin
-}
+%% \twistedDdynkin 
+%% Draws a twisted D series affine Dynkin diagram.
+\NewDocumentCommand\twistedDdynkin{}%
+{%
+	\IfStrEqCase{\dynkin at twisted@series}%
+	{%
+		{1}{\extendedDdynkin}%
+		{2}{\twistedDTwo}%
+		{3}%
+		{%
+			\ifnum\dynkin at rank=4%
+				\dynkinPlaceRootHere*{0}{below}%
+				\dynkinPlaceRootRelativeTo*{1}{0}{east}{below}%
+				\dynkinPlaceRootRelativeTo*{2}{1}{east}{below}%
+				\dynkinEdge*{SingleEdge}{0}{1}%
+				\dynkinTripleEdge*{2}{1}%
+			\else%
+				\ClassError%
+					{Dynkin diagrams}%
+					{D3 series twisted diagrams must have rank 2 and cannot have rank \the\dynkin at rank}%
+					{}%
+			\fi%
+		}%
+	}%
+}%
 
 
-\newcommand*{\affineGdynkin}
-{
-	\placeRoot{0}{3}{0}
-	\Gdynkin
-}
+\NewDocumentCommand\twistedDTwo{}%
+{%
+	\ifnum\dynkin at rank<3%
+		\ClassError{Dynkin diagrams}{D2 series twisted diagrams cannot have rank \the\dynkin at rank}{}%
+	\fi%
+	\newcount\drmo%
+	\drmo=\the\dynkin at nodes%
+	\advance\drmo by -1%
+	\ifnum\dynkin at ply=1%
+		\dynkinPlaceRootHere*{0}{below}%
+		\dynkinPlaceRootRelativeTo*{1}{0}{east}{below}%
+	\else%
+		\ifnum\dynkin at rank=3%
+			\dynkinPlaceRootHere*{0}{right}%
+			\dynkinPlaceRootRelativeTo*{1}{0}{southwestfold}{left}%
+			\dynkinPlaceRootRelativeTo*{2}{1}{southeastfold}{right}%
+		\else%
+			\dynkinPlaceRootHere*{0}{above}%
+			\dynkinPlaceRootRelativeTo*{1}{0}{east}{above}%
+		\fi%
+	\fi%
+	\ifnum\dynkin at ply=2%
+		\dynkinEdge*{DoubleUpRightArc}{1}{0}%
+	\else
+		\dynkinEdge*{DoubleEdge}{1}{0}%
+	\fi%
+	\ifnum\dynkin at ply>1%	
+		\ifnum\dynkin at rank>3%
+			\dynkin at fold{1}{\the\drmo}%
+			\dynkinPlaceRootRelativeTo*{\the\dynkin at nodes}{\the\drmo}{west}{below}%
+			\dynkinFold*{0}{\the\dynkin at nodes}%
+		\else%
+			\dynkinFold*{0}{2}%
+		\fi%
+	\else%
+		\ifnum\dynkin at rank>2%
+			\dynkin at pipe{1}{\the\drmo}{east}{below}%
+		\fi%
+		\dynkinPlaceRootRelativeTo*{\the\dynkin at nodes}{\the\drmo}{east}{below}%
+	\fi%
+	\ifnum\dynkin at ply=2%
+		\dynkinEdge*{DoubleDownRightArc}{\the\drmo}{\the\dynkin at nodes}%
+	\else
+		\dynkinEdge*{DoubleEdge}{\the\drmo}{\the\dynkin at nodes}%
+	\fi%
+}%
 
+
+%% \twistedEdynkin 
+%% Draws a twisted E series affine Dynkin diagram.
+\NewDocumentCommand\twistedEdynkin{}%
+{%
+	\IfStrEqCase{\dynkin at twisted@series}%
+	{%
+		{0}{\Edynkin}%
+		{1}{\extendedEdynkin}%
+		{2}%
+		{%
+			\dynkinPlaceRootHere*{0}{below}%
+			\dynkin at pipe{0}{2}{east}{below}%
+			\dynkinPlaceRootRelativeTo*{3}{2}{east}{below}%
+			\dynkinPlaceRootRelativeTo*{4}{3}{east}{below}%
+			\dynkinEdge*{SingleEdge}{3}{4}%
+			\dynkinEdge*{DoubleEdge}{3}{2}%
+		}%
+	}%
+	[\dynkin at error@series]%
+}%
+
+
 \endinput



More information about the tex-live-commits mailing list