
Я делаю презентацию с помощью Beamer и мне нужна помощь с использованием \only<.> и \boxed{}.
Я хотел бы получить следующий эффект:
а=б+в
а=б+в
с=д
а=б+д
с=д
а=b+\boxed{d}
с=д
Я использовал следующий код, но мне не нравится эффект, потому что когда он помещает рамку вокруг d, она также перемещается "c=d". Может ли кто-нибудь помочь мне найти другой код?
\begin{align*}
a=b+\only<1-2>c
\only<3>{d}
\only<4>{\boxed{d}}
\end{align*}
\pause
c=d
Поэтому я хотел бы поместить «d» в рамку после того, как появится «a=b+d», не перемещая «c=d».
Может ли кто-нибудь мне помочь?
решение1
Первый:вы не используете align
правильно. Вам нужно написать "c=d" внутри окружения align
и "склеить" два уравнения с помощью &
.
Второй:вам необходимо точно выровнять «d» в соответствии с разницей между шириной d
и \boxed{d}
.
Есть два решения (при условии, что рамка выровнена по центру); оба должны работать, но почему-то второе лучше.
\documentclass{beamer}
% For both solutions
\usepackage{calc}
% Just for the second solution
\newlength{\firslength}
\settowidth{\firslength}{\boxed{d}}
\newlength{\secondlength}
\settowidth{\secondlength}{d}
\begin{document}
\begin{frame}
% First solution
\begin{align*}
a=&b+\only<1-2>{\hspace*{(\widthof{\boxed{d}}-\widthof{d})/2}c\hspace*{(\widthof{\boxed{d}}-\widthof{d})/2}}%
\only<3>{\hspace*{(\widthof{\boxed{d}}-\widthof{d})/2}d\hspace*{(\widthof{\boxed{d}}-\widthof{d})/2}}%
\only<4>{\boxed{d}}\\%
\uncover<2->{c=&d}%
\end{align*}
% Second solution
\begin{align*}
a=&b+\only<1-2>{\hspace*{\dimexpr(\firslength-\secondlength)/2}c\hspace{\dimexpr(\firslength-\secondlength)/2}}%
\only<3>{\hspace*{\dimexpr(\firslength-\secondlength)/2}d\hspace{\dimexpr(\firslength-\secondlength)/2}}%
\only<4>{\boxed{d}}\\%
\uncover<2->{c=&d}%
\end{align*}
\end{frame}
\end{document}
решение2
Проблема здесь в том, что \boxed{d}
имеет другую ширину, чем d
. К сожалению, решение Тома Солида выглядит неуклюже из-за вставленного дополнительного интервала.
Я не уверен, откуда вы это взяли \boxed
(думаю, он загружается косвенно с помощью beamer), но я обнаружил, что он определен в нескольких пакетах как:
\newcommand{\boxed}[1]{\fbox{\m@th$\displaystyle#1$}}
(или его эквивалент). Покопавшись в определениях, \fbox
есть дополнительное пространство, \fboxsep
окружающее содержимое блока внутри блока плюс ширина линий, которая составляет \fboxrule
. Мы можем использовать это, чтобы создать новую команду \bxed
(или как вы предпочитаете ее называть), которая удалит добавленное пространство, так что блок перейдет в существующее белое пространство вокруг d
при печати.
\newcommand{\bxed}[1]{\mbox{\kern-\fboxsep\kern-fboxrule\boxed{#1}\kern-\fboxsep\kern-fboxrule}}
Это должно дать желаемый результат.
Также &
в align
окружающую среду следует входитьдои не после него =
. Вы заметите в примере Тома, что интервал междуаи = больше, чем интервал между = иб. Перемещение амперсанда решает эту проблему.