R Markdown PDF'ye nasıl dönüştürülür?


127

Daha önce R Markdown'u HTML'ye dönüştürmek için komutları sormuştum .

R Markdown dosyalarını PDF belgelerine dönüştürmenin iyi bir yolu nedir?

İyi bir çözüm, içeriği olabildiğince koruyacaktır (ör. Resimler, denklemler, html tabloları vb.). Çözümün komut satırından çalıştırılabilmesi gerekir. İyi bir çözüm, çapraz platform olabilir ve ideal olarak, makefile'ların paylaşılmasını kolaylaştırmak için bağımlılıkları en aza indirir.

Özellikle, pek çok seçenek var:

  • RMD'den MD'ye HTML'ye PDF'ye dönüştürülüp dönüştürülmeyeceği; veya RMD'den MD'ye PDF'ye; veya RMD'den PDF'ye
  • Kullanılıyorsa markdownR, paketi hangi seçenekleri belirlemek için
  • Kullanılıp kullanılmayacağı pandoc, R'ye yerleşik bir paket veya başka bir şey

Önerilen herhangi bir çözümün makul bir testini sağlayacağı tahmin edilen örnek bir rmd dosyası aşağıda verilmiştir. Bu blog gönderisinin temeli olarak kullanıldı .


7
Pandoc'un gitmenin en iyi yolu olduğuna inanıyorum. Bunu R'nin içine yerleştirmek bana pek mantıklı gelmiyor ve bunun da mümkün olduğunu düşünmüyorum (Haskell'de yazılmıştır). Burada çok erken dönem çalışmalarım var: github.com/yihui/knitr-book (iki kabuk komut dosyasına bakın knitve mdconvert.sh). LaTeX çok esnek olduğu için genel bir yaklaşım bulmak zor olabilir; pandoc için her türlü şablonu kullanabilirsiniz.
Yihui Xie


markdowntopdf.com bu site aslında oldukça iyi. Ancak lateks desteği yok
padawan

Bu yanıtı RStudio v1.0 için güncelleyebilir miyiz?
Adam_G

Yanıtlar:


69

Güncellenmiş Cevap (10 Şub 2013)

rmarkdown paketi : Artık github'da Pandoc ile arayüz oluşturan bir rmarkdownpaket var . Bir renderişlev içerir . Belgeler, bir dizi başka format arasında rmarkdown'un pdf'ye nasıl dönüştürüleceğini oldukça açık hale getirir. Bu, rmarkdown dosyasına çıktı formatlarını dahil etmeyi veya render işlevine bir çıktı formatı sağlamayı içerir. Örneğin,

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

Komut satırı: Komut satırından çalıştırdığımda render(örneğin makefile kullanarak), bazen pandoc'un bulunamamasıyla ilgili sorunlar yaşıyorum. Muhtemelen arama yolunda değil. Aşağıdaki cevap, pandoc'un R ortamına nasıl ekleneceğini açıklamaktadır .

Örneğin, RStudio aracılığıyla pandoc kopyasına sahip olduğum OSX çalıştıran bilgisayarımda aşağıdakileri kullanabilirim:

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

Eski Cevap (2012 dolaylarında)

Bu nedenle, birçok kişi Pandoc'un gidilecek yol olduğunu öne sürdü. Pandoc'un güncel bir sürümüne sahip olmanın önemi hakkında aşağıdaki notlara bakın.

Pandoc kullanma

R Markdown'u HTML'ye dönüştürmek için aşağıdaki komutu kullandım (yani, bu makefile'ın bir varyantı ), burada bileşen RMDFILEolmadan R Markdown dosyasının adı .rmd(ayrıca uzantının olduğunu .rmdve olmadığını varsayar .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'))"

ve sonra bu komutu pdf'ye dönüştürmek için

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


