\ul 将框架标题折叠为黑条

\ul 将框架标题折叠为黑条

我试图以与标题页相同的方式为 Beamer 中的所有框架标题加下划线:

[1]:https://i.stack.imgur.com/bTFoj.png

然而,我得到的并不是预期的结果,而是框架标题所在的位置出现了一个黑条/方块。

可编译版本为:

\documentclass{beamer}
\usepackage[utf8]{inputenc}

\setbeamercolor{title}{fg=black}
\setbeamercolor{frametitle}{fg=black}

\usepackage{color,soul}
\makeatletter
\let\UL\ul
\renewcommand\ul{%
  \let\set@color\beamerorig@set@color
  \let\reset@color\beamerorig@reset@color
  \UL}
\makeatother
\setulcolor{orange}

\defbeamertemplate*{title page}{test}
{
  \begin{beamercolorbox}[center]{title}
    \usebeamerfont{title}\ul{\MakeUppercase{\inserttitle}}
    \end{beamercolorbox}
}

\defbeamertemplate*{frametitle}{test}
{
  \vspace{16pt}
  \begin{beamercolorbox}{frametitle}
    \usebeamerfont{frametitle}\ul{\MakeUppercase{\insertframetitle}}
  \end{beamercolorbox}
}

\title{Testtest}

\begin{document}

\begin{frame}
  \maketitle  
\end{frame}

\begin{frame}{Frame Title}
  Introduction
\end{frame}

\end{document}

谁能帮我?

答案1

MWE 中的代码抛出一个错误:

! Package soul Error: Reconstruction failed.

See the soul package documentation for explanation.
Type  H <return>  for immediate help.
 ...                                              
                                                  
l.42 \end{frame}

可能您正在编译,nonstopmode其中 LaTeX 在出现错误后尝试继续 - 但这通常不是一个好主意,因为输出可能像您所经历的那样错误。手册soul提到了此错误(第 5 页):

如果您违反此规则,则会在 DVI 文件中收到重建失败错误和类似 ⬛ 的黑色方块。

\insertframetitle提到的规则是“对可连字符材料进行分组”。 (from )的定义beamerbaselocalstructure.sty确实非常复杂:

\gdef\insertframetitle{{#2\ifnum\beamer@autobreakcount>0\relax{}\space\usebeamertemplate*{frametitle continuation}\fi}}%

其中#2是提供给 的参数\begin{frame}

因此,问题在于它soul无法以\insertframetitle知道要强调什么的方式进行处理。

幸运的是,beamer在处理时还定义了一个更简单的内部宏\begin{frame}

\gdef\beamer@frametitle{#2}%

这个宏可以soul毫无问题地使用。因为这个宏是内部的,并且有一个@你需要的符号\makeatletter\makeatother围绕着 beamer 模板的定义。

梅威瑟:

\documentclass{beamer}
\usepackage[utf8]{inputenc}

\setbeamercolor{title}{fg=black}
\setbeamercolor{frametitle}{fg=black}

\usepackage{color,soul}
\makeatletter
\let\UL\ul
\renewcommand\ul{%
  \let\set@color\beamerorig@set@color
  \let\reset@color\beamerorig@reset@color
  \UL}
\makeatother
\setulcolor{orange}

\defbeamertemplate*{title page}{test}
{
  \begin{beamercolorbox}[center]{title}
    \usebeamerfont{title}\ul{\MakeUppercase{\inserttitle}}
    \end{beamercolorbox}
}

\makeatletter
\defbeamertemplate*{frametitle}{test}
{
  \vspace{16pt}
  \begin{beamercolorbox}{frametitle}
    \usebeamerfont{frametitle}\ul{\MakeUppercase{\beamer@frametitle}}
  \end{beamercolorbox}
}
\makeatother

\title{Testtest}

\begin{document}

\begin{frame}
  \maketitle  
\end{frame}
\begin{frame}{My Frame Title}
  Introduction
\end{frame}

\end{document}

结果:

在此处输入图片描述

相关内容