Probleme mit der Position von Tikzbildern im Beamer

Probleme mit der Position von Tikzbildern im Beamer

Betrachten Sie das folgende MWE:

\documentclass{beamer}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage[ngerman]{babel}
\usepackage{tikz,alphalph,amsmath}
\setbeamertemplate{navigation symbols}{}
\usetheme{AnnArbor}
\usecolortheme{dolphin}
\setbeamercolor{frametitle}{fg=structure,bg=white}
\setbeamerfont{frametitle}{shape=\rm\bfseries}
\newcommand{\caesar}[1]{
    \centering
    \begin{tikzpicture}[every node/.style={draw,minimum width=1cm,minimum height=1cm}]
        \foreach \k in {1,...,26}
        {
            \pgfmathsetmacro\secure{int(\k+#1)}
            \ifnum\k=26
                \pgfmathsetmacro\mainx{mod(\k,26)}
            \else
                \pgfmathsetmacro\mainx{mod(\k,26)-1}
            \fi
            \pgfmathsetmacro\xpos{mod(\mainx,5)}
            \pgfmathsetmacro\testnumber{mod(\k,5)}

            \ifcase\testnumber=0
                \pgfmathsetmacro\ypos{-floor(\k/5)+1}
            \else
                \pgfmathsetmacro\ypos{-floor(\k/5)}
            \fi


            \pgfmathsetmacro\letter{int(mod(\secure,26))}
            \ifnum\letter=0
                \pgfmathsetmacro\letter{26}
            \else\fi

            \node at (\xpos,\ypos) {\strut\alphalph{\letter}};
        }

        \node[draw=none] at (7,0) {$(x+\textcolor{red}{e})\mod 26$ mit $\textcolor{red}{e} = #1$};
    \end{tikzpicture}
}
\begin{document}
    \title{\bf Title}
    \author{Name}
    \institute{Institute}
    \maketitle

    \begin{frame}{Cäsar-Verschlüsselung}
        \only<1>{
            \caesar{0}
        }
        \only<2>{
            \caesar{1}
        }
    \end{frame}
\end{document}

Bildschirmfoto

Wie man sieht, ist die Position des Tikzbilds im dritten Frame anders als im zweiten (es ist etwas nach rechts verschoben). Ich vermute, es hängt mit den Kästchen zusammen, die das Paket alphalph für die Buchstaben von so etwas verwendet.

Meine Frage ist: Wie kann ich diesen „Fehler“ beheben (in dem Sinne, dass keine Verschiebung erfolgt, wenn das dritte Bild erscheint)?

Antwort1

Der eigentliche Grund ist viel einfacher. Du hast bei der Verwendung unpassende Leerzeichen eingefügt \only, die zur Verschiebung geführt haben. Du musst sicherstellen, dass du Zeilenenden mit folgendem auskommentierst %:

\documentclass{beamer}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage[ngerman]{babel}
\usepackage{tikz,alphalph,amsmath}
\setbeamertemplate{navigation symbols}{}
\usetheme{AnnArbor}
\usecolortheme{dolphin}
\setbeamercolor{frametitle}{fg=structure,bg=white}
\setbeamerfont{frametitle}{shape=\rm\bfseries}
\newcommand{\caesar}[1]{
    \centering
    \begin{tikzpicture}[every node/.style={draw,minimum width=1cm,minimum height=1cm}]
        \foreach \k in {1,...,26}
        {
            \pgfmathsetmacro\secure{int(\k+#1)}
            \ifnum\k=26
                \pgfmathsetmacro\mainx{mod(\k,26)}
            \else
                \pgfmathsetmacro\mainx{mod(\k,26)-1}
            \fi
            \pgfmathsetmacro\xpos{mod(\mainx,5)}
            \pgfmathsetmacro\testnumber{mod(\k,5)}

            \ifcase\testnumber=0
                \pgfmathsetmacro\ypos{-floor(\k/5)+1}
            \else
                \pgfmathsetmacro\ypos{-floor(\k/5)}
            \fi


            \pgfmathsetmacro\letter{int(mod(\secure,26))}
            \ifnum\letter=0
                \pgfmathsetmacro\letter{26}
            \else\fi

            \node at (\xpos,\ypos) {\strut\makebox[1em]{\alphalph{\letter}}};
        }

        \node[draw=none] at (7,0) {$(x+\textcolor{red}{e})\mod 26$ mit $\textcolor{red}{e} = #1$};
    \end{tikzpicture}
}
\begin{document}
    \title{\bf Title}
    \author{Name}
    \institute{Institute}
    \maketitle

    \begin{frame}{Cäsar-Verschlüsselung}
        \only<1>{%
            \caesar{0}%
        }%
        \only<2>{%
            \caesar{1}%
        }%
    \end{frame}
\end{document}

Bildbeschreibung hier eingeben

verwandte Informationen