我想在演示文稿中的一个句子中间写上不同的文字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}
只是引入了\par
after text
。
无论如何,我希望有某种机制可以交替文本而不引入段落分隔符。这可能吗?
答案1
这是实现相同目的的另一种方法:将您的替换\mode
为\only
。我倾向于认为\mode
是 Big Chunks 的东西,我不认为我曾经使用过它之内框架。这纯粹是主观的,但根据问题来看,似乎无意中发现了一种良好做法。
\only
、\alt
和(以及其他)使用的叠加规范\temporal
可以包括“输出类型”规范。我经常会做一些复杂的叠加工作,例如,我可能想要迭代 的近似值\pi
。在我的演示中,我想要类似这样的内容:
\only<+>{3}
\only<+>{3.2}
\only<+>{3.14}
但在handout
或trans
模式下,这些都会得到处理,并且覆盖规范会折叠,因此它们都会出现。这不是我想要的。所以我实际上这样做了:
\only<+|handout: 0|trans: 0>{3}
等等。这将在handout
和trans
模式下完全抑制文本。
在您的示例中,您可以利用此功能并具有:
\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}