我正在尝试构建一个 beamer 版本alt
,该版本占用其较大参数的空间。我使用一些savebox
es 和测量来实现这一点。因为我也想在数学中使用它,所以我需要保存当前的数学样式。显然,scalerel\ThisStyle
与 beamer 叠加层不能完美交互,所以我试图在没有它的情况下相处。但是,我很难确定当前的数学样式。请注意,通常的mathpalette
-way 会导致叠加规范出现问题。
我想到了下面的方法,但没有 s 也不起作用aftergroup
。
\documentclass{beamer}
\usepackage{calc}
\show\mathchoice
\newcommand\ThisStyle[1]{
\mathchoice
{\aftergroup\let\aftergroup\SavedStyle\aftergroup\displaystyle}
{\aftergroup\let\aftergroup\SavedStyle\aftergroup\textstyle}
{\aftergroup\let\aftergroup\SavedStyle\aftergroup\scriptstyle}
{\aftergroup\let\aftergroup\SavedStyle\aftergroup\scriptscripttextstyle}
\show\SavedStyle
#1
}
\newsavebox\PhAltA
\newsavebox\PhAltB
\newlength\PhAltWidth
\newlength\PhAltHeight
\newlength\PhAltDepth
\newcommand<>{\phalt}[3][c]{{%
\ifmmode%
\def\dollar{$}%
\else%
\def\dollar{}%
\let\ThisStyle\relax%
\let\SavedStyle\relax
\fi%
\ThisStyle{
\savebox\PhAltB{\dollar\SavedStyle#3\dollar}%
\savebox\PhAltA{\dollar\SavedStyle#2\dollar}%
\setlength\PhAltWidth{\maxof{\wd\PhAltA}{\wd\PhAltB}}%
\setlength\PhAltHeight{\maxof{\ht\PhAltA}{\ht\PhAltB}}%
\setlength\PhAltDepth{\maxof{\dp\PhAltA}{\dp\PhAltB}}%
\alt#4{\raisebox{0pt}[\PhAltHeight][\PhAltDepth]{\makebox[\PhAltWidth][#1]{\usebox\PhAltA}}}%
{\raisebox{0pt}[\PhAltHeight][\PhAltDepth]{\makebox[\PhAltWidth][#1]{\usebox\PhAltB}}}%
}%
}}
\begin{document}
\begin{frame}
\onslide<+->
X\phalt<+->{A}{BBB}X
$X\phalt<+->{A}{BBB}X$
$A_{X\phalt<+->{A}{BBB}X}$
\onslide<+->
\end{frame}
\end{document}
如果您使用该scalerel
定义,您会看到插入了虚假覆盖。
答案1
这是你想要的嗎?
\documentclass{beamer}
\usepackage{calc}
\newsavebox\PhAltA
\newsavebox\PhAltB
\newcommand\phaltbox[5]{%
% #1 - position ( l / r / c / s )
% #2 - material to measure and typeset
% #3 - material to measure but not to typeset
% #4 - if in mathmode: math-style-command, if not in mathmode: empty
% #5 - if in mathmode: $, if not in mathmode: empty
\savebox\PhAltA{#5#4#2#5}%
\savebox\PhAltB{#5#4#3#5}%
\raisebox{0pt}[{\maxof{\ht\PhAltA}{\ht\PhAltB}}]%
[{\maxof{\dp\PhAltA}{\dp\PhAltB}}]%
{%
\makebox[{\maxof{\wd\PhAltA}{\wd\PhAltB}}]%
[{#1}]%
{#5#4#2#5}% <- doing \usebox here would outmaneuver \makebox's [s]-option.
}%
}%
\newcommand\phaltboxmode[3]{%
\ifmmode
\mathpalette{\phaltbox{#1}{#2}{#3}}{$}%
\else
\phaltbox{#1}{#2}{#3}{}{}%
\fi
}%
\newcommand<>{\phalt}[3][c]{%
\alt#4{%
\phaltboxmode{#1}{#2}{#3}%
}{%
\phaltboxmode{#1}{#3}{#2}%
}%
}%
\begin{document}
\begin{frame}
\onslide<+->
X\phalt<+->[s]{A A A}{\tiny{B} \tiny{B} \tiny{B}}X
$X\phalt<+->{AAA}{BBB}X$
$X_{X\phalt<+->{AAA}{BBB}X}$
\onslide<+->
\end{frame}
\end{document}