記憶画像を使用した tikz-cd の奇妙な動作

記憶画像を使用した tikz-cd の奇妙な動作

答えようとしている間質問、TikZ-cd の奇妙な動作を発見しましたremember picture

次のコードをさらにコンパイルすると、最初の TikZ-cd と 2 番目の 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}

ファーストラン:

ここに画像の説明を入力してください

2回目の実行:

ここに画像の説明を入力してください

3回目の実行:

ここに画像の説明を入力してください

4回目の実行:

ここに画像の説明を入力してください

5回目の実行:

ここに画像の説明を入力してください

6回目の実行:

ここに画像の説明を入力してください

7回目の実行:

ここに画像の説明を入力してください

などなど:D

何が問題ですか?

答え1

(単純な)理由が見つかりました:overlay欠落していました。

TikZ マニュアルより:

/tikz/overlay=<boolean>(デフォルトは true) このオプションは主に他の画像のノードを参照する場合に使用しますが、他の状況でも使用できます。このオプションの効果は、現在の画像の境界ボックスを計算するときに、現在のスコープ内のすべてのものが考慮されないことです。別の画像のノードへの参照を含むすべてのパス (または少なくともパスのすべての部分) にこのオプションを指定する必要があります。その理由は、そうでなければ、TikZは現在の画像を大きくしようとします 他の図のノードを囲むのに十分な大きさです。しかし、 2回目の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は影響を受けないからです。
  • Qrrbrbirlbel がコメントで述べたように、オプションtikzcdが必要なのは 2 番目 (垂直矢印がある場所)だけですoverlay

関連情報