Position de la Figure dans le markdown lors de la conversion en PDF avec knitr et pandoc
j'essaie de contrôler la position d'une parcelle lors de la conversion en PDF en utilisant knitr et pandoc. Mon. Mdm fichier 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.5textwidth]{placeHere}
end{figure}
Some text some text some text some text some text some text some text some text some text
je suis en train de convertir en PDF en utilisant les fonctions fournies ici: http://quantifyingmemory.blogspot.co.uk/2013/02/reproducible-research-with-r-knitr.html
Comment puis-je place l'intrigue entre les deuxième et troisième blocs de texte? Le code latex ne fonctionne pas tel quel.
EDIT: C'est ce que je vais essayer 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
8 réponses
je ne suis pas au courant d'une telle option pour pandoc
pour définir l'option flottante des figures lors de la conversion D'un document Markdown en LaTeX. Si vous choisissez Markdown pour sa simplicité, vous ne devez pas attendre trop de puissance de lui, même avec des outils puissants comme pandoc
. Bas de ligne: Markdown n'est pas de LaTeX. Il a été conçu pour HTML au lieu de LaTeX.
Deux façons de le faire:
utilisez la syntaxe Rnw (R + LaTeX) au lieu de Rmd (R Markdown) (exemples); vous pourrez alors utiliser l'option chunk
fig.pos='H'
après\usepackage{float}
dans le préambule; dans ce cas, vous avez plein pouvoir de LaTeX, et pandoc ne sera pas impliquéhack dans le document LaTeX généré par pandoc, par exemple, 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, envisagez de demander une nouvelle fonctionnalité pour pandoc sur Github, puis asseyez-vous et attendez.
Pour ce faire, créez une .tex fichier dans le même répertoire que le .Le fichier Rmd qui redéfinit l'environnement de la figure, et met à jour L'en-tête YAML dans le .Mdm inclure le fichier lors de la compilation.
Voici un exemple d'une .tex fichier:
\usepackage{float}
\let\origfigure\figure
\let\endorigfigure\endfigure
\renewenvironment{figure}[1][2] {
\expandafter\origfigure\expandafter[H]
} {
\endorigfigure
}
voici un exemple .Mdm qui comprend (en supposant que vous avez appelé la .fichier tex " préambule 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 ajouter ensuite 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 qui me convertir .Mdm .pdf (la plupart du temps une présentation de diapositives beamer) et veulent que les graphiques ne flottent pas (les figures flottantes ne fonctionnent vraiment pas avec des présentations de diapositives).
l'approche que j'utilise est d'ajouter un espace échappé après la ligne dans le .dossier médical. Cela signifie que le graphique est à l'intérieur d'un paragraphe plutôt que d'être un paragraphe à part entière, cela signifie que pandoc ne va pas l'envelopper dans un environnement de figure (cela signifie également que je ne peux pas utiliser une 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 lancé R et knitr il lancera automatiquement un script Perl (bien que cela puisse être fait en utilisant R ou d'autres outils) qui trouvera où les placettes sont insérées et ajoutera l'espace échappé à la fin de la ligne.
si ce que vous recherchez est de simplement 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 un antislash " \ " quelque part après vos commandes de parcelle, les parcelles ne seront pas flottantes mais seront plutôt imprimées dans leur emplacement actuel.
si vous voulez que seulement quelques parcelles apparaissent, vous pouvez modifier cette option pour chacune.
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
( ... )
utilisant un crochet knitr
j'ai d'une façon ou d'une autre trébuché sur cette question et je veux ajouter une autre approche. Ici, je fais usage de la flexibilité impressionnante fourni par les crochets knitr. J'ai tout simplement changer l'intrigue crochet à utiliser le knitr fonction hook_plot_tex()
. Après je peux juste utiliser l'option chunk fig.pos
comme nous sommes habitués à dans les documents Rnw afin de positionner figure
environnements (fig.cap
doit être définie afin d'invoquer l' figure
environnement).
Cela fonctionne dans les exemples fourni par L'OP. Je suppose qu'ils travaillent aussi (d'une manière ou d'une autre) dans des exemples plus compliqués. Pourquoi cela peut ê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 ça.
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 fig.pos='h'
, l'intrigue passe habituellement à la deuxième page.
Est-ce que vous êtes après:
```{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, soit globalement, soit pour chaque morceau individuel. NOTEZ la majuscule H. Ceci indique à latex de placer la figure de flotteurs exactement où ils sont appelés dans leRmd
fichier.MAIS, cela nécessite le paquet par latex, vous pouvez spécifier dans le modèle que pandoc utilise pour construire des fichiers pdf. Vous faites cela en ajoutant la ligne
\usepackage{float}
MAIS, vous devez d'abord trouver le modèle de fichier à modifier. Je ne pouvais pas trouver n'importe où, mais vous pouvez obtenir pandoc pour imprimer le contenu du modèle de la console avec cette commande:
pandoc -D latex
couper et coller ce code modèle dans un fichier texte vide.
Ajouter l' ligne:
\usepackage{float}
Enregistrer sous le nom
"default.latex"
dans le répertoireC:\Users\YOURNAME\pandoc\templates
ajouter l'option
--data-dir=C:/Users/YOURNAME/pandoc/templates"
à votre appel au pandoc ouPandoc.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.