Beamertheme-focus 在每一帧中插入一个包含标题/副标题的图形(徽标)

Beamertheme-focus 在每一帧中插入一个包含标题/副标题的图形(徽标)

我正在使用 Beamer 主题重点。我想在每张包含框架标题的幻灯片(即框架)的右上角插入一个徽标(即不是普通幻灯片)。我尝试了很多方法,但手动调整坐标将图像放置在所需位置的灵活性让我很失望。(我想要的只是将图像放在右上角)。

现在,我们可以假设我想插入一张来自 www 的普通猫图片。如果能解决这个问题,我将不胜感激。

以下是一个适合初学者的 MWE

\documentclass{beamer}
\usetheme{focus}

\title{Focus: \\ A Minimalist Beamer Theme}
\subtitle{Subtitle}
\author{Author 1\texorpdfstring{\\}{,} Author 2}
\titlegraphic{\includegraphics[scale=1.25]{focuslogo.pdf}}
\institute{Institute Name \\ Institute Address}
\date{dd mm yyyy}

\begin{document}
    \begin{frame}
        \maketitle
    \end{frame}

    % Use starred version (e.g. \section*{Section name})
    % to disable (sub)section page.
    \section{Section 1}
    \subsection{Subsection 1.1}
    \begin{frame}{Simple frame}
        This is a simple frame.
    \end{frame}

    \begin{frame}[plain]{Plain frame}
        This is a frame with plain style and it is numbered.
    \end{frame}

    \subsection{Subsection 1.2}
    \begin{frame}[t]
        This frame has an empty title and is aligned to top.
    \end{frame}

    \begin{frame}[noframenumbering]{No frame numbering}
        This frame is not numbered and is citing reference \cite{knuth74}.
    \end{frame}

    \begin{frame}{Typesetting and Math}
        The packages \texttt{inputenc} and \texttt{FiraSans}\footnote{\url{https://fonts.google.com/specimen/Fira+Sans}}\textsuperscript{,}\footnote{\url{http://mozilla.github.io/Fira/}} are used to properly set the main fonts.
        \vfill
        This theme provides styling commands to typeset \emph{emphasized}, \alert{alerted}, \textbf{bold}, \textcolor{example}{example text}, \dots
        \vfill
        \texttt{FiraSans} also provides support for mathematical symbols:
        \begin{equation*}
            e^{i\pi} + 1 = 0.
        \end{equation*}
    \end{frame}
\end{document}

答案1

因此,任务是在每个frametitle实际排版的框架上都放置一个徽标。让我们看看主题的作用以及它在哪里定义它。

通常框架标题在外部主题中定义,因此让我们看一下beamerouterthemefocus.sty,它为定义了两个命名模板frametitle

  1. \defbeamertemplate*{frametitle}{focus}{%
  2. \defbeamertemplate*{frametitle}{plain}{%

稍后在同一个文件中,我们可以看到focus用于除第一帧或plain设置位置之外的每一帧:

\BeforeBeginEnvironment{frame}{%
    \stepcounter{realframenumber}
    \setbeamertemplate{background canvas}[focus]%
    \setbeamertemplate{frametitle}[focus]%

\define@key{beamerframe}{plain}[true]{%
    \setbeamertemplate{background canvas}[focusplain]%
    \setbeamertemplate{frametitle}[plain]%

因此,仅设置frametitlethrough\setbeamertemplate或 using\addtobeamertemplate不会有任何作用,因为在下一帧中,frametitle将被重新定义为focus。但\defbeamertemplate*{frametitle}{focus}也不会起作用。那么我们如何克服这个问题呢?

嗯,有一个技巧可以解释如何重新定义 beamer 模板其基本内容是让beamer思考,focus但尚未定义frametitle

剩下的就简单了,我们可以利用 beamer 的功能来引用当前页面,唯一的缺点就是你必须编译多次。我们添加的行的最终结果是:

\expandafter\let\csname beamer@@tmpop@frametitle@focus\endcsname\relax
\defbeamertemplate*{frametitle}{focus}{%
    % If not title page.
    \ifnum\value{realframenumber}>0%
    \vspace{-1pt}%
    \begin{beamercolorbox}[wd=\paperwidth,leftskip=0.55cm,rightskip=0.55cm,sep=0.2cm]{frametitle}%
        \strut\insertframetitle\strut%
    \end{beamercolorbox}%
    \fi%
    \begin{tikzpicture}[remember picture,overlay]
        \node[anchor=north east] at (current page.north east){\includegraphics[width=1.6cm]{example-image-16x9}};
    \end{tikzpicture}
}

只要在之前添加这个\begin{document}你就会得到:

在此处输入图片描述

相关内容