Beamer:忽略 itemize 间距中的部分项目

Beamer:忽略 itemize 间距中的部分项目

我想要制作一个项目列表,其中一个项目在第一次被发现时以长形式显示,但当后续项目被发现时则缩减为短形式。

有了下面的 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_textshort_textslide_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}

相关内容