R Markdown:排版到PDF

时间:2016-05-04 14:08:05

标签: r pdf plot markdown knitr

当将R Markdown文档排版为PDF时,如果某个函数绘制了多个绘图,那么这些绘图通常会并排显示,只有第一个绘​​图完全位于页面的边距内。

Minimal R Markdown示例:

---
title: "Example re plotting problem"
author: "Daniel E. Weeks"
date: "May 3, 2016"
output: pdf_document
---

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

## Multiple plots within a loop


```{r}
plots <- function() {
  plot(rnorm(100))
  hist(rnorm(100))
}

for (i in 1:3) {
 plots()
}
```

以下是生成的PDF的第2页的屏幕截图

显示问题。我在网上搜索过,但还没有找到解决这个问题的方法。

谢谢。

user2554330提出的绘图钩子解决方案很简单,效果很好。因此,此代码绘制了生成的PDF边距内的所有图:

---
title: "Example re plotting problem"
author: "Daniel E. Weeks"
date: "May 3, 2016"
output: pdf_document
---

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

## Multiple plots within a loop


```{r}
plots <- function() {
  plot(rnorm(100))
  hist(rnorm(100))
}
```

## Call plotting function

```{r}
my_plot_hook <- function(x, options)
 paste("\n", knitr::hook_plot_tex(x, options), "\n")
 knitr::knit_hooks$set(plot = my_plot_hook)
for (i in 1:3) {
plots()
}
```

1 个答案:

答案 0 :(得分:2)

问题是生成的.tex文件在\ includegraphics {}调用之间没有空格。 LaTeX会发出关于过多hbox的警告,因为图形不够大,不能单独坐在一条线上,而且当它在每条线上放两个时太大了。

你可以通过添加

告诉LaTeX(TeX真的)输出坏线而不在每一行上放两个数字
\pretolerance=10000

在代码块之前的文本中。您可能希望将其设置回默认值

\pretolerance=100

在代码块之后,或者LaTeX之后不会尝试连字,文本看起来真的很难看。

解决这个问题的另一种方法是强制每个数字都在自己的段落中。您可以通过添加此代码

来完成此操作
my_plot_hook <- function(x, options)
  paste("\n", knitr::hook_plot_tex(x, options), "\n")
knitr::knit_hooks$set(plot = my_plot_hook)
在进行绘图之前,

进入代码块。这是一个空白行 在每个人物之前和之后。