Figure position in markdown when converting to PDF with knitr and pandoc
knitr, markdown, pandoc, r
Solution
I'm not aware of such an option for `pandoc` to set the floating option of figures when converting a Markdown document to LaTeX. If you choose Markdown for its simplicity, you should not expect too much power from it, even with powerful tools like `pandoc`. Bottom line: Markdown is not LaTeX. It was designed for HTML instead of LaTeX.
Two ways to go:
use the Rnw syntax (R + LaTeX) instead of Rmd (R Markdown) (examples); then you will be able to use the chunk option `fig.pos='H'` after you `\usepackage{float}` in the preamble; in this case, you have full power of LaTeX, and pandoc will not be involved
hack at the LaTeX document generated by pandoc, e.g. something like
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
If you do not like these solutions, consider requesting a new feature to pandoc on Github, then sit back and wait.
Problem
I'm trying to control the position of a plot when converting to PDF using knitr and pandoc. My .Rmd file looks this: ```` # 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 ```` I'm converting to PDF using the functions provided here: http://quantifyingmemory.blogspot.co.uk/2013/02/reproducible-research-with-r-knitr.html How can I place the plot between the second and third blocks of text? The latex code is not working as it currently stands. EDIT: This is what I'm trying now. ```` # 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 ````