Làm cách nào để chuyển đổi R Markdown thành PDF?


127

Trước đây tôi đã hỏi về các lệnh để chuyển đổi R Markdown sang HTML .

Cách tốt để chuyển đổi tệp R Markdown thành tài liệu PDF là gì?

Một giải pháp tốt sẽ bảo tồn càng nhiều càng tốt nội dung (ví dụ: hình ảnh, phương trình, bảng html, v.v.). Giải pháp cần có thể được chạy từ dòng lệnh. Một giải pháp tốt cũng sẽ là đa nền tảng và lý tưởng nhất là giảm thiểu sự phụ thuộc để giúp chia sẻ tệp thực hiện dễ dàng hơn.

Cụ thể, có rất nhiều lựa chọn:

  • Có chuyển đổi RMD sang MD sang HTML sang PDF hay không; hoặc RMD sang MD sang PDF; hoặc RMD sang PDF
  • Nếu sử dụng markdowngói trong R, tùy chọn nào để chỉ định
  • Cho dù sử dụng pandoc, một gói được tích hợp vào R, hoặc một cái gì đó khác

Dưới đây là một tệp rmd ví dụ có thể cung cấp một bài kiểm tra hợp lý cho bất kỳ giải pháp được đề xuất nào. Nó được sử dụng làm cơ sở cho bài viết trên blog này .


7
Tôi tin rằng pandoc nên là cách tốt nhất để đi. Tôi không có ý nghĩa gì khi xây dựng nó thành R và tôi cũng không nghĩ điều đó là có thể (nó được viết bằng Haskell). Tôi có một số công việc rất sớm ở đây: github.com/yihui/knitr-book (xem hai tập lệnh shell knitmdconvert.sh). Có thể khó đưa ra một cách tiếp cận chung vì LaTeX quá linh hoạt; bạn có thể sử dụng tất cả các loại mẫu cho pandoc.
Yihui Xie


markdftimeopdf.com trang web này là khá tốt, thực sự. Tuy nhiên, không có hỗ trợ latex
padawan

Chúng tôi có thể cập nhật câu trả lời này cho RStudio v1.0 không?
Adam_G

Câu trả lời:


69

Cập nhật câu trả lời (ngày 10 tháng 2 năm 2013)

gói rmarkdown : Hiện tại đã có một rmarkdowngói có sẵn trên github có giao diện với Pandoc. Nó bao gồm một renderchức năng. Tài liệu này cho thấy khá rõ cách chuyển đổi rmarkdown sang pdf giữa một loạt các định dạng khác. Điều này bao gồm các định dạng đầu ra trong tệp rmarkdown hoặc đang chạy cung cấp định dạng đầu ra cho chức năng kết xuất. Ví dụ,

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

Dòng lệnh: Khi tôi chạy rendertừ dòng lệnh (ví dụ: sử dụng tệp tạo tệp), đôi khi tôi gặp sự cố với pandoc không được tìm thấy. Có lẽ, nó không nằm trên con đường tìm kiếm. Câu trả lời sau đây giải thích làm thế nào để thêm pandoc đối với môi trường R .

Vì vậy, ví dụ, trên máy tính của tôi chạy OSX, nơi tôi có một bản sao của pandoc thông qua RStudio, tôi có thể sử dụng như sau:

Rscript -e "Sys.setenv(RSTUDIO_PANDOC='/Applications/RStudio.app/Contents/MacOS/pandoc');library(rmarkdown);  library(utils); render('input.Rmd', 'pdf_document')"

Câu trả lời cũ (khoảng năm 2012)

Vì vậy, một số người đã cho rằng Pandoc là con đường để đi. Xem ghi chú bên dưới về tầm quan trọng của việc có phiên bản cập nhật của Pandoc.

Sử dụng Pandoc

