tikz-cd 记忆图片的奇怪行为

tikz-cd 记忆图片的奇怪行为

在尝试回答时一个问题,我发现 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 tikzpictures 不受影响
  • 正如 Qrrbrbirlbel 在他们的评论中所说,只有第二个tikzcd(垂直箭头所在的位置)需要该overlay选项。

相关内容