投影机斜体字距调整不当

投影机斜体字距调整不当
\documentclass{beamer}

\begin{document}
\begin{frame}
  ``Here is text that ends in \emph{italics!}''
  \bigskip

  ``Here is text that ends in \emph{italics!}\kern1.5pt''
\end{frame}
\end{document}

投影机斜体字距调整不当

这是错误吗?除了手动调整引号周围的间距之外,还有更好的解决方法吗?

答案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}

在此处输入图片描述

相关内容