tutorial the guide false examples definitive chunk r markdown knitr pandoc

false - r markdown the definitive guide pdf



Figura posiciĆ³n en markdown al convertir a PDF con knitr y pandoc (8)

Usando un gancho knitr

De alguna manera me tropecé con esta pregunta y quiero agregar otro enfoque. Aquí hago uso de la asombrosa flexibilidad proporcionada por los ganchos Knitr. Simplemente cambio el enganche de trazado para usar la función hook_plot_tex() . Luego, solo puedo usar la opción chunk fig.pos como estamos acostumbrados en documentos Rnw para posicionar entornos de figure ( fig.cap debe configurarse para invocar el entorno de figure ).

Esto funciona en los ejemplos proporcionados por el OP. Supongo que también funcionan en (de alguna manera) ejemplos más complicados. No estoy seguro de por qué esto se puede hacer tan fácilmente y no es el valor predeterminado para los documentos Rmd. Tal vez Yihui pueda aclarar eso.

Aquí está el código:

--- title: "Example" author: "Martin" output: pdf_document --- ```{r} knitr::knit_hooks$set(plot = function(x, options) { hook_plot_tex(x, options) }) ``` ```{r myplot, echo=FALSE, results=''hide'', fig.cap=''Test'', fig.pos=''h''} library(ggplot2) ggplot(mtcars, aes(mpg, drat)) + geom_point() ```

Sin fig.pos=''h'' , la trama generalmente saltará a la segunda página.

Estoy tratando de controlar la posición de un gráfico al convertir a PDF usando knitr y pandoc. Mi archivo .Rmd se ve esto:

# My report Some text some text some text some text some text some text some text some text some text ```{r myplot, echo=FALSE, fig.pos="placeHere", results=''hide''} library(ggplot2) ggplot(mtcars, aes(mpg, drat)) + geom_point() ``` Some text some text some text some text some text some text some text some text some text /usepackage{graphicx} /begin{figure}[placeHere] /centering /includegraphics[width=0.5/textwidth]{placeHere} /end{figure} Some text some text some text some text some text some text some text some text some text

Estoy convirtiendo a PDF usando las funciones que se proporcionan aquí: http://quantifyingmemory.blogspot.co.uk/2013/02/reproducible-research-with-r-knitr.html

¿Cómo puedo colocar la trama entre el segundo y el tercer bloque de texto? El código de látex no funciona como está actualmente.

EDIT: Esto es lo que estoy tratando ahora.

# My report ```{r setup, include=FALSE} # set global chunk options opts_chunk$set(cache=FALSE) library(ggplot2) ``` ```{r, echo=FALSE, fig.height=3} ggplot(mtcars, aes(disp, hp)) + geom_point() ``` Some text Some text Some text Some text Some text Some text Some text Some text Some text Some text Some text Some text Some text Some text Some text Some text Some text Some text Some text Some textSome text Some text Some text Some text Some text Some text Some text Some text Some text Some text Some text Some text Some text Some text Some text Some text Some text Some text Some text Some text Some text Some text Some textSome text Some text Some text Some text Some text Some text Some text Some text Some text Some text Some text Some text Some text Some text Some text Some text Some text Some text Some text Some text Some text Some text Some textSome text Some text Some text Some text Some text Some text Some text Some text Some text Some text Some text Some text Some text Some text Some text Some text Some text Some text Some text Some text Some text Some text Some textSome text Some text Some text ```{r, echo=FALSE, fig.height=3} ggplot(mtcars, aes(vs, am)) + geom_point() ``` Some text Some text Some text Some text Some text Some text Some text Some text Some text Some text Some text Some text Some text Some text Some text Some text Some text Some text Some text Some textSome text Some text Some text Some text Some text Some text Some text Some text Some text Some text Some text Some text Some text Some text Some text Some text Some text Some text Some text Some text Some text Some text Some textSome text Some text Some text Some text Some text Some text Some text Some text Some text Some text Some text Some text Some text Some text Some text Some text Some text Some text Some text Some text Some text Some text Some textSome text Some text Some text ```{r, echo=FALSE, fig.height=6} ggplot(mtcars, aes(disp, cyl)) + geom_point() ``` ```{r, echo=FALSE, fig.height=6} ggplot(mtcars, aes(hp, qsec)) + geom_point() ``` Some text Some text Some text Some text Some text Some text Some text Some text Some text Some text Some text Some text Some text Some text Some text Some text Some text Some text Some text Some textSome text Some text Some text ```{r, echo=FALSE, fig.height=3} ggplot(mtcars, aes(hp, wt)) + geom_point() ``` Some text Some text Some text Some text Some text Some text Some text Some text Some text Some text Some text Some text Some text Some text Some text Some text Some text Some text Some text Some textSome text Some text Some text ```{r, echo=FALSE, fig.height=5} ggplot(mtcars, aes(mpg, drat)) + geom_point() ``` Some text Some text Some text Some text Some text Some text Some text Some text Some text Some text Some text Some text Some text Some text Some text Some text Some text Some text Some text Some textSome text Some text Some text


Es esto lo que buscas:

```{r setup, include=FALSE} # set global chunk options opts_chunk$set(cache=FALSE) library(ggplot2) ``` # My report Some text some text some text some text some text some text some text some text some text Some text some text some text some text some text some text some text some text some text ```{r myplot, echo=FALSE} ggplot(mtcars, aes(mpg, drat)) + geom_point() ``` Some text some text some text some text some text some text some text some text some text


Estoy usando KnitR y markdown en RSTUDIO, la solución para mi caso es agregar el preámbulo /usepackage{float} :

--- title: "Proyect 2" author: "FV" date: "2016-12-3" output: pdf_document: fig_caption: yes fig_crop: no fig_height: 2 fig_width: 3 highlight: haddock keep_tex: yes number_sections: yes toc: yes toc_depth: 2 html_document: fig_caption: yes theme: journal toc: yes toc_depth: 2 header-includes: - /usepackage{graphicx} - /usepackage{float} ---

Y luego agregando estas líneas de código (fig.pos = ''H'') en las primeras líneas:

```{r echo=FALSE,warning=FALSE} library(knitr) opts_chunk$set(fig.path=''figure/graphics-'', cache.path=''cache/graphics-'', fig.align=''center'', external=TRUE, echo=TRUE, warning=FALSE, fig.pos=''H'' ) a4width<- 8.3 a4height<- 11.7 ```


La solución no es demasiado sencilla, tal vez alguien más pueda racionalizarla.

Los pasos básicos. (Windows 7)

  1. Puede agregar el argumento fig.pos="H" a las opciones de knitr, ya sea globalmente o para cada fragmento individual. NOTA la H mayúscula. Esto le indica al látex que coloque figuras flotantes exactamente donde se llaman en el archivo Rmd .

  2. PERO, esto requiere que el paquete sea utilizado por el látex, esto se puede especificar en la plantilla que pandoc usa para construir archivos pdf. Para ello, agregue la línea /usepackage{float}

  3. PERO, primero necesita encontrar el archivo de plantilla actual para modificar. No pude encontrar esto en ninguna parte, pero puede hacer que pandoc imprima el contenido de la plantilla en la consola con este comando: pandoc -D latex

  4. Corte y pegue este código de plantilla en un archivo de texto vacío.

  5. Agregue la línea: /usepackage{float}

  6. Guárdelo bajo el nombre de archivo "default.latex" en un directorio como C:/Users/YOURNAME/pandoc/templates

  7. Agregue la opción --data-dir=C:/Users/YOURNAME/pandoc/templates" a su llamada a pandoc O Pandoc.convert("my file.md", format="pdf", options=c("--data-dir=C:/Users/YOURNAME/pandoc/templates")) si se usa pander en R.

Espero que esto funcione para ti.


No tengo conocimiento de una opción de este tipo para que pandoc establezca la opción flotante de cifras al convertir un documento de Markdown a LaTeX. Si elige Markdown por su simplicidad, no debe esperar demasiada potencia, incluso con herramientas poderosas como pandoc . En pocas palabras : Markdown no es LaTeX . Fue diseñado para HTML en lugar de LaTeX.

Dos maneras de ir:

  1. use la sintaxis Rnw (R + LaTeX) en lugar de Rmd (R Markdown) ( examples ); entonces podrá usar la opción de trozo fig.pos=''H'' después de /usepackage{float} en el preámbulo; en este caso, tienes todo el poder de LaTeX, y pandoc no estará involucrado

  2. hackear el documento LaTeX generado por pandoc, por ejemplo, algo como

    library(knitr) knit(''foo.Rmd'') # gives foo.md pandoc(''foo.md'', format=''latex'') # gives foo.tex x = readLines(''foo.tex'') # insert the float package x = sub(''(////begin//{document//})'', ''////usepackage{float}/n//1'', x) # add the H option for all figures x = gsub(''(////begin//{figure//})'', ''//1[H]'', x) # write the processed tex file back writeLines(x, ''foo.tex'') # compile to pdf tools::texi2pdf(''foo.tex'') # gives foo.pdf

Si no le gustan estas soluciones, considere solicitar una nueva función para pandoc en Github, luego siéntese y espere.


Os presento una solución alternativa. En lugar de insertar los símbolos [H] en un documento de látex de manera post hoc, sugiero redefinir el entorno de la figura para ignorar cualquier argumento de posición y usar [H].

Para hacer esto, cree un archivo .tex en el mismo directorio que el archivo .Rmd que redefine el entorno de la figura, y actualice el encabezado YAML en .Rmd para incluir el archivo durante la compilación.

Aquí hay un ejemplo de un archivo .tex:

/usepackage{float} /let/origfigure/figure /let/endorigfigure/endfigure /renewenvironment{figure}[1][2] { /expandafter/origfigure/expandafter[H] } { /endorigfigure }

Aquí está el ejemplo .Rmd que lo incluye (asumiendo que usted llamó el archivo .tex ''preamble-latex.tex''):

--- title: "example" author: "you" date: "`r format(Sys.time(), ''%d %B %Y'')`" output: rmarkdown::pdf_document: fig_caption: yes includes: in_header: preamble-latex.tex --- ```{r, fig.cap=''Markdownvellous!''} plot(1:10, 1:10) ```


Si lo que está buscando es simplemente controlar manualmente dónde colocar sus figuras, utilizando esta página web: http://www.rci.rutgers.edu/~ag978/litdata/figs/ , encontré que si agrega una barra invertida " / "en algún lugar después de los comandos de su parcela, las parcelas no flotarán, sino que se imprimirán en su ubicación actual.

Si solo desea que aparezcan algunos gráficos, puede modificar esa opción para cada uno.

En tu ejemplo:

# My report ```{r setup, include=FALSE} # set global chunk options knitr::opts_chunk$set(cache=FALSE) library(ggplot2) ``` Some text Some text Some text Some text Some text Some text Some text Some text Some text Some text Some text Some text Some text Some text Some text Some text Some text Some text Some text Some textSome text Some text Some text ```{r, echo=FALSE, fig.height=3} ggplot(mtcars, aes(disp, hp)) + geom_point() ``` / Some text Some text Some text Some text Some text Some text Some text Some text Some text Some text Some text Some text Some text Some text Some text Some text Some text Some text Some text Some textSome text Some text Some text

(etc)


Tengo algunos proyectos en los que convierto de .Rmd a .pdf (principalmente una presentación de diapositivas de beamer) y quiero que los gráficos no floten (las figuras flotantes no funcionan con las presentaciones de diapositivas).

El método que utilizo es agregar un espacio de escape después de la línea en el archivo .md. Esto significa que el gráfico está dentro de un párrafo en lugar de ser un párrafo propio, esto significa que pandoc no lo envolverá en un entorno de figura (también significa que no puedo usar un título con él) y por lo tanto lo coloca exactamente esa posición

Utilizo un Makefile para hacer todas las conversiones por mí, así que después de ejecutar R y knitr se ejecutará automáticamente un script de Perl (aunque podría hacerse usando R u otras herramientas) que encuentra dónde se insertan los gráficos y agrega el espacio de escape en el fin de la línea.