2017-02-27 3 views
8

Ich versuche, eine Figur in ein RMarkdown-Dokument einzufügen, habe aber Schwierigkeiten, sie an der richtigen Stelle erscheinen zu lassen. Die folgende Abbildung zeigt das Problem: Wenn eine Bildbeschriftung verwendet wird, erscheint die Abbildung oben auf der Seite und nicht unterhalb des entsprechenden Absatzes im Dokument. HierKnitr Ignorieren fig.pos?

enter image description here

ist der Code für dieses Mindestarbeitsbeispiel:

--- 
title: "Untitled" 
author: "Author" 
date: "27 February 2017" 
output: 
    pdf_document: 
    fig_cap: yes 
    keep_tex: yes 
--- 

```{r setup, include=FALSE} 
knitr::opts_chunk$set(echo = TRUE, fig.pos= "h") 
``` 

## R Markdown 

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>. 

\newpage 

## Including Plots 

You can also embed plots, for example: 

```{r pressure, echo=FALSE, fig.cap = "Hello"} 
plot(pressure) 
``` 

Note that the `echo = FALSE` parameter was added to the code chunk to prevent printing of the R code that generated the plot. 

Und hier ist der relevante Teil der LaTeX-Ausgabe; beachten Sie, dass die fig.pos Option wird ignoriert:

You can also embed plots, for example: 

\begin{figure} 
\centering 
\includegraphics{test_files/figure-latex/pressure-1.pdf} 
\caption{Hello} 
\end{figure} 

Note that the \texttt{echo\ =\ FALSE} parameter was added to the code 
chunk to prevent printing of the R code that generated the plot. 

Mein Set-up ist unten beschrieben. Ich bin mir ziemlich sicher, dass dies in der vorherigen Version von knitr funktioniert hat, aber ich habe keine Notiz, welche Version das sein könnte.

> sessionInfo() 
R version 3.3.2 (2016-10-31) 
Platform: x86_64-w64-mingw32/x64 (64-bit) 
Running under: Windows >= 8 x64 (build 9200) 

locale: 
[1] LC_COLLATE=English_United Kingdom.1252 LC_CTYPE=English_United Kingdom.1252 
[3] LC_MONETARY=English_United Kingdom.1252 LC_NUMERIC=C       
[5] LC_TIME=English_United Kingdom.1252  

attached base packages: 
[1] stats  graphics grDevices utils  datasets methods base  

loaded via a namespace (and not attached): 
[1] backports_1.0.5 magrittr_1.5 rprojroot_1.2 htmltools_0.3.5 tools_3.3.2  
[6] yaml_2.1.14  Rcpp_0.12.9  stringi_1.1.2 rmarkdown_1.3 knitr_1.15.1 
[11] stringr_1.2.0 digest_0.6.12 evaluate_0.10 
+0

Ihre MCVE kompilieren wie erwartet (Abb zwischen den Absätzen, '\ begin {figure} [hTBP]' in der tex-Datei) auf meinem Rechner (gleiches knitr/rmarkdown Version, aber ich bin auf Linux) . Vielleicht überprüfe deine Pandoc Version (17.1). – scoa

+0

Ich habe 1.19.2.1. Könnte downgrade ... – jkeirstead

+0

Ja, ich habe auf 1.17.2 herabgestuft und alles ist wieder gut. Vielen Dank. – jkeirstead

Antwort

9

Die Chunk Option fig.pos wird nur verwendet, wenn knitr denkt, dass es eine LaTeX figure Umgebung anstelle von reinem Markdown ![](), und es schreibt LaTeX nur dann, wenn eine Bildunterschrift (fig.cap) angegeben zu schreiben, hat und mindestens eine dieser Optionen wurde angegeben: fig.align, out.width, out.extra. Wenn Sie knitr zwingen möchten, LaTeX-Code für Zahlen zu schreiben und fig.pos zu verwenden, können Sie die Chunk-Option out.extra = '' setzen.

0

Ich weiß, das durch Yihui Xie bereits beantwortet wurde, aber ich habe eine alternative Lösung, die die Notwendigkeit vermeidet out.extra = '' oder eine der anderen Option enthalten, die gegeben wurden, während auch nicht mit Zahlen zu stören, die ohne Titel wiedergegeben werden.

Fügen Sie einfach das Latex-Paket 'float' hinzu und verwenden Sie die \floatplacement{figure}{H}, um sicherzustellen, dass jede Figur mit einer Beschriftung in der richtigen Reihenfolge innerhalb des Textes wiedergegeben wird, wie Sie wollten. Alternativ es könnte hinzugefügt werden, um die .tex Datei verwendet, wenn RMarkdown ein pdf strickt, aber ich bin ziemlich neu, und hatte keine Zeit, sich selbst in diese Option zu suchen.

fand ich dieses Update durch eine ziemlich einfache Lösung in dem thesisdown Paket von Chestar Ismay

Es ist einfach nur mit drei Linien in den YAML an die .tex Datei suchen. Ich habe nicht genug Reputation, um einen Screenshot davon zu veröffentlichen, aber du kannst einfach kopieren, was ich getan habe und es selbst ausprobieren!

--- 
title: "Untitled" 
author: "Author" 
date: "27 February 2017" 
header-includes: #allows you to add in your own Latex packages 
- \usepackage{float} #use the 'float' package 
- \floatplacement{figure}{H} #make every figure with caption = h 
output: 
    pdf_document: 
    fig_cap: yes 
    keep_tex: yes 
--- 

```{r setup, include=FALSE} 
knitr::opts_chunk$set(echo = TRUE, fig.pos= "h") 
``` 

## R Markdown 

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>. 

\newpage 

## Including Plots 

You can also embed plots, for example: 

```{r pressure, echo=FALSE, fig.cap = "Hello"} 
plot(pressure) 
``` 

Note that the `echo = FALSE` parameter was added to the code chunk to prevent printing of the R code that generated the plot.