r - 如何调整 LaTex beamer 主题以将其应用于 rmarkdown::beamer_presentation
问题描述
我想申请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, 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>
解决方案
您可以对降价文档进行以下肮脏的黑客攻击:
而不是 yaml 标题,用于
\AtBeginDocument{\title{MWE}\titleframe}
抑制烦人的自动标题降价插入(甚至不使用\maketitle
,因此无法进行任何合理的修改)并添加您的自定义标题命令\AtEndDocument{\begin{closingframe}lalala\end{closingframe}}
添加你的结束框架[用你喜欢的任何文字替换 lalala]添加
\makeatletter\beamer@ignorenonframefalse\makeatother
以抑制选项降价令人讨厌地自动使用并且不允许任何框架包装器您可以使用
``` {=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, 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 使在普通投影仪文档中需要 2 秒的工作变得更加困难]
推荐阅读
- c - 共享锁字中的离散锁与锁位
- matlab - matlab错误particleswarm目标函数必须返回标量值
- c# - 对象C#的转义字符串构建
- jquery - 我正在构建的 Wordpress 页面正在使我的 iPhone 崩溃
- python - 具有定义边缘的 Python 3 OpenCV 颜色对象检测
- python - 如何在 Python 中将日期时间文本转换为日期时间对象?
- git - 用于将特定文本(模式)移动到不同列的 Shell 命令
- c# - 如何将 linq 与聚合、连接和分组方式结合使用
- php - 使用 z-index 响应的 2 个导航栏未按预期工作
- c++ - C++ - thread_local 向量导致 join() 崩溃