Я пытаюсь включить цитаты из файла .bib в таблицу kable в Rmarkdown, используя bookdown. Цитаты работают, если я указываю format = "markdown"
в кабеле с помощью kableExtra::kbl()
. Но добавление этого к дополнительным параметрам форматирования kable_styling
больше не работает и приводит к предупреждениям:
---
title: "Citation in landscape table"
site: bookdown::bookdown_site
output:
bookdown::pdf_book:
bibliography: [ref.bib]
biblio-style: apalike
---
```{r setup, include=FALSE}
knitr::opts_chunk$set(echo = TRUE)
library('kableExtra')
```
```{r}
tmp <- data.frame('line' = c(1:3), 'ref' = c("no ref", "@R-base", "no ref"))
kbl(tmp, format = "markdown", longtable = TRUE, booktabs = TRUE, escape = FALSE) %>%
kable_styling(latex_options =c("striped", "hold_position", "repeat_header", "scale_down")) %>%
column_spec(2, width = "20em") %>%
landscape()
```
Это приводит к предупреждающим сообщениям в созданном PDF-файле:
## Warning in kableExtra::kable_styling(., latex_options = c("striped",
## "hold_position", : Please specify format in kable. kableExtra can customize
## either HTML or LaTeX outputs. See https://haozhu233.github.io/kableExtra/ for
## details.
## Warning in column_spec(., 2, width = "20em"): Please specify format in
## kable. kableExtra can customize either HTML or LaTeX outputs. See https://
## haozhu233.github.io/kableExtra/ for details.
## Warning in kableExtra::landscape(.): Please specify format in kable. kableExtra
## can customize either HTML or LaTeX outputs. See https://haozhu233.github.io/
## kableExtra/ for details
Если я исключаю опцию format = "markdown"
, предупреждения исчезают, и я получаю правильную таблицу в альбомном формате, но цитирование больше не работает.
Как мне получить как горизонтальную таблицу с параметрами, указанными в kable_styling()
, так и рабочие цитаты в таблице?
Содержимое ref.bib:
@Manual{R-base,
title = {R: A Language and Environment for Statistical
Computing},
author = {{R Core Team}},
organization = {R Foundation for Statistical Computing},
address = {Vienna, Austria},
year = {2019},
url = {https://www.R-project.org},
}
Предупреждения говорят вам, что функции стиля kable
не применяются к формату markdown
, поэтому вам действительно нужно использовать format = "latex"
(по умолчанию).
Чтобы ссылки работали внутри таблицы, нам нужно приложить некоторые дополнительные усилия и использовать LaTeX только для обработки ссылок (вместо того, чтобы позволить Knitr предварительно разобраться).
Настройте файл .tex preamble.tex
, который включает подходящий пакет LaTeX (например, natbib) и определяет стиль библиографии:
preamble.tex
\usepackage{natbib}
\bibliographystyle{unsrtnat}
Включите преамбулу в заголовок .Rmd YAML:
output:
bookdown::pdf_book:
includes:
in_header: preamble.tex
Включите библиографию, добавив \bibliography{ref}
в свой .Rmd. Используйте \cite{<your_reference>}
для ссылки в тексте. Обратите внимание, что \
— это специальный символ для R, и его необходимо экранировать дополнительным \
, если он используется внутри строки:
tmp <- data.frame(
'line' = c(1:3),
'ref' = c("no ref", "\\cite{R-base}", "no ref")
)
Пример:
Let's check that citations work: R \citep{R-base} is great! ```{r} kbl(tmp, booktabs = T, escape = F) %>% kableExtra::kable_styling( latex_options = c("striped", "hold_position", "repeat_header") ) %>% column_spec(2, width = "50em") %>% landscape() ```
@VincentH Извините, торопился; Я исправил это! Было бы неплохо, если бы вы тогда приняли ответ.
Спасибо @М. О. Пришлось добавить
\bibliography{ref}
в тело документа, чтобы natbib мог найти файл bib, вместо того, чтобы указывать его в заголовке YAML. Но теперь это работает. Есть одна опечатка:in_header: preample.tex
должно бытьin_header: preamble.tex