如何调整 LaTex beamer 主题以将其应用于 rmarkdown::beamer_presentation
How to adapt a LaTex beamer theme to apply it in an rmarkdown::beamer_presentation
我想在 rmarkdown::beamer_presentation
中应用 LaTex beamer theme
。
自定义主题包含beamerthemeTHEMENAME.sty
、beamercolorthemeTHEMENAME.sty
、beamerfontthemeTHEMENAME.sty
、beamerinnerthemeTHEMENAME.sty
、beamerouterthemeTHEMENAME.sty
。
如果模板来自我的 YAML header,编织演示文稿看起来与通过应用自定义主题直接从 LaTex 生成的 beamer 演示文稿不太接近。
因此,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, inner sep=0mm, xshift=8.3mm, yshift=-8.6mm] {
\includegraphics[height=3.8mm]{img/my_logo}
};
\end{tikzpicture}
}
\setbeamertemplate{footline}{}
\begin{frame}[noframenumbering]
\begin{tikzpicture}
\useasboundingbox (0,0) rectangle(\the\paperwidth,\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,0) rectangle(\the\paperwidth,\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
宏,但是我看不出这有多大用处,因为 markdown 会自动在所有合理的地方插入这样的框架(然后在所有不合理的地方再插入几个) , 就因为它好像很喜欢被人烦...)
---
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, inner sep=0mm, xshift=8.3mm, yshift=-8.6mm] {
\includegraphics[height=3.8mm]{example-image}
};
\end{tikzpicture}
}
\setbeamertemplate{footline}{}
\begin{frame}[noframenumbering]
\begin{tikzpicture}
\useasboundingbox (0,0) rectangle(\the\paperwidth,\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}
}
}
对于脚注,使用由您的目录部分创建的超链接目标
% 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 秒的工作变得更加困难]
我想在 rmarkdown::beamer_presentation
中应用 LaTex beamer theme
。
自定义主题包含beamerthemeTHEMENAME.sty
、beamercolorthemeTHEMENAME.sty
、beamerfontthemeTHEMENAME.sty
、beamerinnerthemeTHEMENAME.sty
、beamerouterthemeTHEMENAME.sty
。
如果模板来自我的 YAML header,编织演示文稿看起来与通过应用自定义主题直接从 LaTex 生成的 beamer 演示文稿不太接近。
因此,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, inner sep=0mm, xshift=8.3mm, yshift=-8.6mm] {
\includegraphics[height=3.8mm]{img/my_logo}
};
\end{tikzpicture}
}
\setbeamertemplate{footline}{}
\begin{frame}[noframenumbering]
\begin{tikzpicture}
\useasboundingbox (0,0) rectangle(\the\paperwidth,\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,0) rectangle(\the\paperwidth,\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
宏,但是我看不出这有多大用处,因为 markdown 会自动在所有合理的地方插入这样的框架(然后在所有不合理的地方再插入几个) , 就因为它好像很喜欢被人烦...)
---
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, inner sep=0mm, xshift=8.3mm, yshift=-8.6mm] {
\includegraphics[height=3.8mm]{example-image}
};
\end{tikzpicture}
}
\setbeamertemplate{footline}{}
\begin{frame}[noframenumbering]
\begin{tikzpicture}
\useasboundingbox (0,0) rectangle(\the\paperwidth,\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}
}
}
对于脚注,使用由您的目录部分创建的超链接目标
% 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 秒的工作变得更加困难]