Take the 2-minute tour ×
TeX - LaTeX Stack Exchange is a question and answer site for users of TeX, LaTeX, ConTeXt, and related typesetting systems. It's 100% free, no registration required.

I have, in different overlying slides in a Beamer presentation, the letter y, in equation mode, being changed by \alert{z}. To create the overly I am using \only<1>{} and \only<2>{}, so that the only change is that letter being changed. It seems to be that the two letters take different space and then the rest of the equation moves around when one passes from one slide to the other. How to solve this?

share|improve this question

2 Answers 2

up vote 9 down vote accepted

When you change a letter to another, two things may change: the depth and/or height and the width. For the depth/height, you can just use \vphantom{...}. For the width, you must do measurements to know which is widest and then put each in a box of the appropriate size.

For convenience, here's a little macro which does all this automatically:

\documentclass{beamer}
\usepackage{calc}
\usepackage{mathtools}
\newlength{\letterwidth}
\newcommand{\mathmakeboxlargestof}[3]{%
% #1 = first symbol
% #2 = second symbol
% #3 = what is printed
  \setlength{\letterwidth}{\maxof{\widthof{$#1$}}{\widthof{$#2$}}}%
  \mathmakebox[\letterwidth]{\vphantom{#1}\vphantom{#2}#3}%
}
\begin{document}
\begin{frame}{Title}
$x+\only<1>{\mathmakeboxlargestof{y}{\alert{z}}{y}}\only<2>{\mathmakeboxlargestof{y}{\alert{z}}{\alert{z}}}=1$
\end{frame}
\end{document}

The macro \mathmakeboxlargestof takes as first argument the first letter (e.g. y), as second argument the second letter (e.g. \alert{z}) and as third argument what you want to be printed (e.g. y or \alert{z} or whatever else you like).

share|improve this answer
1  
Very good. Question: Shouldn't the command be used as \mathmakeboxlargestof{y}{\alert{z}}{y} and \mathmakeboxlargestof{y}{\alert{z}}{\alert{z}} respectively? Just in case the alert is making some space. –  ABC Dec 14 '10 at 22:30
    
@Franklin: yes, it would be safer to use \alert everywhere (when it's just a color change it doesn't matter, but you never know). –  Philippe Goutet Dec 14 '10 at 23:16

Philippe gave a great answer. For easier usage of his \mathmakeboxlargestof, you could use the following wrapper \replace:

\documentclass{beamer}
\usepackage{calc}
\usepackage{mathtools}
\newlength{\letterwidth}
\newcommand{\mathmakeboxlargestof}[3]{%
    \setlength{\letterwidth}{\maxof{\widthof{$#1$}}{\widthof{$#2$}}}%
    \mathmakebox[\letterwidth]{\vphantom{#1}\vphantom{#2}#3}%
}
\makeatletter
\newcommand\replace{}
\def\replace<#1>#2#3{%
    \only<#1>{\mathmakeboxlargestof{#2}{#3}{#2}}%
    \only<\number\numexpr#1+1>{\mathmakeboxlargestof{#2}{#3}{#3}}%
    }
\makeatother
\begin{document}
\begin{frame}{Title}
$x + \replace<1>{y}{\alert{z}} = 1$
\end{frame}
\end{document}

The macro \replace takes one number n in <> and two further arguments. The first of these two is put on slide number n, the second one on slide number n+1.

share|improve this answer

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.