我是第一次使用 Latex 绘图,我该如何绘制这种形状(其中包含文本)?
圆圈里有圆圈,每个圆圈都有一个箭头(最好是弯曲的),指向下一个圆圈。每个小圆圈内都有 $h^*$。我需要在“前”圆圈附近画一个 $H$,在第二个圆圈附近画一个 $g_1 H g_1^{-1}$,依此类推。
在第五个圆圈($g_4 H g_4^{-1}$)之后,我需要一个指向 3 个点的弯曲箭头,然后再画一个指向第一个圆圈的弯曲箭头。如果绘图的尺寸是 A4 纸的三分之一,那就太好了。谢谢!
编辑
人们要求我试用一下,所以就是这样:
\documentclass{article}
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}
\draw[fill=none](0,0) circle (3.0);
\draw[fill=none](1,2) circle (0.5);
\draw[fill=none](1,-2) circle (0.5);
\draw[fill=none](2,0) circle (0.5);
\draw[fill=none](-1,2) circle (0.5);
\draw[fill=none](-1,-2) circle (0.5);
\end{tikzpicture}
\end{document}
现在,我不知道如何绘制那些弯曲的箭头、点,以及如何手动写出 $h$ 和 $g_i H g_i^{-1}$。
编辑(2)
人们帮助我进行了设计,但是当我将代码上传到新文档时,它显示了以下内容。
我有两个问题:第一个是为什么它没有向我显示正确的代码图?第二个是为什么我的“xcolor”包现在出现 LaTeX 错误?
答案1
这是一个基本的尝试。值bend left=30
和looseness=0.75
是通过实验得出的(我覆盖了一个半径为的圆2
并尝试了几个值)。您可以通过将[scale=...]
作为可选参数添加到tikzpicture
(即直接在 后面)来简单地缩放它\begin{tikzpicture}
。我希望您不希望最后箭头上的三个点与您描述的完全一样;我只是用了一个虚线。
\documentclass[convert]{standalone}
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}
\draw (0,0) circle[radius=4];
\node[draw, circle, label=above:\(H\)] (0) at (90:2) {\(h^*\)};
\foreach \i [remember=\i as \j (initally 0)] in {1,...,4} {
\node[draw, circle, label=90-72*\i:\(g_\i H g_\i^{-1}\)] (\i) at (90-72*\i:2) {\(h^*\)};
\draw[->] (\j) edge [bend left=30, looseness=0.75] (\i);
}
\draw[->] (4) edge [bend left=30, looseness=0.75] (0);
% added three dots
\draw[white, thick] (116:2) arc[start angle=116, end angle=136, radius=2];
\foreach \i in {0,1,2}
\filldraw (121+5*\i:2) circle[radius=0.4pt];
\end{tikzpicture}
\end{document}
更新:虽然这是一个相当粗略的解决方案,但我只是用白色覆盖了最后一个箭头的某些部分,并在一个假想的圆上放置了三个点。中间的点位于两个节点的中间,每个点相隔五度。
答案2
变体Gargantuar 的精彩回答使用另一个节点\vdots
代替虚线:
\documentclass[border=10pt]{standalone}
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}
\draw (0,0) circle[radius=4];
\node[draw, circle, label={above:\(H\)}] (n0) at (90:2) {\(h^*\)};
\foreach \i [count=\j from 0] in {1,...,4} {
\node[draw, circle, label={90-60*\i:\(g_\i H g_\i^{-1}\)}] (n\i)
at (90-60*\i:2) {\(h^*\)};
\draw[->] (n\j) edge [bend left=30, looseness=0.66] (n\i);
}
\node[circle, rotate=-30, text depth=0.5em] (n5) at (150:2) {\(\vdots\)};
\draw[->] (n4) edge [bend left=30, looseness=0.66] (n5);
\draw[->] (n5) edge [bend left=30, looseness=0.66] (n0);
\end{tikzpicture}
\end{document}
答案3
这是一个使用 的选项chains
。
\documentclass{article}
\usepackage{tikz}
\usetikzlibrary {chains}
\begin{document}
\begin{tikzpicture}[start chain=placed {at=(150-\tikzchaincount*60:2)}, every join/.style={->, thick, bend left=15}, chain node/.style={on chain, circle, thick, minimum size=8mm, join}]
\draw[thick] circle[radius=4];
\node[chain node, draw, label={90:$H$}] {$h^*$};
\foreach \i in {1,...,4}
\node[chain node, draw, label={90-60*\i:$g_{\i}Hg_{\i}^{-1}$}] {$h^*$};
\node[chain node]{}; \node[chain node]{};
\foreach \j in {-1,0,1} \fill (150+5*\j:1.93)circle[radius=.8pt];
\end{tikzpicture}
\end{document}
答案4
另一种选择是元帖子标签位于 OP 草图中。我定义了一个nice_label
宏,尝试自动放置标签。
\documentclass[border=5mm]{standalone}
\usepackage{luamplib}
\begin{document}
\mplibtextextlabel{enable}
\begin{mplibcode}
beginfig(1);
path outer_circle, inner_circle;
outer_circle = reverse fullcircle % so it runs clockwise
rotated 90 % ... from 12 o'clock
scaled 100mm; % .. and takes up 1/3 of an A4 page.
inner_circle = outer_circle scaled 3/4;
numeric n; n = 6;
path c[];
for t=0 upto n:
c[t] = fullcircle scaled 36 shifted point 8/n*t of inner_circle;
endfor
vardef nice_label(expr s, z, p) =
save r, t, a, b;
picture t; t = thelabel(s, z);
interim bboxmargin := 4;
path a; a = z--center p cutafter bbox t;
path b; b = z--center p cutafter p;
numeric r; r = 1 - arclength a / arclength b;
draw t shifted point r of b
enddef;
for t=0 upto n-1:
if t < n - 1:
draw c[t];
label("$h^{\rlap{*}}$", center c[t] + 2 up);
nice_label(
if t=0:
"$H$"
else:
"$g_{" & decimal t & "}Hg_{"&decimal t&"}^{-1}$"
fi, origin, c[t]);
else:
for dt=-1/16, 0, 1/16:
draw point 8/n*t + dt of inner_circle withpen pencircle scaled 1;
endfor
fi
drawarrow subpath 8/n*(t, t+1) of inner_circle
cutbefore c[t] cutafter c[t+1];
endfor
draw outer_circle;
endfig;
\end{mplibcode}
\end{document}
如果你将 LaTeX 引擎设置为 ,则可以在 Overleaf 中编译此文件lualatex
。你将获得如下所示的 PDF:
如果您n=6;
在顶部附近进行更改,n=7
您将获得此版本...