как выровнять несколько tikzpicture, отображаемых с помощью \only

как выровнять несколько tikzpicture, отображаемых с помощью \only

Я создал последовательность tikzpicture, которые все похожи, но немного отличаются по размеру (у них есть выступающие части). Но я бы хотел, чтобы они все были выровнены в одной точке tikzpicture.

Я бы подумал, что если задать для них всех базовую линию, то эта точка координат будет выровнена, но они все равно «покачиваются».

Вот MWE. Я хочу, чтобы открытый круглый узел в (0,0) был в одном и том же месте на странице для каждого наложения. Но, похоже, он центрирует ограничивающий прямоугольник для каждого tikzpicture; размер прямоугольника меняется из-за большого зеленого узла. Я думал, что эта baselineопция сделает это, но этого не происходит.

\documentclass{beamer}

\usepackage{tikz}


\begin{document}

\newcommand\grf[1]{
  \begin{tikzpicture}%[baseline={(0,0)}]
    \node[circle,draw] (0) at (0,0) {} ;  % <-- this circle node should not move  
    \node[circle,fill] (1) at (+1,+1) {} ;
    \node[circle,fill] (2) at (+1,-1) {} ;
    \node[circle,fill] (3) at (-1,-1) {} ;
    \node[circle,fill] (4) at (-1,+1) {} ;
    \node[circle,fill,green,inner sep=1em] at (#1) {} ;
  \end{tikzpicture}
}

\begin{frame}
  \only<1>{\grf{1}}%
  \only<2>{\grf{2}}%
  \only<3>{\grf{3}}%
  \only<4>{\grf{4}}%
\end{frame}


\end{document}

решение1

Установка базовой линии не позволяет избежать скачков в целом, поскольку ограничивающий прямоугольник все еще может измениться. Одним из очень быстрых решений является исключение дополнительного узла из ограничивающего прямоугольника путем добавления ключа overlay.

\documentclass{beamer}

\usepackage{tikz}
\begin{document}

\newcommand\grf[1]{
  \begin{tikzpicture}%[baseline={(0,0)}]
    \node[circle,draw] (0) at (0,0) {} ;  % <-- this circle node should not move  
    \node[circle,fill] (1) at (+1,+1) {} ;
    \node[circle,fill] (2) at (+1,-1) {} ;
    \node[circle,fill] (3) at (-1,-1) {} ;
    \node[circle,fill] (4) at (-1,+1) {} ;
    \node[circle,fill,green,inner sep=1em,overlay] at (#1) {} ;
  \end{tikzpicture}
}

\begin{frame}
  \only<1>{\grf{1}}%
  \only<2>{\grf{2}}%
  \only<3>{\grf{3}}%
  \only<4>{\grf{4}}%
\end{frame}


\end{document}

введите описание изображения здесь

В общем, ТикБиблиотека Z overlay-beamer-stylesимеет много опций для избежания прыжков. Здесь вы можете использовать

\documentclass{beamer}

\usepackage{tikz}
\usetikzlibrary{overlay-beamer-styles}

\begin{document}


\begin{frame}
  \begin{tikzpicture}%[baseline={(0,0)}]
    \node[circle,draw] (0) at (0,0) {} ;  % <-- this circle node should not move  
    \node[circle,fill] (1) at (+1,+1) {} ;
    \node[circle,fill] (2) at (+1,-1) {} ;
    \node[circle,fill] (3) at (-1,-1) {} ;
    \node[circle,fill] (4) at (-1,+1) {} ;
    \path foreach \X in {1,...,4}
     {node[circle,fill,green,inner sep=1em,visible on=<\X>] at (\X) {} };
  \end{tikzpicture}
\end{frame}


\end{document}

введите описание изображения здесь

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