Como manter a posição da figura com a legenda da figura em pdf do knitr?

estou usando knitr (1.9.5 e 1.9.17) e rmarkdown (0.5.3.1), e gostaria de manter a posição da figura na saída pdf. O ficheiro pdf gerado está a funcionar bem quando é usada a opção chunk fig.pos="H".

No entanto, a posição da figura não é mantida quando fig_caption: yes é definido na cabeçalho yaml.

Como devo resolver este problema? Obrigado por qualquer sugestão.

editar:

Depois de aprender o ambiente flutuante do látex. Eu adiciono float pacote em cabecalho.

\usepackage{float}

Mas o ficheiro Tex gerado usa sempre htbp no ambiente figure em relação a quaisquer opções fig.pos são usadas. Depois de alterar manualmente htbp para H, as posições de todas as figuras são mantidas.

Este é o meu exemplo de ficheiro 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
Author: Bangyou, 2015-04-17

6 answers

Como Andrew salientou, isto fig.pos não funciona em pedaços, mas funciona se for colocado em opções globais:

```{r global_options, include=FALSE}
knitr::opts_chunk$set(fig.pos = 'H')
```
 13
Author: Davor Josipovic, 2016-03-26 10:06:08

Update veja esta solução melhor aqui. (o resumo do problema abaixo ainda é bom, mas siga o link para uma solução melhor).

Para resumir alguns testes em RStudio

O argumento knitr chunk Fig.pos = " H " funciona desde que fig_caption: yes não esteja no cabeçalho yaml.

Cada figura no gerado .o tex parece-se com isto.

\subsection{my_section}\label{my_section}

\includegraphics{path_to_fig.pdf}

Mas se fig_caption: yes está no cabeçalho yaml então o .o tex parece ... este

\subsection{my_section}\label{my_section}

\begin{figure}[htbp]
\centering
\includegraphics{path_to_fig.pdf}
\caption{}
\end{figure}

fig.pos = "H" não foi usado, "htbp" está lá em vez disso.

A workaround for this using RStudio:

Colocar

fig_caption: yes
keep_tex: yes

Na yaml assim como

header-includes: \usepackage{float}

Então procure e substitua [htbp] por [H] no gerado .ficheiro tex

Então abra o .Tex file in RStudio and use the" Compile PDF " button.


Exemplo .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)
```
 10
Author: Andrew, 2017-05-23 12:02:23
Embora a resposta dada por @Bangyou funcione, complica o tricô.

Você também pode definir uma opção por omissão global para a colocação de figuras em latex, incluindo isto no seu cabeçalho YAML inclui:

\makeatletter\renewcommand*{\fps@figure}{H}\makeatother

Como explicado Aqui (e aqui para a parte \makeat....

Desta forma, poderá apenas usar o botão de malha no RStudio ou rmarkdown::renderizar e terminar com ele.

A questão é que todos os números sejam preenchidos com H e não serás capaz de definir um para flutuar.
 4
Author: Oscar de León, 2018-02-02 16:00:53

Para mim adicionar o pacote float e depois \floatplacement{figure}{H} em YAML resolveu o 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}
---
 4
Author: user9112767, 2018-07-31 07:55:46

Como Yihui mencionado na resposta, o (Figura posição em markdown, quando da conversão para PDF com knitr e pandoc), não podemos esperar muito sobre a formatação de mardown. Para resolver este problema, basta escrever alguns scripts R para substituir htbp a H.

Comparado com knit do pacote knitr, descobri que render do rmarkdown é melhor exportar um ficheiro tex. Lembre - se apenas de adicionar keep_tex: yes no cabeçalho yaml do seu ficheiro 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')
 3
Author: Bangyou, 2017-05-23 12:10:36

A opção que funcionou para mim:

In the .Tex put at the beginning: {[[0]}.

No início do Rmd: knitr::opts_chunk$set(fig.pos = 'H'). O H em maiúsculas).

E em cada bloco com uma imagem: fig.cap="lorem blabla" e out.extra='' (VALOR do parâmetro=Texto vazio).

Não há necessidade de definir: fig_caption: yes e keep_tex: yes na yaml.

Estas opções fazem com que a imagem mantenha a sua posição, seja para include_graphics e os gráficos gerados pelo Código R.

Usei-os no bookdown enviroment, gerando o pdf e o html como esperado:)

 3
Author: pablo_sci, 2018-02-22 21:00:33