在 beamer 中更改 \mode 会创建一个新段落。可以避免这种情况吗?

在 beamer 中更改 \mode 会创建一个新段落。可以避免这种情况吗?

我想在演示文稿中的一个句子中间写上不同的文字beamer及其对应的内容beamerarticle。但这似乎\mode<...>{...}会引入一个新段落并打断句子。

请看一下代码和结果:

\documentclass[ignorenonframetext]{beamer}
%\documentclass{article}
%\usepackage{beamerarticle}
\begin{document}
\begin{frame}{This is a frame}

This is some text in \texttt{beamer} and \texttt{article} modes. 

This is some text in \mode<article>{\texttt{article}}\mode<beamer>{\texttt{beamer}} mode.
\end{frame}
\end{document}

这是模式下的结果beamer。它看起来像在 之前 和 之后\mode<beamer>{text}引入\par(或类似的东西)text

while\mode<article>{text}只是引入了\parafter text在此处输入图片描述

无论如何,我希望有某种机制可以交替文本而不引入段落分隔符。这可能吗?

答案1

这是实现相同目的的另一种方法:将您的替换\mode\only。我倾向于认为\mode是 Big Chunks 的东西,我不认为我曾经使用过它之内框架。这纯粹是主观的,但根据问题来看,似乎无意中发现了一种良好做法。

\only\alt和(以及其他)使用的叠加规范\temporal可以包括“输出类型”规范。我经常会做一些复杂的叠加工作,例如,我可能想要迭代 的近似值\pi。在我的演示中,我想要类似这样的内容:

\only<+>{3}
\only<+>{3.2}
\only<+>{3.14}

但在handouttrans模式下,这些都会得到处理,并且覆盖规范会折叠,因此它们都会出现。这不是我想要的。所以我实际上这样做了:

\only<+|handout: 0|trans: 0>{3}

等等。这将在handouttrans模式下完全抑制文本。

在您的示例中,您可以利用此功能并具有:

\documentclass[ignorenonframetext]{beamer}
%\documentclass{article}
%\usepackage{beamerarticle}
\begin{document}
\begin{frame}{This is a frame}

This is some text in \texttt{beamer} and \texttt{article} modes. 

This is some text in
\only<article>{\texttt{article}}\only<beamer>{\texttt{beamer}} mode.
\end{frame}
\end{document}

得出的结果为:

仅使用而不是模式的示例输出

答案2

您可以重新定义\beamer@modeinline中的定义beamerbasemodes.sty;这里是原始定义:

\long\def\beamer@modeinline<#1>#2{%
  \gdef\beamer@closer{}%
  \def\beamer@doifnotinframe{\@gobble}\def\beamer@doifinframe{\@firstofone}%
  {\beamer@saveanother\beamer@slideinframe=1\relax%
   \beamer@masterdecode{#1}%
   \beamer@restoreanother}\beamer@donow{#2}%
  \beamer@mode\par}

最后\par产生你提到的段落的结尾;删除这个\par命令可以得到你想要的结果:

\documentclass[ignorenonframetext]{beamer}
%\documentclass{article}
%\usepackage{beamerarticle}

\makeatletter
\long\def\beamer@modeinline<#1>#2{%
  \gdef\beamer@closer{}%
  \def\beamer@doifnotinframe{\@gobble}\def\beamer@doifinframe{\@firstofone}%
  {\beamer@saveanother\beamer@slideinframe=1\relax%
   \beamer@masterdecode{#1}%
   \beamer@restoreanother}\beamer@donow{#2}%
  \beamer@mode}
\makeatother

\begin{document}
\begin{frame}{This is a frame}

This is some text in \texttt{beamer} and \texttt{article} modes. 

This is some text in \mode<article>{\texttt{article}}\mode<beamer>{\texttt{beamer}} mode.

\end{frame}

\end{document}

在此处输入图片描述

etoolbox包简化了代码:

\documentclass[ignorenonframetext]{beamer}
%\documentclass{article}
%\usepackage{beamerarticle}
\usepackage{etoolbox}

\makeatletter
\patchcmd{\beamer@modeinline}{\par}{}{}{}
\makeatother

\begin{document}
\begin{frame}{This is a frame}

This is some text in \texttt{beamer} and \texttt{article} modes. 

This is some text in \mode<article>{\texttt{article}}\mode<beamer>{\texttt{beamer}} mode.

\end{frame}

\end{document}

相关内容