这种在框架标题后加横线的做法是不是很蠢?

这种在框架标题后加横线的做法是不是很蠢?

我使用默认的 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,水平线和字幕之间会有一条空行(如果存在的话):

不带 \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不是事前做。

相关内容