Pregunta

Frente:el uso de pandoc() en knitr, se queja al intentar compilar .md o .Rmd en un PDF.

Estoy simplificar el proceso de reproducible de investigación, como se ha documentado en muchos lugares.Estoy usando pandoc y knitr y la producción de grandes documentos.También estoy tratando de racionalizar para algunos colaboradores que no son tan adeptos con la programación, sin embargo, estamos tratando de utilizar los mismos archivos.Hay varias opciones para "amigable" markdown-centrado en los editores, y por varias razones me estoy inclinando en RStudio (para ellos, emacs/ess para mí, pero es diferente).

Mi flujo de trabajo:darles un markdown (.md o .Rmd) archivo y hacer que sean capaces de hacer cambios y, opcionalmente, volver a procesar en un PDF.Por desgracia, RStudio no (AFAICT) permitir la configuración de las plantillas o arbitrarias pandoc los parámetros de configuración (por ejemplo, capítulos, número de secciones), por lo que el uso de pandoc() en R/knitr tiene mucho sentido aquí.

El uso de whitepaper.Rmd como el archivo de entrada, puedo ejecutar pandoc('whitepaper.Rmd', 'pdf') en R y obtener de inmediato:

> 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

Me explícitamente han "t:látex" en mi knitr específicos de la cabecera, aunque sin ella, pandoc() sigue añadiendo "-t pdf" a la llamada del sistema, algo que pandoc.exe no acepta.

Con la solución de problemas, el comando funciona muy bien si las puedo quitar '-t pdf', por lo que parece que no hay nada de malo con el archivo de entrada en sí:

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

Ha habido muchas otras en las conversaciones sobre este tema: 14586177, 14508429, 15258233, y el muy discutido 11025123.Todos ellos para resolver las soluciones que requieren de línea de comandos de trabajo, consumo medio-pasos, externo Makefiles, o knit2pdf() (que utiliza texi2pdf, no deseado).

Las limitaciones como las veo:

  • operar fácilmente en el entorno R;
  • tome ventaja de Yihui del "<!--pandoc ... -->"en el archivo de configuración (que permite a mí a seguir para cambiar arbitrariamente entre mis plantillas, para uno de los varios ejemplos);
  • preferiblemente, la ejecución de este con un solo "estandarizado" de comandos (es decir, "pandoc('whitepaper.Rmd', 'pdf')").

...de modo que, una vez que se establecen los parámetros en el archivo, edición y renderización es relativamente muerte cerebral.

Puedo parche y sobrescribir Yihui del knitr:::pandoc_one() para quitar el infractor, además de '-t' y formato, pero me pregunto ¿qué efectos secundarios que podría tener en otros lugares.Esta solución no es ni sostenible ni "de La Manera Correcta (tm)".

Sugerencias para la "manera Correcta (tm)" para resolver este problema?Me estoy perdiendo un fácil/solución obvia?

BTW:gracias, Yihui Xie, para knitr, y John MacFarlane para pandoc.Pavor!(Quizá podría presentar el parche sugerencias a uno o a ambos a trabajar alrededor de mi caso de uso, aunque si es sólo a mí entonces no podría ser vale la pena.)

¿Fue útil?

Solución

Creo que todos los que hay información que necesitas está allí en ?pandoc, que incluye el ejemplo de la ejecución de system("pandoc -h") para ver las posibles formatos de salida.Desde que aprender que

Formatos de salida:asciidoc, proyector, contexto, docbook, docx, dzslides, epub, epub 3, fb2, html, html5, json, látex, el hombre, de las rebajas, markdown_github, markdown_mmd, markdown_phpextra, markdown_strict, mediawiki, nativo, odt, opendocument, opml, org, pdf*, llanura, revealjs, primero, rtf, s5, slideous, slidy, texinfo, textil [*para la salida en pdf, el uso de látex o de proyector -o nombre de archivo.pdf]

Así que, básicamente, format = "pdf" no es válida, se debe utilizar pandoc("tmp.Rmd", format = "latex", ext = "pdf") (y en realidad la ext="pdf" parte es el valor predeterminado, de acuerdo a ?pandoc, así que todo lo que realmente necesitamos es pandoc("tmp.Rmd", "latex")).En cuanto a por qué pandoc('whitepaper.Rmd', 'pdf') resultó en una llamada con -t pdf, bien, usted dijo que lo hiciera en el segundo argumento a su pandoc() de la llamada.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top