我想在某些幻灯片上突出显示 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
但保留了覆盖规范。