texlive[45846] Master/texmf-dist: dynkin-diagrams (18nov17)

commits+karl at tug.org commits+karl at tug.org
Sat Nov 18 22:46:02 CET 2017


Revision: 45846
          http://tug.org/svn/texlive?view=revision&revision=45846
Author:   karl
Date:     2017-11-18 22:46:02 +0100 (Sat, 18 Nov 2017)
Log Message:
-----------
dynkin-diagrams (18nov17)

Modified Paths:
--------------
    trunk/Master/texmf-dist/doc/latex/dynkin-diagrams/README
    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

Added Paths:
-----------
    trunk/Master/texmf-dist/doc/latex/dynkin-diagrams/dynkin-diagrams.bib

Modified: trunk/Master/texmf-dist/doc/latex/dynkin-diagrams/README
===================================================================
--- trunk/Master/texmf-dist/doc/latex/dynkin-diagrams/README	2017-11-18 21:45:46 UTC (rev 45845)
+++ trunk/Master/texmf-dist/doc/latex/dynkin-diagrams/README	2017-11-18 21:46:02 UTC (rev 45846)
@@ -2,9 +2,9 @@
 
             Dynkin diagrams
                
-                v1.0
+                v2.0
 
-            8 September 2017
+            18 November 2017
 ___________________________________
 
 Authors   : Ben McKay

