2017-07-01 31 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塊中輸出文本)。 –