Как конвертировать 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
Только два шага:
Таким образом, вы можете преобразовать свой "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.