Как конвертировать R Markdown в PDF?

Ранее я спрашивал о командах для преобразования R Markdown в HTML.

Каков хороший способ конвертировать файлы R Markdown в документы PDF?

Хорошее решение позволит сохранить как можно больше контента (например, изображения, уравнения, HTML-таблицы и т. Д.). Решение должно быть в состоянии запускаться из командной строки. Хорошее решение также было бы кроссплатформенным и в идеале минимизировать зависимости, чтобы было проще делиться make-файлами и так далее.

В частности, есть много вариантов:

  • Следует ли конвертировать RMD в MD в HTML в PDF; или RMD в MD в PDF; или RMD в PDF
  • При использовании markdown пакет в R, какие параметры указать
  • Ли использовать pandoc, пакет, встроенный в R, или что-то еще

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

8 ответов

Обновленный ответ (10 февраля 2013 г.)

rmarkdown package: теперь есть rmarkdown пакет доступен на github, который взаимодействует с Pandoc. Включает в себя render функция. Документация довольно ясно показывает, как конвертировать rmarkdown в pdf среди ряда других форматов. Это включает в себя включение выходных форматов в файл rmarkdown или запуск предоставления выходного формата для функции рендеринга. Например,

render("input.Rmd", "pdf_document")

Командная строка: когда я бегу render из командной строки (например, с использованием make-файла) у меня иногда возникают проблемы с отсутствием pandoc. Предположительно, это не на пути поиска. Следующий ответ объясняет, как добавить pandoc в среду R.

Так, например, на моем компьютере под управлением OSX, где у меня есть копия pandoc через RStudio, я могу использовать следующее:

Rscript -e "Sys.setenv(RSTUDIO_PANDOC='/Applications/RStudio.app/Contents/MacOS/pandoc');library(rmarkdown);  library(utils); render('input.Rmd', 'pdf_document')"

Старый ответ (около 2012 года)

Таким образом, многие люди считают, что Pandoc - это путь. См. Примечания ниже о важности наличия актуальной версии Pandoc.

Использование Pandoc

Я использовал следующую команду для преобразования R Markdown в HTML (то есть вариант этого make-файла), где RMDFILE имя файла R Markdown без .rmd компонент (он также предполагает, что расширение .rmd и не .Rmd).

RMDFILE=example-r-markdown  
Rscript -e "require(knitr); require(markdown); knit('$RMDFILE.rmd', '$RMDFILE.md'); markdownToHTML('$RMDFILE.md', '$RMDFILE.html', options=c('use_xhml'))"

а затем эту команду для преобразования в PDF

Pandoc -s example-r-markdown.html -o example-r-markdown.pdf


Несколько замечаний по этому поводу:

  • Я удалил ссылку в файле примера, которая экспортирует графики в изображения хоста.
  • Я удалил ссылку на изображение, которое было размещено на imgur. Цифры, похоже, должны быть локальными.
  • Варианты в markdownToHTML функция означала, что ссылки на изображения относятся к файлам, а не к данным, хранящимся в файле HTML (т.е. я удалил 'base64_images' из списка опций).
  • Полученный результат выглядел следующим образом. Он явно сделал документ в стиле LaTeX в отличие от того, что я получаю, если я печатаю HTML-файл в pdf из браузера.

Получение актуальной версии Pandoc

Как упомянул @daroczig, важно иметь актуальную версию Pandoc для вывода PDF-файлов. На Ubuntu 15 июня 2012 года я застрял с Pandoc версии 1.8.1 в менеджере пакетов, но из журнала изменений видно, что для поддержки pdf вам нужна Pandoc версии не ниже 1.9+.

Таким образом, я установил caball-install, А потом побежал:

cabal update
cabal install pandoc

Пандок был установлен в ~/.cabal/bin/pandoc Таким образом, когда я побежал pandoc он все еще видел старую версию. Смотрите здесь для добавления к пути.