Bununla ilgili birkaç not:

  • Görüntüleri barındırmak için imgur'a grafik aktaran örnek dosyadaki referansı kaldırdım.
  • İmgur'da barındırılan bir resme referansı kaldırdım. Figürlerin yerel olması gerekiyor gibi görünüyor.
  • İşlevdeki seçenekler markdownToHTML, görüntü referanslarının HTML dosyasında depolanan verilere değil dosyalara yönelik olduğu anlamına geliyordu (yani, 'base64_images'seçenek listesinden kaldırdım ).
  • Sonuç çıktısı benziyordu bu . HTML dosyasını bir tarayıcıdan pdf olarak yazdırdığımda aldığımın aksine, açıkça LaTeX tarzı bir belge oluşturdu.

Pandoc'un güncel sürümünü edinme

@Daroczig tarafından belirtildiği gibi, pdflerin çıktısını almak için Pandoc'un güncel bir sürümüne sahip olmak önemlidir. 15 Haziran 2012 itibariyle Ubuntu'da, paket yöneticisinde Pandoc'un 1.8.1 sürümüyle sıkışıp kaldım, ancak değişiklik günlüğünden pdf desteği için Pandoc'un en az 1.9+ sürümüne ihtiyacınız olduğu anlaşılıyor.

Böylece kurdum caball-install. Ve sonra koştu:

cabal update
cabal install pandoc

Pandoc yüklendi ~/.cabal/bin/pandoc Bu yüzden çalıştırdığımda pandochala eski sürümü görüyordu. Yola eklemek için buraya bakın .


5
Bu cevap için teşekkürler. Ben sadece tecrübelerime göre, .md dosyasını .html dosyası yerine pandoc'a vermenin daha iyi bir çıktı verdiğini söylemek istiyorum . Yani denemeye değer.
yoavram

Bu benim de iyi bir sürece en yakın olanı. Şekil metnini "arsa öbek ..." den başka bir şeye değiştirmenin bir yolu var mı?
svenski

1
pandocşimdi modası geçmiş Ubuntu 13.04'ümde bile 1.12 sürümünde.
krlmlr

22

Bunu gerçekten gerek Pandoc büyük yazılım sadece bu görev için tasarlanmış ve inşa edilmiş :) Ayrıca, pdf , kendi dönüştürebilirsiniz md örneğin dosyayı docx veya odt diğerleri arasında.

Pekala, Pandoc'un güncel bir sürümünü yüklemek Linux'ta haskell-platformzorlanıyor olabilir ( kaynaklardan derlemek için tüm ˙˙ye ihtiyacınız olacağı için), ancak Windows / Mac'te yalnızca birkaç megabayt indirme ile gerçekten çok kolay.

Demlenmiş / örülmüş markdown dosyanız varsa, sadece pandocörneğin bash veya systemR içindeki işlevle çağırabilirsiniz . Bu ikincisinin bir POC demosu, Ṗandoc.convertküçük paketimin işlevine uygulanmıştır ( ki bunu yapmaya çalıştığımda çok sıkılmalısınız. dikkatinizi her fırsatta oraya çekin ).


+1 Fonksiyon iyi görünüyor; R Markdown'u PDF'ye dönüştürmek için önerilen tek satırlık bir pandoc komutunuz var mı?
Jeromy Anglim

1
--tocKomut satırına ekleme yapmak faydalı olacaktır (başlıklarınıza göre bir nics içerik tablosu ile sonuçlanır) ve ayrıca LaTeX şablonunu ihtiyaçlarınıza göre özelleştirmek (oraya eklemek \listoffiguresve / veya \listoftablesvb.) Harika belgeler elde etmenizi sağlayabilir.
daroczig

3
Hangi konuda zorlu apt-get install pandoc?
sumid

@sumid, güncel kısmı kaçırmış olabilirsiniz (eğer testi kullanmıyorsanız).
daroczig

