Странное поведение 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опция.

Связанный контент