20

I am preparing lecture notes for an abstract algebra course I am teaching. I would like to draw the following diagram, which is from Zassenhaus's Butterfly lemma.

$K$ in the diagram is the group $(G'\cap H)(G\cap H')$. I did not write it there because I thought it would clutter the diagram for people who will look at it and help me on this site.

I am not very well-versed in LaTeX. I have the following structure to my code so far.

\documentclass[12pt, a4paper]{book}
\usepackage[utf8]{inputenc}
\usepackage[margin=0.6in]{geometry}
\usepackage{graphicx}
\usepackage[none]{hyphenat}
\usepackage{amssymb, tikz}
\usepackage{amsmath}
\usepackage{amsthm}
\usepackage{physics}
\usepackage{mathrsfs}
\usepackage{fourier-orns}
\usepackage{tikz-cd}
\usepackage{blindtext}
\usepackage{mathtools}

\usepackage{pdfrender,xcolor}
\usepackage[T1]{fontenc}
\usepackage{crimson}

\setlength{\parskip}{0.3em}
\setlength{\parindent}{2em}
\newcommand\bulletpoint[1][.5]{\mathbin{\vcenter{\hbox{\scalebox{#1}{$\bullet$}}}}}
\newcommand\proofend[1][.75]{\mathbin{\vcenter{\hbox{\scalebox{#1}{$\qed$}}}}}
\newcommand\Thicc{\fontsize{35}{50}\selectfont}
\newcommand\textbox[1]{%
  \parbox{.404\textwidth}{#1}%
}
\newcommand\textbonk[1]{%
  \parbox{.333\textwidth}{#1}%
}

\newcommand{\mysetminusD}{\hbox{\tikz{\draw[line width=0.6pt,line cap=round] (3pt,0) -- (0,6pt);}}}
\newcommand{\mysetminusT}{\mysetminusD}
\newcommand{\mysetminusS}{\hbox{\tikz{\draw[line width=0.45pt,line cap=round] (2pt,0) -- (0,4pt);}}}
\newcommand{\mysetminusSS}{\hbox{\tikz{\draw[line width=0.4pt,line cap=round] (1.5pt,0) -- (0,3pt);}}}

\newcommand{\mysetminus}{\mathbin{\mathchoice{\mysetminusD}{\mysetminusT}{\mysetminusS}{\mysetminusSS}}}

\DeclareSymbolFont{AMSa}{U}{msa}{m}{n}
\DeclareMathSymbol{\normal}{\mathrel}{AMSa}{"45}

\let\l\langle
\let\r\rangle
\let\phi\varphi
\let\varphi\phi

\makeatletter
\renewcommand*\env@matrix[1][*\c@MaxMatrixCols c]{%
  \hskip -\arraycolsep
  \let\@ifnextchar\new@ifnextchar
  \array{#1}}
\makeatother

\begin{document}
\emergencystretch 1em
\pdfrender{StrokeColor=black,TextRenderingMode=2,LineWidth=0.4pt}

\[\begin{tikzcd}[column sep=30pt]G\arrow[d,"\,"]&\,&H\arrow[d,"\,"]\\G'(G\cap H)\arrow[dd,"\,"]\arrow[dr,"\,"]&\,&(G\cap H)H'\arrow[dd,"\,"]\arrow[dl,"\,"]\\\,&G\cap H\arrow[dd,"\,"]&\,\\G'(G\cap H')\arrow[dr,"\,"]&\,&(G'\cap H)H'\arrow[dl,"\,"]\\\,&K&\,\end{tikzcd}\]

\end{document}

Please help me draw it. Any help is really appreciated.

Edit: I am sorry, I did not know that the community here values looking at the original poster's attempts before asking for help. I have included what little I could do with my limited knowledge of LaTeX. Of course, I do not want them to be arrows, and I want the intersections to be points rather than the notations for the groups themselves.

8
  • 1
    You place almost everything inside a spearate box. Is there a reason for that? Why you don't use TikZ commands directly? Your code does not produce any output as it stands now. (But I did not downvote.) Commented Nov 13, 2023 at 16:47
  • 1
    In general, request to help draw a diagram, will get a downvote from someone. In most cases, those are not accompanied by any code. Yous has code, so I upvoted. But I cannot answer the question. Commented Nov 13, 2023 at 16:48
  • 1
    @AravindGundakaram I would guess it's because you did not show that you actually tried anything to draw the diagram. Questions that basically amount to "here's a complicated figure/diagram that I don't know how to draw, can someone do it for me?" are (most of the time) badly received here if the person doesn't show that they tried something themselves. However, if they show some code with an actual attempt to draw their figure, even if it's very very far from what they're looking for, everyone will be happy. Commented Nov 13, 2023 at 16:52
  • 1
    @Vincent Should I edit my question with some attempt of mine? Commented Nov 13, 2023 at 16:55
  • 4
    You should rather show what you tried so far. A lot of packages you show are irrelevant for producing a diagram that you probably intend to create using TikZ. Providing some code to start with also helps others understand where your problems are exactly. Commented Nov 13, 2023 at 16:58

4 Answers 4

21

I think, this can be better done with just plain TikZ as using tikz-cd would require too much tweaking for my taste:

\documentclass[border=10pt]{standalone}
\usepackage{tikz}

\tikzset{
    node/.style={
        circle,
        fill,
        inner sep=1.5pt
    },
    font=\footnotesize
}

\begin{document}
\begin{tikzpicture}

    \node[node, label={above right:$G$}] (G1) at (0,0.5) {};
    \node[node, label={above left:$H$}] (H1) at (3,0.5) {};

    \node[node, label={left:$G'(G \cap H)$}] (G2) at (0,0) {};
    \node[node, label={[label distance=5pt]above:$G \cap H$}] (GH2) at (1.5,-1) {};
    \node[node, label={right:$(G \cap H)H'$}] (H2) at (3,0) {};

    \node[node, label={left:$G'(G \cap H')$}] (G3) at (0,-1.5) {};
    \node[node, label={below:$K$}] (GH3) at (1.5,-2.5) {};
    \node[node, label={right:$(G \cap H')H'$}] (H3) at (3,-1.5) {};

    \node[node, label={left:$G'$}] (G4) at (-1,-2.25) {};
    \node[node, label={below:$G' \cap H$}] (G5) at (0.5,-3.25) {};
    \node[node, label={right:$H'$}] (H4) at (4,-2.25) {};
    \node[node, label={below:$G \cap H'$}] (H5) at (2.5,-3.25) {};
    
    \draw 
        (G1) -- (G2) 
        (H1) -- (H2) 
        (G2) -- (G3) node[midway] {$=$}
        (H2) -- (H3) node[midway] {$=$}
        (GH2) -- (GH3) node[midway] {$=$}
        (G2) -- (GH2) -- (H2)
        (G3) -- (GH3) -- (H3)
        (G3) -- (G4) -- (G5) -- (GH3)
        (H3) -- (H4) -- (H5) -- (GH3);
 
\end{tikzpicture}
\end{document}

enter image description here

This can probably be simplified even more.


With arrows and a pin instead of a label for $K$ to allow for the actual meaning (but I have no idea whether the arrangement is correct):

\documentclass[border=10pt]{standalone}
\usepackage{tikz}

\tikzset{
    node/.style={
        circle,
        fill,
        inner sep=1.5pt
    },
    font=\footnotesize,
    every pin edge/.style={
        very thin,
        shorten <=2pt
    }
}

\begin{document}
\begin{tikzpicture}

    \node[node, label={above right:$G$}] (G1) at (0,0.5) {};
    \node[node, label={above left:$H$}] (H1) at (3,0.5) {};

    \node[node, label={left:$G'(G \cap H)$}] (G2) at (0,0) {};
    \node[node, label={[label distance=5pt]above:$G \cap H$}] (GH2) at (1.5,-1) {};
    \node[node, label={right:$(G \cap H)H'$}] (H2) at (3,0) {};

    \node[node, label={left:$G'(G \cap H')$}] (G3) at (0,-1.5) {};
    \node[node, pin={[pin distance=1.5cm]below:$(G'\cap H)(G\cap H')$}] (GH3) at (1.5,-2.5) {};
    \node[node, label={right:$(G \cap H')H'$}] (H3) at (3,-1.5) {};

    \node[node, label={left:$G'$}] (G4) at (-1,-2.25) {};
    \node[node, label={below:$G' \cap H$}] (G5) at (0.5,-3.25) {};
    \node[node, label={right:$H'$}] (H4) at (4,-2.25) {};
    \node[node, label={below:$G \cap H'$}] (H5) at (2.5,-3.25) {};

    \draw[->] (G1) -- (G2);
    \draw[->] (H1) -- (H2);
    \draw[->] (G2) -- (G3) node[midway] {$=$};
    \draw[->] (H2) -- (H3) node[midway] {$=$};
    \draw[->] (G2) -- (GH2);
    \draw[->] (H2) -- (GH2);
    \draw[->] (GH2) -- (GH3) node[midway] {$=$};
    \draw[->] (G3) -- (G4);
    \draw[->] (H3) -- (H4);
    \draw[->] (G3) -- (GH3);
    \draw[->] (H3) -- (GH3);
    \draw[->] (G4) -- (G5);
    \draw[->] (H4) -- (H5);
    \draw[->] (GH3) -- (G5);
    \draw[->] (GH3) -- (H5);
    
\end{tikzpicture}
\end{document}

enter image description here

3
  • @AravindGundakaram I edited the code after having looked up similar diagrams on the internet that showed a more regular geometry. Commented Nov 13, 2023 at 17:25
  • 1
    @JasperHabicht This is a very good solution. Simple and readable. Just node, label and draw . Reminds me of the 1980s when we were writing HPGL for plotting, only needed 3-4 primitives. Rest was composable. Commented Nov 13, 2023 at 17:33
  • 1
    @JasperHabicht Haha thank you! Your answer was good enough for me to look at it and figure out how this works, so I can tweak it to what I need things to look like! Commented Nov 13, 2023 at 17:39
18

Same idea, but Jasper was faster : )

However, also in Tikz you have different ways to achieve the same visual appearance. So perhaps you can adopt some other approaches from here.

1. Keep it simple

With a beginner in Tikz in mind I'd just don't put all the tricks at once: sometimes it's harder to get a shorter code right all the time. So, deliberately I took the route of more code lines to obtain some more clarity.

By intention I focused on the left half, as it's symmetric and easy to complete.

It may be a good idea to put some node names into your sketch:

sketch

2. Put nodes with circles as shape

I.e. build your dot-network by nodes with empty text. Style dot will define all details needed.

    % ~~~ some nodes containing no text ~~~~~~~~~~
    \node[dot] (A)  at ( 0  , 0)    {};
    \node[dot] (G)  at (-2  , 1)    {};
...

3. Draw all ordinary lines

I.e. those without the ticks in the middle:

    % ~~~ ordinary connecting lines ~~~~~~~~
    \draw (G)  -- (B1);
    \draw (B1) -- (A);
...

4. Draw the ticked lines

There are many ways to do this. Here I asked Tikz to:

  • draw from A to K
  • AND before ending this path via ;
  • put an other node midway with some useful text
    % ~~~ special connecting lines ~~~~~~~~
    \draw (B1) -- (C1)  node[midway] {$=$};
    \draw (A)  -- (K)   node[midway] {$=$};

5. Finally, place all those math-labels

No big deal. The only thing left to explain are all those self-defined styles.

    % ~~~ placing all those math labels ~~~~~~
    \node[abv] at (A)   {$G \cap H$};
    \node[rgt] at (G)   {$G$};
...

6. Self-defined styles

Here they are defined at the beginning of a tikzpicture within [ ] braces:

  • dot just draws the outher shape of a node, which has empty text, so it appears to be a circle
  • abv and bel just use yshift to place the nodes with the math label text more neatly
  • rgt and lft use the left (west) and right (east) side of the referred nodes, i.e. mimick raggedright and raggedleft from LaTeX
 \begin{tikzpicture}[% defining some styles
    dot/.style={shape=circle,%                  the dots
                minimum size=2pt,inner sep=0,%  "radius 2pt"
                fill=black,draw,
                },
    abv/.style={yshift=3mm},%       above = shifting up
    bel/.style={yshift=-3mm},%      below = shifting down
    rgt/.style={anchor=west},%      right sides are anchored
    lft/.style={anchor=east},%      left sides are anchored
    ]

Result (left half)

result

Code

\documentclass[10pt,border=3mm,tikz]{standalone}
% better class for development
% loads Tikz already, as specified

\begin{document}

 \begin{tikzpicture}[% defining some styles
    dot/.style={shape=circle,%                  the dots
                minimum size=2pt,inner sep=0,%  "radius 2pt"
                fill=black,draw,
                },
    abv/.style={yshift=3mm},%       above = shifting up
    bel/.style={yshift=-3mm},%      below = shifting down
    rgt/.style={anchor=west},%      right sides are anchored
    lft/.style={anchor=east},%      left sides are anchored
    ]
    % ~~~ some nodes containing no text ~~~~~~~~~~
    \node[dot] (A)  at ( 0  , 0)    {};
    \node[dot] (G)  at (-2  , 1)    {};
    \node[dot] (B1) at (-2  , .5)   {};
    \node[dot] (C1) at (-2  ,-1.5)  {};
    \node[dot] (K)  at ( 0  ,-2)    {};
    \node[dot] (D1) at (-3  ,-3)    {};
    \node[dot] (E1) at (-1.5,-3.51) {};
    
    % ~~~ ordinary connecting lines ~~~~~~~~
    \draw (G)  -- (B1);
    \draw (B1) -- (A);
    \draw (C1) -- (D1);
    \draw (C1) -- (K);
    \draw (D1) -- (E1);
    \draw (E1) -- (K);
    
    % ~~~ special connecting lines ~~~~~~~~
    \draw (B1) -- (C1)  node[midway] {$=$};
    \draw (A)  -- (K)   node[midway] {$=$};
    
    % ~~~ placing all those math labels ~~~~~~
    \node[abv] at (A)   {$G \cap H$};
    \node[rgt] at (G)   {$G$};
    \node[bel] at (K)   {$K$};
    \node[lft] at (B1)  {$G'(G \cap H)$};
    \node[lft] at (C1)  {$G'(G \cap H')$};
    \node[lft] at (D1)  {$G'$};
    \node[bel] at (E1)  {$G' \cap H$};
    
 \end{tikzpicture}

\end{document}

P.S. (about programming strategies)

With the symmetric right half in mind, you now could also reflect it quite easily when extending the code, e.g. like this:

...
    \node[dot] (G)  at (-2  , 1)    {}; \node[dot] (H)  at ( 2  , 1)    {};
...
    \draw (G)  -- (B1);  \draw (H)  -- (B2);
    \draw (B1) -- (A);   \draw (B2) -- (A);
...

This way you'll reflect the drawings symmetry in code AND have a kind of error-preventing, at least error-minimizing, control, just by looking at the code: if it's not symmetric, while it should be, I did something wrong ...

BTW, this defensive or reserved programming approach, as I tend to call it, is easier to code with short code lines, i.e. non-sophisticated code. But it depends on many things whether or not this is a good thing to do or not.

2
  • 3
    Maybe I was faster, but your post explains the steps much better which is of great help for beginners! Commented Nov 13, 2023 at 18:00
  • Thank you: that's why we behave as a team here : ) Commented Nov 13, 2023 at 18:01
3

Not exactly an answer to "How do I draw the butterfly diagram?", but hopefully an answer to the generalized question. I think drawing diagrams is easier using GUIs (graphical user interface).

There exists tools, such as quiver or tikzcd-editor, where you can draw your diagram in a rather intuitive manner and export the result to Latex code.

1
  • Thank you for your hints. // However, what's "easy" or not depends both on practice and circumstances. E.g. sometimes GUI-solutions produce code, which could be better. It's the same problem from arguing e.g. administrating computers and networks via commandline vs. GUI: it depends ... while many times fingers are faster and more precise than mouse. Commented Nov 15, 2023 at 9:30
0

Since you did not say that you want to draw this with TikZ, below a solution using the l3draw package (which is quite basic in its functionality, so one has to define some functions to make things handy):

\documentclass[border=10pt]{standalone}
\usepackage{l3draw}

\begin{document}
\ExplSyntaxOn

\tl_new:N \l_zassenhaus_node_size_tl
\tl_set:Nn \l_zassenhaus_node_size_tl { 3pt }

\tl_new:N \l_zassenhaus_label_distance_tl
\tl_set:Nn \l_zassenhaus_label_distance_tl { 5pt }

\tl_new:N \l_zassenhaus_pin_distance_tl
\tl_set:Nn \l_zassenhaus_pin_distance_tl { 1.5cm }

\tl_new:N \l_zassenhaus_pin_sep_tl
\tl_set:Nn \l_zassenhaus_pin_sep_tl { 5pt }

\tl_new:N \l_zassenhaus_label_pin_hpole_tl
\tl_set:Nn \l_zassenhaus_label_hpole_tl { hc }

\tl_new:N \l_zassenhaus_label_pin_vpole_tl
\tl_set:Nn \l_zassenhaus_label_vpole_tl { vc }

\cs_new:Nn \l_zassenhaus_set_label_pin_anchor:nn {
    \tl_set:Nn \l_zassenhaus_label_pin_hpole_tl { #1 }
    \tl_set:Nn \l_zassenhaus_label_pin_vpole_tl { #2 }
}

\cs_generate_variant:Nn \draw_coffin_use:Nnn { Nee }

\cs_new:Nn \l_zassenhaus_draw_node_label:nnnn {
    \tl_new:c { l__zassenhaus_draw_node_ #1 _tl }
    \tl_set:cn { l__zassenhaus_draw_node_ #1 _tl } { #2 }
    \draw_scope_begin:
        \draw_transform_shift:n { #2 }
        \draw_path_circle:nn { 0cm , 0cm } { \l_zassenhaus_node_size_tl / 2 }
        \draw_path_use_clear:n { fill }
        \hcoffin_set:Nn \l_tmpa_coffin { \footnotesize #3 }
        \draw_scope_begin:
            \draw_transform_shift:n { 
                \draw_point_polar:nn { \l_zassenhaus_label_distance_tl } { #4 } 
            }
            \draw_coffin_use:Nee \l_tmpa_coffin 
                { \l_zassenhaus_label_pin_hpole_tl } { \l_zassenhaus_label_pin_vpole_tl }
        \draw_scope_end:
    \draw_scope_end:
}

\cs_new:Nn \l_zassenhaus_draw_node_pin:nnnn {
    \tl_new:c { l__zassenhaus_draw_node_ #1 _tl }
    \tl_set:cn { l__zassenhaus_draw_node_ #1 _tl } { #2 }
    \draw_scope_begin:
        \draw_transform_shift:n { #2 }
        \draw_path_circle:nn { 0cm , 0cm } { \l_zassenhaus_node_size_tl / 2 }
        \draw_path_use_clear:n { fill }
        \draw_path_moveto:n { \draw_point_polar:nn { \l_zassenhaus_pin_sep_tl } { #4 } }
        \draw_path_lineto:n { \draw_point_polar:nn 
            { \l_zassenhaus_pin_distance_tl - \l_zassenhaus_pin_sep_tl } { #4 } }
        \draw_path_use_clear:n { stroke }
        \hcoffin_set:Nn \l_tmpa_coffin { \footnotesize #3 }
        \draw_scope_begin:
            \draw_transform_shift:n { 
                \draw_point_polar:nn { \l_zassenhaus_pin_distance_tl } { #4 } 
            }
            \draw_coffin_use:Nee \l_tmpa_coffin 
                { \l_zassenhaus_label_pin_hpole_tl } { \l_zassenhaus_label_pin_vpole_tl }
        \draw_scope_end:
    \draw_scope_end:
}

\cs_new:Nn \l_zassenhaus_draw_pin:nn {
    \draw_begin:
        \draw_path_moveto:n { 0cm , 0cm }
        \draw_path_lineto:n { \draw_point_polar:nn { \l_zassenhaus_pin_distance_tl } { #2 } }
        \draw_path_use_clear:n { stroke }
        \hcoffin_set:Nn \l_tmpa_coffin { \footnotesize #1 }
        \draw_scope_begin:
            \draw_transform_shift:n { 
                \draw_point_polar:nn { \l_zassenhaus_pin_distance_tl } { #2 } 
            }
            \draw_coffin_use:Nee \l_tmpa_coffin 
                { \l_zassenhaus_label_pin_hpole_tl } { \l_zassenhaus_label_pin_vpole_tl }
        \draw_scope_end:
    \draw_end:
}

\cs_new:Nn \l_zassenhaus_use_node_coordinate:n {
    \tl_use:c { l__zassenhaus_draw_node_ #1 _tl }
}

\cs_new:Nn \l_zassenhaus_connect_nodes:n {
    \clist_set:Nn \l_tmpa_clist { #1 } 
    \clist_pop:NN \l_tmpa_clist \l_tmpa_tl
    \draw_path_moveto:n { \l_zassenhaus_use_node_coordinate:n { \l_tmpa_tl } }
    \clist_map_inline:Nn \l_tmpa_clist {
        \draw_path_lineto:n { \l_zassenhaus_use_node_coordinate:n { ##1 } }
    }
    \draw_path_use_clear:n { stroke }
}

\cs_new:Nn \l_zassenhaus_connect_nodes_doublestruck:nn {
    \draw_path_moveto:n { \l_zassenhaus_use_node_coordinate:n { #1 } }
    \draw_path_lineto:n { \l_zassenhaus_use_node_coordinate:n { #2 } }
    \draw_path_use_clear:n { stroke }
    \draw_scope_begin:
        \draw_transform_shift:n { 
             \draw_point_interpolate_line:nnn { 0.5 } {
                \l_zassenhaus_use_node_coordinate:n { #1 }
             } {
                \l_zassenhaus_use_node_coordinate:n { #2 }
             }
        }
        \draw_path_moveto:n { -4pt , 1pt }
        \draw_path_lineto:n { 4pt , 1pt }
        \draw_path_use_clear:n { stroke }
        \draw_path_moveto:n { -4pt , -1pt }
        \draw_path_lineto:n { 4pt , -1pt }
        \draw_path_use_clear:n { stroke }   
    \draw_scope_end:
}

\draw_begin:
    \l_zassenhaus_set_label_pin_anchor:nn { l } { b }
    \l_zassenhaus_draw_node_label:nnnn { Ga } { 0cm , 0.5cm } { $G$ } { 45 } 
    \l_zassenhaus_set_label_pin_anchor:nn { r } { b }
    \l_zassenhaus_draw_node_label:nnnn { Ha } { 3cm , 0.5cm } { $H$ } { 135 } 

    \l_zassenhaus_set_label_pin_anchor:nn { r } { vc }
    \l_zassenhaus_draw_node_label:nnnn { Gb } { 0cm , 0cm } { $G'(G \cap H)$ } { 180 } 
    \tl_set:Nn \l_zassenhaus_label_distance_tl { 10pt }
    \l_zassenhaus_set_label_pin_anchor:nn { hc } { b }
    \l_zassenhaus_draw_node_label:nnnn { GHb } { 1.5cm , -1cm } { $G \cap H$ } { 90 } 
    \tl_set:Nn \l_zassenhaus_label_distance_tl { 5pt }
    \l_zassenhaus_set_label_pin_anchor:nn { l } { vc }
    \l_zassenhaus_draw_node_label:nnnn { Hb } { 3cm , 0cm } { $(G \cap H)H'$ } { 0 } 

    \l_zassenhaus_set_label_pin_anchor:nn { r } { vc }
    \l_zassenhaus_draw_node_label:nnnn { Gc } { 0cm , -1.5cm } { $G'(G \cap H')$ } { 180 } 
    \l_zassenhaus_set_label_pin_anchor:nn { hc } { t }
    \l_zassenhaus_draw_node_pin:nnnn { GHc } { 1.5cm , -2.5cm } { $(G'\cap H)(G\cap H')$ } { 270 } 
    \l_zassenhaus_set_label_pin_anchor:nn { l } { vc }
    \l_zassenhaus_draw_node_label:nnnn { Hc } { 3cm , -1.5cm } { $(G \cap H')H'$ } { 0 } 

    \l_zassenhaus_set_label_pin_anchor:nn { r } { vc }
    \l_zassenhaus_draw_node_label:nnnn { Gd } { -1cm , -2.25cm } { $G'$ } { 180 } 
    \l_zassenhaus_set_label_pin_anchor:nn { hc } { t }
    \l_zassenhaus_draw_node_label:nnnn { Ge } { 0.5cm , -3.25cm } { $G' \cap H$ } { 270 } 
    \l_zassenhaus_set_label_pin_anchor:nn { l } { vc }
    \l_zassenhaus_draw_node_label:nnnn { Hd } { 4cm , -2.25cm } { $H'$ } { 0 } 
    \l_zassenhaus_set_label_pin_anchor:nn { hc } { t }
    \l_zassenhaus_draw_node_label:nnnn { He } { 2.5cm , -3.25cm } { $G \cap H'$ } { 270 } 
    
    \l_zassenhaus_connect_nodes:n { Ga , Gb , GHb , Hb , Ha } 
    \l_zassenhaus_connect_nodes:n { Gd , Gc , GHc , Hc , Hd , He , GHc , Ge , Gd }
    \l_zassenhaus_connect_nodes_doublestruck:nn { Gb } { Gc }
    \l_zassenhaus_connect_nodes_doublestruck:nn { Hb } { Hc }
    \l_zassenhaus_connect_nodes_doublestruck:nn { GHb } { GHc }
\draw_end:
\ExplSyntaxOff
\end{document}

enter image description here

You must log in to answer this question.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.