Evet haklısın - iki kez. Bunu kaçırdım ve ayrıca test kullanıyorum ;-) O zaman geçici olarak teste izin vermeyi sources.listve apt-get install -t testing pandocsonra kurmayı haskell-platformve derlemeyi yapmayı daha kolay olarak algılıyorum . (Genellikle deneysel ile bunu ben umut test çalışma şekli aynı..)
sumid

14

Şu anda (Ağustos 2014) R Markdown'u PDF'ye dönüştürmek için RStudio'yu kullanabilirsiniz . Temelde, RStudio kullanım Pandoc PDF rmd dönüştürmek.

Meta verileri şu şekilde değiştirebilirsiniz:

  1. İçindekiler tablosu ekle
  2. Şekil seçeneklerini değiştir
  3. Sözdizimi vurgulama stilini değiştir
  4. LaTeX seçenekleri ekle
  5. Ve daha fazlası...

Daha fazla ayrıntı için - http://rmarkdown.rstudio.com/pdf_document_format.htmlgörüntü açıklamasını buraya girin


1
'örgü PDF' seçeneği Ubuntu 14.04, pandoc v1.17.1'de mevcut değildir. Yapılması gereken herhangi bir ayar var mı?
Prradep

RStudio'nun hangi sürümüne sahipsiniz? Yeni bir rmarkdown dosyası mı oluşturdunuz?
Jot eN

Rstudio - v 0.98.507
Prradep


@Prradep Konuşmanın sonucu ne oldu?
nealmcb

10

Bir tarayıcıdan yazdırdığınızda aldığınız şeye daha çok benzeyen bir seçenek için bir seçenek wkhtmltopdfsunar.

Ubuntu'da

sudo apt-get install wkhtmltopdf

Ve sonra pandoc örneğiyle aynı komut HTML'ye ulaşmak için:

RMDFILE=example-r-markdown  
Rscript -e "require(knitr); require(markdown); knit('$RMDFILE.rmd', '$RMDFILE.md'); markdownToHTML('$RMDFILE.md', '$RMDFILE.html', options=c('use_xhml'))"

ve sonra

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

Ortaya çıkan dosya benziyordu bu . MathJax'i ele almıyor gibi görünüyordu ( bu konu burada tartışılıyor ) ve sayfa sonları çirkin. Bununla birlikte, bazı durumlarda, böyle bir stil, daha LaTeX stili bir sunum yerine tercih edilebilir.


RStudio'da son komutu çalıştıramıyorum. Bunu system("wkhtmltopdf temp.html temp.pdf") nasıl düzelteceğime dair herhangi bir
fikrimi

9

Sadece iki adım:

  1. En son "pandoc" sürümünü buradan yükleyin:

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

  2. İşlevini çağırın pandociçindelibrary(knitr)

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

Böylece, "input.md" dosyanızı "input.pdf" e dönüştürebilirsiniz.


3

R stüdyosunu kullanmayı en kolay yolu buldum, ancak komut satırından kontrol etmek istiyorsanız, basit bir R betiği rmarkdown render komutunu kullanarak hile yapabilir (yukarıda belirtildiği gibi). Tam komut dosyası ayrıntıları burada

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

Hiçbir şey yüklemek istemiyorsanız, html çıktısını alabilirsiniz. Ardından html dosyasını açın - bir tarayıcı penceresinde açılmalıdır, ardından yazdırmak için sağ tıklayın. Mac kullanıyorsanız, yazdırma penceresinde sağ alt köşedeki "pdf olarak kaydet" seçeneğini seçin. İşte bu kadar!


0

Şu basit adımları izleyin:

1: Rmarkdown komut dosyasında Knit'i çalıştırın (Ctrl + Shift + K) 2: Ardından html markdown'u açtıktan sonra Tarayıcıda Aç'ı (sol üst taraf) tıklayın ve html web tarayıcınızda açılır 3: Sonra Ctrl + P'yi kullanın ve PDF olarak kaydedin.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.