it-swarm.com.de

Stellen Sie die Position in der Abschrift ein, wenn Sie mit knitr und pandoc in PDF konvertieren

Ich versuche, die Position eines Plots zu steuern, wenn ich mit Knitr und Pandoc nach PDF konvertiere. Meine .RMD-Datei sieht so aus:

# 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

Ich konvertiere nach PDF mit den hier bereitgestellten Funktionen: http://quantifyingmemory.blogspot.co.uk/2013/02/reproducible-research-with-r-knitr.html

Wie kann ich den Plot zwischen den zweiten und dritten Textblöcken platzieren? Der Latex-Code funktioniert derzeit nicht.

EDIT: Das versuche ich jetzt.

# 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 
32
luciano

Mir ist keine solche Option für pandoc bekannt, mit der die Floating-Option von Zahlen beim Konvertieren eines Markdown-Dokuments in LaTeX festgelegt werden kann. Wenn Sie sich wegen der Einfachheit für Markdown entscheiden, sollten Sie auch mit leistungsstarken Tools wie pandoc nicht zu viel Leistung erwarten. Fazit: Markdown ist nicht LaTeX . Es wurde für HTML anstelle von LaTeX entwickelt.

Zwei Möglichkeiten:

  1. verwenden Sie die Rnw-Syntax (R + LaTeX) anstelle von Rmd (R Markdown) ( Beispiele ); Dann können Sie die Chunk-Option fig.pos='H' nach dir \usepackage{float} in der Präambel; In diesem Fall verfügen Sie über die volle Leistungsfähigkeit von LaTeX und pandoc ist nicht beteiligt

  2. hack auf das von pandoc erzeugte LaTeX-Dokument, z.B. etwas wie

    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
    

Wenn Sie diese Lösungen nicht mögen, ziehen Sie in Betracht, eine neue Funktion anzufordern auf Github zu pandozieren, und lehnen Sie sich dann zurück und warten Sie.

26
Yihui Xie

Ich präsentiere eine alternative Lösung. Anstelle des Einfügens [H] Symbole in einem Latex-Dokument in einem post-hoc-Weise, schlage ich vor, die Neudefinition der Figur Umgebung keine Position Argumente und Verwendung [H] zu ignorieren.

Um dies zu tun, erstellen eine .tex-Datei im selben Verzeichnis wie die .Rmd-Datei, die die Figur Umgebung neu definiert und aktualisiert die YAML-Header in der .Rmd die Datei während der Kompilierung aufzunehmen.

Hier ist ein Beispiel für eine .tex-Datei:

\usepackage{float}
\let\origfigure\figure
\let\endorigfigure\endfigure
\renewenvironment{figure}[1][2] {
    \expandafter\origfigure\expandafter[H]
} {
    \endorigfigure
}

Hier ist das Beispiel .Rmd, das es enthält (vorausgesetzt, Sie haben die .tex-Datei 'preamble-latex.tex' aufgerufen):

