特定类型的循环

特定类型的循环

我其实是 LateX 的新手。我正在使用 overleaf online 撰写论文。我知道如何使用“tikzcd”绘制交换图,但现在,我需要制作一个不同的循环图,如图所示 在此处输入图片描述

在此处输入图片描述 有人可以帮我解决这个问题吗...

谢谢

答案1

这是可能的Asymptote解决方案。

在此处输入图片描述

//
// diag1.asy
//
// run 
//    asy diag1.asy
//
// to get a standalone diag1.pdf graphic file
//
settings.tex="pdflatex";
size(8cm);
import fontsize;defaultpen(fontsize(12pt));
texpreamble("\usepackage{lmodern}\usepackage{amsmath}"
           +"\usepackage{amsfonts}\usepackage{amssymb}");
pen pen1=darkblue+  0.7bp;
pen dashPen=darkblue+0.7bp+linetype(new real[]{5,5})+linecap(0);
arrowbar midarr=MidArrow(HookHead,size=2);
pair A,B,C,D,E,F,G,H,I;
A=(0,0); B=(184,122); C=(235.8,201+2/3);
D=(308,227); E=(380.2,252+1/3); F=(472.8,223+1/3);
G=(457,119); H=(441.2,14+2/3); I=(317,-165);
guide g=A .. controls B and C .. D 
          .. controls E and F .. G
          .. controls H and I .. A;
real phi0=180+degrees(dir(g,0));
real phi=phi0-degrees(dir(g));
int n=8;
real[] ti;
for(int i=0;i<=n;++i)ti.push(reltime(g,i/n));
pair[] L;
for(int i=0;i<=n;++i)L[i]=relpoint(g,i/n);
pair[] p={A,L[1],L[2],L[3],L[6],L[7]};
guide rib1=L[1]{dir(-90)}..A{dir(phi0-1*phi/n)};
guide rib2=L[2]{dir(-90)}..A{dir(phi0-2*phi/n)};
guide rib3=L[3]{dir(-90)}..A{dir(phi0-3*phi/n)};
guide rib6=L[6]{dir( 90)}..A{dir(phi0-6*phi/n)};
guide rib7=L[7]{dir( 90)}..A{dir(phi0-7*phi/n)};
draw(g,pen1);
draw(rib1,pen1+0.4*bp,midarr);
draw(rib2,pen1+0.4*bp,midarr);
draw(rib3,pen1+0.4*bp,midarr);
draw(rib6,pen1+0.4*bp,midarr);
draw(rib7,pen1+0.4*bp,midarr);
string[] plabels={"\chi_0", "\ell(t_1)", "\ell(t_2)", 
            "\ell(t_3)", "\ell(t_{n-2})", "\ell(t_{n-1})"};
pair[]ppos={plain.SW, plain.NW, plain.NW,
  plain.N, plain.S, plain.S};
dot(p,UnFill);
for(int i;i<plabels.length;++i){
  label("$"+plabels[i]+"$",p[i],ppos[i]);
}

同样,第二张图

在此处输入图片描述

//
// diag2.asy
//
// run 
//    asy diag2.asy
//
// to get a standalone diag2.pdf graphic file
//
settings.tex="pdflatex";
size(8cm);
import fontsize;defaultpen(fontsize(10pt));
texpreamble("\usepackage{lmodern}\usepackage{amsmath}"
           +"\usepackage{amsfonts}\usepackage{amssymb}");
pen pen1=darkblue+  0.7bp;
pen dashPen=darkblue+0.7bp+linetype(new real[]{5,5})+linecap(0);
arrowbar midarr=MidArrow(HookHead,size=2);
pair A,B,C,D,E,F,G,H,I;
A=(0,0); B=(184,122); C=(235.8,201+2/3);
D=(308,227); E=(380.2,252+1/3); F=(472.8,223+1/3);
G=(457,119); H=(441.2,14+2/3); I=(317,-165);
guide g=A .. controls B and C .. D 
          .. controls E and F .. G
          .. controls H and I .. A;
real phi0=180+degrees(dir(g,0));
real phi=phi0-degrees(dir(g));
int n=8;
real[] ti;
for(int i=0;i<=n;++i)ti.push(reltime(g,i/n));
pair[] L;
for(int i=0;i<=n;++i)L[i]=relpoint(g,i/n);
pair[] p={A,L[1],L[2],L[4],L[5],L[7]};
guide rib1=L[1]{dir(-90)}..A{dir(phi0-1*phi/n)};
guide rib2=L[2]{dir(-90)}..A{dir(phi0-2*phi/n)};
guide rib4=A{dir(180+phi0-4*phi/n)}..L[4]{dir(60)};
guide rib5=L[5]{dir(176)}..A{dir(phi0-5*phi/n)};
guide rib7=L[7]{dir( 90)}..A{dir(phi0-7*phi/n)};
path g1=subpath(g,0,ti[4]);
path g2=subpath(g,ti[4],ti[5]);
path g3=subpath(g,ti[5],ti[8]);
draw(g3&g1,dashPen+0.4*bp);
draw(g2,pen1+0.4*bp,midarr);
draw(rib1,dashPen+0.4*bp,midarr);
draw(rib2,dashPen+0.4*bp,midarr);
draw(rib4,pen1+0.4*bp,midarr);
draw(rib5,pen1+0.4*bp,midarr);
draw(rib7,dashPen+0.4*bp,midarr);
string[] plabels={"\chi_0", "\ell(t_1)", "\ell(t_2)", 
            "\ell(t_{i-1})", "\ell(t_i)", "\ell(t_{n-1})"};
pair[]ppos={plain.SW, plain.NW, plain.NW,
  plain.E, plain.SE, plain.SW};
dot(p,UnFill);
for(int i;i<plabels.length;++i){
  label("$"+plabels[i]+"$",p[i],ppos[i]);
}
label("$\eta_{i-1}$",relpoint(rib4,0.7),plain.NW);
label("$\eta_i^{-1}$",relpoint(rib5,0.15),plain.NE);
label("$\ell_i$",relpoint(g2,0.5),plain.E);

相关内容