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.
Ich benutze auch so etwas. Ich schätze das Problem ist, dass du immer noch keine Zahlenzahl referenzieren kannst. –
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. –