问题描述
我想在 LaTex beamer theme
中应用 rmarkdown::beamer_presentation
。
自定义主题包含 beamerthemeTHEMENAME.sty
、beamercolorthemeTHEMENAME.sty
、beamerfontthemeTHEMENAME.sty
、beamerinnerthemeTHEMENAME.sty
、beamerouterthemeTHEMENAME.sty
。
如果模板来自我的 YAML 标头,则编织演示文稿看起来与通过应用自定义主题直接从 LaTex 生成的投影仪演示文稿不太相似。
因此,要修改或增强演示文稿的 beamertheme*.sty
的哪些内容需要修改或需要从 beamer theme
中移出,例如template.tex
和 includes
*?
特别是,我正在努力使用 beamerouterthemeTHEMENAME.sty
中定义的以下框架模板:\titleframe
、\tocframe
、 \closingframe
对于 beamerouterthemeTHEMENAME.sty
中定义的脚注,最好有一个从徽标到 table of contents
幻灯片的超链接(就像页码链接到 appendix
)。
下面提供了一个 MWE。非常感谢任何帮助。
MWE.Rmd
---
title: "MWE"
subtitle: "Beamer presnetation with R-markdown"
institute: "some place"
date: "`r format(Sys.time(),'%B %d,%Y')`"
output:
# beamer_presentation: default
bookdown::pdf_book:
base_format: rmarkdown::beamer_presentation
# includes:
# - in_header: preamble.tex
theme: "THEMENAME"
latex_engine: xelatex
toc: false
slide_level: 2
---
```{r setup,include=FALSE}
knitr::opts_chunk$set(echo = FALSE)
```
# Random presentation
## TOC - Table of Contents {.unnumbered}
\tableofcontents
\label{contents}
## Slide with Bullets
- Bullet 1
- Bullet 2
- Bullet 3
## Apendix
\appendix
beamerthemeTHEMENAME.sty
\usepackage[utf8]{inputenc}
% Tizk,textpos,graphics
\RequirePackage{tikz}
\RequirePackage{textpos}
\RequirePackage{xcolor}
\RequirePackage{booktabs}
% Beamer settings
\usecolortheme{THEMENAME}
\uSEOutertheme{THEMENAME}
\setbeamertemplate{navigation symbols}{}
\mode<all>
beamercolorthemeTHEMENAME.sty
\mode<presentation>
\definecolor{THEMECOL}{RGB}{162,48,47} % red
\definecolor{THEMEgray}{RGB}{110,110,101}% gray
\colorlet{titlefgcolor}{THEMECOL} % color of Box
\colorlet{titlebgcolor}{THEMEgray} % color of Box
\setbeamercolor*{title}{fg=THEMECOL} % presentation title
\setbeamercolor*{author}{fg=THEMECOL} % author
\setbeamercolor*{date}{fg=THEMECOL} % date
\mode<all>
beamerouterthemeTHEMENAME.sty
\mode<presentation>
% redefine \insertshortinstitute to allow multiple lines
\makeatletter
\renewcommand{\insertshortinstitute}{\beamer@shortinstitute}
\makeatother
% Title frame
\def\titlefigure{img/my_bg}
\newlength\titleBoxwidth
\setlength{\titleBoxwidth}{0.33\textwidth}
\newcommand{\titleframe}{%
{
\setbeamertemplate{background}{
\begin{tikzpicture}
\useasboundingBox (0,0) rectangle(\the\paperwidth,\the\paperheight);
\ifx\titlefigure\empty
\fill[titlebgcolor] (6.3mm,6.4mm) rectangle (\the\paperwidth-8.3mm,\the\paperheight-13mm);
\else
\node at (current page.center) [anchor=center,yshift=-3.5mm] {\includegraphics[width=\the\paperwidth-19mm]{\titlefigure}};
\fi
\node at (current page.north east) [anchor=base east,xshift=-8.3mm,yshift=-6.3mm,align=left,inner sep=0mm,font=\fontsize{5.5}{6.6}\selectfont] {
\insertshortinstitute
};
\node at (current page.north west) [anchor=south west,xshift=8.3mm,yshift=-8.6mm] {
\includegraphics[height=3.8mm]{img/my_logo}
};
\end{tikzpicture}
}
\setbeamertemplate{footline}{}
\begin{frame}[noframenumbering]
\begin{tikzpicture}
\useasboundingBox (0,\the\paperheight);
\node [
shift={(-11.5mm,-1.8mm)},fill=titlefgcolor,minimum width=0.46\paperwidth,minimum height=18mm,anchor=west,inner sep=4mm
] at (current page.west) {
\hspace*{9mm}
\begin{minipage}{\titleBoxwidth}
\raggedright
\usebeamerfont{title}\usebeamercolor[fg]{title}\inserttitle\\[3mm]
\usebeamerfont{author}\usebeamercolor[fg]{author}\insertauthor\\
\usebeamerfont{date}\usebeamercolor[fg]{date}\insertdate
\end{minipage}
};
\end{tikzpicture}
\end{frame}
}
}
% TOC frame
\newcommand{\tocframe}{%
\begin{frame}
\frametitle{Outline}
\tableofcontents
\end{frame}
}
% Section title frame
\AtBeginSection[]
{
\begin{frame}
\frametitle{Outline}
\large
\tableofcontents[currentsection]
\end{frame}
}
\newenvironment{closingframe}{
\setbeamertemplate{background}{
\begin{tikzpicture}
\useasboundingBox (0,\the\paperheight);
\node at (current page.north west) [anchor=base west,xshift=8mm,yshift=-10mm,align=left] {
\includegraphics[width=23mm]{img/my_logo.png}
};
\end{tikzpicture}
}
\setbeamertemplate{footline}{}
\addtolength{\headsep}{10mm}
\begin{frame}[noframenumbering]
}%
{
\end{frame}
}%
% Footline
\setbeamertemplate{footline}{
\leavevmode%
\hyperlink{contents}{\includegraphics[width=12mm,trim=0mm 0.4mm 0mm 0mm]{img/my_logo.png}}
\hfill
\hyperlinkappendixstart{\insertframenumber/\inserttotalframenumber}
\vspace{3mm}
}
\mode<all>
解决方法
您可以对 Markdown 文档进行以下肮脏的修改:
-
代替yaml标题,使用
\AtBeginDocument{\title{MWE}\titleframe}
来抑制烦人的自动标题降价插入(它甚至不使用\maketitle
,因此无法进行任何合理的修改)并添加您的自定义标题命令 -
\AtEndDocument{\begin{closingframe}lalala\end{closingframe}}
添加结束框 [用你喜欢的任何文字替换 lalala] -
添加
\makeatletter\beamer@ignorenonframefalse\makeatother
以抑制自动使用且不允许任何框架包装器的选项 markdown 令人讨厌 -
你可以使用
``` {=latex} \end{frame} \tocframe \begin{frame} ```
使用您的
\tocframe
宏,但是我认为这没有多大用处,因为降价会自动在所有合理的位置插入这样的帧(然后在所有不合理的位置插入更多,只是因为它似乎喜欢被烦人......)
---
subtitle: "Beamer presnetation with R-markdown"
institute: "some place"
date: "`r format(Sys.time(),'%B %d,%Y')`"
author: "Donald Duck"
output:
# beamer_presentation: default
bookdown::pdf_book:
base_format: rmarkdown::beamer_presentation
# includes:
# in_header: preamble.tex
theme: "THEMENAME"
latex_engine: xelatex
toc: false
slide_level: 2
keep_tex: true
header-includes:
- \AtBeginDocument{\title{MWE}\titleframe}
- \AtEndDocument{\begin{closingframe}lalala\end{closingframe}}
- \makeatletter\beamer@ignorenonframefalse\makeatother
---
# Random presentation
## TOC - Table of Contents {.unnumbered}
\tableofcontents
\label{contents}
``` {=latex}
\end{frame}
\tocframe
\begin{frame}
```
## Slide with Bullets
- Bullet 1
- Bullet 2
- Bullet 3
``` {=latex}
\end{frame}
\appendix
\begin{frame}
```
## Apendix
现在进入主题:
-
如果自恐龙灭绝以来您的 tex 分布已经更新过一次,那么您就不需要
\usepackage[utf8]{inputenc}
。这是当前乳胶发行版中的默认设置。 rmarkdown 也会自动插入这个。 -
你不需要
\RequirePackage{xcolor}
。 beamer 不仅已经自动加载了它,而且它还将包含在这个令人讨厌的长长的不合适包列表中,rmarkdown 会自动添加到文档中。 -
\titleframe
宏还需要进行一些修改,因为主题确实滥用\\
换行,并且不测试标题、作者和日期宏是否实际填充。结合起来,这将失败得惊人... -
你可能还想为背景和标题框的字体使用不同的颜色......我在背景中混合了一点白色以使字体可见
\newcommand{\titleframe}{%
{
\setbeamertemplate{background}{
\begin{tikzpicture}
\useasboundingbox (0,0) rectangle(\the\paperwidth,\the\paperheight);
\ifx\titlefigure\empty
\fill[titlebgcolor] (6.3mm,6.4mm) rectangle (\the\paperwidth-8.3mm,\the\paperheight-13mm);
\else
\node at (current page.center) [anchor=center,yshift=-3.5mm] {\includegraphics[width=\the\paperwidth-19mm]{\titlefigure}};
\fi
\node at (current page.north east) [anchor=base east,xshift=-8.3mm,yshift=-6.3mm,align=left,inner sep=0mm,font=\fontsize{5.5}{6.6}\selectfont] {
\insertshortinstitute
};
\node at (current page.north west) [anchor=south west,xshift=8.3mm,yshift=-8.6mm] {
\includegraphics[height=3.8mm]{example-image}
};
\end{tikzpicture}
}
\setbeamertemplate{footline}{}
\begin{frame}[noframenumbering]
\begin{tikzpicture}
\useasboundingbox (0,\the\paperheight);
\node [
shift={(-11.5mm,-1.8mm)},fill=titlefgcolor!50!white,minimum width=0.46\paperwidth,minimum height=18mm,anchor=west,inner sep=4mm
] at (current page.west) {
\hspace*{9mm}
\begin{minipage}{\titleboxwidth}
\raggedright
\usebeamerfont{title}\usebeamercolor[fg]{title}\inserttitle\par
\usebeamerfont{author}\usebeamercolor[fg]{author}\insertauthor\par
\usebeamerfont{date}\usebeamercolor[fg]{date}\insertdate
\end{minipage}
};
\end{tikzpicture}
\end{frame}
}
}
对于脚注,使用由您的 toc 部分创建的超链接目标
% Footline
\setbeamertemplate{footline}{
\leavevmode%
\hyperlink{toc---table-of-contents}{\includegraphics[width=12mm,trim=0mm 0.4mm 0mm 0mm]{example-image}}
\hfill
\hyperlinkappendixstart{\insertframenumber/\inserttotalframenumber}
\vspace{3mm}
}
[我猜我在这个答案中使用 annoying
的次数表明 rmarkdown 使在普通 Beamer 文档中需要 2 秒的工作变得更加困难]