Подтвердить что ты не робот

Knitr/rmarkdown/Latex: Как перечислить цифры и таблицы?

Я пытаюсь перекрестно ссылаться на цифры и таблицы в формате PDF, созданного с помощью knitr/rmarkdown. Ниже приведены некоторые вопросы о SO и tex.stackexchange(здесь и здесь), которые предлагают способ сделать это inline - добавить \ref{fig:my_fig}, где my_fig - это метка блока. Однако, когда я пытаюсь это сделать в моем документе rmarkdown, я получаю ??, где должен быть номер цифры. Я хотел бы узнать, как получить перекрестные ссылки для правильной работы.

Ниже приведен воспроизводимый пример. Есть два файла: файл rmarkdown плюс файл header.tex, который я включил на всякий случай, если он влияет на ответ (хотя у меня такая же проблема, включен ли файл header.tex или нет).

В файле rmarkdown есть три примера перекрестных ссылок. Пример 1 - это показатель, для которого перекрестная привязка терпит неудачу (вместо номера цифры отображается ??). Там также вторая попытка с комментариями (основанная на этом SO answer), где я пытаюсь установить среду рисунка, ярлык и подпись с помощью latex разметки до и после куска, но это приводит к ошибке pandoc, когда я пытаюсь связать документ. Ошибка:

! Missing $ inserted.
<inserted text> 
                $
l.108 ![](testCrossRef_

В примере 2 используются xtable и перекрестные ссылки. В примере 3 используется kable, и перекрестные ссылки не выполняются.

Снимок экрана PDF файла включен в начало этой публикации.

rmarkdown файл

---
title: | 
  | My Title  
author: | 
  | eipi10  
  | Department of Redundancy Department  
date: "`r format(Sys.time(), '%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 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 файл

% Caption on top
% https://tex.stackexchange.com/a/14862/4762
\usepackage{floatrow}
\floatsetup[figure]{capposition=top}
\floatsetup[table]{capposition=top}

Выход PDF

введите описание изображения здесь

4b9b3361

Ответ 1

Вы можете использовать выходной формат bookdown::pdf_document2 вместо pdf_document, а синтаксис для ссылки на фигуру \@ref(fig:chunk-label); см. документацию для деталей: https://bookdown.org/yihui/bookdown/figures.html

Ответ 2

После Я не могу сгенерировать \label {fig: mwe-plot} с knitr, добавив \label{...} к аргументам caption, создадим метки в базовом tex, т.е.

```{r fig1, echo=FALSE, fig.cap="\\label{fig:fig1}This is a caption"}
plot(mtcars$wt, mtcars$mpg)
```

и

```{r tab2, echo=FALSE}
library(knitr)
kable(mtcars[1:3,1:4], caption="\\label{tab:tab2}A `kable` table")
```