Tôi đã sử dụng lệnh sau để chuyển đổi R Markdown thành HTML (nghĩa là một biến thể củaRMDFILE tệp tạo tệp này ), trong đó tên của tệp R Markdown không có .rmdthành phần (nó cũng giả sử rằng phần mở rộng có .rmdvà không .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'))"

và sau đó lệnh này để chuyển đổi sang pdf

Pandoc -s example-r-markdown.html -o example-r-markdown.pdf


Một vài lưu ý về điều này:

  • Tôi đã xóa tham chiếu trong tệp ví dụ xuất các ô sang imgur để lưu trữ hình ảnh.
  • Tôi đã xóa một tham chiếu đến một hình ảnh được lưu trữ trên imgur. Số liệu dường như cần phải là địa phương.
  • Các tùy chọn trong markdownToHTMLchức năng có nghĩa là các tham chiếu hình ảnh là các tệp chứ không phải dữ liệu được lưu trữ trong tệp HTML (nghĩa là tôi đã xóa 'base64_images'khỏi danh sách tùy chọn).
  • Kết quả đầu ra trông như thế này . Nó rõ ràng đã tạo ra một tài liệu theo phong cách LaTeX trái ngược với những gì tôi nhận được nếu tôi in tệp HTML sang pdf từ trình duyệt.

Phiên bản cập nhật của Pandoc

Như được đề cập bởi @daroczig, điều quan trọng là phải có phiên bản cập nhật của Pandoc để xuất pdf. Trên Ubuntu kể từ ngày 15 tháng 6 năm 2012, tôi đã bị kẹt với phiên bản 1.8.1 của Pandoc trong trình quản lý gói, nhưng có vẻ như từ nhật ký thay đổi để hỗ trợ pdf, bạn cần ít nhất phiên bản 1.9+ của Pandoc.

Vì vậy, tôi đã cài đặt caball-install. Rồi chạy:

cabal update
cabal install pandoc

Pandoc đã được cài đặt trong ~/.cabal/bin/pandoc Do đó, khi tôi chạy pandocnó vẫn thấy phiên bản cũ. Xem ở đây để thêm vào đường dẫn .


5
Cảm ơn câu trả lời này. Tôi chỉ muốn nhận xét rằng kinh nghiệm của tôi là việc cung cấp tệp .md cho pandoc , chứ không phải tệp .html, cho đầu ra tốt hơn. Vì vậy, nó đáng để thử nghiệm.
yoavram

Đây là lần gần nhất tôi cũng đi đến một quá trình tốt. Có cách nào thay đổi văn bản hình từ "khối cốt truyện của ..." sang thứ khác không?
Svenski

1
pandoclà phiên bản 1.12 ngay cả trong Ubuntu 13.04 đã lỗi thời của tôi.
krlmlr

22

Tôi nghĩ rằng bạn thực sự cần pandoc , phần mềm tuyệt vời được thiết kế và xây dựng chỉ dành cho nhiệm vụ này :) Ngoài pdf , bạn có thể chuyển đổi tệp md của mình thành ví dụ docx hoặc odt giữa những người khác.

Chà, việc cài đặt một phiên bản Pandoc cập nhật có thể sẽ gặp khó khăn trên Linux (vì bạn sẽ cần toàn bộ haskell-platformbản dựng từ các nguồn), nhưng thực sự dễ dàng trên Windows / Mac chỉ với vài megabyte tải xuống.

Nếu bạn có tệp đánh dấu được ủ / dệt kim, bạn chỉ có thể gọi pandoctrong ví dụ bash hoặc với systemchức năng trong R. Một bản demo POC sau đó được triển khai trong Ṗandoc.convertchức năng của gói nhỏ của tôi ( mà bạn phải chán kinh khủng khi tôi cố gắng hướng sự chú ý của bạn ở đó vào mọi cơ hội ).


+1 Chức năng có vẻ tốt; Bạn có lệnh pandoc one-liner được đề xuất để chuyển đổi R Markdown sang PDF không?
Jeromy Anglim

1
Việc thêm --tocsẽ hữu ích trên dòng lệnh (dẫn đến một bảng nội dung nics dựa trên tiêu đề của bạn) và cũng có thể tùy chỉnh mẫu LaTeX cho nhu cầu của bạn (như thêm vào đó \listoffiguresvà / hoặc \listoftablesv.v.) có thể dẫn đến các tài liệu tuyệt vời.
daroczig

3
Thử thách gì apt-get install pandoc?
sumid

