【问题标题】:How do I specify kableExtra options with kbl format = "markdown"?如何使用 kbl 格式 =“markdown”指定 kableExtra 选项?
【发布时间】:2020-12-14 20:47:18
【问题描述】:

我正在尝试使用 bookdown 将 .bib 文件中的引文包含到 Rmarkdown 中的 kable 表中。如果我使用 kableExtra::kbl() 在 kable 中指定 format = "markdown",则引用有效。但是将此提供给其他 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},
}

【问题讨论】:

    标签: r r-markdown bookdown kable citations


    【解决方案1】:

    警告告诉您kable 的样式函数不适用于markdown 格式,因此您确实需要使用format = "latex"(默认值)。

    为了使引用在表格中起作用,我们必须付出一些额外的努力,并且只使用 LaTeX 来处理引用(而不是让 knitr 事先进行一些争论)。

    1. 设置一个 .tex 文件 preamble.tex,其中包含合适的 LaTeX 包(如 natbib)并指定参考书目样式:

      preamble.tex

      \usepackage{natbib}
      \bibliographystyle{unsrtnat}
      
    2. 在您的 .Rmd YAML 标头中包含序言:

      output: 
      bookdown::pdf_book:
      includes: 
        in_header: preamble.tex
      
    3. 通过在您的 .Rmd 中添加 \bibliography{ref} 来包含参考书目。使用\cite{&lt;your_reference&gt;} 在文本中引用。请注意,\ 是 R 的特殊字符,如果在字符串中使用,则需要额外的 \ 进行转义:

      tmp <- data.frame(
       'line' = c(1:3), 
       'ref' = c("no ref", "\\cite{R-base}", "no ref")
      )
      

    示例:

    让我们检查引用是否有效:R \citep{R-base} 很棒! ```{r} kbl(tmp,booktabs = T,escape = F)%>% kableExtra::kable_styling( latex_options = c("striped", "hold_position", "repeat_header") ) %>% column_spec(2, width = "50em") %>% 景观() ```

    【讨论】:

    • 谢谢@M。 A. 它必须在文档正文中添加\bibliography{ref} 以便 natbib 找到 bib 文件,而不是在 YAML 标头中指定它。但现在它起作用了。有一个错字:in_header: preample.tex 应该是 in_header: preamble.tex
    • @VincentH 抱歉,赶时间;我已经更正了!如果你能接受答案就好了。
    猜你喜欢
    • 2023-01-28
    • 1970-01-01
    • 2022-11-11
    • 2018-10-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-28
    • 1970-01-01
    相关资源
    最近更新 更多