그림을 기억하는 tikz-cd의 이상한 동작

그림을 기억하는 tikz-cd의 이상한 동작

대답을 하려고 하다가질문, TikZ-cd의 이상한 동작을 발견했습니다 remember picture.

다음 코드를 더 많이 컴파일하면 첫 번째 TikZ-cd와 두 번째 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가 의견에서 말했듯이 이 경우 다이어그램 에만 옵션을 추가하므로 s가 아닌 것은 영향을 받지 않기 때문에 s \tikzcdset{diagrams={remember picture}}보다 낫습니다.\tikzset{every picture/.append style={remember picture}}tikzcdtikzcd tikzpicture
  • Qrrbrbirlbel이 의견에서 말했듯이 두 번째 tikzcd(수직 화살표가 있는) 에만 overlay옵션이 필요합니다.

관련 정보