在 beamer 中保存数学样式

在 beamer 中保存数学样式

我正在尝试构建一个 beamer 版本alt,该版本占用其较大参数的空间。我使用一些saveboxes 和测量来实现这一点。因为我也想在数学中使用它,所以我需要保存当前的数学样式。显然,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}

在此处输入图片描述

相关内容