2012-12-12 9 views
36

Ich schreibe eine Rmd-Datei, die von Knitr in HTML verarbeitet werden soll. Es enthält einige R-Chunks, die Zahlen generieren, die als Daten-URIs in HTML gespeichert werden.Bildunterschriften, Referenzen mit Knitr und Markdown zu HTML

1) Wie füge ich einem solchen Bild eine Beschriftung hinzu? Ich hätte gerne eine Bildunterschrift, die so etwas wie "Bild 3: blah blah blah" sagt, wo die "3" automatisch generiert wird.

2) Wie kann ich später auf dieses Bild verweisen, d.h. "wie Sie in Abbildung 3 sehen können, blah blah".

+0

Einige Methoden, dies zu tun haben schien, aber hoffentlich wird es in knitr oder pandoc gerollt werden: https://github.com/adletaw/captioner https://github.com/mkoohafkan/kfigr (siehe unten) http://galahad.well.ox.ac.uk/repro/ http: //rmflight.github. io/posts/2012/10/papersinRmd.html (siehe auch unten) http: // gforge.se/2014/01/fast-track-publishing-using-knitr-part-iii/ – Ben

+2

Es sieht so aus, als ob das jetzt direkte Unterstützung in knitr/pandoc bekommt; siehe https://bookdown.org/yihui/bookdown/, insbesondere Abschnitte 2.3-2.5. – mikeck

Antwort

15
  1. Sie können die Zahlen mit einem einfachen Zähler in R erstellen; siehe one example here. Das Problem ist, ob der Markdown-Renderer die Bildunterschrift für Sie rendert: R Markdown v1 wird nicht, aber v2 (basierend auf Pandoc) wird.
  2. Ich weiß es nicht. Es gibt keine direkte Möglichkeit, ein Label als Bezeichner für Zahlen einzufügen, daher ist es wahrscheinlich nicht möglich, Referenzzahlen mit reinem Markdown zu vergleichen. Wenn du solche Probleme hast, denk (1) brauche ich das wirklich? (2) Wenn es sich um ein Dokument mit einer komplizierten Struktur handelt, ist es besser, LaTeX direkt zu verwenden (Rnw-Dokumente).
5

Eine Möglichkeit, diese beiden zu tun, ist hier beschrieben: http://rmflight.github.io/posts/2012/10/papersinRmd.html

Ein weiterer Grund ist hier beschrieben (aber ich weiß nicht, ob es Ihre # tut 2). http://gforge.se/2014/01/fast-track-publishing-using-knitr-part-iii/

+1

Seit dem neuen rmarkdown muss der Workflow in meinem Post [geändert] werden (http://gforge.se/2014/07/fast-track-publishing-using-rmarkdown/), habe ich derzeit ein paar einfache Funktionen implementiert das macht den Job für das Hinzufügen eines Zahlenzählers - auch wenn es nicht so elegant wie zuvor ist. Die Funktionen sind im [Gmisc-Paket] (http://gforge.se/packages/) vorhanden und sind 'figCapNo',' figCapNoLast' und 'figCapNoNext'. Sehen Sie, wie Sie es in der Dokumentation für [first verwenden können figCapNo] (https: // github.com/gforge/Gmisc/Blob/Master/R/figCaptionNo.R # L19). –

24

Ich bin zu spät zur Party, aber ich wollte ein kleines Paket erwähnen, das ich vor kurzem gebaut habe, um mit knitr Figurenunterschriften und Querverweise zu machen. Es heißt kfigr und Sie können es mit devtools::install_github('mkoohafkan/kfigr') installieren. Es ist noch in der aktiven Entwicklung, aber die Hauptfunktionalität ist da. Schau dir die Vignette an, sie zeigt einige Anwendungsbeispiele und definiert einige Hooks für Bildunterschriften und Anker (ich kann später wählen, dass das Paket knitr importiert und diese Hooks beim Laden definiert).

BEARBEITEN: kfigr ist jetzt auf CRAN verfügbar!

+1

Jetzt bekannt als 'kfigr' und es funktioniert ganz gut, vielen Dank! –

+3

Es sieht so aus, als würde 'kfigr' bald veraltet sein, wenn 'bookdown' im Betatest ist: https://bookdown.org/yihui/bookdown/. Ich ermutige Leute, 'Bookdown' zu versuchen, da' kfigr' nicht immer nett mit 'Pandoc' spielt und Abschriften nicht unterstützt -> PDF. – mikeck

8

Auch sehr spät auf die Party Ich änderte Yihuis Vorschlag here, dass er auch oben verlinkt, um Referenzierung zu tun.

```{r functions, include=FALSE} 
# A function for captioning and referencing images 
fig <- local({ 
    i <- 0 
    ref <- list() 
    list(
     cap=function(refName, text) { 
      i <<- i + 1 
      ref[[refName]] <<- i 
      paste("Figure ", i, ": ", text, sep="") 
     }, 
     ref=function(refName) { 
      ref[[refName]] 
     }) 
}) 
``` 
```{r cars, echo=FALSE, fig.cap=fig$cap("cars", "Here you see some interesting stuff about cars and such.")} 
plot(cars) 
``` 

What you always wanted to know about cars is shown in figure `r fig$ref("cars")` 
+0

Danke @ user3355146. Das einzige Problem ist, dass fig $ ref() nur aufgerufen werden kann, nachdem die Figur generiert wurde, d. H. Figur 'r fig $ ref (" Autos ")' BELOW zeigt ... etc usw. wird nicht funktionieren. Aber immer noch eine sehr schöne Lösung, um mein Problem zu lösen. Vielen Dank, – woshishui

2

Eine andere Lösung:

https://github.com/adletaw/captioner

Aus der Readme:

captioner() returns a captioner function for each set of figures, tables, etc. that you want to create. See the help files for more details. 

For example: 

> fig_nums <- captioner() 

> fig_nums("my_pretty_figure", "my pretty figure's caption") 

"Figure 1: my pretty figure's caption" 

> fig_nums("my_pretty_figure", cite = TRUE) 
Verwandte Themen