格式化 bookdown 的 pdf 输出块

Formatting pdf-output chunks of bookdown

我正在修改 bookdown 并正在生成 html 和 pdf 输出。

对于 html 输出,呈现的 R 输入和输出放置在灰色背景的块中。对于 pdf 输出,输入块被突出显示,但输出不是。例如下面的源代码

Blah blah blah

```{r, message=FALSE}
library(mosaic)           # Load mosiac-pakken
tally(~ Smoke, data=fev)  # Optæl Smoke
```

Blah blah blah

此 tex 输出结果:

\begin{Shaded}
\begin{Highlighting}[]
\KeywordTok{library}\NormalTok{(mosaic)           }\CommentTok{# Load mosiac-pakken}
\KeywordTok{tally}\NormalTok{(}\OperatorTok{~}\StringTok{ }\NormalTok{Smoke, }\DataTypeTok{data=}\NormalTok{fev)  }\CommentTok{# Optæl Smoke}
\end{Highlighting}
\end{Shaded}

\begin{verbatim}
Smoke
  0   1 
589  65 
\end{verbatim}

输入包裹在ShadedHighlighting中,可以在tex文件的序言中修改。但是,输出仅包含在标准的 verbatim 环境中,这在文件中重新定义会有问题(因为重新定义会弄乱其他部分)。如何设置我的配置以将输出包装在我可以重新定义的环境中?或者可能只是将输入和输出包装在同一环境中?

我的_output.yml文件是这样的(多多少少是从易慧那里抄来的)

bookdown::pdf_book:
  highlight: zenburn
  includes:
    in_header: latex/preamble.tex
    before_body: latex/before_body.tex
    after_body: latex/after_body.tex
  keep_tex: yes
  dev: "cairo_pdf"
  latex_engine: xelatex
  citation_package: natbib
  template: null
  pandoc_args: --chapters
  toc_depth: 3
  toc_unnumbered: no
  toc_appendix: yes
  quote_footer: ["\VA{", "}{}"]

如何更改代码以添加包装器或仅重新定义输出块的格式?

bookdown 0.4 起,您可以使用全局选项 bookdown.post.latex 来 post 处理 LaTeX 输出。在您的情况下,它将类似于:

options(bookdown.post.latex = function(x) {
  # x is the content of the LaTeX output file
  gsub('^\\(begin|end)\{verbatim\}$', '\\\1{YOUR_ENVIRONMENT}', x)
})

然后在 LaTeX 序言中定义自定义环境。