2012-12-12 15 views
36

sto scrivendo un file Rmd, per essere trattati da knitr in HTML. Contiene alcuni frammenti R che generano figure, che vengono memorizzati come URI di dati in HTML.figura, i riferimenti utilizzando knitr e Markdown in html

1) Come faccio ad aggiungere una didascalia a un'immagine di questo tipo? Mi piacerebbe avere una didascalia che dice qualcosa come "Figura 3: blah blah blah", dove il "3" viene generato automaticamente.

2) Come faccio a seguito di riferimento questa immagine, vale a dire, "come si può vedere nella figura 3, bla bla".

+0

alcuni metodi sono apparsi per fare questo, ma si spera che sarà rotolato in knitr o Pandoc: https://github.com/adletaw/captioner https://github.com/mkoohafkan/kfigr (indicato di seguito) http://galahad.well.ox.ac.uk/repro/ http: //rmflight.github. io/posts/2012/10/papersinRmd.html (anche indicato sotto) http: // gforge.se/2014/01/fast-track-publishing-using-knitr-part-iii/ – Ben

+2

Sembra che questo stia ottenendo supporto diretto in knitr/pandoc ora; vedi https://bookdown.org/yihui/bookdown/, in particolare le sezioni 2.3-2.5. – mikeck

risposta

15
  1. È possibile creare i numeri di figura con un contatore semplice in R; vedi one example here. Il problema è se il renderizzatore di markdown renderà la didascalia della figura per te: R Markdown v1 no, ma lo sarà v2 (basato su Pandoc).
  2. Non so. Non esiste un modo diretto per inserire un'etichetta come identificativo per le figure, quindi probabilmente non è possibile incrociare le figure di riferimento con Markdown puro. Una volta che hai problemi come questo, pensa (1) ne ho davvero bisogno? (2) se si intende essere un documento con una struttura complicata, penso che sia meglio usare direttamente LaTeX (documenti Rnw).
5

Un modo per fare entrambe le cose di questi è descritto qui: http://rmflight.github.io/posts/2012/10/papersinRmd.html

Un altro è qui descritto (ma non so se lo fa il tuo # 2). http://gforge.se/2014/01/fast-track-publishing-using-knitr-part-iii/

+1

Poiché il nuovo rmarkdown il flusso di lavoro i miei bisogni pubblicare a [essere cambiato] (http://gforge.se/2014/07/fast-track-publishing-using-rmarkdown/), ho attualmente implementato alcune funzioni semplici che fanno il lavoro per aggiungere un contatore di figure - anche se non è elegante come prima. Le funzioni sono presenti nel [pacchetto Gmisc] (http://gforge.se/packages/) e sono 'figCapNo',' figCapNoLast', e 'figCapNoNext'- vedi come usarlo int la documentazione per il [primo figCapNo] (https: // GitHub.com/GForge/Gmisc/blob/master/R/figCaptionNo.R # L19). –

24

Sono in ritardo per la festa, ma volevo menzionare un piccolo pacchetto che ho recentemente creato per fare didascalie e riferimenti incrociati con knitr. Si chiama kfigr ed è possibile installarlo utilizzando devtools::install_github('mkoohafkan/kfigr'). È ancora in sviluppo attivo ma la funzionalità principale è lì. Assicurati di controllare la vignetta, mostra alcuni esempi di utilizzo e definisce alcuni ganci per le didascalie e le ancore delle figure (in seguito posso scegliere di importare il pacchetto knitr e definire quegli hook in caricamento).

EDIT: kfigr è ora disponibile su CRAN!

+1

Ora noto come 'kfigr' e funziona abbastanza bene, grazie mille! –

+3

Sembra che 'kfigr' diventerà presto obsoleto quando' bookdown' è in beta testing: https://bookdown.org/yihui/bookdown/. Incoraggio le persone a provare 'bookdown' dato che' kfigr' non sempre funziona bene con 'pandoc' e non supporta markdown -> PDF. – mikeck

8

anche molto in ritardo alla festa ho cambiato Yihuis suggerimento here che anche lui legato soprattutto a fare riferimento.

```{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

Grazie @ user3355146. L'unico problema è che la figura $ ref() può essere chiamata solo dopo che la figura è stata generata, cioè la figura 'r fig $ ref (" auto ")' Mostra in basso ... ecc. Ecc. Non funzionerà. Ma ancora una soluzione molto bella per risolvere il mio problema. Grazie, – woshishui

2

Un'altra soluzione:

https://github.com/adletaw/captioner

Dal 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) 
Problemi correlati