
在試圖回答的同時一個問題,我發現 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
選項。