Як конвертувати відмітку 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.