我正在尝试制作一个十二边形的图表,但使用我更习惯的方法,我需要能够更改各个列和行对的间距。这在 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
只是普通的 Ti钾Z,所有连接,没有硬编码值,只有循环,所有内容都在一个路径中。适用于所有标准编译器(pdflatex
、、),因此可用于要提交给 arXiv 的论文。xelatex
lualatatex
\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}