Як конвертувати відмітку R у PDF?


127

Я раніше запитував про команди для перетворення R Markdown в HTML .

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

Гарне рішення дозволило б максимально зберегти вміст (наприклад, зображення, рівняння, html-таблиці тощо). Рішення потрібно мати можливість запускати з командного рядка. Хорошим рішенням буде також кросплатформна платформа, і в ідеалі мінімізувати залежності, щоб полегшити спільне використання файлів тощо.

Конкретно, існує маса варіантів:

  • Чи перетворювати RMD в MD в HTML в PDF; або RMD до MD в PDF; або RMD у PDF
  • Якщо ви використовуєте markdownпакет в R, які параметри вказати
  • Чи використовувати pandoc, пакет, вбудований у R, чи щось інше

Ось приклад файлу rmd, який, імовірно, забезпечує розумний тест будь-якого запропонованого рішення. Він був використаний як основа для цієї публікації в блозі .


7
Я вважаю, що Pandoc має бути найкращим шляхом. Мені не має великого сенсу вбудовувати це в R, і я не думаю, що це також можливо (це написано в Haskell). У мене тут дуже рання робота: github.com/yihui/knitr-book (див. Два сценарії оболонки knitта mdconvert.sh). Можливо, важко придумати загальний підхід, оскільки LaTeX занадто гнучкий; ви можете використовувати всі види шаблонів для pandoc.
Yihui Xie


markdowntopdf.com на цьому сайті дуже непогано. Однак підтримки для латексу немає
падаван

Чи можемо ми оновити цю відповідь для RStudio v1.0?
Adam_G

Відповіді:


69

Оновлений відповідь (10 лютого 2013 р.)

Пакет rmarkdown : Тепер rmarkdownна github доступний пакет, який взаємодіє з Pandoc. Він включає renderфункцію. У документації чітко зрозуміло, як перетворити rmarkdown в pdf серед ряду інших форматів. Це включає включення вихідних форматів у файл rmarkdown або запуску, що надає вихідний формат функції rend. Наприклад,

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

Командний рядок: Коли я запускаю renderз командного рядка (наприклад, за допомогою makefile), іноді виникають проблеми з тим, що 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

Я використовував наступну команду для перетворення 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' зі списку параметрів).
  • Результуючий вихідний сигнал виглядав як це . Він чітко створив документ у стилі LaTeX на відміну від того, що я отримую, якщо надрукую HTML-файл у форматі pdf із браузера.

Отримання оновленої версії Pandoc

Як згадував @daroczig, для виведення pdfs важливо мати сучасну версію Pandoc. На Ubuntu станом на 15 червня 2012 року я застряг із версією 1.8.1 Pandoc у менеджері пакунків, але це здається з журналу змін що для підтримки pdf вам потрібна принаймні версія 1.9+ Pandoc.

Таким чином, я встановив caball-install. А потім побіг:

cabal update
cabal install pandoc

Pandoc був встановлений в ~/.cabal/bin/pandoc Таким чином, коли я запустив pandocйого, все ще бачилася стара версія. Дивіться тут, щоб додати до шляху .


5
Дякую за цю відповідь. Я просто хочу прокоментувати, що мій досвід полягав у тому, що надання кращого результату давала .md-файл pandoc , а не .html-файл. Тож варто експериментувати.
йоаврам

Це найближче, я також прийшов до хорошого процесу. Чи є спосіб змінити фігурний текст із "сюжетної частини ..." на щось інше?
svenski

1
pandocє у версії 1.12 навіть у моєму тепер застарілому Ubuntu 13.04.
krlmlr

22

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

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

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


+1 Функція виглядає добре; Чи є у вас рекомендована однолінійна команда pandoc для перетворення R Markdown в PDF?
Джеромі Англім

1
Додавання --tocбуде корисним у командному рядку (в результаті чого буде створена таблиця вмісту nics на основі ваших заголовків), а також налаштування шаблону LaTeX для ваших потреб (наприклад, додавання туди \listoffiguresта / або \listoftablesтощо) може призвести до отримання чудових документів.
daroczig

3
Про що складно apt-get install pandoc?
сумід

@sumid ви , можливо , пропустили уточнену частина (ну, якщо ви не використовуєте тестування).
дарокциг

Так, ти маєш рацію - двічі. Я пропустив це, і я також використовую тестування ;-) Тоді я сприймаю як простіше тимчасове, що дозволяє тестувати sources.listі робити, apt-get install -t testing pandocпотім встановлювати haskell-platformта компілювати. (Зазвичай я роблю це з експериментальним. Я сподіваюся, що це те саме, що і в тестуванні.)
Сумід

14

Зараз (серпень 2014 р.) Ви можете використовувати RStudio для перетворення R Markdown у PDF. В основному, RStudio використовує pandoc для перетворення Rmd в PDF.

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

  1. Додайте зміст
  2. Змінення параметрів фігури
  3. Змініть стиль виділення синтаксису
  4. Додайте параметри LaTeX
  5. І багато іншого...

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


1
Параметр "в'язати PDF" недоступний в Ubuntu 14.04, pandoc v1.17.1. Чи потрібно виконати налаштування?
Prradep

Яку версію RStudio у вас є? Ви створили новий файл rmarkdown?
Jot eN

Rstudio - v 0.98.507
Prradep


@Prradep Що було результатом розмови?
nealmcb

10

Опція, що більше нагадує те, що ви отримуєте під час друку з браузера, 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.


Я не в змозі запустити останню команду в RStudio. Я спробував system("wkhtmltopdf temp.html temp.pdf") будь-яку ідею, як це виправити
Урва Шаббір

9

Лише два кроки:

  1. Встановіть останню версію "pandoc" звідси:

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

  2. Викличте функцію pandocвlibrary(knitr)

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

Таким чином, ви можете конвертувати "input.md" у "input.pdf".


3

Я знайшов використання 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))
        }
    }
}

0

Якщо ви нічого не хочете встановлювати, ви можете вивести HTML. Потім відкрийте файл html - він повинен відкритися у вікні браузера, потім натисніть правою кнопкою миші для друку. У вікні друку виберіть "Зберегти як pdf" у правому нижньому куті, якщо ви працюєте на Mac. Вуаля!


0

Виконайте наступні прості дії:

1: У сценарії Rmarkdown запустіть Knit (Ctrl + Shift + K) 2: Потім після відкриття розмітки html натисніть кнопку Відкрити в браузері (вгорі ліворуч) і html відкриється у вашому веб-браузері 3: Потім використовуйте Ctrl + P і зберегти як PDF.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.