J'essaie de contrôler la position d'un tracé lors de la conversion en PDF en utilisant knitr et pandoc. Mon fichier .Rmd ressemble à ceci:
# 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
Je convertis en PDF en utilisant les fonctions fournies ici: http://quantifyingmemory.blogspot.co.uk/2013/02/reproducible-research-with-r-knitr .html
Comment puis-je placer l'intrigue entre les deuxième et troisième blocs de texte? Le code latex ne fonctionne pas tel qu'il est actuellement.
EDIT: C'est ce que j'essaie maintenant.
# 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
Je ne suis pas au courant d'une telle option pour pandoc
pour définir l'option flottante des chiffres lors de la conversion d'un document Markdown en LaTeX. Si vous choisissez Markdown pour sa simplicité, vous ne devriez pas en attendre trop de puissance, même avec des outils puissants comme pandoc
. Bottom line: Markdown n'est pas LaTeX . Il a été conçu pour HTML au lieu de LaTeX.
Deux façons de procéder:
utiliser la syntaxe Rnw (R + LaTeX) au lieu de Rmd (R Markdown) ( exemples ); alors vous pourrez utiliser l'option de bloc fig.pos='H'
après vous \usepackage{float}
dans le préambule; dans ce cas, vous avez la pleine puissance de LaTeX, et pandoc ne sera pas impliqué
pirater le document LaTeX généré par pandoc, par ex. quelque chose comme
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 vous n'aimez pas ces solutions, pensez à demander une nouvelle fonctionnalité pour pandoc sur Github, puis asseyez-vous et attendez.
Je présente une solution alternative. Au lieu d'insérer des symboles [H] dans un document en latex de manière post-hoc, je suggère de redéfinir l'environnement de la figure pour ignorer tous les arguments de position et utiliser [H].
Pour ce faire, créez un fichier .tex dans le même répertoire que le fichier .Rmd qui redéfinit l'environnement de la figure et mettez à jour l'en-tête YAML dans le .Rmd pour inclure le fichier lors de la compilation.
Voici un exemple de fichier .tex:
\usepackage{float}
\let\origfigure\figure
\let\endorigfigure\endfigure
\renewenvironment{figure}[1][2] {
\expandafter\origfigure\expandafter[H]
} {
\endorigfigure
}
Voici l'exemple .Rmd qui l'inclut (en supposant que vous avez appelé le fichier .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)
```
J'utilise KnitR et markdown dans RSTUDIO, la solution pour mon cas est d'ajouter dans le préambule \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}
---
Et puis ajouter ces lignes de code (fig.pos = 'H') dans les toutes premières lignes:
```{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
```
J'ai quelques projets où je convertis de .Rmd en .pdf (principalement une présentation de diapositives beamer) et je veux que les graphiques ne flottent pas (les figures flottantes ne fonctionnent vraiment pas avec les présentations de diapositives).
L'approche que j'utilise consiste à ajouter un espace échappé après la ligne dans le fichier .md. Cela signifie que le graphique est à l'intérieur d'un paragraphe plutôt que d'être un paragraphe propre, cela signifie que pandoc ne l'enveloppera pas dans un environnement de figure (cela signifie également que je ne peux pas utiliser de légende avec lui) et le place donc exactement cette position.
J'utilise un Makefile pour faire toutes les conversions pour moi, donc après avoir exécuté R et knitr, il exécutera automatiquement un script Perl (bien que cela puisse être fait en utilisant R ou d'autres outils) qui trouve où les tracés sont insérés et ajoute l'espace échappé à La fin de la ligne.
Si ce que vous cherchez est de contrôler manuellement où placer vos chiffres, en utilisant cette page Web: http://www.rci.rutgers.edu/~ag978/litdata/figs/ , j'ai trouvé que si vous ajoutez une barre oblique inverse "\" quelque part après vos commandes de tracé, les tracés ne flotteront pas mais seront imprimés à leur emplacement actuel.
Si vous ne souhaitez que certains tracés apparaissent, vous pouvez modifier cette option pour chacun.
Dans votre exemple:
# 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)
Je suis en quelque sorte tombé sur cette question et je veux ajouter une autre approche. Ici, je profite de la flexibilité impressionnante fournie par les crochets knitr. Je change simplement le crochet du tracé pour utiliser la fonction knitr hook_plot_tex()
. Ensuite, je peux simplement utiliser l'option de bloc fig.pos
comme nous en avons l'habitude dans les documents Rnw afin de positionner les environnements figure
(fig.cap
doit être défini pour invoquer l'environnement figure
).
Cela fonctionne dans les exemples fournis par l'OP. Je suppose qu'ils fonctionnent également dans des exemples (en quelque sorte) plus compliqués. Pourquoi cela peut-il être fait aussi facilement et n'est pas la valeur par défaut pour les documents Rmd, je ne suis pas sûr. Peut-être que Yihui peut clarifier cela.
Voici le code:
---
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()
```
Sans pour autant fig.pos='h'
, l'intrigue passe généralement à la deuxième page.
Est-ce ce que vous recherchez:
```{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
La solution n'est pas trop simple, peut-être que quelqu'un d'autre pourra la rationaliser.
Les étapes de base. (Windows 7)
Vous pouvez ajouter l'argument fig.pos="H"
Aux options knitr, globalement ou pour chaque bloc individuel. NOTEz le H. majuscule. Ceci demande au latex de placer les flotteurs des figures exactement où ils sont appelés dans le fichier Rmd
.
MAIS, cela nécessite que le package soit utilisé par latex, ce que vous pouvez spécifier dans le modèle que pandoc utilise pour construire des fichiers pdf. Pour ce faire, ajoutez la ligne \usepackage{float}
MAIS, vous devez d'abord trouver le fichier de modèle actuel à modifier. Je n'ai pu trouver cela nulle part mais vous pouvez demander à pandoc d'imprimer le contenu du modèle sur la console avec cette commande: pandoc -D latex
Coupez et collez ce code de modèle dans un fichier texte vide.
Ajoutez la ligne: \usepackage{float}
Enregistrez sous le nom de fichier "default.latex"
Dans un répertoire tel que C:\Users\YOURNAME\pandoc\templates
Ajoutez l'option --data-dir=C:/Users/YOURNAME/pandoc/templates"
À votre appel à pandoc OR Pandoc.convert("my file.md", format="pdf", options=c("--data-dir=C:/Users/YOURNAME/pandoc/templates"))
si vous utilisez pander dans R.
J'espère que cela fonctionne pour vous.