beamer,覆盖在 allt 或 fancyvrb 中

beamer,覆盖在 allt 或 fancyvrb 中

我想在某些幻灯片上突出显示 alltt 或 verbatim 或 Verbatim(或任何可以产生我想要的结果的环境/包)中的一些文本。因此,我创建了一个可以完成此任务的新命令<>:

\newcommand<>{\highlight}[1]{{\alt#2{\colorbox#2{yellow}{#1}}{#1}}}

确实,如果我\highlight<2>{bla bla}在单纯的框架环境中使用它,它确实会按我预期的方式工作(尽管它在突出显示时会在“bla bla”之前添加一个空格......我不明白为什么)。

但是如果我在 alltt 或 Verbatim 环境中使用它,它不起作用。

我尝试提出一个最小的例子:

\documentclass{beamer}
\usepackage{alltt,fancyvrb}
\newcommand<>{\highlight}[1]{{\alt#2{\colorbox#2{yellow}{#1}}{#1}}}
\begin{document}
\begin{frame}
some text

\highlight<2>{some text to highlight on slide 2 only}

some more text
\end{frame}

\begin{frame}[fragile]
\begin{alltt}
some \textit{text}
{\highlight<2>{some text to highlight on slide 2 only}}
some \textbf{more} text
\end{alltt}

\begin{Verbatim}[commandchars=\\\{\}]
some \textit{text}
\highlight<2>{some text to highlight on slide 2 only}
some \textbf{more} text
\end{Verbatim}
\end{frame}

\end{document}

第一帧满足了我的要求。第二帧却没有,差远了!

我不确定我是否正确使用了 Verbatim 环境。我提到它是为了展示我尝试过的方法。如果使用 alltt 突出显示有效,我会很高兴。

我在 fancyvrb 中看到过一些问题\alert<x>,但我不确定答案是否适用于我的情况(或者我不明白答案)。

答案1

虽然alltt不会更改和的类别代码<>因为它假设这些字符的连字符用于输出,但verbatim模式会这样做,并且没有fancyvrb用于将它们改回的接口。所以你必须手动完成:

\documentclass{beamer}

\usepackage{alltt,fancyvrb}
\makeatletter % fix the ligature list and hope for the best
\def\verbatim@nolig@list{\do\`\do\,\do\'\do\-}
\makeatother

\newcommand<>{\highlight}[1]{{\alt#2{\colorbox#2{yellow}{#1}}{#1}}}

\begin{document}

\begin{frame}[fragile]
\begin{alltt}
some \textit{text}
{\highlight<2>{some text to highlight on slide 2 only}}
some \textbf{more} text
\end{alltt}

\begin{Verbatim}[commandchars=\\\{\}]
some \textit{text}
\highlight<2>{some text to highlight on slide 2 only}
some \textbf{more} text
\end{Verbatim}
\end{frame}

\end{document}

请注意,如果您使用 T1 输出编码,则<<>>将显示为“和”。Verbatim

在此处输入图片描述

答案2

Beamer 的内置semiverbatim环境具有相同的用途,alltt但保留了覆盖规范。

相关内容