在尝试回答时一个问题,我发现 TikZ-cd 有一个奇怪的行为remember picture
。
如果我多次编译以下代码,第一个和第二个 TikZ-cd 之间的距离就会增加:
\documentclass{article}
\usepackage{amsmath, tikz-cd}
\tikzset{every picture/.append style={remember picture}}
\begin{document}
\[
\begin{tikzcd}
A \ar[r] & |[alias=B]|B \ar[r] & C
\end{tikzcd}
\]
\[
\begin{tikzcd}
D\ar[r] & E \ar[from=B] \ar[r] & F
\end{tikzcd}
\]
\end{document}
第一次运行:
第二次运行:
第三次运行:
第四次运行:
第五次运行:
第六次运行:
第七次运行:
等等 :D
问题是什么?
答案1
我找到了(简单的)原因:overlay
失踪了。
来自 TikZ 手册:
/tikz/overlay=<boolean>
(默认为 true)此选项主要用于引用其他图片中的节点时,但您也可以在其他情况下使用它。此选项的效果是,在计算当前图片的边界框时,不会考虑当前范围内的所有内容。您需要在包含对另一张图片中节点的引用的所有路径(或至少在路径的所有部分)上指定此选项。原因是,否则,TikZ 将尝试使当前图片变大 足以涵盖另一幅图中的节点。然而,在 TeX 的第二次运行将创建一个更大的图像,从而 越来越大的图片。除非您知道自己在做什么,否则我建议对所有包含对其他图片的引用的图片指定覆盖选项。
这有效:
\documentclass{scrartcl}
\usepackage{amsmath, tikz-cd}
\tikzcdset{diagrams={remember picture}}
\begin{document}
\[
\begin{tikzcd}[ampersand replacement=\&]
A \rar \& |[alias=B]|B \ar[r] \& C
\end{tikzcd}
\]\vspace{1ex}
\[
\begin{tikzcd}[overlay, ampersand replacement=\&]
D\ar[r] \& E \ar[from=B] \rar \& F
\end{tikzcd}
\]
\end{document}
另请注意:
- 正如 muzimuzhi Z 在他们的评论中所说,在这种情况下,
\tikzcdset{diagrams={remember picture}}
比更好\tikzset{every picture/.append style={remember picture}}
,因为它仅将选项附加到tikzcd
图表,因此非tikzcd
tikzpicture
s 不受影响 - 正如 Qrrbrbirlbel 在他们的评论中所说,只有第二个
tikzcd
(垂直箭头所在的位置)需要该overlay
选项。