这有点吹毛求疵,但我有点难以理解tikz-cd
。我不确定 TikZ 术语,但我想我正在尝试找到一种方法来操纵单元格宽度。这是一个最简单的例子来说明我的问题:
\documentclass{minimal}
\usepackage{tikz, tikz-cd}
\begin{document}
\begin{tikzcd}
A \rar \dar & B \rar \dar & C \dar \\
D \rar & E \rar & F \oplus G
\end{tikzcd}
\end{document}
我想让从B
到 的箭头的长度与从到 的C
箭头的长度相同。我的第一个想法是我应该填充包含 的框(单元格?),使其宽度与包含 F + G 的框相同。我可以通过替换 来实现这一点,但肯定有更好的方法!有人知道怎么做吗?E
F+G
C
C
\quad C \quad
答案1
你必须欺骗tikz-cd
自己认为右下角对象的宽度为零;然后你才能人为地将箭头缩短到它。
\documentclass{article}
\usepackage{tikz-cd,mathtools}
\begin{document}
\begin{tikzcd}
A \arrow{r} \arrow{d} & B \arrow{r} \arrow{d} & C \arrow{d} \\
D \arrow{r} & E \arrow[end anchor={[xshift=-1.25em]}]{r}
& \mathclap{F \oplus G}
\end{tikzcd}
\end{document}
该命令\mathclap
由 提供mathtools
。
说实话,我更喜欢默认版本。
答案2
当然,您可以C
在一个宽度恰好为的框内设置F \oplus G
:
\documentclass{article}
\usepackage{calc,tikz-cd}
\begin{document}
\begin{tikzcd}
A \rar \dar & B \rar \dar & \makebox[\widthof{$F \oplus G$}]{$C$} \dar \\
D \rar & E \rar & F \oplus G
\end{tikzcd}
\end{document}
calc
的命令\widthof
用于测量的宽度,并在精确宽度的中心框中F \oplus G
设置。C
答案3
不是一个新问题:
代码
\documentclass{article}
\usepackage{tikz-cd}
\begin{document}\centering
\begin{tikzcd}
A \rar \dar & B \rar \dar & C \dar \\
D \rar & E \rar & F \oplus G
\end{tikzcd}\medskip\par
\begin{tikzcd}
A \rar \dar & B \rar \dar & |[text width=width("$F\oplus G$"), align=center]|C \dar \\
D \rar & E \rar & F \oplus G
\end{tikzcd}\bigskip
\begin{tikzcd}
A \rar \dar & B \rar \dar & C \dar \\
D \rar & E \rar & |[overlay]| F \oplus G
\end{tikzcd}\medskip\par
\begin{tikzcd}[nodes=overlay, row sep=large, column sep=large]
A \rar \dar & B \rar \dar & C \dar \\
D \rar & E \rar & F \oplus G
\end{tikzcd}\bigskip
\begin{tikzcd}[/tikz/column sep=
{\pgfkeysvalueof{/tikz/commutative diagrams/column sep/large},between origins}]
A \rar \dar & B \rar \dar & C \dar \\
D \rar & E \rar & F \oplus G
\end{tikzcd}\bigskip
\end{document}