2017-07-01 30 views
1

我正在修补bookdown并生成html和pdf输出。格式化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 

结果在此特输出:

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

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

回答

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序言中定义自定义环境。

+0

这不会取代*所有*逐字环境吗?我只想替换输出块,而不是其他实例的逐字环境。例如,原始文本可能被包含在'''中,我不想使用相同的环境(尽管可以通过创建一个自定义块来解决这个问题) – ekstroem

+0

你是对的。那么我没有更好的解决方案。我们面临的挑战是,无法为Pandoc Markdown中的特定围栏代码块指定特定的LaTeX环境(否则,您可以修改knitr的输出钩子,并使用不同类型的围栏代码块来从R块中输出文本)。 –