@sumid bạn có thể đã bỏ lỡ phần cập nhật (tốt, nếu bạn không sử dụng thử nghiệm).
daroczig

Vâng, bạn đúng - hai lần. Tôi đã bỏ lỡ nó và tôi cũng đang sử dụng thử nghiệm ;-) Sau đó, tôi nhận thấy việc cho phép thử nghiệm tạm thời dễ dàng hơn sources.listvà thực hiện apt-get install -t testing pandocsau đó cài đặt haskell-platformvà biên dịch. (Thông thường tôi làm điều này với thử nghiệm. Tôi hy vọng sẽ hoạt động theo cách tương tự trong thử nghiệm.)
sumid

14

Ngay bây giờ (tháng 8 năm 2014) Bạn có thể sử dụng RStudio để chuyển đổi R Markdown thành PDF. Về cơ bản, RStudio sử dụng pandoc để chuyển đổi Rmd sang PDF.

Bạn có thể thay đổi siêu dữ liệu thành:

  1. Thêm mục lục
  2. Thay đổi tùy chọn hình
  3. Thay đổi kiểu tô sáng cú pháp
  4. Thêm tùy chọn LaTeX
  5. Và nhiều thứ khác nữa...

Để biết thêm chi tiết - http://rmarkdown.rstudio.com/pdf_document_format.htmlnhập mô tả hình ảnh ở đây


1
Tùy chọn 'đan PDF' không khả dụng trong Ubuntu 14.04, pandoc v1.17.1. Có bất kỳ cài đặt cần phải được thực hiện?
Prradep

Bạn có phiên bản nào của RStudio? Bạn đã tạo một tập tin rmarkdown mới?
Jot eN

Rstudio - v 0.98.507
Prradep


@Prradep Kết quả của cuộc trò chuyện là gì?
nealmcb

10

Đối với một tùy chọn trông giống với những gì bạn nhận được khi in từ trình duyệt, hãy wkhtmltopdfcung cấp một tùy chọn.

Trên Ubuntu

sudo apt-get install wkhtmltopdf

Và sau đó, lệnh tương tự như đối với ví dụ pandoc để truy cập 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'))"

và sau đó

wkhtmltopdf example-r-markdown.html example-r-markdown.pdf

Các tập tin kết quả trông như thế này . Nó dường như không xử lý MathJax ( vấn đề này được thảo luận ở đây ) và việc ngắt trang là xấu. Tuy nhiên, trong một số trường hợp, một kiểu như vậy có thể được ưa thích hơn một bản trình bày kiểu LaTeX hơn.


Tôi không thể chạy lệnh cuối cùng trong RStudio. Tôi đã thử system("wkhtmltopdf temp.html temp.pdf") bất kỳ ý tưởng nào để khắc phục điều đó
Urvah Shabbir

9

Chỉ hai bước:

  1. Cài đặt bản phát hành mới nhất "pandoc" từ đây:

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

  2. Gọi hàm pandoctronglibrary(knitr)

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

Do đó, bạn có thể chuyển đổi "input.md" thành "input.pdf".


3

Tôi thấy sử dụng R studio theo cách dễ nhất, nhưng nếu muốn điều khiển từ dòng lệnh, thì một tập lệnh R đơn giản có thể thực hiện thủ thuật bằng cách sử dụng lệnh rmarkdown render (như đã đề cập ở trên). Chi tiết kịch bản đầy đủ tại đây

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

Nếu bạn không muốn cài đặt bất cứ thứ gì bạn có thể xuất html. Sau đó mở tệp html - nó sẽ mở trong cửa sổ trình duyệt, sau đó nhấp chuột phải để in. Trong cửa sổ in, chọn "lưu dưới dạng pdf" ở góc dưới bên phải nếu bạn đang sử dụng máy Mac. Voila!


0

Thực hiện theo các bước đơn giản sau:

1: Trong tập lệnh Rmarkdown chạy Đan (Ctrl + Shift + K) 2: Sau đó, sau khi đánh dấu html được mở, nhấp vào Mở trong Trình duyệt (phía trên bên trái) và html được mở trong trình duyệt web của bạn 3: Sau đó, sử dụng Ctrl + P và lưu dưới dạng PDF.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.