J'utilise knitr (1.9.5 et 1.9.17) et rmarkdown (0.5.3.1), et je voudrais conserver la position de la figure dans la sortie pdf. Le fichier pdf généré fonctionne correctement lorsque l'option de bloc fig.pos="H"
est utilisé.
Cependant, la position du chiffre n'est pas maintenue lorsque fig_caption: yes
est défini dans l'en-tête yaml.
Comment dois-je résoudre ce problème? Merci pour toutes suggestions.
MODIFIER:
Après avoir appris l'environnement flottant de Latex. J'ajoute le package float
dans l'en-tête.
\usepackage{float}
Mais le fichier tex généré utilise toujours htbp
dans l'environnement figure
pour tout fig.pos
les options sont utilisées. Après avoir modifié manuellement htbp
en H
, les positions de tous les chiffres sont conservées.
Voici mon exemple de fichier 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
Comme Yihui l'a mentionné dans sa réponse ( Position de la figure dans la démarque lors de la conversion en PDF avec knitr et pandoc ), nous ne pouvons pas trop nous attendre au formatage du mardown. Pour contourner ce problème problème, il suffit d'écrire quelques scripts R pour remplacer htbp
en H
.
Par rapport à knit
du package knitr, j'ai trouvé que render
de rmarkdown est préférable d'exporter un fichier tex
. N'oubliez pas d'ajouter keep_tex: yes
dans l'en-tête yaml de votre fichier 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')
Comme Andrew l'a souligné, cette fig.pos
ne fonctionne pas en morceaux, mais il fonctionne s'il est placé dans les options globales:
```{r global_options, include=FALSE}
knitr::opts_chunk$set(fig.pos = 'H')
```
EDIT: ce qui précède apparemment utilisé pour travailler et a besoin \usepackage{float}
dans le préambule:
header-includes:
\usepackage{float}
Voir aussi ici .
Pour moi, ajouter le package float
puis \floatplacement{figure}{H}
dans YAML a résolu le problème comme:
---
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}
---
Mise à jour regardez cette meilleure solution ici . (le résumé du problème ci-dessous est toujours bon, mais suivez le lien vers une meilleure solution).
Pour résumer certains tests dans RStudio
L'argument knitr chunk fig.pos = "H" fonctionne tant que fig_caption: yes
n'est pas dans l'en-tête yaml.
Chaque figure dans le .tex généré ressemble à ceci
\subsection{my_section}\label{my_section}
\includegraphics{path_to_fig.pdf}
Mais si fig_caption: yes
est dans l'en-tête yaml alors le .tex ressemble à ceci
\subsection{my_section}\label{my_section}
\begin{figure}[htbp]
\centering
\includegraphics{path_to_fig.pdf}
\caption{}
\end{figure}
fig.pos = "H"
n'a pas été utilisé, "htbp"
est là à la place.
Une solution de contournement pour cela en utilisant RStudio:
mettre
fig_caption: yes
keep_tex: yes
dans le yaml ainsi que
header-includes: \usepackage{float}
puis recherchez et remplacez [htbp]
avec [H]
dans le fichier .tex généré
puis ouvrez le fichier .tex dans RStudio et utilisez le bouton "Compiler PDF".
Exemple .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)
```
Bien que la réponse fournie par @Bangyou fonctionne, elle complique le tricot.
Vous pouvez également définir une option globale par défaut pour le placement des figures dans le latex, y compris dans votre en-tête YAML, notamment:
\makeatletter\renewcommand*{\fps@figure}{H}\makeatother
Comme expliqué ici (et ici pour le \makeat...
partie).
De cette façon, vous pouvez simplement utiliser le bouton tricot dans RStudio ou rmarkdown :: render et en finir avec.
Le problème est que tous les chiffres doivent être forcés avec H et vous ne pourrez pas en définir un pour flotter.
L'option qui a fonctionné pour moi:
Dans le .tex mis au début: \usepackage{float}
.
Au début de la Rmd: knitr::opts_chunk$set(fig.pos = 'H')
. H
en majuscule).
Et dans chaque morceau avec une image: fig.cap="lorem blabla"
Et out.extra=''
(Valeur de paramètre = chaîne vide).
Non devez définir: fig_caption: yes
Et keep_tex: yes
Dans le yaml.
Ces options permettent à l'image de conserver sa position, que ce soit pour include_graphics
Et les tracés générés par le code R.
Je les ai utilisés dans l'environnement bookdown
, générant le pdf et le html comme prévu :)
Le code de Position de la figure dans la démarque lors de la conversion en PDF avec knitr et pandoc m'aide, aide toute autre personne à le trouver utile.
---
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()
```
Dans le cas où quelqu'un d'autre tombe sur ce fil, j'ai dû utiliser le petit cas 'h' et cela a fonctionné dans la version R 3.5.3 et le latex 2018.
```{r, echo=FALSE, fig.pos="h"}
plot(cars)
```