我需要绘制 S_3 的凯莱图,表示形式为 $S_3 = (s,t | s^3 = t^2 = 1, tst = s^2)$。我有以下代码
\documentclass{standalone}
\usepackage{tikz-cd}
\begin{document}
$$\begin{tikzcd}
&&&&& 1 \\
\\
&&&&& 4 \\
\\
\\
&&& 5 &&&& 6 \\
\\
3 &&&&&&&&&& 2
\arrow[from=1-6, to=8-11]
\arrow[from=8-11, to=8-1]
\arrow[from=8-1, to=1-6]
\arrow[from=3-6, to=6-4]
\arrow[from=6-4, to=6-8]
\arrow[from=6-8, to=3-6]
\end{tikzcd}$$
\end{document}
我在网上找到的其他凯莱图要么极其复杂,因此我不知道如何修改它们,要么它们不是我想要的。任何关于添加弯曲箭头、移动顶点上的箭头以及像图中那样设置节点样式的帮助都是值得欢迎的。
答案1
图片的布局pos
是手动调整的,以便它们在视觉上看起来位于路径的中心。
代码
\documentclass[tikz]{standalone}
\usepackage{tikz}
\usetikzlibrary{arrows.meta}
\tikzset{
pics/arrow/.style={/tikz/sloped, /tikz/allow upside down,
code=\pgfarrowdraw{#1}}, pics/arrow/.default=>}
\begin{document}
\begin{tikzpicture}[
>={Straight Barb[angle=45:3pt 3]},
label 0/.style={anchor={#1}, outer sep=+.3em},
label 1/.style={anchor={180+#1}}]
\foreach[count=\INNER from 0] \RADIUS/\LIST in {1/{4,6,5}, 2/{1,2,3}}
\foreach[count=\CNT from 0] \ELEM in \LIST
\path (90-\CNT*120:\RADIUS) coordinate (\ELEM)
node[label \INNER=90-\CNT*120, circle, inner sep=+.15em] {\ELEM};
\draw[pos=.53] (1) -- pic{arrow} (2) -- pic{arrow} (3) -- pic{arrow} cycle
(4) -- pic{arrow} (5) -- pic{arrow} (6) -- pic{arrow} cycle;
\foreach \A/\B in {1/4, 2/6, 3/5}
\draw[pos=.6, bend left=30] (\A) to pic{arrow} (\B) to pic{arrow} cycle;
\end{tikzpicture}
\end{document}
输出
答案2
你可以使用 来做到这一点tikz-cd
,但需要手动调整间距。
\documentclass{article}
\usepackage{tikz-cd}
\usetikzlibrary{decorations.markings, arrows.meta}
\tikzset{
myarrow/.style={decoration={markings, mark=at position 0.5 with {\arrow{Straight Barb}}}, postaction=decorate, -, thick}
}
\newcommand{\arrowboth}[1][]{\arrow[#1, bend left=15, myarrow]\arrow[bend left=15, myarrow, from=#1]}
\begin{document}
\begin{tikzcd}[row sep=1cm, arrows=myarrow, column sep=9mm, cells={nodes={draw, circle, inner sep=2pt}}]
&[4mm]&[-4mm]1\arrow[dddrr]\arrowboth[d]&[-4mm]&[4mm]\\[4mm]
&&4\arrow[dl]\\
&5\arrow[rr]&&6\arrow[ul]\\[-4mm]
3\arrow[uuurr]\arrowboth[ur]&&&&2\arrow[llll]\arrowboth[ul]
\end{tikzcd}
\end{document}