sheet - r markdown don''t show output
¿Cómo mantener la posición de la figura con el título de la figura en la salida pdf de knitr? (8)
Estoy usando knitr (1.9.5 y 1.9.17) y rmarkdown (0.5.3.1), y me gustaría mantener la posición de la figura en la salida de pdf.
El archivo pdf generado funciona bien cuando se
fig.pos="H"
opción de fragmento
fig.pos="H"
.
Sin embargo, la posición de la figura no se mantiene cuando
fig_caption: yes
se establece en el encabezado yaml.
¿Cómo debo solucionar este problema? Gracias por cualquier sugerencia
EDITAR:
Después de aprender el entorno flotante de látex.
Agrego el paquete
float
en el encabezado.
/usepackage{float}
Pero el archivo tex generado siempre usa
htbp
en el entorno de la
figure
respecto a cualquier opción
fig.pos
.
Después de cambiar manualmente
htbp
a
H
, se mantienen las posiciones de todas las figuras.
Este es mi ejemplo de archivo rmd:
---
title: "Untitled"
output:
pdf_document:
fig_caption: yes
includes:
in_header: mystyles.sty
---
# Section 1
Note that the `echo = FALSE` parameter was added to the code chunk to prevent printing of the R code that generated the plot.
Note that the `echo = FALSE` parameter was added to the code chunk to prevent printing of the R code that generated the plot.
Note that the `echo = FALSE` parameter was added to the code chunk to prevent printing of the R code that generated the plot.
Note that the `echo = FALSE` parameter was added to the code chunk to prevent printing of the R code that generated the plot.
```{r fig1, echo=FALSE, fig.height=8.5, fig.pos="H"}
plot(cars)
```
# Section 2
More test
```{r fig2, echo=FALSE, fig.height=8.5, fig.pos="H"}
plot(cars)
```
# Section 3
```{r fig3, echo=FALSE, fig.height=8.5, fig.pos="H"}
plot(cars)
```
More test
Aunque la respuesta proporcionada por @Bangyou funciona, complica el tejido.
También puede establecer una opción predeterminada global para la colocación de figuras en látex, incluida esta en su encabezado YAML que incluye:
/makeatletter/renewcommand*{/fps@figure}{H}/makeatother
Como se explica
here
(y
here
para la parte
/makeat...
).
De esta manera, solo puede usar el botón de punto en RStudio o rmarkdown :: render y listo.
El problema es que todas las figuras se forzarán con H y no podrás configurar una para flotar.
Como Andrew señaló, este
fig.pos
no funciona en trozos, pero funciona si se coloca en opciones globales:
```{r global_options, include=FALSE}
knitr::opts_chunk$set(fig.pos = ''H'')
```
EDITAR:
lo anterior aparentemente solía funcionar y necesita
/usepackage{float}
en el preámbulo:
header-includes:
/usepackage{float}
Ver también here .
Como Yihui mencionó en su respuesta (
Posición de la figura en el marcado al convertir a PDF con knitr y pandoc
), no podemos esperar demasiado sobre el formateo desde el mardown.
Para solucionar este problema, solo escriba algunos scripts R para reemplazar
htbp
por
H
En comparación con el paquete
knit
from knitr, descubrí que
render
desde rmarkdown es mejor para exportar un archivo
tex
.
Solo recuerde agregar
keep_tex: yes
en el encabezado yaml de su archivo rmarkdown.
library(rmarkdown)
render(''filepath.Rmd'')
x <- readLines(''filepath.tex'')
pos <- grep(''begin//{figure//}//[htbp//]'', x)
x[pos] <- gsub(''htbp'', ''H'', x[pos])
writeLines(x, ''filepath.tex'')
tools::texi2pdf(''filepath.tex'', clean = TRUE) # gives foo.pdf
file.remove(''filepath.tex'')
El código de la posición de la Figura en Markdown cuando se convierte a PDF con knitr y pandoc me ayuda, ayuda a cualquier persona a encontrarlo útil.
---
title: "Example"
author: "Martin"
output: pdf_document
---
```{r}
knitr::knit_hooks$set(plot = function(x, options) {
knitr::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()
```
En caso de que alguien más se encuentre con este hilo, tuve que usar la minúscula ''h'' y funcionó en la versión R 3.5.3 y latex 2018.
```{r, echo=FALSE, fig.pos="h"}
plot(cars)
```
La opción que funcionó para mí:
En el .tex poner al principio:
/usepackage{float}
.
Al comienzo de la Rmd:
knitr::opts_chunk$set(fig.pos = ''H'')
.
La
H
en mayúscula).
Y en cada fragmento con una imagen:
fig.cap="lorem blabla"
y
out.extra=''''
(valor del parámetro = cadena vacía).
No es
necesario definir:
fig_caption: yes
y
keep_tex: yes
en el yaml.
Estas opciones hacen que la imagen mantenga su posición, ya sea para
include_graphics
y los gráficos generados por el código R.
Los usé en el entorno
bookdown
, generando el pdf y el html como se esperaba :)
Para mí, agregar el paquete
float
y luego
/floatplacement{figure}{H}
en YAML resolvió el problema como:
---
title: "test"
date: "`r Sys.Date()`"
output:
pdf_document :
keep_tex: true
number_sections: true
header-includes:
/usepackage{booktabs}
/usepackage{longtable}
/usepackage{array}
/usepackage{multirow}
/usepackage[table]{xcolor}
/usepackage{wrapfig}
/usepackage{float}
/floatplacement{figure}{H}
---
Actualización mira esta mejor solución here . (El resumen del problema a continuación sigue siendo bueno, pero siga el enlace a una solución mejor).
Para resumir algunas pruebas en RStudio
El argumento knitr chunk fig.pos = "H" funciona siempre que
fig_caption: yes
no está en el encabezado yaml.
Cada figura en el .tex generado se ve así
/subsection{my_section}/label{my_section}
/includegraphics{path_to_fig.pdf}
Pero si
fig_caption: yes
está en el encabezado yaml, el .tex se ve así
/subsection{my_section}/label{my_section}
/begin{figure}[htbp]
/centering
/includegraphics{path_to_fig.pdf}
/caption{}
/end{figure}
fig.pos = "H"
no se ha utilizado,
"htbp"
está allí en su lugar.
Una solución para esto usando RStudio:
poner
fig_caption: yes
keep_tex: yes
tanto en el ñame como en
header-includes: /usepackage{float}
luego busque y reemplace
[htbp]
con
[H]
en el archivo .tex generado
luego abra el archivo .tex en RStudio y use el botón "Compilar PDF".
Ejemplo .Rmd
---
title: "Testing fig placement with captions"
author: "Andrew Dolman"
date: "1 September 2015"
output:
pdf_document:
fig_caption: yes
keep_tex: yes
header-includes: /usepackage{float}
---
This is an R Markdown document. Markdown is a simple formatting syntax for authoring HTML, PDF, and MS Word documents. For more details on using R Markdown see <http://rmarkdown.rstudio.com>.
When you click the **Knit** button a document will be generated that includes both content as well as the output of any embedded R code chunks within the document. You can embed an R code chunk like this:
```{r}
summary(cars)
```
You can also embed plots, for example:
```{r, echo=FALSE, fig.pos="H"}
plot(cars)
```
Note that the `echo = FALSE` parameter was added to the code chunk to prevent printing of the R code that generated the plot.
```{r, echo=FALSE, fig.pos="H"}
plot(cars)
```