答案1
这是因为\emph
在 中如何被重新定义而产生的“特征” beamer
。在 中beamerbaseoverlay
我们发现
\newcommand<>{\emph}[1]{{\only#2{\itshape}#1}}
\mode
<article>
{
\renewcommand<>{\emph}{\only#1{\beameroriginal\emph}}
}
这意味着在演示模式下,执行的操作\emph{abc}
与 相同{\itshape abc}
,因此不会在末尾自动添加斜体校正。非常奇怪的是,\textit
和类似命令的重新定义是
\mode
<all>
{
\renewcommand<>{\textbf}{\only#1{\beameroriginal{\textbf}}}
\renewcommand<>{\textit}{\only#1{\beameroriginal{\textit}}}
\renewcommand<>{\textsl}{\only#1{\beameroriginal{\textsl}}}
\renewcommand<>{\textsf}{\only#1{\beameroriginal{\textsf}}}
\renewcommand<>{\textrm}{\only#1{\beameroriginal{\textrm}}}
}
这种差异必定有原因,但我却想不出一个原因。
您有两个选择:使用\textit
,或者破解beamer
它以使其使用 的适当重新定义\emph
。
以下是一个例子:
\let\origemph\emph
\documentclass{beamer}
\renewcommand<>{\origemph}{\only#1{\beameroriginal{\origemph}}}
\begin{document}
\begin{frame}
``Here is text that ends in \emph{italics!}'' (\texttt{\string\emph})
\medskip
``Here is text that ends in \textit{italics!}'' (\texttt{\string\textit})
\medskip
``Here is text that ends in \origemph{italics!}'' (\texttt{\string\origemph})
\end{frame}
\end{document}
我使用了\origemph
来展示发生了什么:如果我在执行操作\emph
之前保存 的含义,然后使用与 相同的方法重新定义它,它会按预期工作。事实上,请注意插入斜体更正。beamer
\textit
\textit
黑客怎样才能打字\emph
,但不能\origemph
那样做?
\documentclass{beamer}
% redefine \emph to be as in the kernel
\expandafter\def\expandafter\emph\expandafter{%
\expandafter\protect\csname emph \endcsname
}
% now redefine it to be overlay aware
\renewcommand<>{\emph}{\only#1{\beameroriginal{\emph}}}
\begin{document}
\begin{frame}
``Here is text that ends in \emph{italics!}'' (\texttt{\string\emph})
\medskip
``Here is text that ends in \textit{italics!}'' (\texttt{\string\textit})
\end{frame}
\end{document}