制作十二边形的交换图

制作十二边形的交换图

我正在尝试制作一个十二边形的图表,但使用我更习惯的方法,我需要能够更改各个列和行对的间距。这在 TikZ-cd 中可以实现吗?

我希望仅使用 TikZ-cd 来解决这个问题,但如果这不可能的话,我会接受提供替代方法的答案。

这是我对十二边形的初步尝试:

\documentclass{report}

\usepackage{tikz-cd}
\usepackage{caption}

\begin{document}

\begin{figure}
\centering
\begin{tikzcd}[column sep=1cm, row sep=1cm]
    &   &   c_{0}\arrow{r}\arrow{drr}   &   c_{1}\arrow{dr}\arrow{ddrr} &   &   \\
    &   c_{11}\arrow{ur}\arrow{urr} &   &   &    c_{2}\arrow{dr}\arrow{ddr}  &  \\
    c_{10}\arrow{ru}\arrow{rruu}     &  &   &   &   &    c_{3}\arrow{d}\arrow{ddl}   \\
    c_{9}\arrow{u}\arrow{uur}   &   &   &   &   &    c_{4}\arrow{dl}\arrow{ddll}     \\
    &    c_{8}\arrow{ul}\arrow{uul}     &   &   &    c_{5}\arrow{dl}\arrow{dll}  &    \\
    &   &   c_{7}\arrow{ul}\arrow{uull} &   c_{6}\arrow{l}\arrow{ull}   &   &
\end{tikzcd}
\caption*{Dodecagon}
\end{figure}

\end{document}

在此处输入图片描述

如果有帮助的话,1º 和 2º 柱之间的间隔以及 5º 和 6º 柱之间的间隔必须减小到 0.5 厘米,而 2º 和 3º 柱之间的间隔以及 4º 和 5º 柱之间的间隔必须减小到 0.8660254 厘米。对于行也必须这样做。

(编辑:我发现了如何改变各个列和行对的分离,但生成的图表仍然看起来不像一个规则的十二边形......

\documentclass{report}

\usepackage{tikz-cd}
\usepackage{caption}

\begin{document}

\begin{figure}
\centering
\begin{tikzcd}
    &[0.5cm]    &[0.8660254cm]  c_{0}\arrow{r}\arrow{drr}   &[1cm]  c_{1}\arrow{dr}\arrow{ddrr} &[0.8660254cm]  &[0.5cm]    \\[0.5cm]
    &   c_{11}\arrow{ur}\arrow{urr} &   &   &    c_{2}\arrow{dr}\arrow{ddr}  &  \\[0.8660254cm]
    c_{10}\arrow{ru}\arrow{rruu}     &  &   &   &   &    c_{3}\arrow{d}\arrow{ddl}   \\[1cm]
    c_{9}\arrow{u}\arrow{uur}   &   &   &   &   &    c_{4}\arrow{dl}\arrow{ddll}     \\[0.8660254cm]
    &    c_{8}\arrow{ul}\arrow{uul}     &   &   &    c_{5}\arrow{dl}\arrow{dll}  &    \\[0.5cm]
    &   &   c_{7}\arrow{ul}\arrow{uull} &   c_{6}\arrow{l}\arrow{ull}   &   &
\end{tikzcd}
\caption*{Dodecagon}
\end{figure}

\end{document}

在此处输入图片描述

我认为要么是我计算有误,要么是我误解了 TikZ-cd 包的一些技术方面...)

答案1

新答案

这是一个用纯 Tikz 构建的十二边形图,chains其库可与所有引擎(LaTeX、pdfLaTeX、XeLaTeX、LuaLaTeX)编译。

更新代码(应 OP 要求)

在这里,我放置索引标签十二边形内的箭头和相同标签对于其他人来说。

为了内部的箭头,我选择了以下选项:

font=\tiny,fill=white,outer sep=0pt,inner sep=1pt

并让你了解其他的使用以下选项:

font=\scriptsize,auto=right,outer sep=0pt,inner sep=1pt 

如果其中任何一个需要解释,就说出来。

截屏

\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}

旧代码

截屏

\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}

旧答案:

这是使用 Tikz 创建的图表(但不适用于 tikz-cd)使用circular必须用 编译的库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}

答案2

只是普通的 TiZ,所有连接,没有硬编码值,只有循环,所有内容都在一个路径中。适用于所有标准编译器(pdflatex、、),因此可用于要提交给 arXiv 的论文。xelatexlualatatex

\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}

在此处输入图片描述

相关内容