格式化书签的pdf输出块

时间:2017-07-01 20:50:37

标签: r 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文件看起来像这样(或多或少是从Yihui复制的)

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{", "}{}"]

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

1 个答案:

答案 0 :(得分:0)

bookdown 0.4开始,您可以使用全局选项bookdown.post.latex对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前言中定义自定义环境。