我想创建一个投影仪模板,每个框架标题下方都有一条水平线。
该行应该从标题首字母的正下方开始,一直延伸到框架的最后。
期望结果:
该解决方案应足够灵活,以处理不同的字体大小和跨越两行的长标题。但是,规则的垂直位置不应适应框架标题中使用的字符的高度(例如,字符是否延伸到基线以下)。澄清一下:
为了创建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
向上移动了 ¼。这会使线越过下降线(这实际上是我需要的)。