Как конвертировать 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.
Вы можете изменить метаданные на:
- Добавить оглавление
- Изменить параметры фигуры
- Изменить стиль подсветки синтаксиса
- Добавить опции LaTeX
- И многое другое...
Для получения дополнительной информации - 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.
Всего два шага:
Установите последнюю версию "Пандок" отсюда:
Вызвать функцию
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. Вуаля!