TeX - LaTeX Asked by celtschk on December 1, 2020
I’ve got an underbrace (underbrace{foo}_{bar}
) which I want to uncover (i.e. foo
should be there from the beginning, while the underbrace and the bar
should be uncovered on the next slide. I’ve tried the following, which (not surprisingly) doesn’t work:
documentclass{beamer}
begin{document}
begin{frame}
Without uncover (this is what it should look like on the second subframe):
begin{displaymath}
underbrace{foo}_{bar}
end{displaymath}
With uncover (doesn't work):
begin{displaymath}
uncover<2>{underbrace}{foo}uncover<2>{_{bar}}
end{displaymath}
end{frame}
end{document}
In the second displaymath
, the underbrace is displayed before foo
and the bar
as index to foo
, and moreover the underbrace is immediately visible.
Note that only
wouldn’t be a solution because on one hand in my actual document I use setbeamercovered{transparent}
so the underbrace and the text below should be lightly visible from the beginning, and on the other hand only
would also not keep the space for the underbrace.
So how can I achieve that?
One way to do that, is to use the definition of the transparency (15% Text foreground on the background and to avoid the “jumping” use as suggested here the overprint
environment.
Though you have to define your term that's underbrace
d twice and in my quick hack the transparency color is the one mentioned above, because i didn't find whether i can somehow get that by usebeamercolor
documentclass[transparent]{beamer}
usepackage{amsmath}
usepackage{cancel}
begin{document}
setbeamercovered{transparent}
begin{frame}%
begin{overprint}
onslide<1>begin{displaymath}
color{normal text.fg!15!normal text.bg}
underbrace{usebeamercolor[fg]{text}foo}_{bar}
end{displaymath}
onslide<2>begin{displaymath}
underbrace{foo}_{bar}
end{displaymath}
end{overprint}
end{frame}%
end{document}
And (thanks to @Andrew Stacey) the even shorter version just switching colors using only
(because color
is sensitive to that) would be
begin{frame}
begin{displaymath}
color{normal text.fg!15!normal text.bg}
only<2->{color{normal text.fg}}
underbrace{usebeamercolor[fg]{text}foo}_{bar}
end{displaymath}
end{frame}
Correct answer by Ronny on December 1, 2020
Here's a solution that just uses onslide
(so that there's no need to know the precise definition of transparency):
documentclass{beamer}
setbeamercovered{transparent}
begin{document}
begin{frame}
begin{displaymath}
onslide<2-> underbrace{ onslide<1->
foo
onslide<2-> }_{bar} onslide<1->
text{some more stuff for slide 1}
end{displaymath}
end{frame}
end{document}
Answered by Hendrik Vogt on December 1, 2020
Based on Hendrik Vogt's answer, and for my needs, I created these commands to make my life easier:
newcommand<>{uncoverubrace}[2]{%
onslide#3 underbrace{ onslide<1->%
#1%
onslide#3 }_{#2} onslide<1->%
}
newcommand<>{uncoverobrace}[2]{%
onslide#3 overbrace{ onslide<1->%
#1%
onslide#3 }^{#2} onslide<1->%
}
Now the use is very simple:
usepackage{mathtools}
...
begin{displaymath}
uncoverubrace<2->{a_i}{mathclap{text{$N$ elements}}} =
frac{
uncoverobrace<3->{b_j-b_i}{mathclap{text{$2N$ items needed}}}
}{2h}
end{displaymath}
Room for improvement: allow relative overlay specifications (<+->
).
Answered by Jellby on December 1, 2020
Based on Jellby's answer, I was not only able to simplify the code, but also patch the original underbrace
using the xparse
package such that it works with arbitrary <overlay-specification>
.
documentclass{beamer}
setbeamercovered{transparent}
usepackage{amsmath, xparse, letltxmacro}
LetLtxMacro{oldunderbrace}{underbrace}
DeclareDocumentCommand{underbrace}{d<> m e{_}}{%
IfValueTF{#1}{% IF <overlay-specification> given
% using global onlside flag, cf. p82 beamer manual v3.59
oldunderbrace{#2onslide<#1>}_{#3}onslide%
}{% ELSE
oldunderbrace{#2}_{#3}
}%
}%
begin{document}
begin{frame}{alt<1,3>{LINKS}{ZWO}}
begin{block}<+->{}
begin{align*}
underbrace<+->{text{color{green} LINKS!}}_{color{red} text{ZWO!}}
underbrace<+->{text{color{green} LINKS!}}_{color{red} text{DREI!}}
underbrace<+->{text{color{green} LINKS!}}_{color{red} text{VIER!}}
end{align*}
end{block}
end{frame}
end{document}
I guess if one wanted one could even built-in an @ifclassloaded{beamer}
in order to automagically ignore the <>
when other classes are loaded.
Answered by Hyperplane on December 1, 2020
Get help from others!
Recent Questions
Recent Answers
© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP