Domanda

Di fronte:utilizzando pandoc() in knitr, si lamenta quando si tenta di compilare .md o .Rmd in un PDF.

Sto semplificando il processo di riproducibile ricerca, come è stato documentato in molti luoghi.Sto utilizzando pandoc e knitr e la produzione di documenti di grandi.Sto anche cercando di semplificare alcune colleghe che non sono esperto di programmazione, ma stiamo cercando di utilizzare i file simili.Ci sono diverse opzioni per la "user friendly" markdown incentrato editori, e per diversi motivi sono appoggiato su RStudio (per loro, emacs/ess per me, ma è diverso).

Il mio flusso di lavoro:dare loro un markdown (.md o .Rmd) file e chiedi loro di essere in grado di apportare modifiche e, facoltativamente, ri-renderizzare in un PDF.Purtroppo, RStudio non (AFAICT) consentire l'impostazione di modelli o altri arbitrario pandoc parametri di configurazione (ad esempio, i capitoli, numero di sezioni), in modo da utilizzare pandoc() in R/knitr fa un sacco di senso qui.

Utilizzando whitepaper.Rmd il file di input, ho eseguito pandoc('whitepaper.Rmd', 'pdf') a R e subito ottiene:

> pandoc('whitepaper.Rmd', 'pdf')
executing pandoc  -t latex --standalone --smart --number-sections --template=report.tex -f markdown -t pdf -o whitepaper.pdf "whitepaper.Rmd"
pandoc.exe: cannot produce pdf output with pdf writer
Error in (function (input, format, ext, cfg)  : conversion failed

Mi hanno esplicitamente "t:latex" nel mio knitr di intestazione specifiche, anche se senza di essa, pandoc() è ancora l'aggiunta di "-t pdf" per la chiamata di sistema, qualcosa che pandoc.exe non accetta.

Con la risoluzione dei problemi, il comando funziona bene se lo rimuovi '-t pdf', così sembra che non ci sia niente di sbagliato con il file di input stessa:

> system('pandoc  -t latex --standalone --smart --number-sections --template=report.tex -f markdown -o whitepaper.pdf "whitepaper.Rmd"')

Ci sono stati numerosi altri conversazioni su questo argomento: 14586177, 14508429, 15258233, e pesantemente discusso 11025123.Si risolvono tutti per soluzioni che richiedono un lavoro da linea di comando, extra, medio passaggi, Makefile esterni, o knit2pdf() (che utilizza texi2pdf, non è voluta).

I vincoli per come li vedo io:

  • operare con facilità all'interno dell'ambiente R;
  • sfruttare Yihui s "<!--pandoc ... -->"nel file di configurazione, che consente a me di continuare a cambiare arbitrariamente tra i miei modelli, per uno dei tanti esempi);
  • preferibilmente, eseguire questo con un unico "standardizzato" comando (cioè, "pandoc('whitepaper.Rmd', 'pdf')").

...in modo che, una volta impostati i parametri nel file, l'elaborazione e il rendering è relativamente cervello morto.

Posso patch e sovrascrivere Yihui s knitr:::pandoc_one() per rimuovere offendere aggiunta dell'opzione '-t' e formato, ma mi chiedo quali effetti collaterali che potrebbe avere altrove.Questa soluzione non è sostenibile, né "La Strada Giusta (tm)".

Suggerimenti per il "modo Giusto (tm)" per risolvere questo problema?Mi manca una facile/soluzione più ovvia?

BTW:grazie, Yihui Xie, per knitr, e John MacFarlane per pandoc.Ciao!(Forse avrei potuto presentare patch suggerimenti a uno o a entrambi per risolvere il mio caso, anche se è solo a me, allora potrebbe non essere la pena.)

È stato utile?

Soluzione

Penso che tutti ci informazioni di cui hai bisogno è lì, in ?pandoc, che comprende l'esempio di esecuzione system("pandoc -h") per vedere i possibili formati di output.Dal che si impara che

I formati di Output:asciidoc, beamer, contesto, docbook, docx, dzslides, epub, epub3, fb2, html, html5, json, lattice, uomo, markdown, markdown_github, markdown_mmd, markdown_phpextra, markdown_strict, mediawiki, nativo, odt, opendocument, opml, org, pdf*, pianura, revealjs, primo, rtf, s5, slideous, slidy, texinfo, tessile [*per l'output pdf, usare latex o beamer e -o NOMEFILE.pdf]

Quindi, fondamentalmente format = "pdf" non è valido, si dovrebbe utilizzare pandoc("tmp.Rmd", format = "latex", ext = "pdf") (e anche il ext="pdf" parte è l'impostazione predefinita, secondo ?pandoc, in modo che tutti si ha realmente bisogno è pandoc("tmp.Rmd", "latex")).Xddddd pandoc('whitepaper.Rmd', 'pdf') portato a una chiamata con -t pdf, beh , detto di farlo nel secondo argomento di tuo pandoc() chiamata.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top