tikz-cd 箭筒代码不起作用

tikz-cd 箭筒代码不起作用

quiver 给了我以下代码

\[\begin{tikzcd}[ampersand replacement=\&,row sep=scriptsize]
    {\mathbb{Z}_2 \text{ A}} \&\& {\text{A} \\ \text{B}} \\
    \\
    {\mathbb{Z}_4 \text{ A }\\ \text{B}} \&\& {\alpha \\ \text{DG}} \\
    {}
    \arrow["{\footnotesize \beta}"', from=1-1, to=3-1]
    \arrow["\footnotesize\epsilon"', from=3-1, to=3-3]
    \arrow["{\footnotesize \chi}"', from=1-1, to=1-3]
    \arrow["\footnotesize\gamma", from=1-3, to=3-3]
\end{tikzcd}\]

输出如下

在此处输入图片描述

但这在我的本地 texlive 编译器或 overleaf 上不起作用。请注意,我确实下载了 quiver.sty 并在序言中使用了 \usepackage{quiver}。正确的语法是什么,才能获得上述符号和文本的准确位置?

答案1

抱歉,但您使用的软件会为堆叠条目生成错误的代码,并且通常会生成过于复杂的代码。

只要稍加练习,自己编写交换图就会变得很容易。

\documentclass{article}
\usepackage{amsmath,amssymb}
\usepackage{tikz-cd}

\newcommand{\cdstack}[2]{\begin{matrix}#1\\#2\end{matrix}}

\begin{document}

\[
\begin{tikzcd}[sep=huge]
  \mathbb{Z}_2\;\mathrm{A} \arrow[r,"\chi"'] \arrow[d,"\beta"'] &
  \cdstack{\mathrm{A}}{\mathrm{B}} \arrow[d,"\gamma"] \\
  \cdstack{\mathbb{Z}_4\;\mathrm{A}}{\mathrm{B}} \arrow[r,"\epsilon"'] &
  \cdstack{\alpha}{\mathrm{DG}}
\end{tikzcd}
\]

\end{document}

在此处输入图片描述

请注意\text,如果您确实希望字母直立,这不是适合此工作的正确命令。可能huge太大了,以下是使用的输出large

在此处输入图片描述

您可能需要调整标签的位置\gamma,默认情况下,标签位于箭头中间,这pos=0.35似乎是正确的。为了掩盖我们的踪迹,我们可能会将标签稍微放低一些\beta

\documentclass{article}
\usepackage{amsmath,amssymb}
\usepackage{tikz-cd}

\newcommand{\cdstack}[2]{\begin{matrix}#1\\#2\end{matrix}}

\begin{document}

\[
\begin{tikzcd}[sep=large]
  \mathbb{Z}_2\;\mathrm{A} \arrow[r,"\chi"'] \arrow[d,pos=0.55,"\beta"'] &
  \cdstack{\mathrm{A}}{\mathrm{B}} \arrow[d,pos=0.40,"\gamma"] \\
  \cdstack{\mathbb{Z}_4\;\mathrm{A}}{\mathrm{B}} \arrow[r,"\epsilon"'] &
  \cdstack{\alpha}{\mathrm{DG}}
\end{tikzcd}
\]

\end{document}

在此处输入图片描述

答案2

现在,人们告诉你

  • 不要使用 Quiver 和
  • 直接写入 TikZ-CD

这是一种不必处理单元格内额外宏的方法。

math align=center|left|righttext align=center|left|right可能对此有帮助。
警告:您需要将整个单元格内容放入,{}但您需要在环境选项中指定对齐方式tikzcd。在单元格内这样做已经太晚了。它也不允许手动节点或任何\path内容,如matrix of [math] nodes样式。

但是,它将允许在内部|<opts>|(不带[]!)添加一个可选参数并将其转发到节点。

代码

\documentclass{article}
\usepackage{amsmath, amssymb}
\usepackage{tikz-cd}
\tikzcdset{
  rc/.style 2 args={
    /utils/tempa/.style args={r##1c##2}{/tikz/row ##1 column ##2/.append style={#2}},
    /utils/tempa/.list={#1}}}
\makeatletter
\tikzset{
  clear/.is choice,
  clear/at begin cell/.code=\let\tikz@atbegin@cell\pgfutil@empty,
  clear/at end cell/.code=\let\tikz@atend@cell\pgfutil@empty,
  @align/.style={
    clear=at begin cell, clear=at end cell,
    execute at begin cell=#1},
  math align/.is choice,
  math align/center/.style={@align=\tikz@grab@cell{\iftikzcd@mathmode\else$\fi}{array}cc},
  math align/left/.style  ={@align=\tikz@grab@cell{\iftikzcd@mathmode\else$\fi}{array}cl},
  math align/right/.style ={@align=\tikz@grab@cell{\iftikzcd@mathmode\else$\fi}{array}cr},
  text align/.is choice,
  text align/center/.style={@align=\tikz@grab@cell{}{tabular}cc},
  text align/left/.style  ={@align=\tikz@grab@cell{}{tabular}cl},
  text align/right/.style ={@align=\tikz@grab@cell{}{tabular}cr},
}
\usepackage{xparse}
\NewDocumentCommand{\tikz@grab@cell}{m m m m D||{} m }{%
  \node[name=\tikzmatrixname-\the\pgfmatrixcurrentrow-\the\pgfmatrixcurrentcolumn,#5]
    {#1\begin{#2}[#3]{@{}#4@{}}#6\end{#2}};}
\makeatother
\begin{document}
\[\begin{tikzcd}[
  sep=large,
  ',
  every label/.append style={node font=\footnotesize},
  rc={r1c2, r2c1, r2c2}{math align=center}]
     \mathbb Z_2 A       \dar["\beta"] \rar["\chi"] &      {A \\ B} \dar["\gamma"'] \\
    {\mathbb Z_4 A \\ B} \rar["\epsilon"]           & |red|{\alpha \\ DG}
\end{tikzcd}\]
\end{document}

输出

在此处输入图片描述

答案3

  • 显然,quiver 不会生成有用的代码。它包含错误。
  • 重写您的代码片段并将其扩展为以下 MWE:
\documentclass{article}
\usepackage{amsmath, amssymb}
\usepackage{makecell}
\usepackage{tikz-cd}

\begin{document}
\[
 \tikzcdset{
    every label/.append style = {font=\footnotesize},
    cells={nodes={align=center}}
            }
   \begin{tikzcd}[sep=5em]    
$\mathbb{Z}_2$ A \dar["\beta" '] \rar["\chi"]
                &   \makecell{A\\ B} \dar["\gamma"] \\
\makecell{$\mathbb{Z}_4$ A \\ B} \rar["\epsilon"'] 
                &   \makecell{$\alpha$\\ DG}        \\
\end{tikzcd}
\]
\end{document}

运行良好。结果如下:

在此处输入图片描述

在上面的 MWE 中我做了以下更改:

  • 用于makecell包含两行文本的单元格
  • 数学内容makecell必须用$
  • 箭头移至交换图单元格
  • 单元格的样式和边缘标签的大小由以下方式定义\tikzcdset

答案4

这是颤动图表编辑器,以前无法导出包含换行符的图表。此问题已在 1.5.1 版中修复。如果您在编辑器中重新打开图表(您可以通过打开导出图表附带的链接来执行此操作),然后重新导出,您将获得正确的 TikZ 输出。

将来,如果你遇到问题颤动请输出在错误跟踪器上报告,以便可以修复。这个问题已经存在一年多了,我才刚刚注意到它。

相关内容