Beamer 中的代码块字体大小与 knitr 和乳胶

Code chunk font size in Beamer with knitr and latex

我正在尝试获取一些 R 代码以适合我的 beamer 幻灯片。似乎无法通过代码块的 size 参数更改字体大小,就像您可能对其他 knitr 类型文档所做的那样。唯一的方法似乎是在每个代码块之前使用 \footnotesize 。这令人沮丧,因为我有很多代码块,在很多情况下我必须在我的 LaTeX 项目符号之后使用 \normalsize

---
title: "Untitled"
output:
 beamer_presentation:
  includes:
   in_header: header.txt
---

```{r setup, include=FALSE}
knitr::opts_chunk$set(echo = TRUE, size = "footnotesize")
```

## R Markdown

```{r}
summary(cars)
```

\footnotesize
```{r}
summary(cars)
```

在我的 header.txt(下)中,我尝试了一些来自 http://yihui.name/knitr/demo/beamer/ 的代码,但没有成功。

\ifdefined\knitrout
\renewenvironment{knitrout}{\begin{footnotesize}}{\end{footnotesize}}
\else
\fi

\makeatletter
\let\oldalltt\alltt
\def\alltt{\@ifnextchar[\alltt@i \alltt@ii}
\def\alltt@i[#1]{\oldalltt[#1]\footnotesize}
\def\alltt@ii{\oldalltt\footnotesize}
\makeatother

...但是 \def 确实超出了我的理解范围。

借鉴 this tex.SE answer,我们可以重新定义 R 代码周围的 Shaded 环境,使其成为脚注(以及输出的 verbatim 环境)。将此添加到您的 header.txt:

%% change fontsize of R code
\let\oldShaded\Shaded
\let\endoldShaded\endShaded
\renewenvironment{Shaded}{\footnotesize\oldShaded}{\endoldShaded}

%% change fontsize of output
\let\oldverbatim\verbatim
\let\endoldverbatim\endverbatim
\renewenvironment{verbatim}{\footnotesize\oldverbatim}{\endoldverbatim}

按照@Martin Schmelzer 的output,您可以更改代码字体大小和文本字体大小独立整个文档 通过将此添加到您的 rmarkdown 文件中:

def.chunk.hook  <- knitr::knit_hooks$get("chunk")
knitr::knit_hooks$set(chunk = function(x, options) {
  x <- def.chunk.hook(x, options)
  paste0("\n \", "footnotesize","\n\n", x, "\n\n \normalsize")
})

在这段代码中,您只需将 "footnotesize""normalsize" 参数更改为您想要的任何字体大小;第一个是代码和输出字体大小,第二个是文本字体大小。

例如,代码为“tiny”,文本为“normalsize”:

---
output: beamer_presentation
---

```{r setup, include=FALSE}
def.chunk.hook  <- knitr::knit_hooks$get("chunk")
knitr::knit_hooks$set(chunk = function(x, options) {
  x <- def.chunk.hook(x, options)
  paste0("\n \", "tiny","\n\n", x, "\n\n \normalsize")
})
```

# Section 1
```{r}
summary(cars)
```
Text.

# Section 2
```{r}
summary(cars)
```
This works for every chunks.

给出这个: