在RMarkdown中为图像添加间距

6

我希望在RMarkdown中为图表添加间距。我将其转换为PDF格式,但是不喜欢图表(或公式)与文本或下一个图表之间紧密排列的情况。

---
output: pdf_document
---

```{r pressure, echo=FALSE}
plot(pressure)
```

```{r pressure2, echo=FALSE}
plot(pressure)
```

两个图形之间的空间太小,使用ggplots时这更加模糊。

目前,我使用Latex解决方案。

\vspace{10pt}

但如果我可以在整个文档中全局设置,那就太好了。

1个回答

8

关于图形前后的间距,您可以使用一个简单的knitr钩子:

```{r, echo = F}
library(knitr)
if(is_latex_output()) {
  plot_default <- knit_hooks$get("plot")
  knit_hooks$set(plot = function(x, options) { 
    x <- c(plot_default(x, options), "\\vspace{25pt}")
  })
}
```

在这里,我们将剧情钩子更改为每个剧情输出后添加 25pt 的间距。

关于方程式,您可以在文档开头添加这四个长度定义:

\setlength{\abovedisplayskip}{25pt}
\setlength{\belowdisplayskip}{25pt}
\setlength{\abovedisplayshortskip}{25pt}
\setlength{\belowdisplayshortskip}{25pt}

第一和第二个交替方程式是使用align环境创建的。后两个是使用$$ ... $$创建的。

1
最好将其置于 knitr::is_latex_output() 的条件下(即当输出格式不是 LaTeX 时不要修改 plot 钩子)。 - Yihui Xie
@YihuiXie:你的观点非常有道理,但我不知道该怎么做。包含条件会给我带来“'is_latex_output'不是从'namespace:knitr'导出的对象”的错误提示。 - Georgery
没错![当有疑问时,就升级吧。] (https://yihui.name/en/2017/05/when-in-doubt-upgrade/) - Yihui Xie
1
我偶然发现了这个问题,knitr钩子在rmd文档中的下一个代码块中完美地工作,但是随后的代码块生成的图形再次过于接近?我尝试将代码复制到后面的块中,但是它会出现以下错误:“错误:C堆栈使用量7972320太接近限制,执行已停止”。 - Chuck P
1
@ChuckP 我可以确认你的观察结果。我也不知道发生了什么,但我通过在每个块中命名plot_default变量不同来解决了这个问题,例如plot_default2plot_default3等等... 我知道这不是很好看,但我没有时间再花几个小时去研究到底发生了什么... - josch
1
@ChuckP,我们问题的解决方案是将上述代码包装在local({ ... })中,如此处所述:https://bookdown.org/yihui/rmarkdown-cookbook/output-hooks.html - josch

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接