Как конвертировать 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 file, который предположительно обеспечивает разумную проверку любого предлагаемого решения. Он был использован в качестве основы для этого сообщения в блоге.

Ответ 1

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

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

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

Получение обновленной версии Pandoc

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

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

cabal update
cabal install pandoc

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

Ответ 2

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

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

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

Ответ 3

Для опции, которая больше похожа на то, что вы получаете при печати из браузера, 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.

Ответ 4

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

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

  • Добавить оглавление
  • Изменить параметры фигуры
  • Изменить стиль выделения синтаксиса
  • Добавить параметры LaTeX
  • И многое другое...

Подробнее... http://rmarkdown.rstudio.com/pdf_document_format.html enter image description here

Ответ 5

Только два шага:

  • Установите последнюю версию "pandoc" отсюда:

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

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

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

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

Ответ 6

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

#!/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))
        }
    }
}

Ответ 7

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

Ответ 8

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

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