beamer 全宽 hrule 位于框架标题下方

beamer 全宽 hrule 位于框架标题下方

我想创建一个投影仪模板,每个框架标题下方都有一条水平线。

该行应该从标题首字母的正下方开始,一直延伸到框架的最后。

期望结果:

框架标题下方有横跨框架右端的条带

该解决方案应足够灵活,以处理不同的字体大小和跨越两行的长标题。但是,规则的垂直位置不应适应框架标题中使用的字符的高度(例如,字符是否延伸到基线以下)。澄清一下:

根据框架标题中的字符垂直对齐 hrule

为了创建rule跨越整个框架宽度\makebox[\linewidth][l]{\rule{\paperwidth}{0.4pt}}建议经过其他的。使用 的一个不良副作用\makebox是它的行为与 不同\hrule,例如,它具有不同的高度。

\vphantom{g}我通过在框架标题中使用解决了规则定位波动的问题,但另一种解决方案可能更优雅。

\documentclass[t,9pt]{beamer}

\setbeamertemplate{frametitle}{%
    \usebeamerfont{frametitle}\insertframetitle%
    \vphantom{g}% To avoid fluctuations per frame
    %\hrule% Uncomment to see desired effect, without a full-width hrule
    \makebox[\linewidth][l]{\rule{\paperwidth}{0.4pt}}% 
}

\begin{document}
\begin{frame}{Frame Title}
Frame contents.
\end{frame}
\end{document}

如何才能得到所需的结果,即框架标题下方的一行一直延伸到框架的右端?

答案1

我了解您正在寻找:

在此处输入图片描述

\documentclass[t,9pt]{beamer}

\setbeamertemplate{frametitle}{%
    \usebeamerfont{frametitle}\insertframetitle%
    \vphantom{g}% To avoid fluctuations per frame
    %\hrule% Uncomment to see desired effect, without a full-width hrule
    \par% <-- added
    \hspace*{-\dimexpr0.5\paperwidth-0.5\textwidth}% <-- calculation of left margin width
    \rule[0.5\baselineskip]{\paperwidth}{0.4pt}%
}

\begin{document}
\begin{frame}{Frame Title }
Frame contents.
\end{frame}
\end{document}

编辑如果您希望水平线后的垂直空间较少,请尝试以下操作:

\setbeamertemplate{frametitle}{%
    \usebeamerfont{frametitle}\insertframetitle%
    \vphantom{g}% To avoid fluctuations per frame
    %\hrule% Uncomment to see desired effect, without a full-width hrule
    \par\hspace*{-\dimexpr0.5\paperwidth-0.5\textwidth}\rule[0.5\baselineskip]{\paperwidth}{0.4pt}
    \par\vspace*{-\baselineskip}% <-- reduce vertical space after rule
}

这使

在此处输入图片描述

答案2

使用另一个答案使用\leaders,我解决了我的问题。此外,更简洁的解决方案是使用\strut而不是\vphantom{g}

\setbeamertemplate{frametitle}{%
    \usebeamerfont{frametitle}\insertframetitle\strut%
    \vskip-.25\baselineskip%
    \leaders\vrule width \paperwidth\vskip0.4pt%
    \vskip0pt%
    \nointerlineskip
}

请注意,我已将线baselineskip向上移动了 ¼。这会使线越过下降线(这实际上是我需要的)。

相关内容