---
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)
```
75
paleo13

Ich verwende KnitR und markdown in RSTUDIO, die Lösung für meinen Fall ist das Hinzufügen in der Präambel \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}
---

Und dann füge diese Codezeile (fig.pos = 'H') in die allerersten Zeilen ein:

```{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
```
11
Ferran VilBer

Ich habe ein paar Projekte, in denen ich von .Rmd nach .pdf konvertiere (meistens eine Beamer-Präsentation) und möchte, dass die Grafiken nicht schweben (schwebende Figuren funktionieren wirklich nicht mit Präsentationen).

Die Methode, die ich verwende, besteht darin, nach der Zeile in der MD-Datei ein Leerzeichen einzufügen. Dies bedeutet, dass sich das Diagramm innerhalb eines Absatzes befindet, anstatt ein eigener Absatz zu sein. Dies bedeutet, dass Pandoc es nicht in eine Figurenumgebung einbindet (es bedeutet auch, dass ich keine Beschriftung damit verwenden kann) und es daher genau platziert diese Position.

Ich verwende ein Makefile, um alle Konvertierungen für mich durchzuführen. Nach dem Ausführen von R und knitr wird automatisch ein Perl-Skript ausgeführt (obwohl dies mit R oder anderen Tools möglich ist), das feststellt, wo die Diagramme eingefügt werden, und den maskierten Speicherplatz hinzufügt das Ende der Linie.

7
Greg Snow

Wenn Sie nur manuell steuern möchten, wo Ihre Zahlen abgelegt werden sollen, verwenden Sie diese Webseite: http://www.rci.rutgers.edu/~ag978/litdata/figs/ , fand ich dass, wenn Sie irgendwo nach Ihren Plotbefehlen einen Backslash "\" einfügen, die Plots nicht schwebend sind, sondern stattdessen an ihrer aktuellen Position gedruckt werden.

Wenn nur einige Diagramme angezeigt werden sollen, können Sie diese Option für jedes ändern.

In deinem Beispiel:

# 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)

6
Tamara vdD

Mit einem Strickhaken

Ich bin irgendwie über diese Frage gestolpert und möchte einen anderen Ansatz hinzufügen. Hier nutze ich die unglaubliche Flexibilität, die Knitrhaken bieten. Ich ändere einfach den Plot Hook, um die Knitr-Funktion hook_plot_tex() zu verwenden. Danach kann ich einfach die Chunk-Option fig.pos wie wir es von Rnw-Dokumenten gewohnt sind, um figure Umgebungen zu positionieren (fig.cap muss gesetzt sein, um die Umgebung figure aufzurufen).

Dies funktioniert in den vom OP bereitgestellten Beispielen. Ich denke, sie arbeiten auch in (irgendwie) komplizierteren Beispielen. Warum dies so einfach möglich ist und nicht die Standardeinstellung für RMD-Dokumente ist, weiß ich nicht genau. Vielleicht kann Yihui das klarstellen.

Hier ist der 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()
```

Ohne fig.pos='h' springt der Plot normalerweise zur zweiten Seite.

4

Ist es das was du suchst:

```{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
0
Tyler Rinker

Die Lösung ist nicht allzu einfach. Vielleicht kann jemand anderes sie optimieren.

Die grundlegenden Schritte. (Windows 7)

  1. Sie können das Argument fig.pos="H" Entweder global oder für jeden einzelnen Block zu den Knitr-Optionen hinzufügen. Beachten Sie das Großbuchstaben H. Dadurch wird Latex angewiesen, Fließkommazahlen gena dort zu platzieren, wo sie in der Datei Rmd aufgerufen werden.

  2. ABER dafür muss das Paket von Latex verwendet werden. Dies können Sie in der Vorlage angeben, die pandoc zum Erstellen von PDF-Dateien verwendet. Fügen Sie dazu die Zeile \usepackage{float} Hinzu.

  3. ABER Sie müssen zuerst die aktuelle Vorlagendatei finden, die Sie ändern möchten. Ich konnte dies nirgendwo finden, aber Sie können pandoc dazu bringen, den Inhalt der Vorlage mit dem folgenden Befehl auf der Konsole zu drucken: pandoc -D latex

  4. Schneiden Sie diesen Vorlagencode aus und fügen Sie ihn in eine leere Textdatei ein.

  5. Fügen Sie die Zeile hinzu: \usepackage{float}

  6. Speichern Sie unter dem Dateinamen "default.latex" In einem Verzeichnis wie C:\Users\YOURNAME\pandoc\templates

  7. Fügen Sie die Option --data-dir=C:/Users/YOURNAME/pandoc/templates" Zu Ihrem Aufruf von pandoc OR Pandoc.convert("my file.md", format="pdf", options=c("--data-dir=C:/Users/YOURNAME/pandoc/templates")) hinzu, wenn Sie pander in R verwenden.

Ich hoffe das klappt bei dir.

0
Andrew