【发布时间】:2022-01-13 13:10:25
【问题描述】:
尽管关于这个主题的问题很多,尽管阅读了the manual,包括最后一段,我还是无法理解它。我找到了 pdf 输出的解决方案,但希望它也适用于 html 输出(理想情况下,一种适用于 pdf 和 html 输出的方法 - 就像我在下面使用 opts_knit$get("rmarkdown.pandoc.to") 的尝试一样,遗憾的是 html 失败了)。
使用 bookdown,很容易引用 kabel(Extra)- 或 flextable- 表格,但我对 pander-tables 的解决方法仅适用于 pdf 输出。谁能指导我如何使用 html 来实现这一点?
下面的 MWE 示例适用于 pdf,但在输出到 html 时对最后一个表的引用会中断。
MWE:
---
title: "Untitled"
output:
bookdown::pdf_document2:
keep_tex: yes
bookdown::html_document2: default
---
```{r setup, include=FALSE}
knitr::opts_chunk$set(echo = FALSE)
library(knitr)
library(tidyverse)
library(pander)
library(flextable)
```
```{r}
df <- expand.grid(A = LETTERS[1:2],
B = letters[3:5],
stringsAsFactors = FALSE)%>%
mutate( x = round(rnorm(nrow(.)),1))%>%
arrange(A,B)
```
```{r mypanderworkaround}
addlabref <- function(fcap, flab){
if (opts_knit$get("rmarkdown.pandoc.to") %in%
c("beamer", "latex")){
lab <- sprintf("\\label{tab:%s}",flab)
sprintf("%s %s", lab, fcap)
}else{
lab <- sprintf("\\#tab:%s",flab)
sprintf("<caption>%s %s</caption>", lab, fcap)
}
}
```
```{r c1}
kable(df, caption = "table with kable")
```
```{r c2}
flextable(df)%>%set_caption(caption = "table with flextable")
```
```{r c3}
pander(df, caption = addlabref("table with pander", "c3") )
```
kable figure is \@ref(tab:c1).
flextable figure is \@ref(tab:c2)
pander figure is \@ref(tab:c3)
【问题讨论】:
标签: r r-markdown knitr pander