2013-06-24 2 views
4

Когда файл Rnw преобразуется в PDF с RStudio и knitr, блоки кода имеют приятный серый цвет фона (например, они здесь, в SO). Когда я конвертирую файл md в PDF, цвет фона белый, и я не могу его изменить. Нож code decoration optionbackground предназначен только для LaTeX и не действует в md.Установить цвет фона кода в R уценке в PDF

Как установить цвет фона для кодовых блоков в PDF Я получаю из своего md файл? Я вижу в некоторых связанных вопросах, что редактирование файла markdown.css может быть релевантным, но я не уверен, что это применимо здесь, поскольку между файлами md и PDF нет html-файла.

Этот эффект может быть воспроизведен с использованием примеров с надписью: Rnw source: knitr-minimal.Rnw и markdown source: 001-minimal.Rmd.

Для преобразования Rnw в PDF Я просто нажимаю кнопку «Скомпилировать PDF» в RStudio. Вот что мне делать, чтобы преобразовать md в PDF:

# Load packages 
require(knitr) 
require(markdown) 

setwd("C:/Users/.../Desktop/") 

# Process .md and .pdf files 
filen <- "myfile" 
knit(paste0(filen,".md")) 
system(paste0("pandoc -s ", paste0(filen,"-out.md"), " -t latex -o ", paste0(filen,".pdf"))) 

Есть еще один способ, чтобы преобразовать md в PDF так что я могу получить цветной фон кода?

+1

для 'системы() ', то это функция' pandoc() 'предназначена для: http://yihui.name/knitr/demo/pandoc/ –

+0

Спасибо за регистрацию! Можем ли мы предоставить аргументы panodoc для вашей функции pandoc? Вместо того, чтобы иметь конфигурационный файл или встраивать конфигурацию в файл md (или это побеждает цель вашей функции ...) – Ben

+0

Звучит неплохо. Возможно, мне придется подумать об этом. В этом случае, я думаю, 'system()' и 'pandoc()' требуют примерно одинакового усилия ввода, поэтому не стесняйтесь обращаться к 'system()' :) –

ответ

5

Поскольку вы уже настроены с помощью Pandoc, вы сможете достичь этого, используя аргумент --highlight-style от Pandoc. От docs:

--highlight-style = STYLE Указывает стиль окраски, который будет использоваться в выделенном исходном коде. Варианты - пигменты (по умолчанию), kate, монохромный, эспрессо, zenburn, пикша и танго.

Если вы не уточняя язык, каждый кодовый блок содержит в файле уценки, вы можете также установить --indented-code-classes аргумент:

--indented-код-классы = КЛАССЫ Specify классы, используемые для отступов кодовых блоков - например, perl, numberLines или haskell. Несколько классов могут быть разделены пробелами или запятыми.

Из памяти, я думаю, для этого может потребоваться пакет латекса, например fancyvrb, поэтому вам, возможно, придется установить его до его работы.

+0

Да, это сработало, спасибо. Я обнаружил, что -индекс-код-классы не нужны, ни fancyvrb (если я не установил его ранее и не забыл об этом). – Ben

6

Ответ Marius - это именно то, что я был после. Поскольку комментарии не могут принимать изображения, я вставляю несколько скриншотов здесь, если другие интересуются этим.

Чтобы получить код фон в PDF генерируемого из md, я настроил свой код так:

# Load packages 
require(knitr) 
require(markdown) 

setwd("C:/Users/.../Desktop/") 

# Create .md and .pdf files 
filen <- "test" 
knit(paste0(filen,".md")) 
system(paste0("pandoc -s ", paste0(filen,"-out.md"), " -t latex -o ", paste0(filen,".pdf"), " --highlight-style=tango -S")) 

В тестировании освещающих вариант на семь pandoc, я обнаружил, что только три дает код фона. Вот скриншоты PDF-файлов, сгенерированных с каждым из трех вариантов, для дальнейшего использования.

Это танго, тот, который наилучшим образом соответствует тому, что я после того, как с светло-серый:

enter image description here И это zenburn: enter image description here И это эспрессо enter image description here