\[\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|right
和text 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 输出。
将来,如果你遇到问题颤动请输出在错误跟踪器上报告,以便可以修复。这个问题已经存在一年多了,我才刚刚注意到它。