Я думаю, что вам действительно нужен pandoc, великолепное программное обеспечение которого было разработано и создано специально для этой задачи:) Помимо pdf, вы можете конвертировать ваш файл md, например, в docx или odt.

Что ж, установка современной версии Pandoc может оказаться сложной задачей в Linux (так как вам понадобится вся haskell-platform Build для сборки из исходников), но действительно легко на Windows/Mac с загрузкой всего несколько мегабайт.

Если у вас есть заваренный / вязаный файл уценки, вы можете просто позвонить pandoc например, Bash или с system функция в R. Демоверсия POC этого последнего реализована в Ṗandoc.convert функция моего маленького пакета (который вам ужасно надоедает, так как я стараюсь обратить ваше внимание на каждую возможность).

Прямо сейчас (август 2014 г.) Вы можете использовать RStudio для преобразования R Markdown в PDF. По сути, RStudio использует pandoc для преобразования Rmd в PDF.

Вы можете изменить метаданные на:

  1. Добавить оглавление
  2. Изменить параметры фигуры
  3. Изменить стиль подсветки синтаксиса
  4. Добавить опции LaTeX
  5. И многое другое...

Для получения дополнительной информации - http://rmarkdown.rstudio.com/pdf_document_format.htmlвведите описание изображения здесь

Для варианта, который больше похож на то, что вы получаете при печати из браузера, wkhtmltopdf предоставляет один вариант.

На Ubuntu

sudo apt-get install wkhtmltopdf

И затем та же команда, что и для примера pandoc, чтобы перейти к HTML:

RMDFILE=example-r-markdown  
Rscript -e "require(knitr); require(markdown); knit('$RMDFILE.rmd', '$RMDFILE.md'); markdownToHTML('$RMDFILE.md', '$RMDFILE.html', options=c('use_xhml'))"

а потом

wkhtmltopdf example-r-markdown.html example-r-markdown.pdf

Полученный файл выглядел следующим образом. Похоже, он не справился с MathJax ( этот вопрос обсуждается здесь), а разрывы страниц ужасны. Однако в некоторых случаях такой стиль может быть предпочтительнее, чем более стиль LaTeX.

Всего два шага:

  1. Установите последнюю версию "Пандок" отсюда:

    https://github.com/jgm/pandoc/releases

  2. Вызвать функцию pandoc в library(knitr)

    library(knitr)
    pandoc('input.md', format = 'latex')
    

Таким образом, вы можете конвертировать ваш "input.md" в "input.pdf".

Я нашел использование R studio самым простым способом, но если вы хотите управлять из командной строки, то простой R-скрипт может добиться цели с помощью команды rmarkdown render (как упоминалось выше). Полная информация о скрипте здесь

#!/usr/bin/env R

# Render R markdown to PDF.
# Invoke with:
# > R -q -f make.R --args my_report.Rmd

# load packages
require(rmarkdown)

# require a parameter naming file to render
if (length(args) == 0) {
    stop("Error: missing file operand", call. = TRUE)
} else {
    # read report to render from command line
    for (rmd in commandArgs(trailingOnly = TRUE)) {
        # render Rmd to PDF
        if ( grepl("\\.Rmd$", rmd) && file.exists(rmd)) {
            render(rmd, pdf_document())
        } else {
            print(paste("Ignoring: ", rmd))
        }
    }
}

Выполните следующие простые шаги:

1: В сценарии Rmarkdown запустите Knit(Ctrl+Shift+K). 2: Затем, после открытия html-разметки, нажмите "Открыть в браузере" (верхняя левая сторона), и html откроется в вашем веб-браузере. 3: Затем используйте Ctrl+P и сохранить как PDF .

Если вы не хотите ничего устанавливать, вы можете вывести html. Затем откройте HTML-файл - он должен открыться в окне браузера, затем щелкните правой кнопкой мыши, чтобы распечатать. В окне печати выберите "Сохранить как PDF" в правом нижнем углу, если вы используете Mac. Вуаля!

Другие вопросы по тегам