Producing a Commutative Diagram in the Shape of a Dodecagon
New answer
Here is a dodecagon diagram built in pure Tikz with the chains
library which is compilable with all engines (LaTeX, pdfLaTeX, XeLaTeX, LuaLaTeX).
Updated code (on request of OP)
Here, I placed indexed labels for the arrows inside the dodecagon and the same label for the others.
For the internal arrows, I chose these options:
font=\tiny,fill=white,outer sep=0pt,inner sep=1pt
and for you to understand the difference for the others with these options:
font=\scriptsize,auto=right,outer sep=0pt,inner sep=1pt
If any of them require explanation, say so.
\documentclass[tikz, margin=3mm]{standalone}
\usetikzlibrary {chains}
\usetikzlibrary{arrows.meta}
\begin{document}
\begin{tikzpicture}[start chain= dodecagon placed {at=(120+\tikzchaincount*-30:2.5)}]
\foreach \i in {0,...,11}
{\node [on chain] {$c_{\i}$};
}
\foreach \i [evaluate={
\next=int(1+mod({\i},12));
\nextnext=int(1+mod({\i+1},12));}]
in {1,...,12}{
\draw[->] (dodecagon-\i)--node[font=\tiny,fill=white,outer sep=0pt,inner sep=1pt]{x}(dodecagon-\next);
\draw[->] (dodecagon-\i)to[bend right=20]node[font=\scriptsize,auto=right,outer sep=0pt,inner sep=1pt]{$l_{\i}$}(dodecagon-\nextnext);
}
\end{tikzpicture}
\end{document}
Old code
\documentclass[tikz, margin=3mm]{standalone}
\usetikzlibrary {chains}
\usetikzlibrary{arrows.meta}
\begin{document}
\begin{tikzpicture}[start chain= dodecagon placed {at=(120+\tikzchaincount*-30:2.5)},>={Stealth[round,sep]}]
\foreach \i in {0,...,11}
{\node [on chain] {$c_{\i}$};
}
\foreach \i [evaluate={
\next=int(1+mod({\i},12));
\nextnext=int(1+mod({\i+1},12));}]
in {1,...,12}{
\draw[->] (dodecagon-\i)--(dodecagon-\next);
\draw[->] (dodecagon-\i)to[bend right=15](dodecagon-\nextnext);
}
\end{tikzpicture}
\end{document}
Old answer :
Here is a graph created with Tikz (but not with tikz-cd) using the circular
library which must be compiled with Lualatex
.
\documentclass[border=5mm]{standalone}
\usepackage{tikz}
\usetikzlibrary {graphs,graphdrawing}
\usegdlibrary {circular}
\usetikzlibrary{arrows.meta,bending}
\begin{document}
\begin{tikzpicture}[>={Stealth[round,sep]}]
\graph [simple necklace layout,
node distance=1.5cm,
grow'=south,
math nodes,
edges={>={Stealth[round,sep,bend]}}]
{ c_0 -> c_1 -> c_2 -> c_3 -> c_4 -> c_5 -> c_6 -> c_7 -> c_8 -> c_9 -> c_{10} -> c_{11} -> c_0};
\graph [use existing nodes,
math nodes,
edges={bend right=15,>={Stealth[round,sep,bend]}}]{
c_1 -> c_3 -> c_5 -> c_7 -> c_9 -> c_{11} -> c_1,c_2 -> c_4 -> c_6 -> c_8 -> c_{10}->c_0
};
\end{tikzpicture}
\end{document}
Just plain TikZ, all connections, no hard-coded values but just loops, everything in a single path. Works with all standard compilers (pdflatex
, xelatex
, lualatatex
) and can thus be used in a paper that is to be submitted to the arXiv, say.
\documentclass[tikz,border=3mm]{standalone}
\usetikzlibrary{arrows.meta,bending}
\begin{document}
\begin{tikzpicture}
\path[every edge/.append style={-{Stealth[bend]}}] foreach \X in {0,...,11}
{ (105-\X*30:4) node (c\X) {$c_{\X}$}}
foreach \X [remember=\X as \LastX (initially 11),
evaluate=\X as \LLastX using {int(Mod(\X+10,12))}] in {0,...,11}
{ (c\LastX) edge (c\X)
\ifodd\X
(c\LLastX) edge[bend left=60] (c\X)
\else
(c\LLastX) edge[bend right=5] (c\X)
\fi};
\end{tikzpicture}
\end{document}