繁体   English   中英

如何调整 LaTex 投影仪主题以将其应用于 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.stybeamercolorthemeTHEMENAME.stybeamerfontthemeTHEMENAME.stybeamerinnerthemeTHEMENAME.stybeamerouterthemeTHEMENAME.sty 如果模板来自我的 YAML header,则针织演示文稿看起来与直接从 LaTex 通过应用自定义主题生成的投影仪演示文稿不太接近。

因此,要修改或增强演示文稿的beamertheme*.sty的哪些内容需要修改或需要从beamer theme中移动,例如移至template.texincludes *?

特别是,我正在努力使用在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}来抑制烦人的自动标题 markdown 插入(甚至不使用\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} 这是当前 latex 发行版中的默认值。 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 秒的工作变得更加困难]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM