tikzcd 图表的问题

tikzcd 图表的问题

原本想问 3 个不同的问题,但它们都是关于同一个包的,都是关于摆弄箭头的,所以它们都是相关的,所以我想我会选择一个。开始吧。我的代码:

\documentclass[a4paper]{report}
\usepackage{amsmath,amssymb,amsfonts,newtxmath,newtxtext,tikz-cd,graphicx}
\usetikzlibrary{decorations.markings,decorations.pathreplacing,positioning,cd}

\begin{document}
\[\begin{tikzcd}
a \ar[r,leftarrow] \ar[d,rightarrow,red] & id \ar[r,rightarrow,red] & b \ar[d,rightarrow] \\
ab \ar[d,rightarrow] & & ba \ar[d,rightarrow,red] \\
aba \ar[loop left,blue,no head] \ar[rrr,bend left=24,blue,xshift=-5.5ex,yshift=-.4ex,no head] \ar[rrr,bend right=22,blue,xshift=-5.5ex,yshift=.4ex,no head] & & bab \ar[loop right,blue,phantom,"\scalebox{.3}{\bfseries)}",xshift=-2.6ex,yshift=-.5ex] & {\color{white}a}
\end{tikzcd}\]
\[\begin{tikzcd}
G \ar[d,thick, start anchor=center, end anchor=center, xshift=-.5em, decorate,decoration={brace,amplitude=4pt,mirror},"abel"'] \ar[d,no head] \\
N \\
G' \ar[d,dashed,no head] \\
\left\langle\mathcal{C}_1\right\rangle \ar[d,no head] \\
1
\end{tikzcd}\]
\[\begin{tikzcd}
 & & 3 \ar[loop below,red,"b"] \ar[dr,green,"c"] \\
V \ar[loop,blue,"a",out=160,in=110] \ar[loop,green,"c",out=-110,in=-160] \ar[r,red,"b"] & 2 \ar[ur,blue,"a"] \ar[dr,green,"c"'] & {} & 5 \ar[r,red,"b"] & 6 \ar[loop,blue,"a",out=70,in=20] \ar[loop,green,out=-70,in=-20] \\
 & & 4 \ar[loop above,red,"b"] \ar[ur,blue,"a"]
\end{tikzcd}\]
\end{document}

结果:

在此处输入图片描述

问题:

  1. 我想要的是圈出最底行的两个条目;目前,我有一个循环,两个无头箭头指向一个单元格太远(好吧,我会指向它们 rr 但我将它们更改为 rrr 以使它们保持原样),以及一个几乎看不见的微括号;有没有办法得到任何形状(可能不是矩形,我更喜欢更弯曲的形状,椭圆形或斑点,但如果弯曲的形状不可行,矩形也可以)来围绕这些条目?
  2. “abel”(代表“abelian”,意思是两个条目的商是阿贝尔的)离括号太近,而且括号里有多余的小划线;我该如何删除划线并将“abel”进一步向左移动?
  3. 这些环路太挤压了;我指定了in正确out的角度,但我想采取这些箭头并在与它们正交的方向上“拉伸”它们;更准确地说,现在为了获得它们,必须采取loop aboveloop below作为图表中间的环路,垂直挤压它们直到它们的高度几乎为零,然后旋转它们;我怎样才能让这些环路看起来像我描述的那样,但没有挤压?

编辑: 这接近我想要的 3 的东西,特别是 V 的循环应该比这更倾斜,就像镜像 6 的循环一样:

在此处输入图片描述

更新:

正如我的回答所述,问题 2 和 3 已修复。问题 1 有点奇怪。我将两个答案的解决方案复制粘贴到一个文件中并进行编译,它们成功了。然后我将图 1 的解决方案复制粘贴到我的旧 MWE 中。以下是 LaRiFaRi 的修复结果:

在此处输入图片描述

以下是 Gonzalo 的:

在此处输入图片描述

Gonzalo 的版本实际上有额外的奇怪之处,在第一次编译时它与 LaRiFaRi 的版本完全相同,然后我将其垂直移动,椭圆形会不规则地移动,然后我编译了几次,我再次看到它像 LaRiFaRi 的版本,然后我再次编译它,椭圆形消失了,如上所示。那么发生了什么?它们有什么用呢[alias…]

更新 2: 我以为我已经无可挽回地失去了恢复这些编译效果的可能性,但后来我记得我在摆弄 LaTeX 时截取了很多屏幕截图,所以这里有几个:

在此处输入图片描述

在此处输入图片描述

在此处输入图片描述

在此处输入图片描述

我尝试了几种方法,但都无济于事:

在此处输入图片描述

在此处输入图片描述

请注意,当我摆弄 LaRiFaRi 的解决方案时,Gonzalo 的解决方案是如何固定椭圆的位置的。

更新 3: 更奇怪的是,代码如下:

\documentclass[a4paper]{report}
\usepackage{amsmath,amssymb,amsfonts,newtxmath,newtxtext,tikz-cd,graphicx}
\usetikzlibrary{decorations.markings,decorations.pathreplacing,positioning,cd,fit,shapes.geometric}
\DeclareMathOperator{\id}{id}

\begin{document}

Gonzalo docet:
\[
\begin{tikzcd}[remember picture,overlay]
  a 
  \ar[r,leftarrow] 
  \ar[d,rightarrow,red] 
& 
  id 
  \ar[r,rightarrow,red] 
& 
  b 
  \ar[d,rightarrow] 
\\
  ab 
  \ar[d,rightarrow] 
& 
& 
  ba 
  \ar[d,rightarrow,red] 
\\
  aba  
  & 
  & 
  bab
\end{tikzcd}
\tikz[remember picture,overlay]{
\node[ellipse,inner xsep=0pt,draw,blue,fit={(tikz@f@1-3-1) (tikz@f@1-3-3)}]   {};
}
\]

\vspace{2cm}

\[
\begin{tikzcd}
  G 
  \ar[d,thick, start anchor=center, end anchor=center,no head, xshift=-.5em,decorate,decoration={brace,amplitude=4pt,mirror},"\text{\normalsize abel}" left=5pt] 
  \ar[d,no head] 
\\
  N 
\\
  G' 
  \ar[d,dashed,no head] 
\\
  \left\langle\mathcal{C}_1\right\rangle 
  \ar[d,no head] 
\\
  1
\end{tikzcd}
\]

\[
\begin{tikzcd}
& 
& 
  3 
  \ar[loop below,red,"b"] \ar[dr,green,"c"] 
\\
  V 
  \ar[loop above,blue,"a",out=155,in=105,looseness=7] 
  \ar[loop below,green,"c",out=-105,in=-155,looseness=7] 
  \ar[r,red,"b"] 
& 
  2 
  \ar[ur,blue,"a"] 
  \ar[dr,green,"c"'] 
& 
  {} 
& 
  5 
  \ar[r,red,"b"] 
& 
  6 
  \ar[loop,blue,"a",out=75,in=25,looseness=7] 
  \ar[loop,green,out=-25,in=-75,looseness=7] 
\\
& 
& 
  4 
  \ar[loop above,red,"b"] 
  \ar[ur,blue,"a"]
\end{tikzcd}
\]

LaRiFaRi docet:
\[\begin{tikzcd}[execute at end picture={\node[ellipse,draw,blue,fit={(tikz@f@1-3-1) (tikz@f@1-3-3)}]{};}]
a \arrow[red]{d} & \id \arrow{l}\arrow[red]{r} & b \arrow{d} \\
ab \arrow{d} & & ba \arrow[red]{d} \\
|[alias=X]|aba  & & |[alias=Y]|bab
\end{tikzcd}\]

\[\begin{tikzcd}[every arrow/.append style=dash]
G \ar[thick, start anchor=center, end anchor=center, xshift=-.5em, decorate,decoration={brace,amplitude=4pt,mirror}]{d}[left= 4pt]{\text{abel}} \arrow{d} \\
N \\
G' \ar[d,dashed] \\
\left\langle\mathcal{C}_1\right\rangle \arrow{d} \\
1
\end{tikzcd}\]

\[\begin{tikzcd}
 & & 3 \ar[loop below,red,"b"] \ar[dr,green,"c"] \\
V \ar[loop,distance=20pt,blue,"a",out=160,in=110] \ar[loop,distance=20pt,green,"c",out=-110,in=-160] \ar[r,red,"b"] & 2 \ar[ur,blue,"a"] \ar[dr,green,"c"'] & {} & 5 \ar[r,red,"b"] & 6 \ar[loop,distance=20pt,blue,"a",out=70,in=20] \ar[loop,distance=20pt,green,out=-70,in=-20] \\
 & & 4 \ar[loop above,red,"b"] \ar[ur,blue,"a"]
\end{tikzcd}\]


\end{document}

最初几次运行的编译结果完全相同:

在此处输入图片描述

在此处输入图片描述

在此处输入图片描述

在摆弄了另一个更新(n.2)的屏幕截图后,我再次测试它并:

在此处输入图片描述

在此处输入图片描述

我就像 WTF??

答案1

Gonzalo 更快。这里有一个略有不同的版本,不需要编译两次:

% arara: pdflatex

\documentclass[a4paper]{report}
\usepackage{newtxmath,tikz-cd}
\usetikzlibrary{decorations.pathreplacing,fit,shapes.geometric}
\usepackage{mathtools}
\DeclareMathOperator{\id}{id}

\begin{document}
\[\begin{tikzcd}[execute at end picture={\node[ellipse,draw,blue,fit={(tikz@f@1-3-1) (tikz@f@1-3-3)}]{};}]
a \arrow[red]{d} & \id \arrow{l} \arrow[red]{r} & b \arrow{d} \\
ab \arrow{d}     &                              & ba \arrow[red]{d} \\
aba              &                              & bab
\end{tikzcd}\]

\[\begin{tikzcd}[every arrow/.append style=dash]
G 
\arrow[%
    ,thick
    ,start anchor=center
    ,end anchor=center
    ,xshift=-.5em
    ,decorate
    ,decoration={%
        ,brace
        ,amplitude=4pt
        ,mirror
        }
    ]{d}[left=4pt]{\text{abel}} \arrow{d} \\
N \\[-3ex]
G' \arrow[d,dashed] \\
\langle\mathcal{C}_1\rangle \arrow{d} \\
1
\end{tikzcd}\]

\[\begin{tikzcd}
& & 3 \arrow[loop below,red,"b"] \arrow[dr,green,"c"] \\
V 
\arrow[loop,distance=16pt,blue,"a",out=150,in=120] \arrow[loop,distance=16pt,green,"c",out=-120,in=-150] \arrow[r,red,"b"] & 2 \arrow[ur,blue,"a"] \arrow[dr,green,"c"] & & 5 \arrow[r,red,"b"] & 6 \arrow[loop,distance=16pt,blue,"a",out=60,in=30] \arrow[loop,distance=16pt,green,out=-60,in=-30,swap,"c"] \\
& & 4 \arrow[loop above,red,"b"] \arrow[ur,blue,"a"]
\end{tikzcd}\]
\end{document}

在此处输入图片描述


第二张图中的笔划是箭头。只需将选项添加dash到该箭头即可,就像我上面所做的那样。

答案2

  1. 您可以使用fit库在这些元素周围拟合椭圆节点;我使用了记住图片、叠加选项,因此拟合节点可以在 tikzcd 环境之外绘制。代码需要运行两到三次才能使椭圆落到最终位置。

  2. 您可以使用类似的东西left=<length>来移动标签。我也使用\textfromamsmath在文本模式下写入它。

  3. 您可以使用looseness钥匙。

在此处输入图片描述

代码:

\documentclass[a4paper]{report}
\usepackage{amsmath,amssymb,amsfonts,newtxmath,newtxtext,tikz-cd,graphicx}
\usetikzlibrary{decorations.markings,decorations.pathreplacing,positioning,cd,fit,shapes.geometric}

\begin{document}

\[
\begin{tikzcd}[remember picture,overlay]
  a 
  \ar[r,leftarrow] 
  \ar[d,rightarrow,red] 
& 
  id 
  \ar[r,rightarrow,red] 
& 
  b 
  \ar[d,rightarrow] 
\\
  ab 
  \ar[d,rightarrow] 
& 
& 
  ba 
  \ar[d,rightarrow,red] 
\\
  aba  
  & 
  & 
  bab
\end{tikzcd}
\tikz[remember picture,overlay]{
\node[ellipse,inner xsep=0pt,draw,blue,fit={(tikz@f@1-3-1) (tikz@f@1-3-3)}]   {};
}
\]

\vspace{2cm}

\[
\begin{tikzcd}
  G 
  \ar[d,thick, start anchor=center, end anchor=center,no head, xshift=-.5em,decorate,decoration={brace,amplitude=4pt,mirror},"\text{\normalsize abel}" left=5pt] 
  \ar[d,no head] 
\\
  N 
\\
  G' 
  \ar[d,dashed,no head] 
\\
  \left\langle\mathcal{C}_1\right\rangle 
  \ar[d,no head] 
\\
  1
\end{tikzcd}
\]

\[
\begin{tikzcd}
& 
& 
  3 
  \ar[loop below,red,"b"] \ar[dr,green,"c"] 
\\
  V 
  \ar[loop above,blue,"a",out=155,in=105,looseness=7] 
  \ar[loop below,green,"c",out=-105,in=-155,looseness=7] 
  \ar[r,red,"b"] 
& 
  2 
  \ar[ur,blue,"a"] 
  \ar[dr,green,"c"'] 
& 
  {} 
& 
  5 
  \ar[r,red,"b"] 
& 
  6 
  \ar[loop,blue,"a",out=75,in=25,looseness=7] 
  \ar[loop,green,out=-25,in=-75,looseness=7] 
\\
& 
& 
  4 
  \ar[loop above,red,"b"] 
  \ar[ur,blue,"a"]
\end{tikzcd}
\]

\end{document}

答案3

发布两个答案的总结,以隔离修复图表的“技巧”。

  1. 由于我遇到了其他问题,因此暂时搁置,将更新问题;
  2. 多余的括号实际上是箭头,它no head起固定作用;通过删除之前的逗号来固定文本的位置left=,这在某种程度上导致该选项被忽略;我不明白为什么我应该说\text{\normalsize abel}而不是只说abel;可能是为了避免不需要的数学模式;\normalsize似乎什么都不做;
  3. 循环的诀窍是looseness=,或等效地distance=,如果修改的话,会挤压或扩大循环。

编辑: 正如 LaRiFaRi 在他的回答中指出的那样,对 2 中额外笔画的另一种修复方法是[every arrow/.append style=dash]将其作为可选参数\begin{tikzcd}

更新: 1 已解决。额外的问题是 TikZ 选择了错误的 tikz@f@1-3-1 或类似的东西。使用别名来引用这些点可以修复(或似乎可以修复)两种解决方案中椭圆的所有不稳定行为。接受 LaRiFaRi 的版本,因为它是tikz-cd-contained 并且不需要在图表之外执行图表的一部分,但它们几乎是等效的。别名的语法:将别名的名称括在|[alias=(竖线、括号、别名=)和之间]|,并且不要忘记最后的结束竖线。赞成 Gonzalo 的工作并接受 LaRiFaRi 的工作。

相关内容