修改 beamer 模板以避免部分标题被徽标隐藏

修改 beamer 模板以避免部分标题被徽标隐藏

我使用 Beamer 主题 AnnArbor 和textpos软件包在普通页面和章节标题页的右上角放置机构徽标。问题是,当我写

\section{Corpus}\frame{\sectionpage}

徽标太宽了,遮住了我部分章节标题,例如这里的章节标题页:

在此处输入图片描述

下面是后续的普通页面:

在此处输入图片描述

我怎样才能在所有幻灯片上将节标题向左推相同的量,以便整个节标题可见?

(我知道通过写作

\section[Contexte\hbox to 0.7cm{}]{Corpus}\frame{\sectionpage}

我得到了想要的效果

在此处输入图片描述

但这不是一个优雅的解决方案,因为我必须不断向\section命令参数添加代码,如果我想使用具有不同宽度徽标的相同幻灯片,我将不得不更正所有\section命令,这不是很优雅。如​​果可能的话,最好在文档的序言中一劳永逸地完成它……)

答案1

您可以重新定义headline模板以获得以下输出:

在此处输入图片描述

主题AnnArbor加载infolines外部主题。查看文件beamerouterthemeinfolines.sty,我们可以找到以下模板headline定义

\defbeamertemplate*{headline}{infolines theme}
{%
  \leavevmode%
  \hbox{%
  \begin{beamercolorbox}[wd=.5\paperwidth,ht=2.65ex,dp=1.5ex,right]{section in head/foot}%
    \usebeamerfont{section in head/foot}\insertsectionhead\hspace*{2ex}
  \end{beamercolorbox}%
  \begin{beamercolorbox}[wd=.5\paperwidth,ht=2.65ex,dp=1.5ex,left]{subsection in head/foot}%
    \usebeamerfont{subsection in head/foot}\hspace*{2ex}\insertsubsectionhead
  \end{beamercolorbox}}%
  \vskip0pt%
}

这样会形成两个宽度相同的框,用于容纳节和小节标题。在下面的 MWE 中,我将宽度参数从 更改为wd=.5\paperwidthwd=.25\paperwidthwd=.75\paperwidth您可以根据需要进一步调整这些参数。此标题模板仍将在标题中打印小节标题。如果您也想避免这种情况,请删除行\usebeamerfont{subsection in head/foot}\hspace*{2ex}\insertsubsectionhead

\documentclass{beamer}
\usetheme{AnnArbor}
\usecolortheme{beaver}

\defbeamertemplate*{headline}{my infolines theme}
{%
  \leavevmode%
  \hbox{%
  \begin{beamercolorbox}[wd=.25\paperwidth,ht=2.65ex,dp=1.5ex,right]{section in head/foot}%
    \usebeamerfont{section in head/foot}\insertsectionhead\hspace*{2ex}
  \end{beamercolorbox}%
  \begin{beamercolorbox}[wd=.75\paperwidth,ht=2.65ex,dp=1.5ex,left]{subsection in head/foot}%
    \usebeamerfont{subsection in head/foot}\hspace*{2ex}\insertsubsectionhead
  \end{beamercolorbox}}%
  \vskip0pt%
}

\begin{document}
\section{section}
\begin{frame}
\frametitle{frame title}
contents
\end{frame}
\end{document}

另一方面,如果您想要保留同样宽度的彩色背景,而只想将部分标题稍微向右移动,请调整第一个\hspace*命令的值。

就像是

\defbeamertemplate*{headline}{my infolines theme}
{%
  \leavevmode%
  \hbox{%
  \begin{beamercolorbox}[wd=.5\paperwidth,ht=2.65ex,dp=1.5ex,right]{section in head/foot}%
    \usebeamerfont{section in head/foot}\insertsectionhead\hspace*{20ex}
  \end{beamercolorbox}%
  \begin{beamercolorbox}[wd=.5\paperwidth,ht=2.65ex,dp=1.5ex,left]{subsection in head/foot}%
    \usebeamerfont{subsection in head/foot}\hspace*{2ex}\insertsubsectionhead
  \end{beamercolorbox}}%
  \vskip0pt%
}

将导致:

在此处输入图片描述


如果您希望在框架标题中获得左对齐而不是右对齐的部分标题,请尝试类似

\defbeamertemplate*{headline}{my infolines theme}
{%
  \leavevmode%
  \hbox{%
  \begin{beamercolorbox}[wd=.5\paperwidth,ht=2.65ex,dp=1.5ex,left]{section in head/foot}%
   \hspace*{2ex}\usebeamerfont{section in head/foot}\insertsectionhead
  \end{beamercolorbox}%
  \begin{beamercolorbox}[wd=.5\paperwidth,ht=2.65ex,dp=1.5ex,left]{subsection in head/foot}%
    \usebeamerfont{subsection in head/foot}\hspace*{2ex}\insertsubsectionhead
  \end{beamercolorbox}}%
  \vskip0pt%
}

要得到:

在此处输入图片描述

相关内容