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}
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}