我想要制作一个项目列表,其中一个项目在第一次被发现时以长形式显示,但当后续项目被发现时则缩减为短形式。
有了下面的 MWE,其他项目就会移动,这是我想避免的。
我听说过\smash
,我希望它可以在长格式中打印附加信息而不给它一个框,但它会抛出一个错误Missing $ inserted
\documentclass[12pt]{beamer}
\begin{document}
\begin{frame}{Test}
\begin{itemize}
\item Test
\begin{equation*}
f(y)=\sum_{m} c_{m}\phi_{m}(y),
\end{equation*}
\item<2-> Test
\begin{itemize}
\item<2-> Test%This item has a long and short form
\begin{onlyenv}<2>
:\begin{equation*}c_{m}\approx \frac{1}{N}\sum_{i=1}^{N}f(y_i)\phi_{m}(y_i)\end{equation*}
\end{onlyenv}
\item<3-> Test
\end{itemize}
\item<4-> Test
\begin{itemize}
\item<4-> Test
\end{itemize}
\end{itemize}
\end{frame}
\end{document}
答案1
我找到了以下全自动解决方案。它的行为完全符合预期(我希望):使用
\shortlongitem{slide_number}{short_text}{expansion_set_after_short_text}
其中slide_number
单号,例如2
,它不能与任何附加项一起使用,例如2-
。从(beamer :)short_text
开始一直显示。在之后设置,仅在中可见,不移动任何内容,不占用任何空间。slide_number
<slide_number->
expansion_set_after_short_text
short_text
slide_number
遗憾的是,我无法使用\newcommand<>
from beamer
(因此无法使用与幻灯片感知命令相同的语法),因为我需要修改幻灯片编号(参见特殊计数器)以免short_text
在同一位置打印两次。这会使其在屏幕上看起来很奇怪,而这正是演示文稿的预期用途。
命令(必须放在序言中):
\newcounter{slitem}
\newcommand{\shortlongitem}[3]{%
\setcounter{slitem}{#1}%
\item<\theslitem->%
\only<\theslitem>{%
\raisebox{0pt}[0pt][0pt]{%
\rlap{\parbox[t]{\linewidth}{#2#3}%
}%
}%
}%
\stepcounter{slitem}%
\visible<\theslitem->{#2}%
}
完成 MWE:
\documentclass[12pt]{beamer}
\newcounter{slitem}
\newcommand{\shortlongitem}[3]{%
\setcounter{slitem}{#1}%
\item<\theslitem->%
\only<\theslitem>{%
\raisebox{0pt}[0pt][0pt]{%
\rlap{\parbox[t]{\linewidth}{#2#3}%
}%
}%
}%
\stepcounter{slitem}%
\visible<\theslitem->{#2}%
}
\begin{document}
\begin{frame}{Test}
\begin{itemize}
\item Test
\begin{equation*}
f(y)=\sum_{m} c_{m}\phi_{m}(y),
\end{equation*}
\item<2-> Test
\begin{itemize}
\shortlongitem{2}{Test}{ with a long long long long long line that breaks somewhere : \begin{equation*}
c_{m}\approx \frac{1}{N}\sum_{i=1}^{N}f(y_i)\phi_{m}(y_i)
\end{equation*}}
\item<3-> Test
\end{itemize}
\item<4-> Test
\begin{itemize}
\item<5-> Test
\end{itemize}
\end{itemize}
\end{frame}
\end{document}