在数字/代码块上方和下方添加垂直空间

时间:2017-04-12 20:37:43

标签: latex r-markdown

我正在从Rnw编织到PDF。我想在数字/代码块的上方和下方添加垂直空间,以将此内容与正文分开。通过在我的序言see this answer中添加以下内容,我已成功完成\renewenvironment{knitrout}{\vspace{1em}}{\vspace{1em}} 个文件:

header-includes

我尝试将此行添加到我的Rmd文件的yaml部分中的knitrout,但它不起作用。我打开了保留临时tex文件的选项,我发现tex中没有\begin{Shaded}环境。

相反,(i)代码块包含在\begin{figure},(ii)\begin{longtable}中的数字和(iii)header-includes中的表格中。

我尝试通过将以下内容添加到\renewenvironment{Shaded}{\vspace{1em}}{\vspace{1em}} 来解决代码块(i)的问题:

R version 3.3.2 (2016-10-31)
Platform: x86_64-apple-darwin13.4.0 (64-bit)
Running under: macOS Sierra 10.12.4

这增加了空间,但删除了阴影背景。我不知道如何解决这个问题或解决数字(ii)和表格(iii)。

{{1}}

1 个答案:

答案 0 :(得分:0)

我认为你需要修改钩子:https://yihui.name/knitr/hooks/
我举几个例子。一旦了解了它的工作原理,就可以添加自己的修改。

在源代码

之前添加vspace

要修改的钩子:

```{r setup_source, include=FALSE}
hook_source_def = knitr::knit_hooks$get('source')
knitr::knit_hooks$set(source = function(x, options) {
  if (!is.null(options$vspaceecho)) {
    begin <- paste0("\\vspace{", options$vspaceecho, "}")
    stringr::str_c(begin, hook_source_def(x, options))
  } else {
    hook_source_def(x, options)
  }
})
```

如何调用此修改:

```{r vspace, vspaceecho='2cm', echo=TRUE}
summary(cars)
```

在R输出

之后添加vspace

要修改的钩子

```{r setup_output, include=FALSE}
hook_output_def = knitr::knit_hooks$get('output')
knitr::knit_hooks$set(output = function(x, options) {
  if (!is.null(options$vspaceout)) {
    end <- paste0("\\vspace{", options$vspaceout, "}")
    stringr::str_c(hook_output_def(x, options), end)
  } else {
    hook_output_def(x, options)
  }
})
```

如何调用此修改:

```{r vspaceafter, vspaceout='1cm'}
summary(cars)
```

在数字

之前和之后添加vspace

您可以创建一个新环境来嵌入图形。这需要添加一个技巧来使pandoc忽略\begin\end,否则pandoc不会将环境中的代码视为markdown语法。

创建要在YAML中调用的外部tex文件

中的内容
\newenvironment{plotspace}[1]{#1}
% -- command for pandoc trick with \begin and \end -- %
\newcommand{\nopandoc}[1]{#1} 

在YAML中调用tex文件

output: 
  pdf_document:
    keep_tex: yes
    include:
      in_header: header.tex

要包含在代码中的钩子函数

hook_plot_def = knitr::knit_hooks$get('plot')
knitr::knit_hooks$set(plot = function(x, options) {
  if (!is.null(options$vspaceplot)) {
    begin <- paste0("\\nopandoc{\\begin{plotspace}}\n\\vspace{", options$vspaceplot, "}\n")
    end <- paste0("\n\\vspace{", options$vspaceplot, "}\n\\nopandoc{\\end{plotspace}}")
    stringr::str_c(begin, hook_plot_def(x, options), end)
  } else {
    hook_plot_def(x, options)
  }
})

如何称呼它

```{r plotvspace, vspaceplot='2em', fig.cap='Figure with vspace'}
plot(cars)
```

在续订环境中检索着色

当您尝试续订Shaded环境时,可以在附加的header.tex文件中执行以下操作。

\renewenvironment{Shaded}
{
  \vspace{2cm}%
  \begin{snugshade}%
}{%
  \end{snugshade}%
  \vspace{5cm}%
}