From fc358ce7332053945afe16ced2a271556cdccfb7 Mon Sep 17 00:00:00 2001 From: Norbert Preining Date: Tue, 4 Feb 2020 03:01:28 +0000 Subject: CTAN sync 202002040301 --- graphics/pgf/contrib/lie-hasse/README | 21 + graphics/pgf/contrib/lie-hasse/lie-hasse.bib | 495 ++++++ graphics/pgf/contrib/lie-hasse/lie-hasse.pdf | Bin 0 -> 573306 bytes graphics/pgf/contrib/lie-hasse/lie-hasse.sty | 2467 ++++++++++++++++++++++++++ graphics/pgf/contrib/lie-hasse/lie-hasse.tex | 555 ++++++ 5 files changed, 3538 insertions(+) create mode 100644 graphics/pgf/contrib/lie-hasse/README create mode 100644 graphics/pgf/contrib/lie-hasse/lie-hasse.bib create mode 100644 graphics/pgf/contrib/lie-hasse/lie-hasse.pdf create mode 100644 graphics/pgf/contrib/lie-hasse/lie-hasse.sty create mode 100644 graphics/pgf/contrib/lie-hasse/lie-hasse.tex (limited to 'graphics/pgf/contrib') diff --git a/graphics/pgf/contrib/lie-hasse/README b/graphics/pgf/contrib/lie-hasse/README new file mode 100644 index 0000000000..e63a82cc60 --- /dev/null +++ b/graphics/pgf/contrib/lie-hasse/README @@ -0,0 +1,21 @@ +___________________________________ + + Lie Hasse + + v1.0 + + 3 February 2020 +___________________________________ + +Authors : Ben McKay +Maintainer: Ben McKay +E-mail : b.mckay@ucc.ie +Licence : Released under the LaTeX Project Public License v1.3c or + later, see http://www.latex-project.org/lppl.txt + +---------------------------------------------------------------------- + +This package draws Hasse diagrams of the posets +of the simple roots of any complex simple Lie algebra. +It uses the Dynkin diagrams package dynkin-diagrams. + diff --git a/graphics/pgf/contrib/lie-hasse/lie-hasse.bib b/graphics/pgf/contrib/lie-hasse/lie-hasse.bib new file mode 100644 index 0000000000..d39af91eae --- /dev/null +++ b/graphics/pgf/contrib/lie-hasse/lie-hasse.bib @@ -0,0 +1,495 @@ +% Encoding: ISO-8859-1 + + +@Book{Adams:1996, + Title = {Lectures on exceptional {L}ie groups}, + Author = {Adams, J. F.}, + Publisher = {University of Chicago Press, Chicago, IL}, + Year = {1996}, + Note = {With a foreword by J. Peter May, + Edited by Zafer Mahmud and Mamoru Mimura}, + Series = {Chicago Lectures in Mathematics}, + + ISBN = {0-226-00526-7; 0-226-00527-5}, + Mrclass = {22-01 (22E10)}, + Mrnumber = {1428422}, + Mrreviewer = {William M. McGovern}, + Owner = {user}, + Pages = {xiv+122}, + Timestamp = {2018.07.22} +} + +@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}, + 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} +} + +@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} +} + +@InCollection{Carter:1995, + Title = {On the representation theory of the finite groups of {L}ie + type over an algebraically closed field of characteristic 0 [ + {MR}1170353 (93j:20034)]}, + Author = {Carter, R. W.}, + Booktitle = {Algebra, {IX}}, + Publisher = {Springer, Berlin}, + Year = {1995}, + Pages = {1--120, 235--239}, + Series = {Encyclopaedia Math. Sci.}, + Volume = {77}, + + Doi = {10.1007/978-3-662-03235-0_1}, + Mrclass = {20C33 (20-02 20G05)}, + Mrnumber = {1392478}, + Owner = {user}, + Timestamp = {2018.05.19}, + Url = {https://doi.org/10.1007/978-3-662-03235-0_1} +} + +@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}, + + Fjournal = {Mathematische Zeitschrift}, + ISSN = {0025-5874}, + Mrclass = {17B20 (17B40)}, + Mrnumber = {3030677}, + Mrreviewer = {Zi-Xin Hou}, + Owner = {user}, + Timestamp = {2017.12.04}, + Url = {https://doi.org/10.1007/s00209-012-1030-z} +} + +@InCollection{Draper/Guido:2016, + Title = {On the real forms of the exceptional {L}ie algebra {$\mathfrak + e_6$} and their {S}atake diagrams}, + Author = {Draper Fontanals, Cristina and Guido, Valerio}, + Booktitle = {Non-associative and non-commutative algebra and operator + theory}, + Publisher = {Springer, Cham}, + Year = {2016}, + Pages = {211--226}, + Series = {Springer Proc. Math. Stat.}, + Volume = {160}, + + Mrclass = {17B20 (17A75 17B25 17B60)}, + Mrnumber = {3613831}, + Mrreviewer = {Alberto Elduque}, + Owner = {user}, + Timestamp = {2018.04.30} +} + +@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} +} + +@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} +} + +@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.}, + 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} +} + +@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} +} + +@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} +} + +@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} +} + +@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 {Langlands:1967, + AUTHOR = {Langlands, Robert P.}, + TITLE = {Euler products}, + NOTE = {A James K. Whittemore Lecture in Mathematics given at Yale + University, 1967, + Yale Mathematical Monographs, 1}, + PUBLISHER = {Yale University Press, New Haven, Conn.-London}, + YEAR = {1971}, + PAGES = {v+53}, + MRCLASS = {10D20 (22E55)}, + MRNUMBER = {0419366}, +MRREVIEWER = {Stephen Gelbart}, +} +@MISC {MathOverflow:123801, +TITLE = {Invariant subbundles of tangent bundle of flag variety (question)}, +AUTHOR = {Benjamin McKay}, +HOWPUBLISHED = {MathOverflow}, +DATE = {2013-03-06}, +NOTE = {URL:\url{http://mathoverflow.net/a/22350} (visited on 2020-01-29)}, +URL = {http://mathoverflow.net/a/123801}, +URLDATE = {2020-01-29}, +} +@phdthesis{Nutma:2010, + author = {Nutma, Teake Aant}, + title = {Kac-Moody symmetries and gauged supergravity}, + school = {Rijksuniversiteit Groningen}, + year = 2010, + address = {Groningen}, + month = 9, + note = {URL:\url{http://inspirehep.net/record/1283406/files/Thesis-2010-Nutma.pdf} (visited on 2020-01-29)} +} +@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} +} + +@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} +} +@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} +} + +@Article{Ransingh:unpub, + Title = {{Vogan diagrams of affine twisted Lie superalgebras}}, + Author = {Ransingh, B.}, + Journal = {ArXiv e-prints}, + Year = {2013}, + + Month = mar, + Pages = {1--9}, + + 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} +} + +@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, + Pages = {1--118}, + + 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} +} +@ARTICLE{Ringel:2013, + author = {Ringel, Claus Michael}, + title = {The root posets and their rich antichains}, + journal = {arXiv e-prints}, + keywords = {Mathematics - Combinatorics, Mathematics - Representation Theory}, + year = "2013", + month = "Jun", + eid = {arXiv:1306.1593}, + pages = {arXiv:1306.1593}, +archivePrefix = {arXiv}, + eprint = {1306.1593}, + primaryClass = {math.CO}, + adsurl = {https://ui.adsabs.harvard.edu/abs/2013arXiv1306.1593R}, + adsnote = {Provided by the SAO/NASA Astrophysics Data System} +} +@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} +} + +@Book{Springer:2009, + Title = {Linear algebraic groups}, + Author = {Springer, T. A.}, + Publisher = {Birkh\"auser Boston, Inc., Boston, MA}, + Year = {2009}, + Edition = {second}, + Series = {Modern Birkh\"auser Classics}, + + ISBN = {978-0-8176-4839-8}, + Mrclass = {20G15 (14L10)}, + Mrnumber = {2458469}, + Owner = {user}, + Pages = {xvi+334}, + Timestamp = {2018.03.31} +} + +@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.}, + 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} +} + +@Book{Fulton.Harris:1991, + title = {Representation theory}, + publisher = {Springer-Verlag, New York}, + year = {1991}, + author = {Fulton, William and Harris, Joe}, + volume = {129}, + series = {Graduate Texts in Mathematics}, + isbn = {0-387-97527-6; 0-387-97495-4}, + note = {A first course, Readings in Mathematics}, + doi = {10.1007/978-1-4612-0979-9}, + mrclass = {20G05 (17B10 20G20 22E46)}, + mrnumber = {1153249}, + mrreviewer = {James E. Humphreys}, + pages = {xvi+551}, + url = {https://doi.org/10.1007/978-1-4612-0979-9}, +} + +@Comment{jabref-meta: databaseType:bibtex;} diff --git a/graphics/pgf/contrib/lie-hasse/lie-hasse.pdf b/graphics/pgf/contrib/lie-hasse/lie-hasse.pdf new file mode 100644 index 0000000000..5be5791e7f Binary files /dev/null and b/graphics/pgf/contrib/lie-hasse/lie-hasse.pdf differ diff --git a/graphics/pgf/contrib/lie-hasse/lie-hasse.sty b/graphics/pgf/contrib/lie-hasse/lie-hasse.sty new file mode 100644 index 0000000000..d1050d8839 --- /dev/null +++ b/graphics/pgf/contrib/lie-hasse/lie-hasse.sty @@ -0,0 +1,2467 @@ +% The Lie Hasse package. +% +% Version 1.0 +% +% +% This package draws Hasse diagrams of root system posets of simple +% Lie algebraS, in LaTeX documents, using the TikZ package. +% +% Benjamin McKay +% b.mckay@ucc.ie +% +% Released under the LaTeX Project Public License v1.3c or later, see +% http://www.latex-project.org/lppl.txt +% +% +% +% +\NeedsTeXFormat{LaTeX2e}[1994/06/01] +\ProvidesPackage{lie-hasse}[2020/02/02 Lie Hasse] +\RequirePackage[rgb]{xcolor} +\RequirePackage{dynkin-diagrams} +\usetikzlibrary{ + positioning, + fadings, + quotes} +%%% +%%% Application programming interface: +%%% + +\newif\iflie@hasse@threeD +\lie@hasse@threeDtrue +\xdef\lie@hasse@three@D@shift{.3}% +\newif\iflie@hasse@show@ordering +\lie@hasse@show@orderingfalse +\newif\iflie@hasse@show@name +\lie@hasse@show@namefalse +\newif\iflie@hasse@show@widths +\lie@hasse@show@widthsfalse +\newif\iflie@hasse@show@height +\lie@hasse@show@heightfalse +\newif\iflie@hasse@attach@dynkin@diagram +\lie@hasse@attach@dynkin@diagramfalse + +\pgfkeys{ + /Lie Hasse diagram/.is family, + /Lie Hasse diagram, + attach Dynkin diagram/.is if = lie@hasse@attach@dynkin@diagram, + attach Dynkin diagram/.default = false, + edge/.style={ultra thick}, + edge quotes/.style={/Dynkin diagram/text style,auto,inner sep=2pt}, + compact edge/.style={}, + noncompact edge/.style={opacity=0}, + compact root/.code={\dynkinDrawSolidRootMark{#1}}, + noncompact root/.code={\dynkinDrawCrossRootMark{#1}}, + embedded Dynkin diagram/.style={ + edge length=.5cm, + root radius=.05cm + }, + for all roots/.code 2 args={}, + three D/.is if = lie@hasse@threeD, + three D/.default = true, + show ordering/.is if = lie@hasse@show@ordering, + show ordering/.default = false, + show name/.is if = lie@hasse@show@name, + show name/.default = false, + show widths/.is if = lie@hasse@show@widths, + show widths/.default = false, + show height/.is if = lie@hasse@show@height, + show height/.default = false, + z shift/.estore in = \lie@hasse@three@D@shift, + z shift/.default = .3, + top/.style={black!20,opacity=.4}, + left/.style={black!20,opacity=.9}, + right/.style={black!20,opacity=.6}, + .search also={/Dynkin diagram}, +} +\NewDocumentCommand\studyHasseDiagramOfRootSystem{O{}mm}% +{% + \xdef\dynkin@parabolic{0}% + \pgfkeys{/Lie Hasse diagram,#1}% + \xdef\dynkin@user@series{#2}% + \xdef\dynkin@user@string{#3}% + \global\dynkin@ply=\dynkin@ply@value\relax% + \xdef\dynkin@series{#2}% + \dynkin@grok@series% + \IfSubStr{ABCDEFGHI}{\dynkin@series}{}{\dynkin@error@series}% + \xdef\dynkin@string{#3}% + \IfInteger{\dynkin@string}% + {% + \dynkin@integer@rank% + }% + {% + % Turn Satake codes into Dynkin diagram expressions in \dynkin@string. + \dynkin@grok@Satake@codes% + }% + % Expand out any digits in \dynkin@string into multiples of the various root marks. + \expand@Dynkin@Roots@Digits% + % Assign to \dynkin@roots the input string \dynkin@string with all . symbols removed, + % so we only get the symbols representing the marks for the various roots. + \StrDel{\dynkin@string}{.}[\temp]% + \xdef\dynkin@roots{\temp}% + \StrLen{\dynkin@roots}[\temp]% + \global\dynkin@nodes=\temp\relax% + \dynkin@grok@indefinite@edges% + \dynkin@find@rank{}% + \dynkin@cross@out@parabolics{}% + \dynkin@set@default@label@directions{}% + \check@Dynkin@diagram{}% + \xdef\lie@hasse@compact@roots{}% + \initialize@roots@as@sums@table{}% +}% +\newcount\lie@hasse@height% +\newcount\lie@hasse@width% +\NewDocumentCommand\doRootThing{mm}% +{% + \pgfkeys{/Lie Hasse diagram/for all roots={#1}{#2}}% +}% +\NewDocumentCommand\hasse{O{}mm}% +{% + \ifdefined\filldraw% + \IfStrEq{#1}{}% + {% + \studyHasseDiagramOfRootSystem{#2}{#3}% + }% + {% + \studyHasseDiagramOfRootSystem[#1]{#2}{#3}% + }% + \label@item@count 0\relax% + \expandafter\forcsvlist% + \expandafter\add@label% + \expandafter{\dynkin@label@list}% + \ifnum\dynkin@rank=1% + \dynkin{A}{1}% + \else% + \add@compact@simple@roots@to@compact@roots{}% + \IfStrEqCase{#2}% + {%% + {A}{\hasse@A}% + {B}{\hasse@BC}% + {C}{\hasse@BC*}% + {D}{\hasse@D}% + {E}% + {% + \ifnum\dynkin@rank=6% + \hasse@E@six% + \else% + \ifnum\dynkin@rank=7% + \hasse@E@seven% + \else% + \ifnum\dynkin@rank=8% + \hasse@E@eight% + \else + \ifnum\dynkin@rank>8% + \ClassError% + {Lie Hasse}% + {Rank of E series Hasse diagram: #3{}% + exceeds 8; not defined yet}% + {}% + \fi% + \ifnum\dynkin@rank<6% + \ClassError% + {Lie Hasse}% + {Rank of E series Hasse diagram: #3{} less than 6}% + {}% + \fi% + \fi% + \fi% + \fi% + }% + {F}% + {% + \ifnum\dynkin@rank=4% + \hasse@F% + \else% + \ClassError% + {Lie Hasse}% + {Rank of F series Hasse diagram: #3{} not 4}% + {}% + \fi% + }% + {G}% + {% + \ifnum\dynkin@rank=2% + \hasse@G% + \else% + \ClassError% + {Lie Hasse}% + {Rank of G series Hasse diagram: #3{} not 2}% + {}% + \fi% + }% + }%% + [\ClassError% + {Lie Hasse}% + {Lie algebra series #2{} not A,B,C,D,E,F or G}% + {}]% + \draw@simple@root@labels% + \fi% + \lie@hasse@write@widths{}% + \forAllPositiveRootsInHasseDiagram{\doRootThing}% + \iflie@hasse@attach@dynkin@diagram% + \attachDynkin% + \fi% + \else% + \begin{tikzpicture}\hasse[#1]{#2}{#3}\end{tikzpicture}% + \fi% +}% +\NewDocumentCommand\drawRootAsDynkinSum{mm}% +{% + \rootSum{#1}{#2}{\rs}% + \node at (#1;#2) + {% + \dynkin[% + labels=\rs,% + /Lie Hasse diagram/embedded Dynkin diagram]% + {\dynkin@series}{\the\dynkin@rank}% + };% +}% +\NewDocumentCommand\drawRootDecomp{mm}% +{% + \rootSum{#1}{#2}{\rs}% + \StrSubstitute{\rs}{,}{}[\rss]% + \node[above,/Dynkin diagram/text style] at (#1;#2) {$\rss$};% +}% +\NewDocumentCommand\lie@hasse@write@widths{}% +{% + \iflie@hasse@show@widths% + \rootSystemHeight{\lie@hasse@height}% + \foreach \lie@hasse@i in {1,...,\the\lie@hasse@height}% + {% + \rootSystemWidthAtGrade{\lie@hasse@i}{\lie@hasse@width}% + \path + let \p1 = (\lie@hasse@i;1) + in + node[left] + at + (0,\y1) + {\(\the\lie@hasse@width\)};% + }% + \fi% +}% + +\NewDocumentCommand\backwardsGtwo{}% +{% + \dynkin[label,backwards,x shift in edge lengths=-1]{G}{\dynkin@roots}% +}% + +\newcount\lie@hasse@E@shift% +\NewDocumentCommand\attachDynkin{}% +{% + \IfStrEqCase{\dynkin@series}{% + {A}{\dynkin{A}{\dynkin@roots}}% + {B}{\dynkin{B}{\dynkin@roots}}% + {C}{\dynkin{C}{\dynkin@roots}}% + {D}{\dynkin[y shift in edge lengths=-1.5,label]% + {D}{\dynkin@roots}}% + {E}% + {%% + \ifnum\dynkin@rank=6% + \dynkin[% + upsidedown,% + labels*={1,...,6},% + y shift in edge lengths=.5]% + {E}{\dynkin@roots}% + \else% + \lie@hasse@E@shift\the\dynkin@rank\relax% + \advance\lie@hasse@E@shift by -2\relax% + \dynkin[% + backwards,% + upsidedown,% + label,% + x shift in edge lengths=-\the\lie@hasse@E@shift,% + y shift in edge lengths=1]% + {E}{\dynkin@roots}% + \fi% + }%% + {F}{\dynkin{F}{\dynkin@roots}}% + {G}{\backwardsGtwo{}}% + }% + [\ClassError% + {Lie Hasse}% + {Lie algebra series \dynkin@series{} not A,B,C,D,E,F or G when attaching Dynkin diagram}% + {}]% +}% + + +\newif\iflie@hasse@multiple@diagrams +\newcommand\doHasseDiagram[1]%% +{% + \iflie@hasse@multiple@diagrams% + \ % + \fi% + \begin{tikzpicture}% + [show background rectangle,% + baseline=(current bounding box.east)]]% + \hasse#1% + \iflie@hasse@show@height% + \rootSystemHeight{\lie@hasse@height}% + \fi% + \iflie@hasse@show@name% + \xdef\label@text{$\dynkinName{\dynkin@series}{\the\dynkin@rank}$}% + \iflie@hasse@show@ordering% + \xdef\label@text{\label@text{} in \currentDynkinOrdering{} ordering}% + \fi% + \iflie@hasse@show@height% + \xdef\label@text{\label@text: height$=\the\lie@hasse@height$}% + \fi% + \node[anchor=north,yshift=1.5em] + at + (current bounding box.north) + {\label@text};% + \fi% + \end{tikzpicture}% + \iflie@hasse@multiple@diagrams% + \ % + \fi% +}% +\DeclareListParser*{\forscsvlist}{;}% +\newcommand\hasseDiagrams[1]% +{% + \IfSubStr{#1}{;}% + {% + \global\lie@hasse@multiple@diagramstrue% + }% + {% + \global\lie@hasse@multiple@diagramsfalse% + }% + \begin{center}% + \expandafter\forscsvlist% + \expandafter\doHasseDiagram% + \expandafter{#1}% + \end{center}% +}% + + +%%% +%%% Package internals: +%%% + + +\pgfdeclarelayer{Dynkin middle} +\pgfdeclarelayer{Dynkin above} +\pgfsetlayers{background,Dynkin behind,Dynkin middle,Dynkin above,main} + + +\newcommand*\label@list@at[1]{\csname FOOBAR-#1\endcsname} +\newcommand*\defn@label@list@entry[1]{\expandafter\def\csname FOOBAR-#1\endcsname} +\def\add@to@label@list#1#2{\global\defn@label@list@entry{#1}{#2}}% +\newcount\label@item@count% +\label@item@count 0\relax% +\newcommand\add@label[1]% +{% + \advance\label@item@count by 1\relax% + \global\add@to@label@list{\the\label@item@count}{#1}% +}% + +\xdef\lie@hasse@compact@roots{}% +\NewDocumentCommand\if@compact@root{mmm}% +{% +\IfSubStr{\lie@hasse@compact@roots}{(#1)}{#2}{#3}% +}% +\newcount\current@simple@root% +\NewDocumentCommand\if@compact@simple@root{mmm}% +{% +% #1 is the index of a root, in the internal root ordering of +% this Lie Hasse package, which is the Carter root ordering. +% So first we need to convert it to the current root ordering +% of the Dynkin diagram we are working on. +\dynkinOrder{\dynkin@series}{\the\dynkin@rank}.Carter::#1->\dynkin@ordering.% +{\current@simple@root}% +\StrChar{\dynkin@roots}{\current@simple@root}[\lie@hasse@root@marker]% +\IfStrEq{*}{\lie@hasse@root@marker}{#2}{#3}% +}% + +\NewDocumentCommand\add@compact@root{m}% +{% + \if@compact@root{#1}% + {%do nothing + } + {%else + \edef\temp@lie@hasse@compact@roots{\lie@hasse@compact@roots}% + \xdef\lie@hasse@compact@roots{\temp@lie@hasse@compact@roots{ }(#1)}% + }% +}% + +\newcount\lie@hasse@sr% +\newcount\drpo% +\NewDocumentCommand\add@compact@simple@roots@to@compact@roots{}% +{% +\lie@hasse@sr 1\relax% +\drpo\the\dynkin@rank\relax% +\advance\drpo by 1\relax% +\loop% + \if@compact@simple@root{\the\lie@hasse@sr}% + {%% + \add@compact@root{1;\the\lie@hasse@sr}% + }%% + {%% + }%% + \advance\lie@hasse@sr by 1\relax% +\ifnum\lie@hasse@sr<\the\drpo% +\repeat% +}% + +\newcount\drmo% +\newcount\lie@hasse@root@count% +\newcount\lie@hasse@root@count@b% +\newcount\max@lie@hasse@root@count% +\newcount\lie@hasse@reorder + +\NewDocumentCommand\lie@hasse@fix@order{mm}% +{% + \dynkinOrder{\dynkin@series}{\dynkin@rank}.Carter::{#1}->\dynkin@ordering.{#2}% +}% + +\NewDocumentCommand\draw@one@simple@root@label{mm}% +%% \draw@one@simple@root@label{r}{s}, draw at Carter number r +%% the root with text s. +{% + \node[below,% + label=% + {% + [below,% + lie@hasse@color,% + /Lie Hasse diagram/edge quotes]% + \(\pgfkeys{/Dynkin diagram/label macro=#2}\)% + }% + ]% + at% + (1;#1)% + {};% +}% +\NewDocumentCommand\draw@simple@root@labels{}% +{% + \lie@hasse@root@count 1\relax% + \max@lie@hasse@root@count \the\dynkin@rank\relax% + \advance\max@lie@hasse@root@count 1\relax% + \IfStrEq{\dynkin@label@list\dynkin@label@list@star}{}% + {% + \loop% + \set@lie@hasse@color{\the\lie@hasse@root@count}% + \lie@hasse@fix@order% + {\the\lie@hasse@root@count}% + {\lie@hasse@root@count@b}% + \edef\label@text{\the\lie@hasse@root@count@b}% + \draw@one@simple@root@label% + {\the\lie@hasse@root@count}% + {\label@text}% + \global\advance\lie@hasse@root@count by 1\relax% + \ifnum\lie@hasse@root@count<\the\max@lie@hasse@root@count% + \repeat% + }% + {% + \edef\lie@hasse@XXX{\dynkin@label@list}% + \foreach \lie@hasse@i in \lie@hasse@XXX% + {% + \set@lie@hasse@color{\the\lie@hasse@root@count}% + \lie@hasse@fix@order% + {\the\lie@hasse@root@count}% + {\lie@hasse@root@count@b}% + \draw@one@simple@root@label% + {\the\lie@hasse@root@count@b}% + {\lie@hasse@i}% + \global\advance\lie@hasse@root@count by 1\relax% + }% + }% +}% +\definecolor{lie@hasse@color}{hsb}{0,0,0} +\NewDocumentCommand\set@lie@hasse@color{m}% +{% +\pgfmathsetmacro{\lie@hasse@huenum}{#1/\the\dynkin@rank}% +\global\definecolor{lie@hasse@color}{hsb}{\lie@hasse@huenum,1,.6}% +}% +\NewDocumentCommand\draw@lie@hasse@root{m}% +{% +\if@compact@root{#1}% +{%% +\pgfkeys{/Lie Hasse diagram/compact root=#1}% +}%% +{%% +\pgfkeys{/Lie Hasse diagram/noncompact root=#1}% +}%% +}% +\xdef\lie@hasse@grade@a{} +\xdef\lie@hasse@grade@b{} +\xdef\lie@hasse@index@a{} +\xdef\lie@hasse@index@b{} +\newcount\root@gpo% +\xdef\label@text{}% +\NewDocumentCommand\draw@lie@hasse@edge{O{}mmmm}% +%[edge label options]{from grade}{from index}{to index}{simple root} +{% + \root@gpo #2\relax% + \advance\root@gpo by 1\relax% + \set@lie@hasse@color{#5}% + \lie@hasse@fix@order{#5}{\lie@hasse@root@count@b}% + \IfStrEq{\dynkin@label@list}{}% + {% + \xdef\label@text{\the\lie@hasse@root@count@b}% + }% + {% + \xdef\label@text% + {% + \label@list@at{\the\lie@hasse@root@count@b}% + }% + }% + \if@compact@simple@root{#5}% + {%%% Compact + \draw[% + lie@hasse@color,% + /Lie Hasse diagram/edge,% + /Lie Hasse diagram/compact edge]% + (#2;#3) --% + node[lie@hasse@color,/Lie Hasse diagram/edge quotes,#1]% + {\(\pgfkeys{/Dynkin diagram/label macro=\label@text}\)}% + (\the\root@gpo;#4);% + \IfSubStr{\lie@hasse@compact@roots}{#2;#3}% + {%% adding to a compact + \add@compact@root{\the\root@gpo;#4}% + }%% + {%% + }%% + }%%% + {%%% Noncompact + \draw[% + lie@hasse@color,% + /Lie Hasse diagram/edge,% + /Lie Hasse diagram/noncompact edge]% + (#2;#3) --% + node[lie@hasse@color,/Lie Hasse diagram/edge quotes,#1]% + {\(\pgfkeys{/Dynkin diagram/label macro=\label@text}\)}% + (\the\root@gpo;#4);% + }%%% +}% +\newcount\A@series@grade% +\newcount\max@A@series@grade% +\newcount\A@series@x% +\newcount\A@series@y% +\newcount\max@A@series@j% +\newcount\A@series@j% +\NewDocumentCommand\place@A@roots{}% +{% + \A@series@grade 1\relax% + \max@A@series@grade \the\dynkin@rank\relax% + \advance\max@A@series@grade by 1\relax% + \A@series@x 0\relax% + \A@series@y 0\relax% + \loop% + \max@A@series@j\the\dynkin@rank\relax% + \advance\max@A@series@j by -\the\A@series@grade\relax% + \advance\max@A@series@j by 2\relax% + \A@series@j 1\relax% + {% + \loop% + \coordinate + (\the\A@series@grade;\the\A@series@j) + at + ({.5*\the\A@series@x*\dynkin@edge@length}, + {.25*\the\A@series@y*\dynkin@edge@length}) + {};% + \advance\A@series@j by 1\relax% + \advance\A@series@x by 2\relax% + \ifnum\A@series@j<\the\max@A@series@j% + \repeat% + }% + \advance\A@series@grade by 1\relax% + \advance\A@series@x by 1\relax% + \advance\A@series@y by 2\relax% + \ifnum\A@series@grade<\the\max@A@series@grade% + \repeat% +}% +\newcount\A@series@grade% +\newcount\max@A@series@grade% +\NewDocumentCommand\draw@A@roots{}% +{% + \A@series@grade 1\relax% + \max@A@series@grade \the\dynkin@rank\relax% + \advance\max@A@series@grade by 1\relax% + \loop% + \max@A@series@j\the\dynkin@rank\relax% + \advance\max@A@series@j by -\the\A@series@grade\relax% + \advance\max@A@series@j by 2\relax% + \A@series@j 1\relax% + {% + \loop% + \draw@lie@hasse@root% + {\the\A@series@grade;\the\A@series@j}% + \advance\A@series@j by 1\relax% + \ifnum\A@series@j<\the\max@A@series@j% + \repeat% + }% + \advance\A@series@grade by 1\relax% + \ifnum\A@series@grade<\the\max@A@series@grade% + \repeat% +}% +\newcount\maxA@i% +\newcount\maxA@j% +\newcount\A@lbl% +\newcount\A@i% +\newcount\A@j% +\newcount\A@ipo% +\newcount\A@rj% +\newcount\A@rjmo% +\NewDocumentCommand\draw@A@edges{}% +{% + \maxA@i\the\dynkin@rank\relax% + \A@i 1\relax% + \loop% + \maxA@j \the\dynkin@rank\relax% + \advance\maxA@j by -\the\A@i\relax% + \advance\maxA@j by 1\relax% + \ifnum\maxA@j>-1% + \A@j 1\relax% + {% + \loop% + \A@lbl\the\A@i\relax% + \advance\A@lbl by \the\A@j\relax% + \A@ipo \A@i\relax% + \advance\A@ipo by 1\relax% + \draw@lie@hasse@edge[left]% + {\the\A@i}{\the\A@j}% + {\the\A@j}{\the\A@lbl}% + \A@rj\the\maxA@j\relax% + \advance\A@rj by -\the\A@j\relax% + \advance\A@rj by 1\relax% + \A@rjmo\the\A@rj\relax% + \advance\A@rjmo by -1\relax% + \A@lbl-\A@lbl\relax% + \advance\A@lbl by \the\dynkin@rank% + \advance\A@lbl by 1% + \draw@lie@hasse@edge[right]% + {\the\A@i}{\the\A@rj}% + {\the\A@rjmo}{\the\A@lbl}% + \advance\A@j by 1\relax% + \ifnum\A@j<\the\maxA@j% + \repeat% + }% + \fi% + \advance\A@i by 1\relax% + \ifnum\A@i<\the\maxA@i% + \repeat% +}% +%% \hasse@A@width@at@grade{g}{\w} sets the counter \w to +%% the value of the width (number of roots) at grade g of +%% the A root system with rank \the\dynkin@rank +\NewDocumentCommand\hasse@A@width@at@grade{mm}% +{% + \global#2\the\dynkin@rank\relax% + \global\advance#2 by -#1\relax% + \global\advance#2 by 1\relax% +}% +\NewDocumentCommand\hasse@A{}% +{% + \place@A@roots% + \draw@A@edges% + \draw@A@roots% +}% +%% \hasse@BC@width@at@grade{g}{\w} sets the counter \w to +%% the value of the width (number of roots) at grade g of +%% the B or C root system with rank \the\dynkin@rank +\NewDocumentCommand\hasse@BC@width@at@grade{mm}% +{% + \global#2\the\dynkin@rank\relax% + \global\advance#2 by \the\dynkin@rank\relax% + \global\advance#2 by -#1\relax% + \global\advance#2 by 1\relax% + \global\divide#2 by 2\relax% +}% +\newcount\tdrmt% +\newcount\tdrmo% +\newcount\max@BC@r% +\newcount\BC@r% +\newcount\BC@series@x% +\newcount\BC@series@y% +\NewDocumentCommand\place@BC@roots{}% +{% +\drmo \the\dynkin@rank\relax% +\advance\drmo by -1\relax% +\tdrmt \the\drmo\relax% +\advance\tdrmt by \the\drmo\relax% +\tdrmo \the\tdrmt\relax% +\advance\tdrmo 1\relax% +\max@BC@r \the\dynkin@rank\relax% +\advance\max@BC@r by 1\relax% +\BC@r 1\relax% +\loop% + \BC@series@x \the\BC@r\relax% + \advance\BC@series@x by -1\relax% + \advance\BC@series@x by \the\BC@series@x\relax% + \BC@series@y 1\relax% + {%% + \loop% + \coordinate + (\the\BC@series@y;\the\BC@r) + at + ({.5*\the\BC@series@x*\dynkin@edge@length}, + {.5*(\the\BC@series@y-1)*\dynkin@edge@length}) + {};% + \advance\BC@series@y by 1\relax% + \advance\BC@series@x by 1\relax% + \ifnum\BC@series@x<\the\tdrmo\repeat% + }%% + \advance\BC@r by 1\relax% + \ifnum\BC@r<\the\max@BC@r% +\repeat% +}% +\newcount\max@BC@i% +\newcount\BC@i% +\newcount\BC@series@x% +\newcount\BC@series@y% +\newcount\BC@ii% +\newcount\BC@series@yy% +\newcount\BC@series@yy% +\newcount\lbl% +\newcount\temp@lbl% +\NewDocumentCommand\draw@BC@edges{s}% +{% +\tdrmo \the\dynkin@rank\relax% +\advance\tdrmo by \the\dynkin@rank\relax% +\advance\tdrmo by -1\relax% +\max@BC@i \the\dynkin@rank\relax% +\advance\max@BC@i by 1\relax% +\BC@i 1\relax% +\loop% + \BC@series@x \the\BC@i\relax% + \advance\BC@series@x by \the\BC@i\relax% + \advance\BC@series@x by -2\relax% + \BC@series@y 1\relax% + {%% + \loop% + \ifnum\BC@i>1% + % draw an edge upward to the left + \BC@ii \the\BC@i\relax% + \advance\BC@ii by -1\relax% + \BC@series@yy \the\BC@series@y\relax% + \advance\BC@series@yy by 1\relax% + \draw@lie@hasse@edge[right]% + {\the\BC@series@y}{\the\BC@i}% + {\the\BC@ii}% + {\the\BC@ii}% + \fi% + \ifnum\BC@series@y>1% + % draw an edge downward to the left + \BC@series@yy \the\BC@series@y\relax% + \advance\BC@series@yy by -1\relax% + \lbl \the\BC@i\relax% + \advance\lbl by \the\BC@series@y\relax% + \advance\lbl by -1\relax% + \ifnum\dynkin@rank<\the\lbl% + \temp@lbl \the\lbl\relax% + \lbl \the\dynkin@rank\relax% + \advance\lbl by \the\dynkin@rank% + \advance\lbl by -\the\temp@lbl% +%% For the B series: + \IfBooleanF{#1}{\global\advance\lbl by 1\relax}% + \draw@lie@hasse@edge[left]% + {\the\BC@series@yy}{\the\BC@i}% + {\the\BC@i}% + {\the\lbl}% + \else% + \draw@lie@hasse@edge[left]% + {\the\BC@series@yy}{\the\BC@i}% + {\the\BC@i}% + {\the\lbl}% + \fi% + \fi% + \advance\BC@series@y by 1\relax% + \advance\BC@series@x by 1\relax% + \ifnum\BC@series@x<\the\tdrmo\repeat% + }%% + \advance\BC@i by 1\relax% + \ifnum\BC@i<\the\max@BC@i% +\repeat% +}% +\newcount\tdrpt% +\newcount\BC@r% +\newcount\BC@series@y% +\newcount\maxy% +\NewDocumentCommand\draw@BC@roots{}% +{% +\tdrpt \the\dynkin@rank\relax% +\advance\tdrpt by \the\dynkin@rank\relax% +\advance\tdrpt by 2\relax% +\max@BC@r \the\dynkin@rank\relax% +\advance\max@BC@r by 1\relax% +\BC@r 1\relax% +\loop% + \BC@series@y 1\relax% + \maxy \tdrpt\relax% + \advance\maxy -\the\BC@r\relax% + \advance\maxy -\the\BC@r\relax% + {%% + \loop% + \draw@lie@hasse@root{\the\BC@series@y;\the\BC@r}% + \advance\BC@series@y by 1\relax% + \ifnum\BC@series@y<\the\maxy\repeat% + }%% + \advance\BC@r by 1\relax% + \ifnum\BC@r<\the\max@BC@r% +\repeat% +}% +\NewDocumentCommand\hasse@BC{s}% star for C: +{% + \place@BC@roots% + \IfBooleanTF{#1}% + {% + \draw@BC@edges*% + }% + {% + \draw@BC@edges% + }% + \draw@BC@roots% +}% +\NewDocumentCommand\hasse@D{}% +{% + \place@D@roots% + \draw@D@edges% + \iflie@hasse@threeD% + \draw@D@hasse@three@D% + \fi% + \draw@D@roots% +}% +\newcount\drmt% +\NewDocumentCommand\draw@D@hasse@three@D{}% +{% + \drmo \the\dynkin@rank\relax% + \advance\drmo by -1\relax% + \drmt \the\dynkin@rank\relax% + \advance\drmt by -2\relax% + \begin{pgfonlayer}{Dynkin middle}% + \fill[/Lie Hasse diagram/left] + (\the\drmt;1) -- + (\the\drmo;1) -- + (\the\dynkin@rank;1) -- + (\the\drmo;2) -- + cycle;% + \fill[/Lie Hasse diagram/top] + (\the\drmt;1) -- + (1;\the\drmt) -- + (2;\the\drmo) -- + (\the\drmo;2) -- + cycle;% + \fill[/Lie Hasse diagram/top] + (\the\drmo;2) -- + (\the\dynkin@rank;1) -- + (3;\the\drmo) -- + (2;\the\drmo) -- + cycle;% + \fill[/Lie Hasse diagram/top] + (\the\drmo;1) -- + (\the\dynkin@rank;1) -- + (3;\the\drmo) -- + (2;\the\drmt) -- + cycle;% + \fill[/Lie Hasse diagram/top] + (\the\drmt;1) -- + (\the\drmo;1) -- + (2;\the\drmt) -- + (1;\the\drmt) -- + cycle;% + \fill[/Lie Hasse diagram/left] + (1;\the\drmt) -- + (2;\the\drmt) -- + (3;\the\drmo) -- + (2;\the\drmo) -- + cycle;% + \end{pgfonlayer}% +}% +\NewDocumentCommand\hasse@D@width@at@grade{mm}% +{% + \global#2\the\dynkin@rank\relax% + \global\advance#2 by\the\dynkin@rank\relax% + \global\advance#2 by -#1\relax% + \ifnum#1<\the\dynkin@rank% + \global\advance#2 by 1\relax% + \else% + \global\advance#2 by -1\relax% + \fi% + \global\divide#2 by 2\relax% +}% +\newcount\max@D@grades% +\newcount\max@D@grades@plus@one% +\newcount\D@g% +\newcount\maxD@grd% +\newcount\D@grd% +\newcount\maxxD% +\newcount\iD% +\newcount\xxD% +\newcount\sum@D% +\NewDocumentCommand\place@D@roots{}% +{% + \global\max@D@grades \the\dynkin@rank\relax% + \global\advance\max@D@grades \the\dynkin@rank\relax% + \global\advance\max@D@grades -3\relax% + \max@D@grades@plus@one \the\max@D@grades\relax% + \advance\max@D@grades@plus@one 1\relax% + \D@g 1\relax% + {% + \loop% + \place@D@roots@at@grade{\the\D@g}% + \advance\D@g by 1\relax% + \ifnum\D@g<\the\max@D@grades@plus@one% + \repeat% + }% +}% +\newcount\D@r% +\NewDocumentCommand\place@D@roots@at@grade{m}% +{% + \hasse@D@width@at@grade{#1}{\max@D@roots}% + \max@D@roots@plus@one \the\max@D@roots\relax% + \advance\max@D@roots@plus@one 1\relax% + \D@r 1\relax% + {% + \loop% + \place@D@root@at{#1}{\the\D@r}% + \advance\D@r by 1\relax% + \ifnum\D@r<\the\max@D@roots@plus@one% + \repeat% + }% +}% +\newcount\drpo% +\NewDocumentCommand\place@D@root@at{mm}% +{% + \xxD #1\relax% + \advance\xxD by #2\relax% + \advance\xxD by #2\relax% + \advance\xxD by -3\relax% + \drpo \the\dynkin@rank\relax% + \advance\drpo by 1\relax% + \sum@D #1\relax% + \advance\sum@D by #2\relax% + \ifnum\sum@D=\the\dynkin@rank% + \global\def\D@root@x% + {\the\xxD-\lie@hasse@three@D@shift}% + \else% + \ifnum\sum@D=\the\drpo% + \ifnum#1<\the\dynkin@rank% + \global\def\D@root@x% + {\the\xxD-2+\lie@hasse@three@D@shift}% + \else% + \global\def\D@root@x{\the\xxD}% + \fi% + \else% + \ifnum\sum@D<\the\dynkin@rank% + \global\def\D@root@x{\the\xxD}% + \else% +% if \sum@D exceeds rank+1 + \ifnum#1<\the\dynkin@rank% + \global\def\D@root@x{\the\xxD-2}% + \else% + \global\def\D@root@x{\the\xxD}% + \fi% + \fi% + \fi% + \fi% + \coordinate + (#1;#2) + at + ({(\D@root@x)*\dynkin@edge@length/2},{(#1-1)*\dynkin@edge@length/2}) + {};% +}% +\NewDocumentCommand\draw@D@edges{}% +{% + \global\max@D@grades \the\dynkin@rank\relax% + \global\advance\max@D@grades \the\dynkin@rank\relax% + \global\advance\max@D@grades -3\relax% + \D@g 1\relax% + {% + \loop% + \draw@D@edges@at@grade{\the\D@g}% + \advance\D@g by 1\relax% + \ifnum\D@g<\the\max@D@grades% + \repeat% + }% +}% +\newcount\max@D@roots% +\newcount\max@D@roots@plus@one% +\NewDocumentCommand\draw@D@edges@at@grade{m}% +{% + \hasse@D@width@at@grade{#1}{\max@D@roots}% + \max@D@roots@plus@one \the\max@D@roots\relax% + \advance\max@D@roots@plus@one 1\relax% + \D@r 1\relax% + {% + \loop% + \draw@D@edges@at{#1}{\the\D@r}{\the\max@D@roots}% + \advance\D@r by 1\relax% + \ifnum\D@r<\the\max@D@roots@plus@one% + \repeat% + }% +}% +\newcount\hasse@D@gpo% +\newcount\hasse@D@imo% +\newcount\hasse@D@w% +\newcount\hasse@D@gpi% +\newcount\hasse@D@target% +\newif\ifhasse@D% +\xdef\hasse@D@layer{}% +\xdef\hasse@D@LR{}% +\newcount\hasse@D@label% +\NewDocumentCommand\draw@D@edges@at{mm}% +{% + \drmo\the\dynkin@rank\relax% + \advance\drmo by -1\relax% + \drpo \the\dynkin@rank\relax% + \advance\drpo by 1\relax% + \hasse@D@gpo#1\relax% + \advance\hasse@D@gpo by 1\relax% + \hasse@D@gpi#1\relax% + \advance\hasse@D@gpi #2\relax% + \hasse@D@imo#2\relax% + \advance\hasse@D@imo by -1\relax% + \hasse@Dfalse% + \xdef\hasse@D@layer{Dynkin middle}% + \xdef\hasse@D@LR{left}% + \hasse@D@width@at@grade{#1}{\hasse@D@w}% + \ifnum#2>1% + % Not at the left edge, so draw an edge going up to the left + \global\hasse@D@label#2\relax% + \advance\hasse@D@label -1\relax% + \ifnum\hasse@D@gpo=\the\dynkin@rank% + \ifnum\hasse@D@imo=1% + % (g;i)=(r-1;2) doesn't go anywhere up to the left. + \else% + % connect g;i to g+1;i-2 + \global\hasse@Dtrue% + \global\hasse@D@target \hasse@D@imo\relax + \global\advance\hasse@D@target by -1\relax% + \fi% + \else% + % connect g;i to g+1;i-1 + \global\hasse@Dtrue% + \global\hasse@D@target \hasse@D@imo\relax% + \ifnum\hasse@D@gpi=\the\dynkin@rank% + \xdef\hasse@D@layer{Dynkin above}% + \else% + % below or middle. + \ifnum\hasse@D@gpi=\the\drpo% + \xdef\hasse@D@layer{Dynkin behind}% + \fi% + \fi% + \fi% + \ifnum\hasse@D@w=#2% + \xdef\hasse@D@LR{right}% + \fi% + \fi% + \ifnum\dynkin@rank>#1% + \ifnum\hasse@D@gpi<\the\drpo% + \else% + \global\advance\hasse@D@label -1\relax% + \fi% + \fi% + \ifhasse@D% + \begin{pgfonlayer}{\hasse@D@layer} + \draw@lie@hasse@edge% + [\hasse@D@LR]% + {#1}{#2}% + {\the\hasse@D@target}{\the\hasse@D@label}% + \end{pgfonlayer}% + \fi% + \hasse@Dtrue% + \xdef\hasse@D@LR{left}% + \ifnum\hasse@D@w=#2% + \ifodd#1% + % not enough room to draw an edge going rightward. + \global\hasse@Dfalse\relax% + \else% + \xdef\hasse@D@LR{right}% + \fi% + \fi% + \ifnum#1=1% + \ifnum\drmo=#2% + \global\hasse@Dfalse\relax% + \else% + \xdef\hasse@D@LR{right}% + \fi% + \fi% + \ifhasse@D% + \global\hasse@D@label \hasse@D@gpi\relax% + \ifnum\hasse@D@label>\the\dynkin@rank% + \hasse@D@label -\hasse@D@label\relax% + \advance\hasse@D@label \the\dynkin@rank\relax% + \advance\hasse@D@label \the\drmo\relax% + \fi% + \ifnum\drmo<#1% + \else% + \ifnum#2=1% + \else% + \ifnum\hasse@D@gpi<\the\drpo% + \else% + \advance\hasse@D@label 1\relax% + \fi% + \fi% + \fi% + \global\hasse@D@target #2\relax% + \ifnum\hasse@D@gpi=\the\dynkin@rank% + \ifnum#2=1% + \else% + \global\advance\hasse@D@target by 1\relax% + \fi% + \else% + \ifnum\drmo=#1% + \global\advance\hasse@D@target by -1\relax% + \fi% + \fi% + \ifnum\hasse@D@gpi=\the\drpo% + \ifnum#2>1% + \xdef\hasse@D@layer{Dynkin behind}% + \xdef\hasse@D@LR{right}% + \fi% + \else% + \ifnum\hasse@D@gpi=\the\dynkin@rank% + \xdef\hasse@D@layer{Dynkin above}% + \else% + \ifnum\hasse@D@gpi=\the\drmo% + \xdef\hasse@D@layer{Dynkin above}% + \else% + \xdef\hasse@D@layer{Dynkin middle}% + \fi% + \fi% + \fi% + \fi% + \ifhasse@D% + \begin{pgfonlayer}{\hasse@D@layer} + \draw@lie@hasse@edge% + [\hasse@D@LR]% + {#1}{#2}% + {\the\hasse@D@target}{\the\hasse@D@label}% + \end{pgfonlayer}% + \fi% +% % Draw any other edges. + \ifnum\hasse@D@gpi=\the\drmo% + \hasse@D@target#2\relax% + \advance\hasse@D@target by 1\relax% + \begin{pgfonlayer}{Dynkin behind} + \draw@lie@hasse@edge% + [right,near start]% + {#1}{#2}% + {\the\hasse@D@target}{\the\dynkin@rank}% + \end{pgfonlayer}% + \fi% +}% +\newcount\maxD@grd% +\newcount\D@grd% +\newcount\maxxD% +\newcount\sum@D% +\NewDocumentCommand\draw@D@roots{}% +{% + \drmo \the\dynkin@rank\relax% + \advance\drmo by -1\relax% + \maxD@grd \the\dynkin@rank\relax% + \advance\maxD@grd by \the\dynkin@rank\relax% + \advance\maxD@grd by -2\relax% + \D@grd 1\relax% + \loop% + % Construct the roots at grade \D@grd. + \draw@D@roots@at@grade{\D@grd}% + \advance\D@grd by 1\relax% + \ifnum\D@grd<\the\maxD@grd% + \repeat% +}% +\NewDocumentCommand\draw@D@roots@at@grade{m}% +{% + \hasse@D@width@at@grade{#1}{\max@D@roots}% + \max@D@roots@plus@one \the\max@D@roots\relax% + \advance\max@D@roots@plus@one 1\relax% + \D@r 1\relax% + {% + \loop% + \draw@lie@hasse@root{\the\D@grd;\the\D@r}% + \advance\D@r by 1\relax% + \ifnum\D@r<\the\max@D@roots@plus@one% + \repeat% + }% +}% +%}% +\newcount\lie@hasse@grade@no +\newcount\lie@hasse@root@no +\def\lie@hasse@XX{} +\def\lie@hasse@ZZ{} +\NewDocumentCommand\lie@hasse@read@root@pair{m}% +{% + \IfSubStr{#1}{:}% + {% + \StrBefore{#1}{:}[\lie@hasse@XX]% + \StrBehind{#1}{:}[\lie@hasse@ZZ]% + }% + {% + \xdef\lie@hasse@XX{#1}% + \xdef\lie@hasse@ZZ{0}% + }% + \IfStrEq{\dynkin@series}{G}% + {% + \pgfmathsetmacro\lie@hasse@XX% + {\lie@hasse@XX}% + }% + {% else + \pgfmathsetmacro\lie@hasse@XX% + {\lie@hasse@XX+\lie@hasse@three@D@shift*(\the\lie@hasse@grade@no-\lie@hasse@ZZ-1)}% + }% +}% +\NewDocumentCommand\lie@hasse@place@root{m}% +{% + \lie@hasse@read@root@pair{#1}% + \coordinate + (\the\lie@hasse@grade@no;\the\lie@hasse@root@no) + at + ({\lie@hasse@XX*\dynkin@edge@length/2}, + {(\the\lie@hasse@grade@no-1)*\dynkin@edge@length/2}) {};% + \global\advance\lie@hasse@root@no by 1% +}% +\NewDocumentCommand\lie@hasse@place@root@list{m}% +{% + \global\lie@hasse@root@no 1\relax% + \expandafter\forcsvlist\expandafter{\lie@hasse@place@root}{#1}% + \global\advance\lie@hasse@grade@no by 1% +}% +\NewDocumentCommand\lie@hasse@place@roots{m}% +{% + \global\lie@hasse@grade@no 1\relax% + \renewcommand*{\do}[1]% + {% + \lie@hasse@place@root@list{##1}% + }% + \expandafter\docsvlist\expandafter{#1}% +}% +\NewDocumentCommand\lie@hasse@draw@root{m}% +{% + \draw@lie@hasse@root{\the\lie@hasse@grade@no;\the\lie@hasse@root@no}% + \global\advance\lie@hasse@root@no by 1% +}% +\NewDocumentCommand\lie@hasse@root@draw@list{m}% +{% + \global\lie@hasse@root@no 1\relax% + \expandafter\forcsvlist\expandafter{\lie@hasse@draw@root}{#1}% + \global\advance\lie@hasse@grade@no by 1% +}% +\NewDocumentCommand\lie@hasse@draw@roots{m}% +{% + \global\lie@hasse@grade@no 1\relax% + \renewcommand*{\do}[1]% + {% + \lie@hasse@root@draw@list{##1}% + }% + \expandafter\docsvlist\expandafter{#1}% +}% +\newcount\lie@hasse@grade@no@plus@one% +\newcount\lie@hasse@edge@count% +\def\lie@hasse@edge@go{% +\@ifstar\lie@hasse@process@edge@above\lie@hasse@process@edge@behind}% +\NewDocumentCommand\lie@hasse@process@edge{m}% +{% + \lie@hasse@edge@go#1!% +}% +\def\lie@hasse@process@edge@above#1!% +{% + \global\advance\lie@hasse@edge@count by 1\relax% + \begin{pgfonlayer}{Dynkin above}% + \lie@hasse@finish@edge#1!% + \end{pgfonlayer}% +}% +\def\lie@hasse@process@edge@behind#1!% +{% + \global\advance\lie@hasse@edge@count by 1\relax% + \begin{pgfonlayer}{Dynkin behind}% + \lie@hasse@finish@edge#1\relax% + \end{pgfonlayer}% +}% +\def\lie@hasse@finish@edge#1+#2#3#4% +{% + \ifx#3<\relax% + \draw@lie@hasse@edge[left]% + {\the\lie@hasse@grade@no}{#1}% + {#4}% + {#2}% + \else% + \draw@lie@hasse@edge[right]% + {\the\lie@hasse@grade@no}{#1}% + {#4}% + {#2}% + \fi% +}% +\NewDocumentCommand\lie@hasse@process@edge@list{m}% +{% + \global\lie@hasse@edge@count 0\relax% + \expandafter\forcsvlist\expandafter\lie@hasse@process@edge{#1}% + \global\advance\lie@hasse@grade@no by 1\relax% +}% +\NewDocumentCommand\lie@hasse@process@edge@lists{m}% +{% + \global\lie@hasse@grade@no 1\relax% + \expandafter\forcsvlist\expandafter{\lie@hasse@process@edge@list}{#1}% +}% +\NewDocumentCommand\hasse@X{mm}% +{% + \lie@hasse@place@roots{#1}% + \lie@hasse@process@edge@lists{#2}% + \lie@hasse@draw@roots{#1}% +}% +\NewDocumentCommand\hasse@E@six@width@at@grade{mm}% +{% + \ifnum#1=1% + #2 6% + \else\ifnum#1=2% + #2 5% + \else\ifnum#1=3% + #2 5% + \else\ifnum#1=4% + #2 5% + \else\ifnum#1=5% + #2 4% + \else\ifnum#1=6% + #2 3% + \else\ifnum#1=7% + #2 3% + \else\ifnum#1=8% + #2 2% + \else\ifnum#1<1% + #2 0% + \else\ifnum#1>11% + #2 0% + \else% + #2 1% + \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi% +}% +% In the following code, edges are described by grade: in grade g, the expression i+r instead of < to get the right. Use a star in front to get this edge on the higher layer. +\NewDocumentCommand\hasse@E@six{}% +{% +\hasse@X% +{{0,2,4,5:1,6,8},{1,3,4:1,5,7},{2,3:1,4,5:1,6},{2:1,3,4:1,5,6:1},% +{3:1,4:2,4,5:1},{3:2,4:1,5:2},{2:2,4:2,6:2},{3:2,5:2},{4:2},{4:3},{4:4}}% +{%%% grades: +{% 1 +1+2<1,*2+3>2,*3+4<3,*5+6>5,*2+1<1,*3+2<2,*3+5>4,*4+3>3,*5+3<4,6+5>5}, +{% 2 +*1+3<1,*2+4<2,*3+5<4,4+2<3,*4+4<4,*4+6<5,*2+1<1,2+5>3,*3+2>2,*5+3>5}, +{% 3 +*1+4<1,3+1<2,*2+5<3,*2+1<1,3+4<3,3+6<4,*4+2<3,*4+6<5,1+5>2,5+2>4,*5+4>5}, +{% 4 +*1+5<1,2+4<1,2+6<3,*3+1<1,*3+3>2,4+1<3,4+4<4,*3+6<4,*5+2>4}, +{% 5 +*1+3<1,1+6<2,3+4<2,4+1>2,*2+1<1,*2+6>3,*4+3>3}, +{% 6 +*1+2<1,*1+6<2,2+3<2,*3+1<2,*3+5>3}, +{% 7 +*1+6<1,*2+5<2,*2+2<1,*3+1>2}, +{% 8 +*1+5<1,*2+2>1}, +{% 9 +1+3<1}, +{% 10 +1+4<1} +}%%% +\iflie@hasse@threeD% +\begin{pgfonlayer}{Dynkin middle}% +\fill[/Lie Hasse diagram/top] (2;1) -- (5;3) -- (2;5) -- (1;5) -- (2;4) -- (1;3) -- (2;2) -- (1;2) -- cycle;% +\fill[/Lie Hasse diagram/top] (2;3) -- (4;1) -- (6;2) -- (4;5) -- cycle;% +\fill[/Lie Hasse diagram/right] (1;3) -- (2;3) -- (4;5) -- (3;5) -- cycle;% +\fill[/Lie Hasse diagram/left] (3;1) -- (4;1) -- (2;3) -- (1;3) -- cycle;% +\fill[/Lie Hasse diagram/left] (4;3) -- (5;1) -- (6;1) -- (5;2) -- cycle;% +\fill[/Lie Hasse diagram/right] (4;3) -- (5;2) -- (6;3) -- (5;4) -- cycle;% +\fill[/Lie Hasse diagram/top] (5;2) -- (7;1) -- (9;1) -- (7;3) -- cycle;% +\end{pgfonlayer}% +\fi% +}% +\NewDocumentCommand\hasse@E@seven@width@at@grade{mm}% +{% + \ifnum#1=1% + #2 7% + \else\ifnum#1=2% + #2 6% + \else\ifnum#1=3% + #2 6% + \else\ifnum#1=4% + #2 6% + \else\ifnum#1=5% + #2 6% + \else\ifnum#1=6% + #2 5% + \else\ifnum#1=7% + #2 5% + \else\ifnum#1=8% + #2 4% + \else\ifnum#1=9% + #2 4% + \else\ifnum#1=10% + #2 3% + \else\ifnum#1=11% + #2 3% + \else\ifnum#1=12% + #2 2% + \else\ifnum#1=13% + #2 2% + \else\ifnum#1<1% + #2 0% + \else\ifnum#1>17% + #2 0% + \else% + #2 1% + \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi% +}% + +\NewDocumentCommand\hasse@E@seven{}% +{% +\hasse@X% +{{0,2,4,6,7:1,8,10},%1 +{1,3,5,6:1,7,9},%2 +{2,4,5:1,6,7:1,8},%3 +{3,4:1,5,6:1,7,8:1},%4 +{3:1,4,5:1,6:2,6,7:1},%5 +{4:1,5:2,5,6:1,7:2},%6 +{4:2,5:3,5:1,6:2,8:2},%7 +{4:3,5:2,6:3,7:2},%8 +{3:3,5:3,6:2,7:3},%9 +{4:3,6:3,8:3},%10 +{5:3,7:3,9:3},%11 +{6:3,8:3},%12 +{5:3,7:3},%13 +{6:3},%14 +{6:4},%15 +{6:5},%16 +{6:6}%17 +} +{%%% grades: +{% 1 +*1+2<1,*2+1<1,*2+3>2,*3+2<2,*3+4>3,*4+3<3,*4+5<4,4+6>5,*5+4<4,*6+4<5,*6+7>6,*7+6>6}, +{% 2 +*1+3<1,*2+1<1,*2+4<2,*3+2<2,*3+5<3,3+6<4,*4+3<3,*4+6>5,5+3>4,*5+5>5,*5+7>6,*6+4>6}, +{% 3 +*1+4<1,*2+1<1,*2+5<2,2+6<3,*3+2<2,*3+6<4,4+2<3,4+5<4,4+7<5,*5+3<4,*5+7>6,6+3>5,*6+5>6}, +{% 4 +*1+5<1,1+6<2,*2+1<1,*2+6<3,3+1<2,3+5<3,3+7<5,*4+2<3,*4+4>4,5+2<5,*4+7<6,5+5<6,*6+3>6}, +{% 5 +*1+6<1,2+5<1,2+7>3,*3+1<1,*3+4<2,5+1<3,3+7<4,*4+2<2,*4+7>5,5+5<4,6+2>4,*6+4>5}, +{% 6 +*1+4<1,1+7<3,*2+1<1,*2+3>2,*2+7>4,3+5<3,4+1>3,4+4>4,*5+2>4,*5+6>5}, +{% 7 +*1+3<1,1+7<2,*2+1<1,3+4<2,4+1>2,*4+3>3,*2+7>3,*4+6>4,*5+2>4}, +{% 8 +*1+2<1,*1+7<2,2+3<2,2+6<3,*3+1<2,*3+6<4,4+1>3,*4+3>4}, +{% 9 +*1+7<1,*2+2<1,*2+6<2,3+3<2,*4+1>2,*4+4>3}, +{% 10 +*1+6<1,*2+2<1,*2+4<2,*3+1<2,*3+5>3}, +{% 11 +*1+4<1,*2+2<1,*2+5<2,*3+1<2}, +{% 12 +*1+3<1,*1+5<2,*2+2<2}, +{% 13 +*1+5<1,*2+3<1}, +{% 14 +1+4<1}, +{% 15 +1+6<1}, +{% 16 +1+7<1}, +}%%% +\iflie@hasse@threeD% +\begin{pgfonlayer}{Dynkin middle}% +\fill[/Lie Hasse diagram/top] (2;1) -- (6;3) -- (2;6) -- (1;6) -- (2;5) -- (1;4) -- (2;3) -- (1;3) -- + (2;2) -- (1;2) -- cycle;% +\fill[/Lie Hasse diagram/top] (5;1) -- (7;3) -- (4;6) -- (2;4) -- cycle;% +\fill[/Lie Hasse diagram/top] (7;1) -- (9;3) -- (7;5) -- (5;4) -- cycle;% +\fill[/Lie Hasse diagram/top] (9;1) -- (12;1) -- (13;1) -- (14;1) -- (11;3) -- (7;2) -- cycle;% +\fill[/Lie Hasse diagram/right] (1;4) -- (2;4) -- (4;6) -- (3;6) -- cycle;% +\fill[/Lie Hasse diagram/left] (4;1) -- (5;1) -- (2;4) -- (1;4) -- cycle;% +\fill[/Lie Hasse diagram/left] (4;4) -- (6;1) -- (8;1) -- (7;2) -- (6;2) -- (5;4) -- cycle;% +\fill[/Lie Hasse diagram/right] (4;4) -- (5;4) -- (6;5) -- (5;6) -- cycle;% +\fill[/Lie Hasse diagram/right] (6;2) -- (7;2) -- (9;4) -- (8;4) -- cycle;% +\end{pgfonlayer}% +\fi% +}% + +\NewDocumentCommand\hasse@E@eight@width@at@grade{mm}% +{% + \ifnum#1=1% + #2 8% + \else\ifnum#1=2% + #2 7% + \else\ifnum#1=3% + #2 7% + \else\ifnum#1=4% + #2 7% + \else\ifnum#1=5% + #2 7% + \else\ifnum#1=6% + #2 7% + \else\ifnum#1=7% + #2 7% + \else\ifnum#1=8% + #2 6% + \else\ifnum#1=9% + #2 6% + \else\ifnum#1=10% + #2 6% + \else\ifnum#1=11% + #2 6% + \else\ifnum#1=12% + #2 5% + \else\ifnum#1=13% + #2 5% + \else\ifnum#1=14% + #2 4% + \else\ifnum#1=15% + #2 4% + \else\ifnum#1=16% + #2 4% + \else\ifnum#1=17% + #2 4% + \else\ifnum#1=18% + #2 3% + \else\ifnum#1=19% + #2 3% + \else\ifnum#1=20% + #2 2% + \else\ifnum#1=21% + #2 2% + \else\ifnum#1=22% + #2 2% + \else\ifnum#1=23% + #2 2% + \else\ifnum#1<1% + #2 0% + \else\ifnum#1>29% + #2 0% + \else% + #2 1% + \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi% +}% + +\NewDocumentCommand\hasse@E@eight{}% +{% +\hasse@X{% +{0,2,4,6,8,9:1,10,12},%1 +{1,3,5,7,8:1,9,11},%2 +{2,4,6,7:1,8,9:1,10},%3 +{3,5,6:1,7,8:1,9,10:1},%4 +{4,5:1,6,7:1,8:2,8,9:1},%5 +{4:1,5,6:1,7:2,7,8:1,9:2},%6 +{5:1,6:2,6,7:3,7:1,8:2,10:2},%7 +{5:2,6:3,6:1,7:2,8:3,9:2},%8 +{5:3,6:4,6:2,7:3,8:2,9:3},%9 +{5:4,6:3,7:4,7:2,8:3,10:3},%10 +{4:4,6:4,7:3,8:4,9:3,11:3},%11 +{5:4,7:4,8:3,9:4,10:3},%12 +{6:4,8:4,9:5,9:3,10:4},%13 +{7:4,8:5,9:4,10:5},%14 +{7:5,8:4,9:5,11:5},%15 +{6:5,8:5,10:5,12:5},%16 +{7:5,9:5,11:5,13:5},%17 +{8:5,10:5,12:5},%18 +{7:5,9:5,11:5},%19 +{8:5,10:5},%20 +{7:5,9:5},%21 +{6:5,8:5},%22 +{7:5,9:5},%23 +{8:5},%24 +{8:6},%25 +{8:7},%26 +{8:8},%27 +{8:9},%28 +{8:10}%29 +}% +{%%% grades: +{% 1 +*1+2<1,*2+1<1,*2+3>2,*3+2<2,*3+4>3,*4+3<3,*4+5>4,*5+4<4,*5+6<5,5+7>6,*6+5>5,*7+5<6,*7+8>7,8+7>7}, +{% 2 +*1+3<1,*2+1<1,*2+4<2,*3+2<2,*3+5<3,*4+3<3,*4+6<4,4+7>5,*5+4<4,*5+7<6,6+4<5,*6+6>6,*6+8>7,*7+5>7}, +{% 3 +*1+4<1,*2+1<1,*2+5<2,*3+2<2,*3+6<3,3+7>4,*4+3<3,*4+7<5,5+3<4,5+6>5,5+8>6,*6+4>5,*6+8<7,7+4>6,*7+6>7}, +{% 4 +*1+5<1,*2+1<1,*2+6<2,2+7>3,*3+2<2,*3+7<4,4+2<3,4+6<4,4+8<6,*5+3<4,*5+5>5,*5+8<7,6+3>6,6+6>7,*7+4>7}, +{% 5 +6+2<5,*1+6<1,1+7<2,*2+1<1,*2+7<3,3+1<2,3+6<3,3+8<5,*4+2<3,*4+5<4,4+8<6,*5+3<4,*5+8>7,6+6<6,7+3>6,*7+5>7}, +{% 6 +*1+7<1,2+6<1,2+8<3,*3+1<1,*3+5<2,*4+2<2,3+8<5,*4+4<4,*4+8>6,5+1<3,5+6<5,6+2>5,6+5>6,*7+3>6,*7+7>7}, +{% 7 +5+1<3,*1+5<1,1+8<3,*2+1<1,*2+4<2,2+8<4,3+6<3,*4+2<2,*4+8>5,5+5<4,6+2>4,*6+4>5,*6+7>6,*7+3>6}, +{% 8 +*1+4<1,1+8<3,*2+1<1,*2+3>2,*2+8>4,3+5<3,4+1<3,4+4<4,4+7<5,*5+2<4,*5+7<6,*6+4>6,6+2>5}, +{% 9 +*1+3<1,1+8<2,*2+1<1,*2+8<3,3+4<2,3+7<4,*4+3>3,4+1<2,*4+7<5,5+1>4,5+4>5,*6+2>5,*6+5>6}, +{% 10 +*1+2<1,*1+8<2,2+3<2,2+7<3,*3+1<2,*3+7>4,4+4<3,5+1>3,*5+3>4,*5+5>5,*6+2<5,*6+6>6}, +{% 11 +*1+8<1,*2+2<1,*2+7<2,3+3<2,3+5>3,*4+1<2,*4+5<4,*5+3>4,5+1>3,*5+6>5,*6+2>5}, +{% 12 +*1+7<1,*2+2<1,*2+5<2,3+3<2,3+6<4,*4+1<2,*4+4>3,*4+6<5,5+1>4,*5+3>5}, +{% 13 +*1+5<1,*2+2<1,*2+4<2,2+6<3,*3+1<2,*3+6>4,4+3<3,5+1>3,*5+4>4}, +{% 14 +*1+4<1,1+6<2,*2+2<1,*2+6<3,3+2<2,3+4<3,*4+1<3,*4+5>4}, +{% 15 +*1+3<1,*1+6<2,2+4<2,*3+2>2,*3+5<3,*4+1<3,*4+7>4}, +{% 16 +*1+6<1,*2+3<1,*2+5<2,*3+2<2,*3+7<3,*4+1<3,*4+8>4}, +{% 17 +*1+5<1,*2+3<1,*2+7<2,*3+2<2,*3+8<3,*4+1>3}, +{% 18 +*1+4<1,*1+7<2,*2+3<2,*2+8<3,*3+2>3}, +{% 19 +*1+7<1,*2+4<1,*2+8<2,*3+3>2}, +{% 20 +*1+5<1,*1+8<2,*2+4>2}, +{% 21 +*1+6<1,*1+8<2,*2+5>2,}, +{% 22 +*1+8<1,*2+6<1,*2+7>2}, +{% 23 +*1+7<1,*2+6>1}, +{% 24 +1+5>1}, +{% 25 +1+4>1}, +{% 26 +1+3>1}, +{% 27 +1+2>1}, +{% 28 +1+1>1} +}%%% +\iflie@hasse@threeD% +\begin{pgfonlayer}{Dynkin middle}% +\fill[/Lie Hasse diagram/top] + (2;1) -- + (7;3) -- + (2;7) -- + (1;7) -- + (2;6) -- + (1;5) -- + (2;4) -- + (1;4) -- + (2;3) -- + (1;3) -- + (2;2) -- + (1;2) -- + cycle;% +\fill[/Lie Hasse diagram/left] + (5;1) -- + (6;1) -- + (2;5) -- + (1;5) -- + cycle;% +\fill[/Lie Hasse diagram/right] + (2;5) -- + (4;7) -- + (3;7) -- + (1;5) -- + cycle;% +\fill[/Lie Hasse diagram/left] + (7;1) -- + (10;1) -- + (9;2) -- + (8;2) -- + (7;4) -- + (6;4) -- + (5;5) -- + (4;5) -- + cycle;% +\fill[/Lie Hasse diagram/right] + (4;5) -- + (5;5) -- + (6;7) -- + (5;7) -- + cycle;% +\fill[/Lie Hasse diagram/right] + (6;4) -- + (7;4) -- + (9;6) -- + (8;6) -- + cycle;% +\fill[/Lie Hasse diagram/right] + (8;2) -- + (9;2) -- + (12;4) -- + (13;3) -- + (14;4) -- + (12;5) -- + cycle;% +\fill[/Lie Hasse diagram/top] + (6;1) -- + (8;3) -- + (4;7) -- + (2;5) -- + cycle;% +\fill[/Lie Hasse diagram/left] + (12;4) -- + (14;1) -- + (15;1) -- + (13;3) -- + cycle;% +\fill[/Lie Hasse diagram/top] + (5;5) -- + (8;1) -- + (10;4) -- + (7;7) -- + cycle;% +\fill[/Lie Hasse diagram/top] + (7;4) -- + (9;1) -- + (13;4) -- + (11;6) -- + cycle;% +\fill[/Lie Hasse diagram/top] + (9;2) -- + (11;1) -- + (15;2) -- + (13;5) -- + cycle;% +\fill[/Lie Hasse diagram/top] + (13;3) -- + (16;1) -- + (18;1) -- + (19;1) -- + (20;1) -- + (22;1) -- + (24;1) -- + (23;2) -- + (22;2) -- + (17;4) -- + cycle;% +\end{pgfonlayer}% +\fi% +}% + +\NewDocumentCommand\hasse@F@width@at@grade{mm}% +{% + \ifnum#1=1% + #2 4% + \else\ifnum#1=2% + #2 3% + \else\ifnum#1=3% + #2 3% + \else\ifnum#1=4% + #2 3% + \else\ifnum#1=5% + #2 3% + \else\ifnum#1=6% + #2 2% + \else\ifnum#1=7% + #2 2% + \else\ifnum#1<1% + #2 0% + \else\ifnum#1>11% + #2 0% + \else% + #2 1% + \fi\fi\fi\fi\fi\fi\fi\fi\fi% +}% + +\NewDocumentCommand\hasse@F{}% +{% +\hasse@X% +{{0,2,4,6},{1,3,5},{2,3:1,4},{2:1,3,4:1},{1:1,3:1,5:1},{2:1,4:1},{1:1,3:1},{2:1},{2:2},{2:3},{2:4}}% +{% grades: +{% 1 +1+2<1,*2+3<2,*3+4<3,*2+1>1,*3+2>2,4+3>3}, +{% 2 +*1+3<1,*2+4<3,*2+3<2,*2+1<1,3+2>3}, +{% 3 +*1+3<1,1+4<2,*2+4<3,*2+1<1,3+1>2,*3+3>3}, +{% 4 +*1+2<1,*1+4<2,2+3<2,*3+1>2,*3+4>3}, +{% 5 +*1+4<1,*2+4<2,*2+2>1,*3+1>2}, +{% 6 +*1+3<1,*1+4<2,*2+2>2}, +{% 7 +*1+4<1,*2+3>1}, +{% 8 +1+3<1}, +{% 9 +1+2<1}, +{% 10 +1+1<1} +}% +\iflie@hasse@threeD% +\begin{pgfonlayer}{Dynkin middle}% +\fill[/Lie Hasse diagram/top] (2;1) -- (4;2) -- (2;3) -- (1;3) -- (2;2) -- (1;2) -- cycle;% +\fill[/Lie Hasse diagram/left] (2;2) -- (3;1) -- (4;1) -- (3;2) -- cycle;% +\fill[/Lie Hasse diagram/right] (2;2) -- (3;2) -- (4;3) -- (3;3) -- cycle;% +\fill[/Lie Hasse diagram/top] (3;2) -- (5;1) -- (6;1) -- (7;1) -- (8;1) -- (5;3) -- cycle;% +\end{pgfonlayer}% +\fi% +}% +\NewDocumentCommand\hasse@G@width@at@grade{mm}% +{% + \ifnum#1=1% + #2 2% + \else\ifnum#1<1% + #2 0% + \else\ifnum#1>5% + #2 0% + \else% + #2 1% + \fi\fi\fi% +}% +\NewDocumentCommand\hasse@G{}% +{% +\hasse@X{{0,2},{1},{1},{1},{1}}{{1+2<1,2+1>1},{1+1<1},{1+1<1},{1+2<1}}% +}% +\ExplSyntaxOn +\DeclareExpandableDocumentCommand{\lie@hasse@repeat@string}{O{}mm} +{ + \int_compare:nT { #2 > 0 } + { + #3 \prg_replicate:nn { #2 - 1 } { #1#3 } + } + } +\ExplSyntaxOff +\newcommand*\exceptional@root@sum[1]{\csname FOO-#1\endcsname} +\newcommand*\defn@root@sum[1]{\expandafter\def\csname FOO-#1\endcsname} +\def\@root@sum#1=#2!{\global\defn@root@sum{#1}{#2}}% +\newcount\left@part@length% +\newcount\middle@part@length% +\newcount\right@part@length% +\NewDocumentCommand\hasse@A@root@sum{mmm}% +{% + \left@part@length#2\relax% + \advance\left@part@length by -1\relax% + \middle@part@length#1\relax% + \right@part@length\the\dynkin@rank\relax% + \advance\right@part@length by -#1\relax% + \advance\right@part@length by -#2\relax% + \advance\right@part@length by 1\relax% + \ifnum\left@part@length=0% + \ifnum\right@part@length=0% + \xdef#3{\lie@hasse@repeat@string[.]{\the\middle@part@length}{1}}% + \else% + \xdef#3{\lie@hasse@repeat@string[.]{\the\middle@part@length}{1}.\lie@hasse@repeat@string[.]{\the\right@part@length}{0}}% + \fi% + \else% + \ifnum\right@part@length=0% + \xdef#3{\lie@hasse@repeat@string[.]{\the\left@part@length}{0}.\lie@hasse@repeat@string[.]{\the\middle@part@length}{1}}% + \else% + \xdef#3{\lie@hasse@repeat@string[.]{\the\left@part@length}{0}.\lie@hasse@repeat@string[.]{\the\middle@part@length}{1}.\lie@hasse@repeat@string[.]{\the\right@part@length}{0}}% + \fi% + \fi% +}% +\NewDocumentCommand\hasse@B@root@sum{mmm}% +{% + \right@part@length#1\relax% + \advance\right@part@length by -\the\dynkin@rank\relax% + \advance\right@part@length by #2\relax% + \advance\right@part@length by -1\relax% + \ifnum\right@part@length>0% + \left@part@length#2\relax% + \advance\left@part@length by -1\relax% + \middle@part@length\the\dynkin@rank\relax% + \advance\middle@part@length by\the\dynkin@rank\relax% + \advance\middle@part@length by -#2\relax% + \advance\middle@part@length by -#2\relax% + \advance\middle@part@length by 2\relax% + \advance\middle@part@length by -#1\relax% + \ifnum\left@part@length=0% + \ifnum\middle@part@length=0% + \xdef#3{\lie@hasse@repeat@string[.]{\the\right@part@length}{2}}% + \else% + \xdef#3{\lie@hasse@repeat@string[.]{\the\middle@part@length}{1}.\lie@hasse@repeat@string[.]{\the\right@part@length}{2}}% + \fi% + \else% + \ifnum\middle@part@length=0% + \xdef#3{\lie@hasse@repeat@string[.]{\the\left@part@length}{0}.\lie@hasse@repeat@string[.]{\the\right@part@length}{2}}% + \else% + \xdef#3{\lie@hasse@repeat@string[.]{\the\left@part@length}{0}.\lie@hasse@repeat@string[.]{\the\middle@part@length}{1}.\lie@hasse@repeat@string[.]{\the\right@part@length}{2}}% + \fi% + \fi% + \else% + \hasse@A@root@sum{#1}{#2}{#3}% + \fi% +}% +\newcount\hasse@C@len% +\NewDocumentCommand\hasse@C@root@sum{mmm}% +{% + \hasse@B@root@sum{#1}{#2}{\hasse@C@root@tmp}% + \StrRight{\hasse@C@root@tmp}{1}[\hasse@C@last@char]% + \IfStrEq{\hasse@C@last@char}{2}% + {% + \StrGobbleRight{\hasse@C@root@tmp}{1}[\hasse@C@left@chunk]% + \xdef#3{\hasse@C@left@chunk{}1}% + }% + {% + }% +}% +\newcount\hasse@D@len% +\NewDocumentCommand\hasse@D@root@sum{mmm}% +{% + \hasse@D@len#1\relax% + \advance\hasse@D@len by #2\relax% + \advance\hasse@D@len by -1\relax% + \ifnum\hasse@D@len<\the\dynkin@rank% + \hasse@A@root@sum{#1}{#2}{#3}% + \else% + \ifnum\hasse@D@len=\the\dynkin@rank% + \ifnum#2=1% + \xdef#3{\lie@hasse@repeat@string[.]{\the\dynkin@rank}{1}}% + \else% + \left@part@length#2\relax% + \advance\left@part@length by -1\relax% + \right@part@length#1\relax% + \advance\right@part@length by -1\relax% + \if\left@part@length>0% + \xdef#3% + {%% + \lie@hasse@repeat@string[.]% + {\the\left@part@length}{0}.% + \lie@hasse@repeat@string[.]% + {\the\right@part@length}{1}.0.1% + }%% + \else% + \xdef#3% + {%% + \lie@hasse@repeat@string[.]% + {\the\right@part@length}{1}.0.1% + }%% + \fi% + \fi% + \else% + \ifnum#1<\the\dynkin@rank% + % i-2 zeroes + \left@part@length#2\relax% + \advance\left@part@length by -2\relax% + % 2r-g-2i+2 ones + \middle@part@length\the\dynkin@rank\relax% + \advance\middle@part@length by \the\dynkin@rank\relax% + \advance\middle@part@length by-#1\relax% + \advance\middle@part@length by-#2\relax% + \advance\middle@part@length by-#2\relax% + \advance\middle@part@length by 2\relax% + % g+i-r-2 twos + \right@part@length#1\relax% + \advance\right@part@length by #2\relax% + \advance\right@part@length by -\the\dynkin@rank\relax% + \advance\right@part@length by -2\relax% + \ifnum\left@part@length>0% + \ifnum\right@part@length>0% + \xdef#3% + {%% + \lie@hasse@repeat@string[.]% + {\the\left@part@length}{0}.% + \lie@hasse@repeat@string[.]% + {\the\middle@part@length}{1}.% + \lie@hasse@repeat@string[.]% + {\the\right@part@length}{2}.1.1% + }%% + \else% + \xdef#3% + {%% + \lie@hasse@repeat@string[.]% + {\the\left@part@length}{0}.% + \lie@hasse@repeat@string[.]% + {\the\middle@part@length}{1}.1.1% + }%% + \fi% + \else% + \ifnum\right@part@length>0% + \xdef#3% + {%% + \lie@hasse@repeat@string[.]% + {\the\middle@part@length}{1}.% + \lie@hasse@repeat@string[.]% + {\the\right@part@length}{2}.1.1% + }%% + \else% + \xdef#3{\lie@hasse@repeat@string[.]{\the\middle@part@length}{1}.1.1}% + \fi% + \fi% + \else% + % i-1 zeroes + \left@part@length#2\relax% + \advance\left@part@length by -1\relax% + % 2r-g-2i ones + \middle@part@length\the\dynkin@rank\relax% + \advance\middle@part@length by \the\dynkin@rank\relax% + \advance\middle@part@length by-#1\relax% + \advance\middle@part@length by-#2\relax% + \advance\middle@part@length by-#2\relax% + % g+i-r-1 twos + \right@part@length#1\relax% + \advance\right@part@length by #2\relax% + \advance\right@part@length by -\the\dynkin@rank\relax% + \advance\right@part@length by -1\relax% + \ifnum\left@part@length>0% + \xdef#3% + {%% + \lie@hasse@repeat@string[.]% + {\the\left@part@length}{0}.% + \lie@hasse@repeat@string[.]% + {\the\middle@part@length}{1}.% + \lie@hasse@repeat@string[.]% + {\the\right@part@length}{2}.1.1% + }%% + \else% + \xdef#3% + {%% + \lie@hasse@repeat@string[.]% + {\the\middle@part@length}{1}.% + \lie@hasse@repeat@string[.]% + {\the\right@part@length}{2}.1.1% + }%% + \fi% + \fi% + \fi% + \fi% +}% +\newif\ifroot@sum@reset% +\root@sum@resettrue% +\NewDocumentCommand\initialize@roots@as@sums@table{}% +{% + \IfStrEqCase{\dynkin@series}% + {% + {E}% + {% + \ifnum\dynkin@rank=6% + \hasse@set@E@six@root@sums% + \else% + \ifnum\dynkin@rank=7% + \hasse@set@E@seven@root@sums% + \else% + \hasse@set@E@eight@root@sums% + \fi% + \fi% + }% + {F}{\hasse@set@F@root@sums}% + {G}{\hasse@set@G@root@sums}% + }% + \global\root@sum@resetfalse% +}% +\xdef\my@root@sum{}% +\xdef\my@fixed@root@sum{}% +\NewDocumentCommand\rootSum{oommm}% +{% + \IfValueT{#1}% + {% + \IfStrEq{\dynkin@series}{#1}% + {% + }% + {% + \global\root@sum@resettrue% + }% + }% + \IfValueT{#2}% + {% + \ifnum\dynkin@rank=#2% + \else% + \global\root@sum@resettrue% + \fi% + }% + \ifroot@sum@reset% + \xdef\dynkin@series{#1}% + \global\dynkin@rank #2\relax% + \initialize@roots@as@sums@table% + \fi% + \IfStrEqCase{\dynkin@series}% + {% + {A}{\hasse@A@root@sum{#3}{#4}{\my@root@sum}}% + {B}{\hasse@B@root@sum{#3}{#4}{\my@root@sum}}% + {C}{\hasse@C@root@sum{#3}{#4}{\my@root@sum}}% + {D}{\hasse@D@root@sum{#3}{#4}{\my@root@sum}}% + {E}{\xdef\my@root@sum{\exceptional@root@sum{#3;#4}}}% + {F}{\xdef\my@root@sum{\exceptional@root@sum{#3;#4}}}% + {G}{\xdef\my@root@sum{\exceptional@root@sum{#3;#4}}}% + }% + \StrSubstitute{\my@root@sum}{.}{,}[#5]% +}% +%% \rootSystemHeight[G][2]{\h} sets the counter \h to the height of the poset +%% of the root system G2. \rootSystemHeight{\h} uses the current root system. +\NewDocumentCommand\rootSystemHeight{oom}% +{% + \global\root@sum@resetfalse% + \IfValueT{#1}% + {% + \IfStrEq{\dynkin@series}{#1}% + {% + }% + {% + \global\root@sum@resettrue% + }% + }% + \IfValueT{#2}% + {% + \ifnum\dynkin@rank=#2% + \else% + \global\root@sum@resettrue% + \fi% + }% + \ifroot@sum@reset% + \xdef\dynkin@series{#1}% + \global\dynkin@rank #2\relax% + \initialize@roots@as@sums@table% + \fi% + \IfStrEqCase{\dynkin@series}% + {% + {A}{\global#3\the\dynkin@rank}% + {B}% + {%% + \global#3\the\dynkin@rank\relax% + \global\advance#3 by \the\dynkin@rank\relax% + \global\advance#3 by -1\relax% + }%% + {C}% + {%% + \global#3\the\dynkin@rank\relax% + \global\advance#3 by \the\dynkin@rank\relax% + \global\advance#3 by -1\relax% + }%% + {D}% + {%% + \global#3\the\dynkin@rank\relax% + \global\advance#3 by \the\dynkin@rank\relax% + \global\advance#3 by -3\relax% + }%% + {E}% + {%% + \ifnum\dynkin@rank=6% + \global#3 11% + \else% + \ifnum\dynkin@rank=7% + \global#3 17% + \else% + \global#3 29% + \fi% + \fi% + }%% + {F}{\global#3 11}% + {G}{\global#3 5}% + }% +}% +%% \rootSystemWidthAtGrade[G][2]{5}{\w} sets the counter \w to the width +%% of the 5th grade of the poset of the root system G2. +%% \rootSystemWidth{5}{\w} uses the current root system. +\NewDocumentCommand\rootSystemWidthAtGrade{oomm}% +{% + \global\root@sum@resetfalse% + \IfValueT{#1}% + {% + \IfStrEq{\dynkin@series}{#1}% + {% + }% + {% + \global\root@sum@resettrue% + }% + }% + \IfValueT{#2}% + {% + \ifnum\dynkin@rank=#2% + \else% + \global\root@sum@resettrue% + \fi% + }% + \ifroot@sum@reset% + \xdef\dynkin@series{#1}% + \global\dynkin@rank #2\relax% + \initialize@roots@as@sums@table% + \fi% + \IfStrEqCase{\dynkin@series}% + {% + {A}{\hasse@A@width@at@grade{#3}{#4}}% + {B}{\hasse@BC@width@at@grade{#3}{#4}}% + {C}{\hasse@BC@width@at@grade{#3}{#4}}% + {D}{\hasse@D@width@at@grade{#3}{#4}}% + {E}% + {%% + \ifnum\dynkin@rank=6% + \hasse@E@six@width@at@grade{#3}{#4}% + \else% + \ifnum\dynkin@rank=7% + \hasse@E@seven@width@at@grade{#3}{#4}% + \else% + \hasse@E@eight@width@at@grade{#3}{#4}% + \fi% + \fi% + }%% + {F}% + {% + \hasse@F@width@at@grade{#3}{#4}% + }% + {G}% + {% + \hasse@G@width@at@grade{#3}{#4}% + }% + }% +}% +\NewDocumentCommand\do@hasse@list{m}{\expandafter\@root@sum#1!}% +\NewDocumentCommand\hasse@set@E@six@root@sums{}% +{% +\forcsvlist{\do@hasse@list}{% +1;1=1.0.0.0.0.0,% +1;2=0.1.0.0.0.0,% +1;3=0.0.1.0.0.0,% +1;4=0.0.0.1.0.0,% +1;5=0.0.0.0.1.0,% +1;6=0.0.0.0.0.1,% +2;1=1.1.0.0.0.0,% +2;2=0.1.1.0.0.0,% +2;3=0.0.1.1.0.0,% +2;4=0.0.1.0.1.0,% +2;5=0.0.0.0.1.1,% +3;1=1.1.1.0.0.0,% +3;2=0.1.1.1.0.0,% +3;3=0.1.1.0.1.0,% +3;4=0.0.1.1.1.0,% +3;5=0.0.1.0.1.1,% +4;1=1.1.1.1.0.0,% +4;2=1.1.1.0.1.0,% +4;3=0.1.1.1.1.0,% +4;4=0.1.1.0.1.1,% +4;5=0.0.1.1.1.1,% +5;1=1.1.1.1.1.0,% +5;2=0.1.2.1.1.0,% +5;3=1.1.1.0.1.1,% +5;4=0.1.1.1.1.1,% +6;1=1.1.2.1.1.0,% +6;2=1.1.1.1.1.1,% +6;3=0.1.2.1.1.1,% +7;1=1.2.2.1.1.0,% +7;2=1.1.2.1.1.1,% +7;3=0.1.2.1.2.1,% +8;1=1.2.2.1.1.1,% +8;2=1.1.2.1.2.1,% +9;1=1.2.2.1.2.1,% +10;1=1.2.3.1.2.1,% +11;1=1.2.3.2.2.1}% +}% +\NewDocumentCommand\hasse@set@E@seven@root@sums{}% +{% +\forcsvlist{\do@hasse@list}{% +1;1=1.0.0.0.0.0.0,% +1;2=0.1.0.0.0.0.0,% +1;3=0.0.1.0.0.0.0,% +1;4=0.0.0.1.0.0.0,% +1;5=0.0.0.0.1.0.0,% +1;6=0.0.0.0.0.1.0,% +1;7=0.0.0.0.0.0.1,% +2;1=1.1.0.0.0.0.0,% +2;2=0.1.1.0.0.0.0,% +2;3=0.0.1.1.0.0.0,% +2;4=0.0.0.1.1.0.0,% +2;5=0.0.0.1.0.1.0,% +2;6=0.0.0.0.0.1.1,% +3;1=1.1.1.0.0.0.0,% +3;2=0.1.1.1.0.0.0,% +3;3=0.0.1.1.1.0.0,% +3;4=0.0.1.1.0.1.0,% +3;5=0.0.0.1.1.1.0,% +3;6=0.0.0.1.0.1.1,% +4;1=1.1.1.1.0.0.0,% +4;2=0.1.1.1.1.0.0,% +4;3=0.1.1.1.0.1.0,% +4;4=0.0.1.1.1.1.0,% +4;5=0.0.1.1.0.1.1,% +4;6=0.0.0.1.1.1.1,% +5;1=1.1.1.1.1.0.0,% +5;2=1.1.1.1.0.1.0,% +5;3=0.1.1.1.1.1.0,% +5;5=0.1.1.1.0.1.1,% +5;4=0.0.1.2.1.1.0,% +5;6=0.0.1.1.1.1.1,% +6;1=1.1.1.1.1.1.0,% +6;3=1.1.1.1.0.1.1,% +6;2=0.1.1.2.1.1.0,% +6;4=0.1.1.1.1.1.1,% +6;5=0.0.1.2.1.1.1,% +7;1=1.1.1.2.1.1.0,% +7;3=1.1.1.1.1.1.1,% +7;2=0.1.2.2.1.1.0,% +7;4=0.1.1.2.1.1.1,% +7;5=0.0.1.2.1.2.1,% +8;1=1.1.2.2.1.1.0,% +8;2=1.1.1.2.1.1.1,% +8;3=0.1.2.2.1.1.1,% +8;4=0.1.1.2.1.2.1,% +9;1=1.2.2.2.1.1.0,% +9;2=1.1.2.2.1.1.1,% +9;3=1.1.1.2.1.2.1,% +9;4=0.1.2.2.1.2.1,% +10;1=1.2.2.2.1.1.1,% +10;2=1.1.2.2.1.2.1,% +10;3=0.1.2.3.1.2.1,% +11;1=1.2.2.2.1.2.1,% +11;2=1.1.2.3.1.2.1,% +11;3=0.1.2.3.2.2.1,% +12;1=1.2.2.3.1.2.1,% +12;2=1.1.2.3.2.2.1,% +13;1=1.2.3.3.1.2.1,% +13;2=1.2.2.3.2.2.1,% +14;1=1.2.3.3.2.2.1,% +15;1=1.2.3.4.2.2.1,% +16;1=1.2.3.4.2.3.1,% +17;1=1.2.3.4.2.3.2}% +}% +\NewDocumentCommand\hasse@set@E@eight@root@sums{}% +{% +\forcsvlist{\do@hasse@list}{% +1;1=1.0.0.0.0.0.0.0,% +1;2=0.1.0.0.0.0.0.0,% +1;3=0.0.1.0.0.0.0.0,% +1;4=0.0.0.1.0.0.0.0,% +1;5=0.0.0.0.1.0.0.0,% +1;6=0.0.0.0.0.1.0.0,% +1;7=0.0.0.0.0.0.1.0,% +1;8=0.0.0.0.0.0.0.1,% +2;1=1.1.0.0.0.0.0.0,% +2;2=0.1.1.0.0.0.0.0,% +2;3=0.0.1.1.0.0.0.0,% +2;4=0.0.0.1.1.0.0.0,% +2;5=0.0.0.0.1.1.0.0,% +2;6=0.0.0.0.1.0.1.0,% +2;7=0.0.0.0.0.0.1.1,% +3;1=1.1.1.0.0.0.0.0,% +3;2=0.1.1.1.0.0.0.0,% +3;3=0.0.1.1.1.0.0.0,% +3;4=0.0.0.1.1.1.0.0,% +3;5=0.0.0.1.1.0.1.0,% +3;6=0.0.0.0.1.1.1.0,% +3;7=0.0.0.0.1.0.1.1,% +4;1=1.1.1.1.0.0.0.0,% +4;2=0.1.1.1.1.0.0.0,% +4;3=0.0.1.1.1.1.0.0,% +4;4=0.0.1.1.1.0.1.0,% +4;5=0.0.0.1.1.1.1.0,% +4;6=0.0.0.1.1.0.1.1,% +4;7=0.0.0.0.1.1.1.1,% +5;1=1.1.1.1.1.0.0.0,% +5;2=0.1.1.1.1.1.0.0,% +5;3=0.1.1.1.1.0.1.0,% +5;4=0.0.1.1.1.1.1.0,% +5;5=0.0.0.1.2.1.1.0,% +5;6=0.0.1.1.1.0.1.1,% +5;7=0.0.0.1.1.1.1.1,% +6;1=1.1.1.1.1.1.0.0,% +6;2=1.1.1.1.1.0.1.0,% +6;3=0.1.1.1.1.1.1.0,% +6;4=0.0.1.1.2.1.1.0,% +6;5=0.1.1.1.1.0.1.1,% +6;6=0.0.1.1.1.1.1.1,% +6;7=0.0.0.1.2.1.1.1,% +7;1=1.1.1.1.1.1.1.0,% +7;2=0.1.1.1.2.1.1.0,% +7;3=1.1.1.1.1.0.1.1,% +7;4=0.0.1.2.2.1.1.0,% +7;5=0.1.1.1.1.1.1.1,% +7;6=0.0.1.1.2.1.1.1,% +7;7=0.0.0.1.2.1.2.1,% +8;1=1.1.1.1.2.1.1.0,% +8;2=0.1.1.2.2.1.1.0,% +8;3=1.1.1.1.1.1.1.1,% +8;4=0.1.1.1.2.1.1.1,% +8;5=0.0.1.2.2.1.1.1,% +8;6=0.0.1.1.2.1.2.1,% +9;1=1.1.1.2.2.1.1.0,% +9;2=0.1.2.2.2.1.1.0,% +9;3=1.1.1.1.2.1.1.1,% +9;4=0.1.1.2.2.1.1.1,% +9;5=0.1.1.1.2.1.2.1,% +9;6=0.0.1.2.2.1.2.1,% +10;1=1.1.2.2.2.1.1.0,% +10;2=1.1.1.2.2.1.1.1,% +10;3=0.1.2.2.2.1.1.1,% +10;4=1.1.1.1.2.1.2.1,% +10;5=0.1.1.2.2.1.2.1,% +10;6=0.0.1.2.3.1.2.1,% +11;1=1.2.2.2.2.1.1.0,% +11;2=1.1.2.2.2.1.1.1,% +11;3=1.1.1.2.2.1.2.1,% +11;4=0.1.2.2.2.1.2.1,% +11;5=0.1.1.2.3.1.2.1,% +11;6=0.0.1.2.3.2.2.1,% +12;1=1.2.2.2.2.1.1.1,% +12;2=1.1.2.2.2.1.2.1,% +12;3=1.1.1.2.3.1.2.1,% +12;4=0.1.2.2.3.1.2.1,% +12;5=0.1.1.2.3.2.2.1,% +13;1=1.2.2.2.2.1.2.1,% +13;2=1.1.2.2.3.1.2.1,% +13;3=0.1.2.3.3.1.2.1,% +13;4=1.1.1.2.3.2.2.1,% +13;5=0.1.2.2.3.2.2.1,% +14;1=1.2.2.2.3.1.2.1,% +14;2=1.1.2.3.3.1.2.1,% +14;3=1.1.2.2.3.2.2.1,% +14;4=0.1.2.3.3.2.2.1,% +15;1=1.2.2.3.3.1.2.1,% +15;2=1.2.2.2.3.2.2.1,% +15;3=1.1.2.3.3.2.2.1,% +15;4=0.1.2.3.4.2.2.1,% +16;1=1.2.3.3.3.1.2.1,% +16;2=1.2.2.3.3.2.2.1,% +16;3=1.1.2.3.4.2.2.1,% +16;4=0.1.2.3.4.2.3.1,% +17;1=1.2.3.3.3.2.2.1,% +17;2=1.2.2.3.4.2.2.1,% +17;3=1.1.2.3.4.2.3.1,% +17;4=0.1.2.3.4.2.3.2,% +18;1=1.2.3.3.4.2.2.1,% +18;2=1.2.2.3.4.2.3.1,% +18;3=1.1.2.3.4.2.3.2,% +19;1=1.2.3.4.4.2.2.1,% +19;2=1.2.3.3.4.2.3.1,% +19;3=1.2.2.3.4.2.3.2,% +20;1=1.2.3.4.4.2.3.1,% +20;2=1.2.3.3.4.2.3.2,% +21;1=1.2.3.4.5.2.3.1,% +21;2=1.2.3.4.4.2.3.2,% +22;1=1.2.3.4.5.3.3.1,% +22;2=1.2.3.4.5.2.3.2,% +23;1=1.2.3.4.5.3.3.2,% +23;2=1.2.3.4.5.2.4.2,% +24;1=1.2.3.4.5.3.4.2,% +25;1=1.2.3.4.6.3.4.2,% +26;1=1.2.3.5.6.3.4.2,% +27;1=1.2.4.5.6.3.4.2,% +28;1=1.3.4.5.6.3.4.2,% +29;1=2.3.4.5.6.3.4.2}% +}% +\NewDocumentCommand\hasse@set@F@root@sums{}% +{% +\forcsvlist{\do@hasse@list}{% +1;1=1.0.0.0,% +1;2=0.1.0.0,% +1;3=0.0.1.0,% +1;4=0.0.0.1,% +2;1=1.1.0.0,% +2;2=0.1.1.0,% +2;3=0.0.1.1,% +3;1=1.1.1.0,% +3;2=0.1.2.0,% +3;3=0.1.1.1,% +4;1=1.1.2.0,% +4;2=1.1.1.1,% +4;3=0.1.2.1,% +5;1=1.2.2.0,% +5;2=1.1.2.1,% +5;3=0.1.2.2,% +6;1=1.2.2.1,% +6;2=1.1.2.2,% +7;1=1.2.3.1,% +7;2=1.2.2.2,% +8;1=1.2.3.2,% +9;1=1.2.4.2,% +10;1=1.3.4.2,% +11;1=2.3.4.2}% +}% +\NewDocumentCommand\hasse@set@G@root@sums{}% +{% +\forcsvlist{\do@hasse@list}{% +1;1=1.0,% +1;2=0.1,% +2;1=1.1,% +3;1=2.1,% +4;1=3.1,% +5;1=3.2}% +}% +\NewDocumentCommand\forAllPositiveRootsInHasseDiagram{m}% +{% + \rootSystemHeight{\lie@hasse@height}% + \foreach \root@grady in {1,...,\the\lie@hasse@height}% + {% + \rootSystemWidthAtGrade{\root@grady}{\lie@hasse@width}% + {% + \foreach \root@indexy in {1,...,\the\lie@hasse@width}% + {% + #1{\root@grady}{\root@indexy}% + }% + }% + }% +}% \ No newline at end of file diff --git a/graphics/pgf/contrib/lie-hasse/lie-hasse.tex b/graphics/pgf/contrib/lie-hasse/lie-hasse.tex new file mode 100644 index 0000000000..82643fee14 --- /dev/null +++ b/graphics/pgf/contrib/lie-hasse/lie-hasse.tex @@ -0,0 +1,555 @@ +\documentclass{amsart} +\title[The Lie Hasse package]{The Lie Hasse package \\ Version 1.0} +%% My name: +\makeatletter +\DeclareRobustCommand{\scotsMc}{\scotsMcx{c}} +\DeclareRobustCommand{\scotsMC}{\scotsMcx{\textsc{c}}} +\DeclareRobustCommand{\scotsMcx}[1]{% + M% + \raisebox{\dimexpr\fontcharht\font`M-\height}{% + \check@mathfonts\fontsize{\sf@size}{0}\selectfont + \kern.3ex\underline{\kern-.3ex #1\kern-.3ex}\kern.3ex + }% +} +\expandafter\def\expandafter\@uclclist\expandafter{% + \@uclclist\scotsMc\scotsMC +} +\makeatother +\newcommand{\authorsname}{\texorpdfstring{Benjamin \scotsMc{}Kay}{Benjamin McKay}} +\author{\authorsname} +\address{School of Mathematical Sciences, University College Cork, Cork, Ireland} +\email{b.mckay@ucc.ie} +\date{3 February 2020} +\usepackage{etex} +\usepackage[T1]{fontenc} +\usepackage[utf8]{inputenx} +\usepackage{etoolbox} +\usepackage{lmodern} +\RequirePackage[tt=lining]{cfr-lm} +\usepackage[kerning=true,tracking=true]{microtype} +\usepackage{amsmath} +\usepackage{amsfonts} +\usepackage{mathtools} +\usepackage{mathtext} +\usepackage[english]{babel} +\usepackage[pagebackref]{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{lie-hasse} +\usetikzlibrary{positioning} +\usepackage{fancyvrb}\fvset{obeytabs,tabsize=2,fontsize=\small} +\usepackage[listings]{tcolorbox} +\tcbuselibrary{breakable} +\tcbuselibrary{skins} +\usepackage{varwidth} +\usepackage{xspace} +\newcommand{\TikZ}{Ti\textit{k}Z\xspace} +\definecolor{example-color}{gray}{1} +\definecolor{example-border-color}{gray}{.8} +\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} +} +\tikzset{ + /Dynkin diagram, + edge length=1cm, + ordering=Carter, + vertical shift=0} +\tikzset{ + background rectangle/.style={ + shade, + top color=olive!20, + bottom color=white, + draw=olive!15, + very thick, + rounded corners}, +} +\begin{document} +\maketitle +\begin{center}% + \begin{tikzpicture}[show background rectangle] + \hasse[ + edge/.style={}, + root radius=.02cm, + edge length=.5cm, + edge quotes/.style={opacity=0}% + ]{E}{8}% + \end{tikzpicture}% +\end{center}% +\begin{center} +\begin{varwidth}{\textwidth} +\tableofcontents +\end{varwidth} +\end{center} +\setlength{\arrayrulewidth}{1.5pt} + +\section{Quick introduction} +This package draws the Hasse diagram of the poset of the positive simple roots of each complex simple Lie group, as drawn by Ringel \cite{Ringel:2013}. +\begin{tcolorbox}[title={Load the package}] +\begin{Verbatim} +\documentclass{article} +\usepackage{lie-hasse} +\begin{document} +The Hasse diagram of \(F_4\) is +\begin{center} +\hasse[edge length=1cm]{F}{4} +\end{center} +\end{document} +\end{Verbatim} +\end{tcolorbox} +\par\noindent{}The Hasse diagram of \(F_4\) is +\begin{center} +\hasse[edge length=1cm]{F}{4} +\end{center} +Each edge is labelled with the simple root by which vertices differ. +\begin{tcblisting}{title={Inside a \TikZ statement}} +\(B_4\) has Dynkin diagram \tikz \dynkin[edge length=.35cm]{B}{4};, Hasse diagram +\begin{center} +\hasse[edge length=1cm]{B}{4} +\end{center} +\end{tcblisting} +\begin{tcblisting}{title={Inside a Dynkin diagram environment, diagrams fit together}} +The Hasse diagram of \(B_4\) is +\begin{dynkinDiagram}[vertical shift=0,edge length=1cm]{B}{4} +\hasse{B}{4} +\end{dynkinDiagram} +\end{tcblisting} +We shut off the default vertical shift of the Dynkin diagram, so that it starts at the origin. +There is an option to \verb!\hasse! for this: +\begin{tcblisting}{title={Attaching the Dynkin diagram}} +The Hasse diagram of \(B_4\) is +\begin{center} +\hasse[attach Dynkin diagram=true]{B}{4} +\end{center} +\end{tcblisting} +Unfortunately, attaching a Dynkin diagram looks terrible for \(D\) or \(E\) series, so a Dynkin diagram appears below. +\begin{tcblisting}{title={Attaching the Dynkin diagram}} +The Hasse diagram of \(D_5\) is +\begin{center} +\hasse[attach Dynkin diagram=true]{D}{5} +\end{center} +\end{tcblisting} +\begin{tcblisting}{title={Inside a \TikZ environment}} +\begin{tikzpicture} +\hasse{A}{4} +\draw (4;1) circle (5pt); +\draw[red] (2;3) circle (5pt); +\end{tikzpicture} +\end{tcblisting} +In this example, we see that the roots of the Hasse diagram are \TikZ{} nodes labelled \(g;i\) for grade \(g\) (i.e. \(g\) units up the page) and index \(i\) (i.e. \(i^{\text{th}}\) root of grade \(g\) drawn on the page, starting from the left). + +\section{Inherited options} +The Lie Hasse package inherits options from the Dynkin diagrams package: the edge lengths are set with +\begin{Verbatim} +\tikzset{/Dynkin diagram/edge lengths=1.2cm} +\end{Verbatim} +and similarly the ordering of roots with +\begin{Verbatim} +\tikzset{/Dynkin diagram/ordering=Bourbaki} +\end{Verbatim} + +\section{Prettier} +The package includes a more elaborate \verb!\hasseDiagrams! command, taking a list of semicolon separated Dynkin diagram identfiers. +\begin{tcolorbox}[title={With some global options to make prettier diagrams}] +\begin{Verbatim} +\tikzset{ + background rectangle/.style={ + shade, + top color=olive!20, + bottom color=white, + draw=olive!15, + very thick, + rounded corners}, + /Lie Hasse diagram, + edge length=1.2cm, + show name=true, + vertical shift=0} +\hasseDiagrams{A4;B4;C4} +\end{Verbatim} +\end{tcolorbox} +\begingroup +\tikzset{ + background rectangle/.style={ + shade, + top color=olive!20, + bottom color=white, + draw=olive!15, + very thick, + rounded corners}, + /Lie Hasse diagram, + edge length=1.2cm, + show name=true, + vertical shift=0} +\hasseDiagrams{A4;B4;C4} +\endgroup +Global options: +\begin{verbatim} + edge/.style={ultra thick}, + edge quotes/.style={/Dynkin diagram/text style,auto,inner sep=2pt}, +\end{verbatim} +allow to change the edges, and to change the way that labels are printed, and how close labels are to the edges. + + + +\section{Root order} +We order the roots as in the Dynkin diagram package: with orderings Adams, Bourbaki, Carter, Dynkin and Kac. +\emph{Warning:} the default is Carter, \emph{not} Bourbaki; the default in the Dynkin diagram package is Bourbaki. +We can use this like: +\begin{Verbatim} +\tikzset{/Lie Hasse diagram,show name=true,show ordering=true} +\hasseDiagrams{[ordering=Adams]E6;[ordering=Bourbaki]E6} +\hasseDiagrams{[ordering=Carter]E6;[ordering=Dynkin]E6} +\hasseDiagrams{[ordering=Kac]E6} +\end{Verbatim} + +\begingroup +\tikzset{/Lie Hasse diagram,show name=true,show ordering=true} +\hasseDiagrams{[ordering=Adams]E6;[ordering=Bourbaki]E6} +\hasseDiagrams{[ordering=Carter]E6;[ordering=Dynkin]E6} +\hasseDiagrams{[ordering=Kac]E6} +\endgroup + +\section{Graph height and width} +The \emph{height} of a Hasse diagram is the number of grades. +The \emph{width} of each grade is the number of vertices on that grade. +We recover these with +\begin{Verbatim} +\newcount\h +\rootSystemHeight[G][2]{\h} +\end{Verbatim} +to store the height of \(G_2\) in a counter called \verb!\h!, and +\begin{Verbatim} +\newcount\w +\rootSystemWidthAtGrade[G][2]{3}{\w}% +\end{Verbatim} +to store the width of \(G_2\) at grade \(3\) in a counter called \verb!\w!. + +Once you use \verb!\dynkin{G}{2}! or \verb!\hasse{G}{2}! or the other commands, like +\begin{Verbatim} +\rootSystemHeight[G][2]{\h} +\end{Verbatim} +the system stores that your default root system is \(G_2\). +Subsequently calls to +\begin{Verbatim} +\rootSystemHeight{\h} +\end{Verbatim} +and +\begin{Verbatim} +\rootSystemWidthAtGrade{3}{\w} +\end{Verbatim} + do not need to specify the root system. + +\begingroup +The \verb!show height! option: +\begin{Verbatim} +\tikzset{/Lie Hasse diagram,show name=true,show height=true} +\hasseDiagrams{G2} +\end{Verbatim} +\tikzset{/Lie Hasse diagram,show name=true,show height=true} +\hasseDiagrams{G2} +The \verb!show widths! option: +\begin{Verbatim} +\tikzset{/Lie Hasse diagram/show widths=true} +\hasseDiagrams{G2} +\end{Verbatim} +\tikzset{/Lie Hasse diagram/show widths=true} +\hasseDiagrams{G2} +\tikzset{/Lie Hasse diagram/show height=false} +\tikzset{/Lie Hasse diagram/show widths=false} +\endgroup + +\section{Root decompositions} +Each positive root in a root system is a unique nonnegative integer linear combination of positive simple roots. +We can recover this expression as +\begin{Verbatim} +\rootSum[G][2]{5}{1}{\rs} +\end{Verbatim} +which, for the root system \(G_2\), and the root at position \(5;1\) in our Hasse diagram, stores in the variable \verb!\rs! a string which looks like \rootSum[G][2]{5}{1}{\rs}\texttt{\rs}. +This is a comma separated list of the integer coefficients. +\emph{Warning:} for the moment, this list of coefficients is in Carter ordering. +If we omit \verb![G][2]!, the current default root system is implied. + +Here is the Dynkin diagram of \(E_8\), indicating the order of the roots in Carter ordering. +\begin{Verbatim} +\dynkin[label,ordering=Carter,edge length=.35cm]{E}{8} +\end{Verbatim} +\begin{center} +\dynkin[label,ordering=Carter,edge length=.35cm]{E}{8} +\end{center} +Here is the same Dynkin diagram, except showing, at each simple root, the coefficient of that simple root in the highest root. +\begin{Verbatim} +\rootSum[E][8]{29}{1}{\rs} +\dynkin[labels=\rs,ordering=Carter,edge length=.35cm]{E}{8} +\end{Verbatim} +\rootSum[E][8]{29}{1}{\rs} +\begin{center} +\dynkin[labels=\rs,ordering=Carter,edge length=.35cm]{E}{8} +\end{center} + +The option \verb!for all roots! allows execution of code once on every root. +\begin{Verbatim} +\tikzset{/Lie Hasse diagram, + edge length=3.2cm, + compact root/.code={}, + noncompact root/.code={}, + edge quotes/.style={opacity=0}, + embedded Dynkin diagram/.style={ + edge length=.4cm, + root radius=.05cm + }, + for all roots/.code 2 args={\drawRootAsDynkinSum{#1}{#2}}} +\hasseDiagrams{D5} +\end{Verbatim} +\begingroup +\tikzset{/Lie Hasse diagram, + edge length=3.2cm, + compact root/.code={}, + noncompact root/.code={}, + edge quotes/.style={opacity=0}, + embedded Dynkin diagram/.style={ + edge length=.4cm, + root radius=.05cm + }, + for all roots/.code 2 args={\drawRootAsDynkinSum{#1}{#2}}} +\hasseDiagrams{D5} +\endgroup +See more below on compact versus noncompact roots; the code \verb!compact! is applied to draw all of the compact roots, and the code \verb!noncompact! to draw the noncompact roots. +Setting those codes to be empty, and setting \verb!edge quotes! to be transparent, we get a much simpler Hasse diagram, so that we can see the embedded Dynkin diagrams more clearly. + +\section{\texorpdfstring{For all roots \ldots}{For all roots ...}} +You can make your own macros loop over all of the roots: you define a macro \verb!\foo{g}{i}!, which is fed the grade \(g\) of each root in the diagram, and the \emph{index} \(i\). +A simple example: +\begin{Verbatim} +\newcommand{\foo}[2]% +{% + \node[below,scale=.5] at (#1;#2) {\(#1,#2\)};% +}% +\end{Verbatim} +\newcommand{\foo}[2]% +{% + \node[below,scale=.75] at (#1;#2) {\(#1,#2\)};% +}% +Inside a \TikZ{} or \verb!dynkinDiagram! environment: +\begin{Verbatim} +\tikzset{/Lie Hasse diagram/edge quotes/.style={opacity=0}, + /Dynkin diagram/edge length=1.5cm} +\begin{tikzpicture} + \hasse{D}{6}% + \forAllPositiveRootsInHasseDiagram{\foo}% +\end{tikzpicture} +\end{Verbatim} +\begingroup +\tikzset{/Lie Hasse diagram/edge quotes/.style={opacity=0}, + /Dynkin diagram/edge length=1.5cm} +\begin{tikzpicture} + \hasse{D}{6}% + \forAllPositiveRootsInHasseDiagram{\foo}% +\end{tikzpicture} + +If you put this into the \verb!for all roots! option, it executes on its own: +\begin{Verbatim} +\tikzset{/Lie Hasse diagram/for all roots/.code 2 args={\foo{#1}{#2}}} +\hasseDiagrams{C4;D4} +\end{Verbatim} +\begingroup +\tikzset{/Lie Hasse diagram/for all roots/.code 2 args={\foo{#1}{#2}}} +\hasseDiagrams{C4;D4} +\endgroup +\endgroup + +\section{Three dimensional effect} +We draw the \(D,E,F\) Hasse diagrams, following Ringel \cite{Ringel:2013}, as an arrangement of cubes. +Nutma \cite{Nutma:2010} draws the Hasse diagrams using a more elementary approach, but including also the affine Kac--Moody algebras. +Opposite sides of any square have the same edge label, by commutativity of addition. +Hence we don't need to see every edge perfectly. +The three dimensional effect is the default: +\begin{Verbatim} +\hasse{D}{4}\hasse{E}{6} +\end{Verbatim} +\begin{center} +\hasse{D}{4}\hasse{E}{6} +\end{center} +We can turn it off: +\begin{Verbatim} +\hasse[three D=false]{D}{4} +\hasse[three D=false]{E}{6} +\end{Verbatim} +\begin{center} +\hasse[three D=false]{D}{4} +\hasse[three D=false]{E}{6} +\end{center} +or globally with \verb!\tikzset{/Lie Hasse diagram/three D=false}!. + +The astute reader will perhaps notice that the three dimensional effect is not realistic. +To be Hasse diagrams, the roots have to line up horizontally by grade. +This is inconsistent with three dimensional projection of our cubes. +We have also tried to use only a small number of layers in the three dimensional geometry, so the images are not perfect, but easy enough to read. + +We can change the \verb!z shift! to slant the three dimensional images to the right: +\begingroup +\begin{Verbatim} +\hasse[z shift=.1]F4\hasse[z shift=.2]F4\hasse[z shift=.3]F4\hasse[z shift=.4]F4 +\end{Verbatim} +\hasse[z shift=.1]F4\hasse[z shift=.2]F4\hasse[z shift=.3]F4\hasse[z shift=.4]F4 +\endgroup + +We only use three colours and opacities for the faces: +\begin{Verbatim} + top/.style={black!20,opacity=.4}, + left/.style={black!20,opacity=.9}, + right/.style={black!20,opacity=.6}, +\end{Verbatim} +You can change these: +\begin{Verbatim} +\hasse[ + top/.style={red,opacity=.1}, + right/.style={red,opacity=.2}, + left/.style={red,opacity=.4}]E6 +\end{Verbatim} +\begin{center} +\hasse[ + top/.style={red,opacity=.1}, + right/.style={red,opacity=.2}, + left/.style={red,opacity=.4}]E6 +\end{center} + +\section{Label the simple roots} +Ringel \cite{Ringel:2013} labels his edges like +\begin{Verbatim} +\hasseDiagrams{[labels={f,e,d,c,u,b,a}]E7} +\end{Verbatim} +\hasseDiagrams{[labels={f,e,d,c,u,b,a}]E7} + +\section{Parabolic subgroups} +This package offers nothing over Ringel's original pictures, except that the user can pick some simple roots whose associated edges are drawn differently. +The chosen simple roots are called \emph{compact}, following terminology from the theory of parabolic subgroups. +We let the reader explore the notation for parabolic subgroups in the Dynkin diagrams package, and use this to declare various roots compact. +\begin{Verbatim} +\tikzset{/Lie Hasse diagram,attach Dynkin diagram=true,three D=false} +\hasseDiagrams{D{**x*x*x*}} +\end{Verbatim} +\begingroup +\tikzset{/Lie Hasse diagram,attach Dynkin diagram=true,three D=false} +\hasseDiagrams{D{**x*x*x*}} +\endgroup +Our motivation comes from trying to identify the invariant vector subbundles of the tangent bundle of a rational homogeneous variety \cite{MathOverflow:123801}. +Such diagrams are often unreadable if we don't turn off the three dimensional graphics. +By default, noncompact root edges are not drawn. +\begingroup +\tikzset{/Lie Hasse diagram,attach Dynkin diagram=true,show name=false,three D=false} +\begin{Verbatim} +\hasseDiagrams{E{*xx*x*}} +\end{Verbatim} +\hasseDiagrams{E{*xx*x*}} +\begin{Verbatim} +\hasseDiagrams{A{x*x*}} +\end{Verbatim} +\hasseDiagrams{A{x*x*}} +\begin{Verbatim} +\hasseDiagrams{[parabolic=113]B8} +\end{Verbatim} +\hasseDiagrams{[parabolic=113]B8} +\begin{Verbatim} +\hasseDiagrams{C{**xx*x**}} +\end{Verbatim} +\hasseDiagrams{C{**xx*x**}} +\newpage +\begin{Verbatim} +\hasseDiagrams{E{*x*x*x**}} +\end{Verbatim} +\hasseDiagrams{E{*x*x*x**}} +\newpage +\begin{Verbatim} +\hasseDiagrams{F{**xx}} +\end{Verbatim} +\hasseDiagrams{F{**xx}} +\begin{Verbatim} +\hasseDiagrams{G{*x}} +\end{Verbatim} +\hasseDiagrams{G{*x}} +\endgroup + +\section{Examples} +\begingroup +\tikzset{/Lie Hasse diagram,attach Dynkin diagram=true,show name=true} +\begin{Verbatim} +\hasseDiagrams{A1;A2;A3;A4;A5;A6} +\hasseDiagrams{B3;B4;B5} +\hasseDiagrams{C2;C3;C4} +\hasseDiagrams{C5;C6} +\hasseDiagrams{E6;E7} +\hasseDiagrams{E8} +\hasseDiagrams{F4;G2} +\end{Verbatim} +\hasseDiagrams{A1;A2;A3;A4;A5;A6} +\hasseDiagrams{B3;B4;B5} +\hasseDiagrams{C2;C3;C4} +\hasseDiagrams{C5;C6} +\hasseDiagrams{E6;E7} +\hasseDiagrams{E8} +\hasseDiagrams{F4;G2} +\endgroup + +\section{Black and white} +Publishing in colour on paper can be expensive. +Simple global options: +\begin{Verbatim} +\tikzset{ + background rectangle/.style={ + shade, + top color=gray!15, + bottom color=white, + draw=gray!5, + very thick, + rounded corners}, + /Dynkin diagram/text style/.style={black,scale=.75}, + /Lie Hasse diagram, + edge length=1cm, + edge/.style={draw=black!50,ultra thick}, + edge quotes/.style={black,auto,inner sep=3pt,scale=.75}, + three D=true, + show name=true} +\end{Verbatim} +\begingroup +\tikzset{ + background rectangle/.style={ + shade, + top color=gray!15, + bottom color=white, + draw=gray!5, + very thick, + rounded corners}, + /Dynkin diagram/text style/.style={black,scale=.75}, + /Lie Hasse diagram, + edge length=1cm, + edge/.style={draw=black!50,ultra thick}, + edge quotes/.style={black,auto,inner sep=3pt,scale=.75}, + three D=true, + show name=true}% +change our examples to +\hasseDiagrams{A1;A2;A3;A4;A5;A6} +\hasseDiagrams{B3;B4;B5} +\hasseDiagrams{C2;C3;C4} +\hasseDiagrams{C5;C6} +\hasseDiagrams{E6;E7} +\hasseDiagrams{E8} +\hasseDiagrams{F4;G2} +\endgroup + +\bibliographystyle{amsplain} +\bibliography{lie-hasse} +\end{document} -- cgit v1.2.3