我使用默认的 beamer 主题,其中\defbeamertemplate*{frametitle}
有:
\strut\insertframetitle\strut\par%
所以我忽略了以下代码中的\par
使用命令:\ignorepar
\documentclass{beamer}
\newcommand{\ignorepar}[3]{#2#1}
\addtobeamertemplate{frametitle}{%
\let\oldinsft\insertframetitle%
\renewcommand{\insertframetitle}{\oldinsft\ignorepar\hrule}%
}{}
\begin{document}
\begin{frame}{Frametitle}{Framesubtitle}
\end{frame}
\end{document}
结果是:
如果没有\ignorepar
,水平线和字幕之间会有一条空行(如果存在的话):
答案1
据我所知,访问的目的#3
是\ignorepar
为了产生
\strut\insertframetitle\strut\hrule
代替
\strut\insertframetitle\strut\par\hrule
然而第二种形式是更可取的。\hrule
是一种垂直模式构造,因此如果在之后使用,\strut
它本质上是一种错误条件,TeX 将通过自动插入\par
然后重新读取\hrule
标记来默默地恢复。
使用 texlive 2019 时,字幕参数根本不被处理,但使用 texlive 2016 时,你可以看到效果不是由于忽略,\par
如果你重新插入\par
(即#3
)并将命令定义为,你会得到相同的输出
\newcommand{\ignorepar}[3]{#2#3#1}
重点是\hrule
事后做,而\strut\par
不是事前做。