Added: trunk/Master/texmf-dist/doc/latex/dynkin-diagrams/dynkin-diagrams.bib
===================================================================
--- trunk/Master/texmf-dist/doc/latex/dynkin-diagrams/dynkin-diagrams.bib	                        (rev 0)
+++ trunk/Master/texmf-dist/doc/latex/dynkin-diagrams/dynkin-diagrams.bib	2017-11-18 21:46:02 UTC (rev 45846)
@@ -0,0 +1,212 @@
+% This file was created with JabRef 2.10b2.
+% Encoding: ISO8859_1
+
+
+ at Book{Bourbaki:2002,
+  Title                    = {Lie groups and {L}ie algebras. {C}hapters 4--6},
+  Author                   = {Bourbaki, Nicolas},
+  Publisher                = {Springer-Verlag, Berlin},
+  Year                     = {2002},
+  Note                     = {Translated from the 1968 French original by Andrew Pressley},
+  Series                   = {Elements of Mathematics (Berlin)},
+
+  ISBN                     = {3-540-42650-7},
+  Mrclass                  = {17-01 (00A05 20E42 20F55 22-01)},
+  Mrnumber                 = {1890629},
+  Owner                    = {user},
+  Pages                    = {xii+300},
+  Timestamp                = {2017.11.15},
+  Url                      = {https://doi.org/10.1007/978-3-540-89394-3}
+}
+
+ at Book{Carter:2005,
+  Title                    = {Lie algebras of finite and affine type},
+  Author                   = {Carter, R. W.},
+  Publisher                = {Cambridge University Press, Cambridge},
+  Year                     = {2005},
+  Series                   = {Cambridge Studies in Advanced Mathematics},
+  Volume                   = {96},
+
+  ISBN                     = {978-0-521-85138-1; 0-521-85138-6},
+  Mrclass                  = {17-02 (17B67)},
+  Mrnumber                 = {2188930},
+  Mrreviewer               = {Stephen Slebarski},
+  Owner                    = {user},
+  Pages                    = {xviii+632},
+  Timestamp                = {2017.11.15},
+  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},
+
+  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{Dynkin:1952,
+  Title                    = {Semisimple subalgebras of semisimple {L}ie algebras},
+  Author                   = {Dynkin, E. B.},
+  Journal                  = {Mat. Sbornik N.S.},
+  Year                     = {1952},
+  Note                     = {Reprinted in English translation in \cite{Dynkin:2000}.},
+  Pages                    = {349--462 (3 plates)},
+  Volume                   = {30(72)},
+
+  Mrclass                  = {09.1X},
+  Mrnumber                 = {0047629},
+  Mrreviewer               = {I. Kaplansky},
+  Owner                    = {user},
+  Timestamp                = {2017.11.15}
+}
+
+ at Book{Grove/Benson:1985,
+  Title                    = {Finite reflection groups},
+  Author                   = {Grove, L. C. and Benson, C. T.},
+  Publisher                = {Springer-Verlag, New York},
+  Year                     = {1985},
+  Edition                  = {Second},
+  Series                   = {Graduate Texts in Mathematics},
+  Volume                   = {99},
+
+  ISBN                     = {0-387-96082-1},
+  Mrclass                  = {20-01 (20B25 20H15)},
+  Mrnumber                 = {777684},
+  Owner                    = {user},
+  Pages                    = {x+133},
+  Timestamp                = {2017.11.15},
+  Url                      = {https://doi.org/10.1007/978-1-4757-1869-0}
+}
+
+ at Book{Helgason:2001,
+  Title                    = {Differential geometry, {L}ie groups, and symmetric spaces},
+  Author                   = {Helgason, Sigurdur},
+  Publisher                = {American Mathematical Society, Providence, RI},
+  Year                     = {2001},
+  Note                     = {Corrected reprint of the 1978 original},
+  Series                   = {Graduate Studies in Mathematics},
+  Volume                   = {34},
+
+  ISBN                     = {0-8218-2848-7},
+  Mrclass                  = {53C35 (22E10 22E46 22E60)},
+  Mrnumber                 = {1834454},
+  Owner                    = {user},
+  Pages                    = {xxvi+641},
+  Timestamp                = {2017.11.15},
+  Url                      = {https://doi.org/10.1090/gsm/034}
+}
+
+ at Book{Humphreys:1990,
+  Title                    = {Reflection groups and {C}oxeter groups},
+  Author                   = {Humphreys, James E.},
+  Publisher                = {Cambridge University Press, Cambridge},
+  Year                     = {1990},
+  Series                   = {Cambridge Studies in Advanced Mathematics},
+  Volume                   = {29},
+
+  ISBN                     = {0-521-37510-X},
+  Mrclass                  = {20-02 (20F32 20F55 20G15 20H15)},
+  Mrnumber                 = {1066460},
+  Mrreviewer               = {Louis Solomon},
+  Owner                    = {user},
+  Pages                    = {xii+204},
+  Timestamp                = {2017.11.15},
+  Url                      = {https://doi.org/10.1017/CBO9780511623646}
+}
+
+ at Book{Kac:1990,
+  Title                    = {Infinite-dimensional {L}ie algebras},
+  Author                   = {Kac, Victor G.},
+  Publisher                = {Cambridge University Press, Cambridge},
+  Year                     = {1990},
+  Edition                  = {Third},
+
+  ISBN                     = {0-521-37215-1; 0-521-46693-8},
+  Mrclass                  = {17B65 (17B67 17B68 58F07)},
+  Mrnumber                 = {1104219},
+  Owner                    = {user},
+  Pages                    = {xxii+400},
+  Timestamp                = {2017.11.15},
+  Url                      = {https://doi.org/10.1017/CBO9780511626234}
+}
+
+ at Book{OnishchikVinberg:1990,
+  Title                    = {Lie groups and algebraic groups},
+  Author                   = {Onishchik, A. L. and Vinberg, {\`E}. B.},
+  Publisher                = {Springer-Verlag},
+  Year                     = {1990},
+
+  Address                  = {Berlin},
+  Note                     = {Translated from the Russian and with a preface by D. A. Leites},
+  Series                   = {Springer Series in Soviet Mathematics},
+
+  ISBN                     = {3-540-50614-4},
+  Mrclass                  = {22-01 (17B20 20G20 22E10 22E15)},
+  Mrnumber                 = {91g:22001},
+  Mrreviewer               = {James E. Humphreys},
+  Owner                    = {user},
+  Pages                    = {xx+328},
+  Timestamp                = {2017.11.15}
+}
+
+ at Book{Onishchik/Vinberg:1990,
+  Title                    = {Lie groups and algebraic groups},
+  Author                   = {Onishchik, A. L. and Vinberg, \`E. B.},
+  Publisher                = {Springer-Verlag, Berlin},
+  Year                     = {1990},
+  Note                     = {Translated from the Russian and with a preface by D. A. Leites},
+  Series                   = {Springer Series in Soviet Mathematics},
+
+  ISBN                     = {3-540-50614-4},
+  Mrclass                  = {22-01 (17B20 20G20 22E10 22E15)},
+  Mrnumber                 = {1064110},
+  Mrreviewer               = {James E. Humphreys},
+  Owner                    = {user},
+  Pages                    = {xx+328},
+  Timestamp                = {2017.11.15},
+  Url                      = {https://doi.org/10.1007/978-3-642-74334-4}
+}
+
+ at Book{Satake:1980,
+  Title                    = {Algebraic structures of symmetric domains},
+  Author                   = {Satake, Ichir\^o},
+  Publisher                = {Iwanami Shoten, Tokyo; Princeton University Press, Princeton, N.J.},
+  Year                     = {1980},
+  Series                   = {Kan\^o Memorial Lectures},
+  Volume                   = {4},
+
+  Mrclass                  = {32-02 (17C35 32Mxx 53C35)},
+  Mrnumber                 = {591460},
+  Mrreviewer               = {S. Murakami},
+  Owner                    = {user},
+  Pages                    = {xvi+321},
+  Timestamp                = {2017.11.15}
+}
+
+ at Book{Vinberg:1994,
+  Title                    = {Lie groups and {L}ie algebras, {III}},
+  Editor                   = {Vinberg, \`E. B.},
+  Publisher                = {Springer-Verlag, Berlin},
+  Year                     = {1994},
+  Note                     = {Structure of Lie groups and Lie algebras, A translation of {{\i}t Current problems in mathematics. Fundamental directions. Vol. 41} (Russian), Akad. Nauk SSSR, Vsesoyuz. Inst. Nauchn. i Tekhn. Inform., Moscow, 1990 [ MR1056485 (91b:22001)], Translation by V. Minachin [V. V. Minakhin], Translation edited by A. L. Onishchik and \`E. B. Vinberg},
+  Series                   = {Encyclopaedia of Mathematical Sciences},
+  Volume                   = {41},
+
+  ISBN                     = {3-540-54683-9},
+  Mrclass                  = {22-06 (17-06 22Exx)},
+  Mrnumber                 = {1349140},
+  Owner                    = {user},
+  Pages                    = {iv+248},
+  Timestamp                = {2017.11.15},
+  Url                      = {https://doi.org/10.1007/978-3-662-03066-0}
+}
+


Property changes on: trunk/Master/texmf-dist/doc/latex/dynkin-diagrams/dynkin-diagrams.bib
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
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	2017-11-18 21:45:46 UTC (rev 45845)
+++ trunk/Master/texmf-dist/doc/latex/dynkin-diagrams/dynkin-diagrams.tex	2017-11-18 21:46:02 UTC (rev 45846)
@@ -3,125 +3,198 @@
 \title{The Dynkin diagrams package}
 \author{Ben McKay}
 \date{\today}
-
-\usepackage{dynkin-diagrams}
+ 
 \usepackage{amsmath}
 \usepackage{amsfonts}
 \usepackage{array}
 \usepackage{xstring}
-\usepackage{etoolbox}
+\usepackage{etoolbox} 
+\usepackage{longtable}
+\usepackage{showexpl} 
+\usepackage{booktabs}
+\usepackage{dynkin-diagrams}
 \usetikzlibrary{backgrounds}
 \usetikzlibrary{decorations.markings}
-\usepackage{longtable}
-\usepackage{showexpl}
 
 \newcommand{\C}[1]{\mathbb{C}^{#1}}
+\renewcommand*{\arraystretch}{1.5}
+\renewcommand\ResultBox{\fcolorbox{gray!50}{gray!30}}
 
 
-\renewcommand*{\arraystretch}{1.5}
+\begin{document}
 
-\begin{document}
 \maketitle
 \tableofcontents
 
+
 \section{Quick introduction}
-
 This is a test of the Dynkin diagram package.
 Load the package via
 \begin{verbatim}
-\usepackage{dynkin-diagrams}
+\usepackage{dynkin-diagrams} 
 \end{verbatim}
-and invoke it directly:
+(see below for options) and invoke it directly:
+
 \begin{LTXexample}
 The flag variety of pointed lines in 
 projective 3-space is associated to 
-the Dykin diagram \dynk[parabolic=3]{A}{3}.
+the Dynkin diagram \dynkin[parabolic=3]{A}{3}.
 \end{LTXexample}
-or use the long form inside a \verb!\tikz! statement or environment:
+
+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}
+\begin{tikzpicture}
+\dynkin[parabolic=3,label]{A}{3}
+\end{tikzpicture}
+\end{LTXexample}
 With labels for the roots:
 \begin{LTXexample}
-\tikz \dynkin[parabolic=3,label=true]{A}{3};
+\dynkin[parabolic=3,label]{A}{3}
 \end{LTXexample}
-
-\bigskip
-
-Inside an environment:
+\newpage\noindent%
+Make up your own labels for the roots:
 \begin{LTXexample}
 \begin{tikzpicture}
-\dynkin[parabolic=3,label=true]{A}{3}
+\dynkin[parabolic=3]{A}{3}
+\rootlabel{2}{\alpha_2}
 \end{tikzpicture}
 \end{LTXexample}
-
-\bigskip
-
-Make up your own labels for the roots:
-
+Use any text scale you like:
 \begin{LTXexample}
 \begin{tikzpicture}
+\dynkin[parabolic=3,textscale=1.2]{A}{3};
+\rootlabel{2}{\alpha_2}
+\end{tikzpicture}
+\end{LTXexample}
+and access root labels via TikZ:
+\begin{LTXexample}
+\begin{tikzpicture}
 \dynkin[parabolic=3]{A}{3};
-\node at (root label 2) {\scalebox{.7}{\(\alpha_2\)}};
+\node at (root label 2) {\(\alpha_2\)};
 \end{tikzpicture}
 \end{LTXexample}
-
-\newpage
-
-Drawing curves between the roots:
-
+The labels have default locations:
 \begin{LTXexample}
 \begin{tikzpicture}
+\dynkin{E}{8};
+\rootlabel{1}{\alpha_1}
+\rootlabel{2}{\alpha_2}
+\rootlabel{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}
+\dynkin{F}{4}
+\end{LTXexample}
+or triple edges:
+\begin{LTXexample}
+\dynkin{G}{2}
+\end{LTXexample}
+\newpage\noindent%
+Draw curves between the roots:
+\begin{LTXexample}
+\begin{tikzpicture}
 \dynkin[parabolic=429]{E}{8}
-\draw[brown,-latex] 
-  (root 3.south) 
-  to [out=-90, in=-90] 
-  (root 6.south); 
+\draw[very thick, black!50,-latex]  (root 3.south) to [out=-45, in=-135] (root 6.south); 
 \end{tikzpicture}
 \end{LTXexample}
-
-Various options:
-
+Draw dots on the roots:
 \begin{LTXexample}
-\tikz \dynkin[color=brown]{G}{2};
+\begin{tikzpicture}
+\dynkin[label]{C}{8}
+\dynkinopendot{3}
+\dynkinopendot{7}
+\end{tikzpicture}
 \end{LTXexample}
-
+Colours:
 \begin{LTXexample}
-\tikz \dynkin[edgelength=1.2,parabolic=3]{A}{3};
+\dynkin[color=blue!50,backgroundcolor=red!20]{G}{2}
 \end{LTXexample}
-
+Edge lengths:
 \begin{LTXexample}
-\tikz \dynkin[crosssize=.1cm,parabolic=3]{A}{3};
+\dynkin[edgelength=1.2,parabolic=3]{A}{3}
 \end{LTXexample}
-
+Sizes of dots and crosses:
 \begin{LTXexample}
-\tikz \dynkin[dotradius=.08cm,parabolic=3]{A}{3};
+\dynkin[dotradius=.08cm,parabolic=3]{A}{3}
 \end{LTXexample}
-
+Edge styles:
 \begin{LTXexample}
-\begin{tikzpicture}[
-    show background rectangle, 
-    background rectangle/.style={fill=lightgray}]
-\dynkin[parabolic=1,background color=lightgray]{G}{2}
+\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}
+\begin{tikzpicture}
+\dynkin[open]{E}{8};
+\dynkincloseddot{5}
+\dynkincloseddot{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}
 
-
 \section{Syntax}
 
-Inside a \verb!\tikz! environment, 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:
-
+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}
-\begin{tikzpicture}
-\dynkin[parabolic=5]{D}{*}
-\end{tikzpicture}
+\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.
 
-Outside a \verb!\tikz! environment, use \verb!\dynk! instead of \verb!\dynkin!.
 
-
-\bigskip
-
 \newcommand*{\typ}[1]{\(\left<\texttt{#1}\right>\)}
 \newcommand*{\optionLabel}[3]{%%
 \multicolumn{2}{l}{\(\texttt{#1}=\texttt{#2}, \texttt{default}=\texttt{#3}\)} \\
@@ -128,37 +201,108 @@
 }%%
 
 \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{background color}{\typ{color name}}{white}
+\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}{.04cm}
-&      size of the dots in the Dynkin diagram \\
+\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{crosssize}{\typ{number}}{1.5}
-&       size of the crosses, for parabolic subgroup diagrams. \\
+\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. \\
+
+\optionLabel{ordering}{\typ{Adams, Bourbaki, Carter, Dynkin, Kac}}{Bourbaki}
+& which ordering of the roots to use in exceptional root systems as follows:
 \end{tabular}
-%% All other options are passed to tikz.
 
-\section{Finding the roots}
-The roots are labelled in the Bourbaki labelling, but from \(0\) to \(r-1\), where \(r\) is the rank.
-The command sets up nodes \texttt{(root 0)}, \texttt{(root 1)}, and so on. 
-Use these tikz nodes to draw on the Dynkin diagram.
-It also sets up nodes \texttt{(root label 0)}, \texttt{(root label 1)}, and so on for the labels.
+\newpage
 
+\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}
 
+
+\par\noindent{}All other options are passed to TikZ.
+
+\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}
+
 \section{Example: some parabolic subgroups}
 
-\newcommand{\drawparabolic}[3]%%
-{#1_{#2,#3} & \tikz \dynkin[parabolic=#3]{#1}{#2}; \\}
+\newcommand{\drawparabolic}[3]{#1_{#2,#3} & \tikz \dynkin[parabolic=#3]{#1}{#2}; \\}
 
 \begin{center}
 \begin{longtable}{@{}>{$}r<{$}m{2cm}m{2cm}@{}}
@@ -167,18 +311,22 @@
 \endfoot
 \endlastfoot
 \drawparabolic{A}{1}{0}
-\drawparabolic{A}{1}{1}
+\drawparabolic{A}{1}{2}
 \drawparabolic{A}{2}{0}
 \drawparabolic{A}{2}{2}
-\drawparabolic{A}{2}{2}
-\drawparabolic{B}{2}{3}
-\drawparabolic{C}{3}{5}
-\drawparabolic{D}{5}{4}
-\drawparabolic{E}{6}{5}
-\drawparabolic{E}{7}{101}
-\drawparabolic{E}{8}{123}
-\drawparabolic{F}{4}{13}
+\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}
 \end{longtable}
 \end{center}
 
@@ -188,24 +336,355 @@
 
  \renewcommand*{\arraystretch}{1.5}
 \begin{center}
-\begin{longtable}{@{}>{$}r<{$}m{2cm}m{5cm}@{}}
+\begin{longtable}{@{}>{$}r<{$}m{2.2cm}m{5cm}@{}}
 \endfirsthead
 \endhead
 \endfoot
 \endlastfoot
-  A_n &\dynk[parabolic=8]{A}{*}& Grassmannian of $k$-planes in $\C{n+1}$ \\
-  B_n &\dynk[parabolic=1]{B}{*}& $(2n-1)$-dimensional hyperquadric, i.e. the variety of null lines in $\C{2n+1}$
- \\
- C_n &\dynk[parabolic=16]{C}{*}& space of Lagrangian $n$-planes in $\C{2n}$
- \\
- D_n &\dynk[parabolic=1]{D}{*}&$(2n-2)$-dimensional hyperquadric, i.e. the variety of null lines in $\C{2n}$
-\\
- D_n&\dynk[parabolic=32]{D}{*}& one component of the variety of maximal dimension null subspaces of $\C{2n}$ \\
- D_n
- &\dynk[parabolic=16]{D}{*}&the other component\\
- E_6&\dynk[parabolic=1]{E}{6}&complexified octave projective plane\\
- E_6&\dynk[parabolic=32]{E}{6}&its dual plane\\ 
- E_7 &\dynk[parabolic=64]{E}{7}& the space of null octave 3-planes in octave 6-space
+  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{Affine extended Dynkin diagrams}
+
+\begin{LTXexample}
+\dynkin[affine,edge=thick]{A}{*}
+\end{LTXexample}
+
+\begin{LTXexample}
+\dynkin[edgelength=1cm,edge=thick,affine]{A}{*}
+\end{LTXexample}
+
+\begin{LTXexample}
+\dynkin[scale=1.5,edge=thick,affine]{A}{*}
+\end{LTXexample}
+
+
+\begin{LTXexample}
+\begin{tikzpicture}
+\dynkin[affine,label]{A}{8};
+\end{tikzpicture}
+\end{LTXexample}
+
+
+\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{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{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}
+
+\begin{LTXexample}
+\dynkin[affine,label]{C}{*}
+\end{LTXexample} 
+
+\begin{LTXexample}
+\dynkin[affine,label]{D}{8}
+\end{LTXexample}
+
+\begin{LTXexample}
+\dynkin[affine,label]{D}{*}
+\end{LTXexample}
+
+\begin{LTXexample}
+\dynkin[affine,label]{E}{6}
+\end{LTXexample}
+
+\begin{LTXexample}
+\dynkin[affine,label]{E}{7}
+\end{LTXexample}
+
+\begin{LTXexample}
+\dynkin[affine,label]{E}{8}
+\end{LTXexample}
+
+Open circles instead of closed dots:
+\begin{LTXexample}
+\dynkin[affine,open,label]{E}{8}
+\end{LTXexample}
+
+\begin{LTXexample}
+\dynkin[affine,label]{F}{4}
+\end{LTXexample}
+
+\begin{LTXexample}
+\dynkin[affine,label]{G}{2}
+\end{LTXexample}
+
+
+\section{Coxeter diagrams}
+
+\begin{LTXexample}
+\dynkin[Coxeter]{B}{7}
+\end{LTXexample}
+
+\begin{LTXexample}
+\dynkin[Coxeter]{F}{4}
+\end{LTXexample}
+
+\begin{LTXexample}
+\dynkin[Coxeter]{G}{2}
+\end{LTXexample}
+
+\begin{LTXexample}
+\dynkin[Coxeter]{H}{7}
+\end{LTXexample}
+
+\begin{LTXexample}
+\dynkin[Coxeter]{I}{7}
+\end{LTXexample}
+
+
+\section{Folded Dynkin diagrams}
+
+\begin{LTXexample}
+\dynkin[folded]{E}{6}
+\end{LTXexample}
+
+\begin{LTXexample}
+\dynkin[folded,label]{E}{6}
+\end{LTXexample}
+
+\begin{LTXexample}
+\dynkin[folded]{A}{*}
+\end{LTXexample}
+
+\begin{LTXexample}
+\dynkin[folded,label]{A}{1}
+\end{LTXexample}
+
+\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}
+
+\begin{LTXexample}
+\dynkin[folded,label]{A}{10}
+\end{LTXexample}
+
+\begin{LTXexample}
+\dynkin[folded,label]{A}{11}
+\end{LTXexample}
+
+\begin{LTXexample}
+\dynkin[folded,label,arrows=false]{A}{11}
+\end{LTXexample}
+
+\begin{LTXexample}
+\dynkin[folded]{D}{*}
+\end{LTXexample}
+
+\begin{LTXexample}
+\dynkin[folded,label]{D}{1}
+\end{LTXexample}
+
+\begin{LTXexample}
+\dynkin[folded,label]{D}{2}
+\end{LTXexample}
+
+\begin{LTXexample}
+\dynkin[folded,label]{D}{3}
+\end{LTXexample}
+
+\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{Satake diagrams}
+
+We have incomplete support for Satake diagrams as yet, following the conventions of \cite{Helgason:2001}.
+
+\begin{LTXexample}
+\dynkin{A}{I}
+\end{LTXexample}
+
+\begin{LTXexample}
+\dynkin{A}{II}
+\end{LTXexample}
+
+\begin{LTXexample}
+\dynkin{E}{I}
+\end{LTXexample}
+
+\begin{LTXexample}
+\dynkin{E}{II}
+\end{LTXexample}
+
+\begin{LTXexample}
+\dynkin{E}{III}
+\end{LTXexample}
+
+\begin{LTXexample}
+\dynkin{E}{IV}
+\end{LTXexample}
+
+\begin{LTXexample}
+\dynkin{E}{V}
+\end{LTXexample}
+
+\begin{LTXexample}
+\dynkin{E}{VI}
+\end{LTXexample}
+
+\begin{LTXexample}
+\dynkin{E}{VII}
+\end{LTXexample}
+
+\begin{LTXexample}
+\dynkin{E}{VIII}
+\end{LTXexample}
+
+\begin{LTXexample}
+\dynkin{E}{XI}
+\end{LTXexample}
+
+\begin{LTXexample}
+\dynkin{F}{I}
+\end{LTXexample}
+
+\begin{LTXexample}
+\dynkin{F}{II}
+\end{LTXexample}
+
+\begin{LTXexample}
+\dynkin{G}{I}
+\end{LTXexample}
+
+\begin{LTXexample}
+\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); 
+\end{tikzpicture}
+\end{LTXexample}
+
+\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}
+
+\section{Other stuff}
+
+Some sophisticated diagrams:
+\begin{center}
+\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}
+\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}
+
+Always draw roots after edges.
+
+\nocite{*}
+\bibliographystyle{amsplain}
+\bibliography{dynkin-diagrams}
 \end{document}

Modified: trunk/Master/texmf-dist/tex/latex/dynkin-diagrams/dynkin-diagrams.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex/dynkin-diagrams/dynkin-diagrams.sty	2017-11-18 21:45:46 UTC (rev 45845)
+++ trunk/Master/texmf-dist/tex/latex/dynkin-diagrams/dynkin-diagrams.sty	2017-11-18 21:46:02 UTC (rev 45846)
@@ -1,347 +1,1485 @@
+%
+%
+%                                  The Dynkin Diagrams package.
+%
+%                                            Version 2
+%
+%
+%               This package draws Dynkin diagrams in LaTeX documents, using the TikZ package.
+%               Please see the file dynkin-diagrams.tex for examples of use of this package.
+%
+%                                          Benjamin McKay
+%                                          b.mckay at ucc.ie
+%
+%               Released under the LaTeX Project Public License v1.3c or later, see 
+%               http://www.latex-project.org/lppl.txt
+%
+%
+%
+%
 \NeedsTeXFormat{LaTeX2e}[1994/06/01]
-\ProvidesPackage{dynkin-diagrams}[2016/06/28 Dynkin diagrams]
-
+\ProvidesPackage{dynkin-diagrams}[2017/11/14 Dynkin diagrams]
 \RequirePackage{tikz}
 \RequirePackage{xstring}
+\RequirePackage{xparse}
 \RequirePackage{etoolbox}
+\RequirePackage{expl3}
 \RequirePackage{pgfkeys}
+\RequirePackage{pgfopts}
 \usetikzlibrary{decorations.markings}
+\usetikzlibrary{arrows,arrows.meta}
+\usetikzlibrary{calc}
 
-\ProcessOptions\relax
-
-
 %%
-%% Application programming interface:
+%% Application programming interface: 
+%% See dynkin-diagrams.tex file for examples of use.
 %%
 
-\newcommand*{\dynk}[3][]{%%
-\tikz[baseline=-\the\dimexpr\fontdimen22\textfont2\relax ] \dynkin[#1]{#2}{#3};%
-}%%
+\NewDocumentCommand\dynkin{O{}mm}%
+{%
+	\ifdefined\filldraw%
+		\@dynkin[#1]{#2}{#3}%
+	\else%
+		\tikz[baseline=-\the\dimexpr\fontdimen22\textfont2\relax ]{\@dynkin[#1]{#2}{#3}}%
+	\fi%
+}%
 
-% See test1.tex file for examples of use.
+%% \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{\dynkinseries}%
+	{%
+		{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}}%
+					}%
+					[\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}}%
+					}%
+					[\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}}%
+			}%
+			[\RootNumber=#1]%
+		}%
+		{G}%
+		{%
+			\IfStrEqCase{\dynkinordering}%
+			{%
+				{Carter}{\RootNumber=\stringcharacterinposition{21}{#1}}%
+				{Dynkin}{\RootNumber=\stringcharacterinposition{21}{#1}}%
+				{Kac}{\RootNumber=\stringcharacterinposition{21}{#1}}%
+			}%
+			[\RootNumber=#1]%
+		}%
+	}%
+	[\RootNumber=#1]%
+	}
+}%
 
-\newcommand*{\dynkin}[3][]{
-\pgfkeys{/dynkin, default, #1}%
-\IfStrEq{#3}{*}{}{\dynkinrank=#3}
-\IfStrEq{#2}{A}{\Adynkin[\dynkinparabolic]{#3}}{}
-\IfStrEq{#2}{B}{\Bdynkin[\dynkinparabolic]{#3}}{}
-\IfStrEq{#2}{C}{\Cdynkin[\dynkinparabolic]{#3}}{}
-\IfStrEq{#2}{D}{\Ddynkin[\dynkinparabolic]{#3}}{}
-\IfStrEq{#2}{E}{\Edynkin[\dynkinparabolic]{#3}}{}
-\IfStrEq{#2}{F}{\Ffourdynkin[\dynkinparabolic]{#3}}{}
-\IfStrEq{#2}{G}{\Gtwodynkin[\dynkinparabolic]}{}
-\IfStrEq{\dynkinlabeltheroots}{true}{\dynkinprintlabels}{}
-}
+\NewDocumentCommand\dynkinprint{m}%
+{%
+	\scalebox{\dynkintextscale}{\(#1\)}%
+}%
 
+%% \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}%
+{%
+	\IfBooleanTF{#1}%
+		{\node at (root label swap #2) {\dynkinprint{#3}};}%
+		{\node at (root label #2) {\dynkinprint{#3}};}%
+}%
 
+%% \dynkinprintlabels
+%% ->
+%% Prints the default labels on the Dynkin diagram, in the given ordering.
+\newcommand{\dynkinprintlabels}%
+{%
+	\foreach \i in {1,...,\the\dynkinrank}%
+		{\rootlabel{\i}{\i}}%
+	\ifisaffine\rootlabel{0}{0}\fi%
+}%
 
+%% \dynkincross{<n>}
+%% ->
+%% Prints a cross at root <n> on the current Dynkin diagram.
+%% The starred form accepts <n> in the Bourbaki ordering.
+\NewDocumentCommand\dynkincross{sO{}m}%
+{%
+	\IfBooleanTF{#1}%
+	{%
+		\convertRootNumber{#3}%
+	}%
+	{%
+		\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)$);%
+}%
+
+%% \dynkinopendot{<n>}
+%% ->
+%% Prints an open dot at root <n> on the current Dynkin diagram.
+%% The starred form accepts <n> in the Bourbaki ordering.
+\NewDocumentCommand\dynkinopendot{sO{}m}%
+{%
+	\IfBooleanTF{#1}%
+	{%
+		\convertRootNumber{#3}%
+	}%
+	{%
+		\RootNumber=#3%
+	}%
+	\fill[\dynkinbackcolor,draw=\dynkincolor,#2] (root \the\RootNumber) circle (\dynkinradius);%
+}%
+
+%% \dynkincloseddot{<n>}
+%% ->
+%% Prints a closed dot at root <n> on the current Dynkin diagram.
+%% The starred form accepts <n> in the Bourbaki ordering.
+\NewDocumentCommand\dynkincloseddot{sO{}m}%
+{%
+	\IfBooleanTF{#1}%
+	{%
+		\convertRootNumber{#3}%
+	}%
+	{%
+		\RootNumber=#3%
+	}%
+	\fill[\dynkincolor,draw=\dynkincolor,#2] (root \the\RootNumber) circle (\dynkinradius);%
+}%
+
+%% \dynkindot{<n>}
+%% ->
+%% Prints a dot at root <n> on the current Dynkin diagram in the default style.
+%% The starred form accepts <n> in the Bourbaki ordering.
+\NewDocumentCommand\dynkindot{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%
+	}%
+	{%
+		\ifnum#3=0%
+			\ifdynkinopendots%
+				\dynkincloseddot[#2]{0}%
+			\else%
+				\dynkinopendot[#2]{0}%
+			\fi%
+		\else%
+			\ifdynkinopendots%
+				\dynkinopendot[#2]{#3}%
+			\else%
+				\dynkincloseddot[#2]{#3}%
+			\fi%
+		\fi%
+	}%
+}%
+
+%% \dynkinline{<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}%
+{%
+	\IfBooleanTF{#1}%
+	{%
+		\convertRootPair{#3}{#4}%
+	}%
+	{%
+		\@fromRoot=#3%
+		\@toRoot=#4%
+	}%
+	\draw[\dynkincolor,\dynkinedgestyle,#2] ($(root \the\@fromRoot)$) -- ($(root \the\@toRoot)$);%
+}%
+
+%% \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.
+%% The starred form accepts <p> and <q> in the Bourbaki ordering.
+\NewDocumentCommand\dynkinfoldarrow{sO{}mm}%
+{%
+	\IfBooleanTF{#1}%
+	{%
+		\convertRootPair{#3}{#4}%
+	}%
+	{%
+		\@fromRoot=#3%
+		\@toRoot=#4%
+	}%
+	\draw[\dynkinfoldarrowstyle,\dynkinfoldarrowcolor,#2] (root \the\@fromRoot) -- (root \the\@toRoot);%
+}%
+
+%% \dynkindownarc{<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}%
+{%
+	\IfBooleanTF{#1}%
+	{%
+		\convertRootPair{#3}{#4}%
+	}%
+	{%
+		\@fromRoot=#3%
+		\@toRoot=#4%
+	}%
+	\draw[\dynkincolor,\dynkinedgestyle,#2] ($(root \the\@fromRoot)$) arc (90:0:\dynkinedgelength);%
+}%
+
+%% \dynkinuparc{<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}%
+{%
+	\IfBooleanTF{#1}%
+	{%
+		\convertRootPair{#3}{#4}%
+	}%
+	{%
+		\@fromRoot=#3%
+		\@toRoot=#4%
+	}%
+	\draw[\dynkincolor,\dynkinedgestyle,#2] ($(root \the\@fromRoot)$) arc (0:-90:\dynkinedgelength);%
+}%
+
+%% \dynkinsemicircle{<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}%
+{%
+	\IfBooleanTF{#1}%
+	{%
+		\convertRootPair{#3}{#4}%
+	}%
+	{%
+		\@fromRoot=#3%
+		\@toRoot=#4%
+	}%
+	\draw[\dynkincolor,\dynkinedgestyle,#2] ($(root \the\@fromRoot)$) arc (90:-90:\dynkinedgelength);%
+}%
+
+%% \dynkindots{<p>}{s<q>}
+%% ->
+%% Draws a dotted line from root <p> to root <q> on the current Dynkin diagram.
+%% The starred form accepts <p> and <q> in the Bourbaki ordering.
+\NewDocumentCommand\dynkindots{sO{}mm}%
+{%
+	\IfBooleanTF{#1}%
+	{%
+		\convertRootPair{#3}{#4}%
+	}%
+	{%
+		\@fromRoot=#3%
+		\@toRoot=#4%
+	}%
+	\draw[densely dotted,\dynkincolor,#2] ($(root \the\@fromRoot)$) -- ($(root \the\@toRoot)$);%
+}%
+
+%% \dynkindoubleline{<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}%
+{%
+	\IfBooleanTF{#1}%
+	{%
+		\convertRootPair{#3}{#4}%
+	}%
+	{%
+		\@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)$);%
+	\fi%
+}%
+
+%% \dynkintripleline{<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}%
+{%
+	\IfBooleanTF{#1}%
+	{%
+		\convertRootPair{#3}{#4}%
+	}%
+	{%
+		\@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%
+			]%
+			($(root \the\@toRoot)$) --%
+			($.65*(root \the\@fromRoot)+.35*(root \the\@toRoot)$);%
+	\fi%
+	\draw[\dynkincolor,#2] ($(root \the\@fromRoot)$) -- ($(root \the\@toRoot)$);%
+}%
+
+
 %%% 
 %%% Implementation:
 %%%
 
-\newcount\dynkinrank
+\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?
 
-\pgfkeys{
- /dynkin/.is family, 
- /tikz/decoration={markings,mark=at position 0.7 with {\arrow{>}}},
- /dynkin,
- default/.style = {
- 	label = false,
- 	parabolic = 0, 
- 	color = black,
- 	background color = white,
-  	dotradius=.04cm, 
-  	edgelength=.35cm,
-  	crosssize=.07cm
-  	},
- label/.estore in = \dynkinlabeltheroots,
- parabolic/.estore in = \dynkinparabolic,
- color/.store in =\dynkincolor,
- background color/.store in =\dynkinbackcolor,
- dotradius/.estore in = \dynkinradius,
- edgelength/.estore in = \dykinedgelength,
- crosssize/.estore in = \dynkinXsize,
- .search also={/tikz},
+\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},%
+}%
+
+\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{*}
+
+\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}%
+	{%
+		\global\dynkinrank=#3%
+		\gdef\dynkinSatake{*}%
+	}%
+	{%
+		\IfStrEqCase{#2}%
+		{%
+			{A}%
+			{%
+				\IfStrEqCase{#3}%
+				{%
+					{*}{	}%
+					{I}{	}%
+					{II}{}%
+					{III}{}%
+					{IV}	{}%
+				}%
+				[\errorRank]%
+			}%
+			{B}%
+			{%
+				\IfStrEqCase{#3}%
+				{%
+					{*}{	}%
+					{I}{}%
+					{II}	{}%
+				}%
+				[\errorRank]%
+			}%
+			{C}%
+			{%
+				\IfStrEqCase{#3}%
+				{%
+					{*}{	}%
+					{I}{}%
+					{II}	{}%
+				}%
+				[\errorRank]%
+			}%
+			{D}%
+			{%
+				\IfStrEqCase{#3}%
+				{%
+					{*}{	}%
+					{I}{	}%
+					{II}	{}%
+					{III}{}%
+				}%
+				[\errorRank]%
+			}%
+			{E}%
+			{%
+				\IfStrEqCase{#3}%
+				{%
+					{I}{	\global\dynkinrank=6}%
+					{II}%
+					{%
+						\global\dynkinfoldedtrue%
+						\global\dynkinrank=6%
+					}%
+					{III}%
+					{%
+						\global\dynkinfoldedtrue%
+						\global\dynkinrank=6%
+					}%
+					{IV}%
+					{%
+						\global\dynkinrank=6%
+					}%
+					{V}%
+					{%
+						\global\dynkinrank=7%
+					}%
+					{VI}%
+					{%
+						\global\dynkinrank=7%
+					}%
+					{VII}%
+					{%
+						\global\dynkinrank=7%
+					}%
+					{VIII}%
+					{%
+						\global\dynkinrank=8%
+					}%
+					{XI}%
+					{%
+						\global\dynkinrank=8%
+					}%
+				}%
+				[\errorRank]%
+			}%
+			{F}%
+			{%
+				\global\dynkinrank=4%
+				\IfStrEqCase{#3}%
+				{%
+					{I}{	}%
+					{II}	{}%
+				}%
+				[\errorRank]%
+			}%
+			{G}%
+			{%
+				\global\dynkinrank=2%
+				\IfStrEqCase{#3}%
+				{%
+					{I}{	}%
+				}%
+				[\errorRank]%
+			}%
+			{H}%
+			{%
+				\IfStrEqCase{#3}%
+				{%
+					{*}%
+					{%
+					}%
+				}%
+				[\errorRank]%
+			}%
+			{I}%
+			{%
+				\IfStrEqCase{#3}%
+				{%
+					{*}%
+					{%
+					}%
+				}%
+				[\errorRank]%
+			}%
+		}%
+		[\errorSeries]%
+	}%
+	\checkDynkinDiagram%
+	\ifisaffine%
+		\csname affine#2dynkin\endcsname%
+	\else%
+		\csname#2dynkin\endcsname%
+	\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\errorRootOrdering{}
+{%
+	\ClassWarning{Unrecognized root ordering: ``\dynkinordering'' in Dynkin diagram}%
+}%
 
-\newcommand{\dynkinprintlabels}
+\NewDocumentCommand\errorRank{}%
+{%
+	\ClassWarning{Unrecognized \dynkinseries{} series rank: ``\the\dynkinrank'' in Dynkin diagram}%
+}%
+
+\NewDocumentCommand\errorSeries{}%
+{%
+	\ClassWarning{Unrecognized series ``\dynkinseries{}'' in Dynkin diagram}%
+}%
+
+%% \checkDynkinDiagram
+%% -> 
+%% Raises error messages for erroneous inputs.
+\NewDocumentCommand\checkDynkinDiagram{}%
+{%
+	\IfStrEqCase{\dynkinordering}%
+	{%
+		{Adams}{}%
+		{Bourbaki}{}%
+		{Carter}{}%
+		{Dynkin}{}%
+		{Kac}{}%
+	}%
+	[\ClassWarning{Unrecognized label ordering: ``\dynkinordering'' in Dynkin diagram}]%
+	\IfStrEqCase{\dynkinseries}%
+	{%
+		{A}{}%
+		{B}{}%
+		{C}{}%
+		{D}{}%		
+		{E}%
+		{%
+			\ifnum\dynkinrank=6%
+			\else%
+				\ifnum\dynkinrank=7%
+				\else%
+					\ifnum\dynkinrank=8%
+					\else%
+						\errorRank%
+					\fi%
+				\fi%
+			\fi%
+		}%
+		{F}%
+		{%
+			\ifnum\dynkinrank=4%
+			\else%
+				\errorRank%
+			\fi%
+		}%
+		{G}%
+		{%
+			\ifnum\dynkinrank=2%
+			\else%
+				\errorRank%
+			\fi%
+		}%
+		{H}{}%
+		{I}{}%
+	}%
+	[\errorSeries]%
+}%
+
+% 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\@fromRoot
+\newcount\@toRoot
+
+%% \convertRootPair{<p>}{<q>}
+%% ->
+%% Stores conversions in \@fromRoot and \@toRoot.
+\NewDocumentCommand\convertRootPair{mm}
+{%
+	\convertRootNumber{#1}%
+	\@fromRoot=\RootNumber%
+	\convertRootNumber{#2}%
+	\@toRoot=\RootNumber%
+}%
+
+%% \testbit{<n>}{<b>}{<f>}{<g>}
+%% If bit number <b> of <n> is 1 then expand <f> else expand <g>.
+\newcommand*{\testbit}[4]%
+{%
+	\pgfmathparse{int(mod(div(#1,2^(#2)),2))}%
+	\let\tf\pgfmathresult%
+	\IfStrEq{\tf}{1}{#3}{#4}%
+}%
+
+%% \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}%
+{%
+	\convertRootNumber{#2}%
+	\node (root \the\RootNumber) at ({(#3)*\dynkinedgelength},{(#4)*\dynkinedgelength}) {};%
+	\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}) {};%
+	}%
+	{%
+		\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}) {};%
+	}%
+}%
+
+%% \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}%
+{%
+	\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}) {};%
+	}%
+	{%
+		\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}) {};%
+	}%
+}%
+
+%% \Adynkinnodes
+%% ->
+%% Tell TikZ where to place the nodes for an A series Dynkin diagram. Draws nothing.
+\newcommand*{\Adynkinnodes}%
+{%
+	\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%
+			}%
+		\fi%
+	\else%
+		\foreach \b in {1,...,\the\dynkinrank}%
+		{%
+			\placeRoot{\b}{\b}{0}%
+		}%
+	\fi%
+}%
+
+%% \Adynkin
+%% ->
+%% Draws an A series Dynkin diagram.
+\newcommand*{\Adynkin}
 {
-\newcount\rmo
-\rmo=\dynkinrank
-\advance\rmo by -1
-\foreach \i in {0,...,\the\rmo}
+	\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}%
+	\else%
+		\ifnum\dynkinrank=1%
+			\global\dynkinfoldedfalse%
+		\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}
 {
-\node at (root label \i) {\scalebox{0.5}{\(\i\)}};
+	\ifdynkincoxeter
+		\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}
+		\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
 }
+
+%% \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
 }
 
+%% \Ddynkinnodes
+%% ->
+%% Tell TikZ where to place the nodes for a D series Dynkin diagram. Draws nothing.
+\newcommand*{\Ddynkinnodes}
+{
+	\newcount\rmo
+	\rmo=\dynkinrank
+	\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
+}
 
-\newcommand{\dynkincross}[2]{
-\dynkindot{#1}{#2}
-\draw[thick,\dynkincolor] ({#1*\dykinedgelength},{#2*\dykinedgelength}) -- ++ ({(1/sqrt(2))*\dynkinXsize},{(1/sqrt(2))*\dynkinXsize});
-\draw[thick,\dynkincolor] ({#1*\dykinedgelength},{#2*\dykinedgelength}) -- ++ ({-(1/sqrt(2))*\dynkinXsize},{(1/sqrt(2))*\dynkinXsize});
-\draw[thick,\dynkincolor] ({#1*\dykinedgelength},{#2*\dykinedgelength}) -- ++ ({(1/sqrt(2))*\dynkinXsize},{-(1/sqrt(2))*\dynkinXsize});
-\draw[thick,\dynkincolor] ({#1*\dykinedgelength},{#2*\dykinedgelength}) -- ++ ({-(1/sqrt(2))*\dynkinXsize},{-(1/sqrt(2))*\dynkinXsize});
+%% \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
 }
 
-\newcommand{\dynkindot}[2]{%
-\fill[\dynkincolor] (\dykinedgelength*#1,\dykinedgelength*#2) circle (\dynkinradius);%
+%% \Edynkinunfolded
+%% ->
+%% Draws an E series Dynkin diagram not folded.
+\newcommand*{\Edynkinunfolded}%
+{
+	% Create the nodes.
+	\placeRoot{1}{1}{0}
+	\ifisaffine
+		\ifnum\dynkinrank=6
+			\placeRootHorizontalLabels{2}{3}{1}
+		\else
+			\placeRoot*{2}{3}{1}
+		\fi
+	\else
+		\placeRoot*{2}{3}{1}
+	\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}
 }
 
-% Line between nodes.
-\newcommand{\dynkinline}[4]{\draw[thin,\dynkincolor] (\dykinedgelength*#1,\dykinedgelength*#2) -- (\dykinedgelength*#3,\dykinedgelength*#4);}
 
-% Dotted line between nodes.
-\newcommand{\dynkindots}[4]{\draw[densely dotted,\dynkincolor] (\dykinedgelength*#1,\dykinedgelength*#2) -- (\dykinedgelength*#3,\dykinedgelength*#4);}
+%% \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}
+}
 
-% Double line between nodes.
-\newcommand{\dynkindoubleline}[4]{\draw[double,postaction={decorate},\dynkincolor] (\dykinedgelength*#1,\dykinedgelength*#2) -- (\dykinedgelength*#3,\dykinedgelength*#4);}
+%% \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}%
+			}%
+		}%
+	}%
+}
 
-% Triple line between nodes.
-\newcommand{\dynkintripleline}[4]{
-\draw[triple={[line width=.1mm,\dynkincolor] in
-      [line width=.6mm,\dynkinbackcolor] in
-      [line width=.8mm,\dynkincolor]}] (\dykinedgelength*#3,\dykinedgelength*#4) -- (\dykinedgelength*#1,\dykinedgelength*#2);
-\draw[postaction={decorate},double,\dynkincolor] ({0.401*\dykinedgelength*#3+0.599*\dykinedgelength*#1},\dykinedgelength*#4) -- ({0.399*\dykinedgelength*#3+0.601*\dykinedgelength*#1},\dykinedgelength*#2);
+%% \Fdynkin 
+%% ->
+%% Draws an F series Dynkin diagram.
+\newcommand*{\Fdynkin}%
+{
+	\Adynkinnodes
+	\ifdynkincoxeter
+		\dynkinline*{1}{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}}%
+		}%
+	\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}%
+			}%
+		}%			
+	\fi
 }
-\tikzset{
-    triple/.style args={[#1] in [#2] in [#3]}{
-        #1,preaction={preaction={draw,#3},draw,#2}
-    }
-}        
 
-\newcommand*{\testbit}[4]%
-% if bit number #2 of #1 is 1 then expand #3 else expand #4.
-{%
-\pgfmathparse{mod(div(#1,2^(#2)),2)}%
-\let\tf\pgfmathresult%
-\IfStrEq{\tf}{1.0}{#3}{#4}%
-}%%
+%% \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
+}
 
+%% \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}};
+}
 
-\newcommand*{\Adynkin}[2][0]%
-%\Adynkin[p]{n} gives the Dynkin diagram of An with parabolic subgroup p.
-%\Adynkin[p]{*} allows for an indefinite choice of n, but then the possible parabolics are only from 0 to 2^7.
-{%%
-\IfStrEq{#2}{*}%
-{%%
-  \dynkinrank=7
-  \dynkinline{0}{0}{1}{0};
-  \dynkindots{1}{0}{2}{0};
-  \dynkinline{2}{0}{4}{0};
-  \dynkindots{4}{0}{5}{0};
-  \dynkinline{5}{0}{6}{0};
-  \foreach \b in {0,...,6}%%%
-  {%%%
-  \testbit{#1}{\b}{\dynkincross{\b}{0}}{\dynkindot{\b}{0}}
-  \node (root \b) at ({\b*\dykinedgelength},0) {};
-  \node[below] (root label \b) at ({\b*\dykinedgelength},0) {};
-  \node[above] (root label swap \b) at ({\b*\dykinedgelength},0) {};
-  }%%%
-}%%
-{%%
-%  \draw[\dykinbackcolor] (0,{-\dykinedgelength}) rectangle ({#2*\dykinedgelength},{\dykinedgelength});
-  \newcount\rmo
-  \rmo=#2
-  \advance\rmo by -1
-  \dynkinline{0}{0}{\the\rmo}{0};%
-  \foreach \b in {0,...,\the\rmo}%%%
-  {%%%
-  \testbit{#1}{\b}{\dynkincross{\b}{0}}{\dynkindot{\b}{0}}
-  \node (root \b) at ({\b*\dykinedgelength},0) {};
-  \node[below] (root label \b) at ({\b*\dykinedgelength},0) {};
-  \node[above] (root label swap \b) at ({\b*\dykinedgelength},0) {};
-  }%%%
+%% \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}};
 }
-}%%
 
+\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
+}
 
-\newcommand*{\Bdynkin}[2][0]%
-%\Bdynkin[p]{n} gives the Dynkin diagram of Bn with parabolic subgroup p.
-%\Bdynkin[p]{*} allows for an indefinite choice of n, but then the possible parabolics are only from 0 to 2^5.
-{%
-\IfStrEq{#2}{*}%
-{%%
-  \dynkinrank=5
-  \dynkinline{0}{0}{1}{0};
-  \dynkindots{1}{0}{2}{0};
-  \dynkinline{2}{0}{3}{0};
-  \dynkindoubleline{3}{0}{4}{0};
-  \foreach \b in {0,...,4}%%%
-  {%%%
-  \testbit{#1}{\b}{\dynkincross{\b}{0}}{\dynkindot{\b}{0}}
-  \node (root \b) at ({\b*\dykinedgelength},0) {};
-  \node[below] (root label \b) at ({\b*\dykinedgelength},0) {};
-  \node[above] (root label swap \b) at ({\b*\dykinedgelength},0) {};
-  }%%%
-}%%
-{%%
-\pgfmathparse{subtract(#2,1)}%
-\let\rmo\pgfmathresult%
-\pgfmathparse{subtract(\rmo,1)}%
-\let\rmt\pgfmathresult%
-\dynkinline{0}{0}{\rmo}{0};%
-\dynkindoubleline{\rmt}{0}{\rmo}{0};
-\foreach \b in {0,...,\rmo}%%%
-{%%%
-\testbit{#1}{\b}{\dynkincross{\b}{0}}{\dynkindot{\b}{0}}
-\node (root \b) at ({\b*\dykinedgelength},0) {};
-\node[below] (root label \b) at ({\b*\dykinedgelength},0) {};
-\node[above] (root label swap \b) at ({\b*\dykinedgelength},0) {};
-}%%%
-}%%
-}%
+\newcommand*{\affineBdynkin}%
+{
+	\placeRoot*{0}{2}{1}
+	\Bdynkin
+}
 
-\newcommand*{\Cdynkin}[2][0]%
-%\Cdynkin[p]{n} gives the Dynkin diagram of Cn with parabolic subgroup p.
-%\Cdynkin[p]{*} allows for an indefinite choice of n, but then the possible parabolics are only from 0 to 2^5.
-{%%
-\IfStrEq{#2}{*}%
-{%%
-  \dynkinrank=5
-  \dynkinline{0}{0}{1}{0};
-  \dynkindots{1}{0}{2}{0};
-  \dynkinline{2}{0}{3}{0};
-  \dynkindoubleline{4}{0}{3}{0};
-  \foreach \b in {0,...,4}%%%
-  {%%%
-  \testbit{#1}{\b}{\dynkincross{\b}{0}}{\dynkindot{\b}{0}}
-  \node (root \b) at ({\b*\dykinedgelength},0) {};
-  \node[below] (root label \b) at ({\b*\dykinedgelength},0) {};
-  \node[above] (root label swap \b) at ({\b*\dykinedgelength},0) {};
-  }%%%
-}%%
-{%%
-\pgfmathparse{subtract(#2,1)}%
-\let\rmo\pgfmathresult%
-\pgfmathparse{subtract(\rmo,1)}%
-\let\rmt\pgfmathresult%
-\dynkinline{0}{0}{\rmo}{0};%
-\dynkindoubleline{\rmo}{0}{\rmt}{0};
-\foreach \b in {0,...,\rmo}%%%
-{%%%
-\testbit{#1}{\b}{\dynkincross{\b}{0}}{\dynkindot{\b}{0}}
-\node (root \b) at ({\b*\dykinedgelength},0) {};
-\node[below] (root label \b) at ({\b*\dykinedgelength},0) {};
-\node[above] (root label swap \b) at ({\b*\dykinedgelength},0) {};
-}%%%
-}%%
-}%
+\newcommand*{\affineCdynkin}
+{
+	\placeRoot{0}{0}{0}
+	\Cdynkin
+}
 
+\newcommand*{\affineDdynkin}
+{
+	\placeRoot*{0}{2}{1}
+	\Ddynkin
+}
 
-\newcommand*{\Ddynkin}[2][0]%
-%\Ddynkin[p]{n} gives the Dynkin diagram of Dn with parabolic subgroup p.
-%\Ddynkin[p]{*} allows for an indefinite choice of n, but then the possible parabolics are only from 0 to 2^6.
-{%%
-\IfStrEq{#2}{*}%
-{%%
-  \dynkinrank=6
-  \foreach \x in {0,...,3}
-  {
-      \dynkindot{\x}{0}
-  }
-  \dynkinline{0}{0}{1}{0}
-  \dynkindots{1}{0}{2}{0}
-  \dynkinline{2}{0}{3}{0}
-  \dynkinline{3}{0}{3.5}{.9}
-  \dynkinline{3}{0}{3.5}{-.9}
-\foreach \b in {0,...,3}%%%
-{%%%
-\testbit{#1}{\b}{\dynkincross{\b}{0}}{\dynkindot{\b}{0}}
-\node (root \b) at ({\b*\dykinedgelength},0) {};
-\node[below] (root label \b) at ({\b*\dykinedgelength},0) {};
-}%%%
-\testbit{#1}{4}{\dynkincross{3.5}{-.9}}{\dynkindot{3.5}{-.9}}
-\node (root 4) at ({3.5*\dykinedgelength},{-.9*\dykinedgelength}) {};
-\node[below] (root label 4) at ({3.5*\dykinedgelength},{-.9*\dykinedgelength}) {};
-\testbit{#1}{5}{\dynkincross{3.5}{.9}}{\dynkindot{3.5}{.9}}
-\node (root 5) at ({3.5*\dykinedgelength},{.9*\dykinedgelength}) {};
-\node[above] (root label 5) at ({3.5*\dykinedgelength},{.9*\dykinedgelength}) {};
-}%%
-{%%
-\newcount\rmo
-\rmo=#2
-\advance\rmo by -1
-\newcount\rmt
-\rmt=\rmo
-\advance\rmt by -1
-\newcount\rmtt
-\rmtt=\rmt
-\advance\rmtt by -1
-\dynkinline{0}{0}{\the\rmtt}{0};%
-\pgfmathparse{subtract(\the\rmt,.5)}
-\let\rmh\pgfmathresult%
-\dynkinline{\the\rmtt}{0}{\rmh}{.9}
-\dynkinline{\the\rmtt}{0}{\rmh}{-.9}
-\foreach \b in {0,...,\the\rmtt}%%%
-{%%%
-\testbit{#1}{\b}{\dynkincross{\b}{0}}{\dynkindot{\b}{0}}
-\node (root \b) at ({\b*\dykinedgelength},0) {};
-\node[below] (root label \b) at ({\b*\dykinedgelength},0) {};
-}%%%
-\testbit{#1}{\the\rmt}{\dynkincross{\rmh}{-.9}}{\dynkindot{\rmh}{-.9}}
-\node (root \the\rmt) at ({\rmh*\dykinedgelength},{-.9*\dykinedgelength}) {};
-\node[below] (root label \the\rmt) at ({\rmh*\dykinedgelength},{-.9*\dykinedgelength}) {};
-\testbit{#1}{\the\rmo}{\dynkincross{\rmh}{.9}}{\dynkindot{\rmh}{.9}}
-\node (root \the\rmo) at ({\rmh*\dykinedgelength},{.9*\dykinedgelength}) {};
-\node[above] (root label \the\rmo) at ({\rmh*\dykinedgelength},{.9*\dykinedgelength}) {};
-}%%
-}%
+\newcommand*{\affineEdynkin}
+{
+	\ifnum\dynkinrank=6
+		\placeRoot*{0}{3}{2}
+		\Edynkin
+	\else
+		\placeRoot{0}{0}{0}
+		\Edynkin
+	\fi
+}
 
-\newcommand*{\Edynkin}[2][0]%
-%\Edynkin[p]{n} gives the Dynkin diagram of En, n=6,7,8, with parabolic subgroup p.
+\newcommand*{\affineFdynkin}
 {
-\pgfmathparse{subtract(#2,1)}%
-\let\rmo\pgfmathresult%
-\pgfmathparse{subtract(\rmo,1)}%
-\let\rmt\pgfmathresult%
-\dynkinline{0}{0}{\rmt}{0};%
-\dynkinline{2}{0}{2}{1}
-\testbit{#1}{0}{\dynkincross{0}{0}}{\dynkindot{0}{0}}
-\node (root 0) at (0,0) {};
-\node[below] (root label 0) at (0,0) {};
-\testbit{#1}{1}{\dynkincross{2}{1}}{\dynkindot{2}{1}}
-\node (root 1) at ({2*\dykinedgelength},{1*\dykinedgelength}) {};
-\node[above] (root label 1) at ({2*\dykinedgelength},{1*\dykinedgelength}) {};
-\foreach \b in {2,...,\rmo}%%%
-{%%%
-\pgfmathparse{subtract(\b,1)}%
-\let\bmo\pgfmathresult%
-\testbit{#1}{\b}{\dynkincross{\bmo}{0}}{\dynkindot{\bmo}{0}}
-\node (root \b) at ({\bmo*\dykinedgelength},0) {};
-\node[below] (root label \b) at ({\bmo*\dykinedgelength},0) {};
-}%%%
+	\placeRoot{0}{0}{0}
+	\Fdynkin
 }
 
 
-\newcommand*{\Ffourdynkin}[1][0]%
-%\Fdynkin[p]{n} gives the Dynkin diagram of F4 with parabolic subgroup p.
+\newcommand*{\affineGdynkin}
 {
-\dynkinline{0}{0}{3}{0};%
-\dynkindoubleline{1}{0}{2}{0}
-\foreach \b in {0,...,3}%%%
-{%%%
-\testbit{#1}{\b}{\dynkincross{\b}{0}}{\dynkindot{\b}{0}}
-\node (root \b) at ({\b*\dykinedgelength},0) {};
-\node[below] (root label \b) at ({\b*\dykinedgelength},0) {};
-\node[above] (root label swap \b) at ({\b*\dykinedgelength},0) {};
-}%%%
+	\placeRoot{0}{3}{0}
+	\Gdynkin
 }
 
-\newcommand*{\Gtwodynkin}[1][0]%
-%\Gtwodynkin[p] gives the Dynkin diagram of G2 with parabolic subgroup p.
-{%%
-\dynkintripleline{0}{0}{1}{0};%
-\foreach \b in {0,...,1}%%%
-{%%%
-\testbit{#1}{\b}{\dynkincross{\b}{0}}{\dynkindot{\b}{0}}
-\node (root \b) at ({\b*\dykinedgelength},0) {};
-\node[below] (root label \b) at ({\b*\dykinedgelength},0) {};
-\node[above] (root label swap \b) at ({\b*\dykinedgelength},0) {};
-}%%%
-}%%
-
-
-
 \endinput



More information about the tex-live-commits mailing list