Ich versuche, Zahlen und Tabellen in einem mit knitr/rmarkdown erstellten PDF zu referenzieren. Es gibt einige Fragen zu SO und tex.stackexchange ( hier und hier zum Beispiel), die darauf hinweisen, dass der Weg für diese Inline das Hinzufügen von \ref{fig:my_fig}
ist, wobei my_fig
das Chunk-Label ist . Wenn ich das jedoch in meinem rmarkdown
-Dokument versuche, erhalte ich ??
, wo die Bildnummer sein sollte. Ich möchte herausfinden, wie man Querverweise auf die korrekte Arbeitsweise bringt.
Ein reproduzierbares Beispiel ist unten. Es gibt zwei Dateien: die rmarkdown
-Datei plus eine header.tex
-Datei, die ich hinzugefügt habe, nur für den Fall, dass sie die Antwort beeinflusst (obwohl ich das gleiche Problem habe, ob ich die header.tex
-Datei einbeziehe oder nicht).
In der Datei rmarkdown
gibt es drei Querverweisbeispiele. Beispiel 1 ist eine Abbildung, für die die Querverweise fehlschlagen (??
wird anstelle der Abbildungsnummer angezeigt). Es gibt auch einen zweiten, auskommentierten Versuch (basierend auf dieser SO Antwort ), bei dem ich versuche, die Umgebung, das Label und die Beschriftung der Figur mit latex
vor und nach dem Block einzustellen, dies führt jedoch dazu Eine pandoc
-Fehlermeldung, wenn ich versuche, das Dokument zu stricken. Der Fehler ist:
! Missing $ inserted. <inserted text> $ l.108 , '%B %e, %Y')`"
output:
pdf_document:
fig_caption: yes
includes:
in_header: header.tex
keep_tex: yes
fontsize: 11pt
geometry: margin=1in
graphics: yes
---
```{r setup, include=FALSE}
knitr::opts_chunk$set(echo = FALSE, message=FALSE, warning=FALSE, fig.height=2, fig.width=4)
```
# Example 1. Figure
This is a report. Take a look at Figure \ref{fig:fig1}.
```{r fig1, echo=FALSE, fig.cap="This is a caption"}
plot(mtcars$wt, mtcars$mpg)
```
<!-- Now, let's take a look at this other plot in Figure \ref{fig:fig2}. -->
<!-- \begin{figure} -->
<!-- ```{r fig2, echo=FALSE} -->
<!-- plot(mtcars$cyl, mtcars$mpg) -->
<!-- ``` -->
<!-- \caption{This is another caption} -->
<!-- \label{fig:fig2} -->
<!-- \end{figure} -->
# Example 2: `xtable`
Some more text. See Table \ref{tab:tab1} below.
```{r echo=FALSE, results="asis"}
library(xtable)
print.xtable(
xtable(mtcars[1:3,1:4], label="tab:tab1", caption="An xtable table"),
comment=FALSE)
```
# Example 3: `kable`
Some more text. See Table \ref{tab:tab2} below.
```{r tab2, echo=FALSE}
library(knitr)
kable(mtcars[1:3,1:4], caption="A `kable` table")
```
header.tex
datei% Caption on top
% https://tex.stackexchange.com/a/14862/4762
\usepackage{floatrow}
\floatsetup[figure]{capposition=top}
\floatsetup[table]{capposition=top}
Sie können das Ausgabeformat bookdown::pdf_document2
anstelle von pdf_document
verwenden. Die Syntax für das Referenzieren einer Abbildung lautet \@ref(fig:chunk-label)
; Weitere Informationen finden Sie in der Dokumentation: https://bookdown.org/yihui/bookdown/figures.html
Nach kann ich\label {fig: mwe-plot} mit knitr nicht generieren, durch Hinzufügen von \label{...}
zu den Caption-Argumenten werden Labels in der zugrunde liegenden tex
-Datei erzeugt, d.
```{r fig1, echo=FALSE, fig.cap="\\label{fig:fig1}This is a caption"}
plot(mtcars$wt, mtcars$mpg)
```
und
```{r tab2, echo=FALSE}
library(knitr)
kable(mtcars[1:3,1:4], caption="\\label{tab:tab2}A `kable` table")
```
Sie können das Paket captioner ausprobieren. Beispiele finden Sie unter diesem Link .
In meinem Fall füge ich einen Code-Block hinzu mit:
table_captions <- captioner::captioner(prefix="Tab.")
figure_captions <- captioner::captioner(prefix="Fig.")
t.ref <- function(label){
stringr::str_extract(table_captions(label), "[^:]*")
}
f.ref <- function(label){
stringr::str_extract(figure_captions(label), "[^:]*")
}
Ich füge bei der Definition von Codeabschnitten Bildunterschriften in Tabellen und Abbildungen ein:
```{r chunk_creating_one_figure, echo=FALSE, fig.cap=figure_captions("one_figure", "figure label")}
plot(1)
```
oder
```{r chunk_creating_one_table, echo=FALSE, fig.cap=table_captions("one_table", "table label")}
knitr::kable(data.frame(col="something"), format="markdown")
```
Referenzen sind als Inline-Text in meinem gesamten Rmarkdown enthalten:
As shown in figure `r f.ref("one_figure")`
Data is shown on table `r t.ref("one_table")`