我正在使用 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
:
\defbeamertemplate*{frametitle}{focus}{%
\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]%
因此,仅设置frametitle
through\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}
你就会得到: