0

Being aware of the excellent package dynkin-diagrams by Benjamin McKay, I still need something else, since there are several customizations that have been kindly provided in an answer to my previous question How to draw a border around a subset of nodes here by the former TeX.SE user marmot which I need to use.

So what I would like is to draw in TikZ arrows of shape =>=, and I mean literally of this exact shape (except that the = segments might need some stretching), and the same for triple arrows.

Although the pgf manual has lots of details about arrow tips, I could not find instructions for this particular kind. Could you help me?

2 Answers 2

1

Update:

With the 6 April 2021 release of the dynkin-diagrams package, you get: enter image description here

just by adding [Bourbaki-arrow] as an option to the package:

\documentclass{amsart}
\usepackage[Bourbaki-arrow]{dynkin-diagrams}
\begin{document}
\dynkin F4

\dynkin G2
\end{document}

Old answer: Just for Dynkin diagrams. I am not sure if you want straight lines or arcs (like the default for the Dynkin diagrams package), so here is the package standard arrow, along with two options:

Dynkin diagrams with arrows in three styles

\documentclass{standalone}
\usepackage{dynkin-diagrams}

\pgfdeclarearrow{
name = jibladze,
parameters = { \the\pgfarrowlength },
setup code = {},
drawing code = {
  \pgfsetdash{}{0pt} % do not dash
      \pgfsetroundjoin   % fix join
  \pgfsetroundcap    % fix cap
  \pgfsetlinewidth{5\pgflinewidth}
  \pgfsetstrokecolor{white}
  \pgfpathmoveto{\pgfpoint{-.75\pgfarrowlength}{\pgfarrowlength}}
  \pgfpathlineto{\pgfpoint{0}{0}}
  \pgfpathlineto{\pgfpoint{-.75\pgfarrowlength}{-\pgfarrowlength}}
  \pgfusepathqstroke
  \pgfsetlinewidth{.2\pgflinewidth}
  \pgfsetstrokecolor{black}
  \pgfpathmoveto{\pgfpoint{-.75\pgfarrowlength}{\pgfarrowlength}}
  \pgfpathlineto{\pgfpoint{0}{0}}
  \pgfpathlineto{\pgfpoint{-.75\pgfarrowlength}{-\pgfarrowlength}}
  \pgfusepathqstroke
},
defaults = { length = 2pt }
}

\pgfdeclarearrow{
name = mamuka,
parameters = { \the\pgfarrowlength },
setup code = {},
drawing code = {
  \pgfsetdash{}{0pt} % do not dash
  \pgfsetroundjoin   % fix join
  \pgfsetroundcap    % fix cap
  \pgfsetlinewidth{5\pgflinewidth}
  \pgfsetstrokecolor{white}
  \pgfpathmoveto{\pgfpoint{-.75\pgfarrowlength}{\pgfarrowlength}}
  \pgfpatharc{180}{270}{\pgfarrowlength}
  \pgfpatharc{90}{180}{\pgfarrowlength}
  \pgfusepathqstroke
  \pgfsetlinewidth{.2\pgflinewidth}
  \pgfsetstrokecolor{black}
  \pgfpathmoveto{\pgfpoint{-.75\pgfarrowlength}{\pgfarrowlength}}
  \pgfpatharc{180}{270}{\pgfarrowlength}
  \pgfpatharc{90}{180}{\pgfarrowlength}
  \pgfusepathqstroke
},
defaults = { length = 2pt }
}

\begin{document}
\begin{tabular}{c}
\dynkin G2\\
\dynkin[arrow shape/.style={-{jibladze}}]G2\\
\dynkin[arrow shape/.style={-{mamuka}}]G2\\
\dynkin F4\\
\dynkin[arrow shape/.style={-{jibladze}}]F4\\
\dynkin[arrow shape/.style={-{mamuka}}]F4
\end{tabular}
\end{document}
2
  • To make jibladze the default for the entire file, you can just write \tikzset{/Dynkin diagram/arrow shape/.style={-{jibladze}}} near the top of the file. Commented Apr 2, 2021 at 9:38
  • Thank you so much, Ben! The one with straight lines is absolutely perfect for me. The reason I prefer it is simply that I remember from somewhere the mnemonics: a thing like A=>=B tells that the root A is longer than the root B, so you can read > as the symbol for "greater". Commented Apr 2, 2021 at 10:40
2

It's a tikz picture component, rather than an arrow.

The > is a Classical TikZ arrowhead, the = likely is a thin, double edge between two nodes.

I don't (currently have time to) understand the (heavily parameterized) dynkin package code -- so not an answer -- but here is a very simplistic off-the-cuff thematic re-interpretation (not necessarily accurate) of such a construct:

pseudo-arrow

MWE

\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{
    arrows.meta,
    positioning,
    }
\begin{document}
\begin{tikzpicture}[inner sep=2pt,outer sep=0pt]
\node [circle,fill=black,radius=2pt,draw,label=A] (A) at (0,0) {};
\node [circle,fill=black,radius=2pt,draw,label=B] (B) at (1,0) {};
\node [label=C] (C) at (1.5,0) {};
\node [circle,fill=black,radius=2pt,draw,label=D] (D) at (2,0) {};
\draw[thin] (A) -- (B);
\draw[thin,double] (C.west) -- (D);
\draw[-{Classical TikZ Rightarrow[red,length=1mm,]},thin,double,] (B) -- (C.east);
\end{tikzpicture}
\end{document}

You could emulate a =>= arrow using invisible nodes, for example like so:

\begin{tikzpicture}[inner sep=2pt,outer sep=0pt]
\node [label=B] (B) at (1,0) {};
\node [label=C] (C) at (1.5,0) {};
\node [label=D] (D) at (2,0) {};
\draw[thin,double] (C.west) -- (D);
\draw[-{Classical TikZ Rightarrow[red,length=1mm,]},thin,double,] (B) -- (C.east);
\end{tikzpicture}

arrow only

2
  • Let me just wait, maybe somebody proposes something more concise. In the meanwhile, your solution is quite acceptable and I already realized it. I just modified it slightly, doing \node (>) at (1.5,0) {\tiny\texttt>}; and \draw[double] (B) -- (>) -- (D);. Commented Jan 9, 2021 at 11:46
  • Sorry for accepting another one, although it is definitely less concise than yours. It just looks more... erm... wholesome? Commented Apr 2, 2021 at 10:42

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .