2016-05-09 12 views
9

Kann jemand Zahlen in den Bildunterschriften, für HTML-Format RMarkdown Skript?Rmarkdown HTML-Nummer Zahlen

Für PDF-Dokument wird die Beschriftung etwas sagen wie:

Figure X: Some Caption Text 

jedoch die äquivalente Beschriftung für die HTML-Version einfach

Some Caption Text 

Dies macht Querverweise Zahlen Zahl sagt vollständig nutzlos.

Mein RMD-Header-Richtlinien sind wie folgt:

--- 
title: 
    "My Title" 
author: 
    "Me" 
date: 
    "1/1/2016" 
output: 
    pdf_document: 
    toc: false 
    number_sections: true 
    fig_caption: true 
    html_document: 
    toc: true 
    number_sections: true 
    fig_caption: true 
--- 

Antwort

2

Also, wenn jemand eine bessere Lösung hat, das ist die Lösung, die ich mit kam, gibt es einige Mängel bei diesem Ansatz (zum Beispiel, wenn die Zahl/Tabellennummer ist abhängig von der Abschnittsnummer etc ...), aber für das grundlegende HTML-Dokument funktioniert es.

Irgendwo an der Spitze Sie Dokument, führen Sie dies:

```{r echo=FALSE} 
#Determine the output format of the document 
outputFormat = opts_knit$get("rmarkdown.pandoc.to") 

#Figure and Table Caption Numbering, for HTML do it manually 
capTabNo = 1; capFigNo = 1; 

#Function to add the Table Number 
capTab = function(x){ 
    if(outputFormat == 'html'){ 
    x = paste0("Table ",capTabNo,". ",x) 
    capTabNo <<- capTabNo + 1 
    }; x 
} 

#Function to add the Figure Number 
capFig = function(x){ 
    if(outputFormat == 'html'){ 
    x = paste0("Figure ",capFigNo,". ",x) 
    capFigNo <<- capFigNo + 1 
    }; x 
} 
``` 

Dann im Verlauf des Dokuments, wenn Sie sagen, eine Figur zeichnen wollen:

```{r figA,fig.cap=capFig("My Figure Caption") 
base = ggplot(data=data.frame(x=0,y=0),aes(x,y)) + geom_point() 
base 
``` 

Stellvertreter der capFig zu capTab oben, wenn Sie eine Tabellenüberschrift möchten.

+0

Ich benutze auch so etwas. Ich schätze das Problem ist, dass du immer noch keine Zahlenzahl referenzieren kannst. –

+0

Yeah, Sie können mit dem Paket 'kfigr' folgende Funktionen erstellen: ' refFig = function (x, prefix = TRUE) {x = figr (x, Präfix = Präfix, link = FALSE, type = 'Figur') ; x} refTab = Funktion (x, Präfix = TRUE) {x = figr (x, Präfix = Präfix, link = FALSE, type = 'Table'); x} ' Dann rufen Sie inline' r RefFig ('Mylabel') '', die für HTML-und Latex-Ausgabe funktioniert. –

2

Wir können pandoc-crossref verwenden, einen Filter, der eine Querverweisung von Zahlen, Tabellen, Abschnitten und Gleichungen ermöglicht und für alle Ausgabeformate funktioniert. Der einfachste Weg ist cat die Abbildung Label (in Form von {#fig:figure_label}) nach jedem Diagramm, obwohl dies erfordert echo=FALSE und results='asis'. Dann können wir eine Figur referenzieren, wie wir ein Zitat nennen würden: [@fig:figure_label] produziert standardmäßig fig. figure_number. Hier

ist ein MWE:

--- 
output: 
    html_document: 
    toc: true 
    number_sections: true 
    fig_caption: true 
    pandoc_args: ["-F","pandoc-crossref"] 
--- 

```{r} 
knitr::opts_chunk$set(echo=FALSE,results='asis') 

``` 


```{r plot1,fig.cap="This is plot one"} 
x <- 1:10 
y <- rnorm(10) 
plot(x,y) 
cat("{#fig:plot1}") 

``` 

As we can see in [@fig:plot1]... whereas [@fig:plot2] shows... 

```{r plot2, fig.cap="This is plot two"} 
plot(y,x) 
cat("{#fig:plot2}") 

``` 

, die erzeugt (Entfernen der Grafik

PLOT1

Abbildung 1: Das ist Grundstück ein

Wie wir in Abb sehen 1 ... während Fig. 2 zeigt ...

PLOT2

Abbildung 2: Das ist Grundstück zwei

Siehe pandoc-crossref readme für mehr Optionen und Anpassungen.

pandoc-crossref installieren zu können, müssen Sie unter der Annahme einer Haskell-Installation:

cabal update 
cabal install pandoc-crossref 
0

Dieses Problem mit bookdown behoben wurde. Es ist noch nicht stabil, aber sicherlich einen Versuch wert.

0

Ich lösen Cross-Referenzierung mit einer Lösung ähnlich wie von Nicholas oben beschrieben. Ich benutze BookDown für einige Projekte, aber ich finde das unangenehm für andere Projekte, wo ich einfach nur Querverweise haben möchte.

Ich benutze die folgenden, wenn ich ein Papier mit rmarkdown schreibe und ich möchte es im Standardformat für die Einreichung in ein Journal. Ich möchte am Ende eine Figurenlegende, dann Tische, dann habe ich die Tabellen und Zahlen. Während ich schreibe, habe ich nur eine ungefähre Vorstellung davon, auf welche Reihenfolge die Zahlen im Text verweisen werden. Ich möchte sie nur mit einem Textcode wie fig: foobar referenzieren und die Nummer im Text basierend auf Aussehen erhalten. Wenn ich mir die Liste der Figurlegenden anschaue, werde ich sehen, in welcher Reihenfolge die Legenden platziert werden und Legenden nach Bedarf verschieben.

Hier ist meine Struktur.

Ich habe ein R-Paket, wo ich Dinge habe, die ich für Papiere, wie verschiedene Bibliographien und Helper R-Funktionen brauche. In diesem Paket habe ich die folgende Funktion, die einige Variablen verwendet, die in der Rmd-Hauptumgebung definiert sind: .rmdenvir und .rmdctr.

ref <- function(useName) { 
require(stringr) 
if(!exists(".refctr")) .refctr <- c(`_` = 0) 
if(any(names(.refctr)==useName)) return(.refctr[useName]) 
type=str_split(useName,":")[[1]][1] 
nObj <- sum(str_detect(names(.refctr),type)) 
useNum <- nObj + 1 
newrefctr <- c(.refctr, useNum) 
names(newrefctr)[length(.refctr) + 1] <- useName 
assign(".refctr", newrefctr, envir=.rmdenvir) 
return(useNum) 
} 

Er geht davon aus, dass ich die Dinge nenne ich mit so etwas wie cntname verwiesen werden soll: foo, zum Beispiel Abb: foo. Es macht einen neuen Zähler für jeden einzelnen und ich kann neue Zähler bei Bedarf während des Schreibens erstellen.

In meinem Haupt Rmd Datei, habe ich einige Set-up-Linien:

```{r setup_main} 
    require(myPackageforPapers) 
    # here is where the variables needed by ref() are defined. 
    .rmdenvir = environment() 
    .refctr <- c(`_` = 0) 
    ```` 

Im Text ich folgendes verwenden

You can see what I am trying to show in Figure `r ref("fig:foo")` 
    and you can see it also in Tables `r ref("tab:foo")` 
    and A`r ref("tabappA:foobig")`. 

„Sie bekommen können sehen, was ich versuche zu zeigen Sie in Abbildung 1 und Sie können es auch in den Tabellen 1 und A1 sehen. " Obwohl die Zahlen möglicherweise nicht 1 sind; Die zu verwendende Nummer wird dynamisch bestimmt. Ich muss zum ersten Mal keine spezielle Funktion verwenden, wenn ich auf eine Figur, einen Tisch oder was auch immer ich zähle. ref() ermittelt das, indem es prüft, ob das Label bereits existiert. Wenn nicht, weist es die nächste Nummer zu und gibt sie zurück. Sie müssen also nicht "Label" an einem Ort und "Ref" in einem anderen verwenden.

Im Laufe des Schreibens, könnte ich, dass Anhang A wird immer zu groß, entscheiden und dass ich einige der Tabellen in Anhang B. Alles was ich brauche die oben

You can see what I am trying to show in Figure `r ref("fig:foo")` 
    and you can see it also in Tables `r ref("tab:foo")` 
    and B`r ref("tabappB:foobig")`. 
zu tun abgespaltenen ändern

Ich gebe nur einen neuen Zählername 'tabappB' an und die Nummern dafür werden dynamisch bestimmt.

Am Ende meiner Rmd Datei, habe ich eine Figur Liste, die wie

# Figure Legends 

    Figure `r ref("fig:foo")`. This is the legend for this figure. 

    Figure `r ref("fig:foo2")`. This is the legend for another figure. 

Dann erscheinen meine Tabellen wie so

```{r print-tablefoo, echo=FALSE} 
    tablefoo=mtcars 
    thecap = "Tables appear with a legend while figures do not." 
    fullcap = paste("Table ", ref("tab:foo"), ". ", thecap, sep="") 
    kable(tablefoo, caption=fullcap) 
    ``` 

und dann die Zahlen wie so aussehen:

```{r fig-foo, echo=FALSE, fig.cap=paste("Figure",ref("fig:foo"))} 
    plot(1,1) 
    ``` 

Anhang A ist eine Rmd-Datei, die als Kind enthalten ist.Es wird über Tabellen wie

```{r print-tableAfoo, echo=FALSE} 
    tablefoo=mtcars 
    thecap = "This is a legend." 
    fullcap = paste("Table A", ref("tabappA:foobig"), ". ", thecap, sep="") 
    kable(tablefoo, caption=fullcap) 
    ``` 

ich den „A“ erhalten Tabelle A1 muß hinzufügen, aber ich finde es einfacher, wenn R nicht zu viel denken, für mich in Bezug auf meine Zählern Kennzeichnung. Ich möchte nur, dass es die richtige Nummer zurückgibt.

Die Querverweise funktionieren für HTML, PDF/Latex oder Word. Ich würde gerne bei Latex-Lösungen bleiben, aber meine Co-Autoren verwenden Wort, also brauche ich eine Lösung, die mit Pandoc und Wort funktioniert. Manchmal möchte ich auch html oder eine andere Ausgabe und ich brauche eine Lösung, die für jede Ausgabe funktioniert, die mit rmarkdown funktioniert.

Verwandte Themen