格式 "latex" 的 kableExtra 浮动选项(左浮动或右浮动)在 Rmarkdown 中不起作用

kableExtra float options (float-left or float-right) for format "latex" not working in Rmarkdown

浮动选项不适用于 "latex" 格式的 pdf 渲染。

MWE:

---
title: ""
author: "Jono3030"
output:
  html_document: default
  pdf_document:
    keep_tex: no
---

```{r echo=F, message=F, warning=F}
library(dplyr)
library(knitr)
library(kableExtra)
```

```{r, echo=FALSE}
out_type <- knitr::opts_knit$get("rmarkdown.pandoc.to")
```

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed vulputate urna in eleifend commodo. Praesent et tristique ligula, eget pretium eros. Ut congue leo nibh, a volutpat erat efficitur sed. Aliquam rhoncus mollis diam nec bibendum. Suspendisse eget massa a dui elementum tempus. Maecenas a lacus a odio bibendum eleifend sed ac mauris. Nunc molestie dui dignissim, egestas elit quis, suscipit erat. Donec id suscipit lectus, nec mollis nisl. Quisque ultrices quis eros in hendrerit. Etiam enim metus, vestibulum nec congue vitae, tempus eu ex. Ut vehicula elementum orci, vitae viverra mi tristique ac.

```{r demotable, results='asis', echo=F, message=F, warning=F}
latex_table <- tibble(col1=c(runif(9, 1, 99)), col2=c(runif(9, 1, 99))) %>%
                 kable(format="latex",
                       booktabs = T,
                       linesep = '',
                       caption = "MRE") %>%
                       kable_styling(full_width = F, position = "float_right")

html_table <- tibble(col1=c(runif(9, 1, 99)), col2=c(runif(9, 1, 99))) %>%
                 kable(format="html",
                       caption = "MRE") %>%
                       kable_styling(full_width = F, position = "float_right")

switch(out_type,
    html = html_table,
    latex = latex_table
)
```

Sed in efficitur mauris. Donec vulputate non leo eget commodo. Vivamus luctus arcu at lorem pulvinar condimentum. Nullam felis risus, mattis vel accumsan vehicula, ullamcorper in risus. Nullam ullamcorper dignissim massa, ac tristique nibh fringilla in. Proin tortor est, ornare sit amet magna non, eleifend feugiat sapien. Fusce quis augue quis lectus dignissim consequat vel et dui. Aliquam dui eros, cursus a mauris id, volutpat blandit tellus. Nunc porta tincidunt rhoncus. Donec fermentum sem et justo ultricies, ut ullamcorper quam vehicula. Aenean commodo velit rhoncus nibh tristique, at sollicitudin nibh ultricies. Curabitur odio enim, fringilla id neque a, pharetra lobortis urna. Curabitur suscipit quam vitae libero vestibulum, vel ornare arcu pharetra. Sed sagittis mauris faucibus arcu tincidunt elementum. In sodales tincidunt iaculis.

Cras a eleifend sapien, a eleifend nulla. Donec ultrices molestie nibh sed facilisis. Aliquam eu hendrerit justo. Nullam ac dictum dui. Nullam ac lectus ut nisl consequat ornare. Sed accumsan rutrum varius. Nam nec felis id elit viverra consequat et non lorem.

Pellentesque eget blandit lorem. Curabitur at ultricies leo, sed porttitor erat. Vivamus fringilla erat a arcu scelerisque vestibulum. Maecenas non mollis lectus. Aenean a ipsum sem. Aenean nec hendrerit lacus, at ornare neque. Phasellus id nisi non risus faucibus condimentum.

Nulla a nulla a nulla dapibus scelerisque. Pellentesque molestie leo id porta tincidunt. Ut venenatis interdum egestas. Ut id maximus libero, ut iaculis lacus. Praesent sit amet bibendum lacus. Donec venenatis at mauris sit amet mollis. Donec eleifend nibh mauris, in euismod nisi hendrerit a. Cras porttitor rhoncus diam eget rutrum. Phasellus condimentum maximus felis sit amet fermentum. Aenean lacinia ornare dolor, sit amet finibus magna tempor sed.

MWE 结果如下:

我想知道是否有人可以重现这个问题,因为我在 Whosebug 或其他任何地方都没有发现任何关于它的内容。

使用 "html" 格式没有问题:

我是不是漏掉了什么?浮动选项是否仅适用于 "html" 格式?

编辑: sessionInfo() 按照@J_F

的要求
R version 3.6.3 (2020-02-29)
Platform: x86_64-pc-linux-gnu (64-bit)
Running under: Debian GNU/Linux 9 (stretch)

Matrix products: default
BLAS:   /usr/lib/libblas/libblas.so.3.7.0
LAPACK: /usr/lib/lapack/liblapack.so.3.7.0

locale:
 [1] LC_CTYPE=en_CA.UTF-8       LC_NUMERIC=C               LC_TIME=en_CA.UTF-8        LC_COLLATE=en_CA.UTF-8
 [5] LC_MONETARY=en_CA.UTF-8    LC_MESSAGES=en_CA.UTF-8    LC_PAPER=en_CA.UTF-8       LC_NAME=C
 [9] LC_ADDRESS=C               LC_TELEPHONE=C             LC_MEASUREMENT=en_CA.UTF-8 LC_IDENTIFICATION=C

attached base packages:
[1] stats     graphics  grDevices utils     datasets  methods   base

other attached packages:
[1] kableExtra_1.1.0 knitr_1.24       dplyr_0.8.3      nvimcom_0.9-82

loaded via a namespace (and not attached):
 [1] Rcpp_1.0.2        rstudioapi_0.10   xml2_1.2.2        magrittr_1.5      hms_0.5.0         munsell_0.5.0
 [7] tidyselect_0.2.5  rvest_0.3.4       viridisLite_0.3.0 colorspace_1.4-1  R6_2.4.0          rlang_0.4.0
[13] stringr_1.4.0     httr_1.4.1        tools_3.6.3       webshot_0.5.1     xfun_0.8          htmltools_0.3.6
[19] assertthat_0.2.1  digest_0.6.20     tibble_2.1.3      crayon_1.3.4      purrr_0.3.2       readr_1.3.1
[25] vctrs_0.2.0       zeallot_0.1.0     glue_1.3.1.9000   evaluate_0.14     rmarkdown_1.14    stringi_1.4.3
[31] compiler_3.6.3    pillar_1.4.2      scales_1.0.0      backports_1.1.4   pkgconfig_2.0.2

就在这里:How to I keep a kable caption with a floating table? user @bttomio suggests a solution based on this thread: https://github.com/haozhu233/kableExtra/issues/221#issuecomment-400473530

一旦添加了适当的库(我还修改了第一个 R 块!),在您的情况下,此解决方案的实现可能如下所示:

---
title: "Test"
author: "gnypit"
output: pdf_document
---

```{r setup, include=FALSE}
knitr::opts_chunk$set(echo = TRUE)
options(tinytex.verbose = TRUE)
library(knitr)
library(kableExtra)
library(tibble)
library(xtable)
```

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed vulputate urna in 
eleifend commodo. Praesent et tristique ligula, eget pretium eros. Ut congue leo nibh, 
a volutpat erat efficitur sed. Aliquam rhoncus mollis diam nec bibendum. Suspendisse 
eget massa a dui elementum tempus. Maecenas a lacus a odio bibendum eleifend sed ac 
mauris. Nunc molestie dui dignissim, egestas elit quis, suscipit erat. Donec id 
suscipit lectus, nec mollis nisl. Quisque ultrices quis eros in hendrerit. Etiam enim 
metus, vestibulum nec congue vitae, tempus eu ex. Ut vehicula elementum orci, vitae 
viverra mi tristique ac.

```{r, echo=FALSE}
xtable2kable <- function(x)
{
  out <- capture.output(print(x, table.placement = NULL))[-(1:2)]
  out <- paste(out, collapse = "\n")
  structure(out, format = "latex", booktabs = T, linesep = '', class = "knitr_kable")
}

data <- tibble(col1=c(runif(9, 1, 99)), col2=c(runif(9, 1, 99)))

xtable(data, caption = "MRE") %>%
  xtable2kable() %>%
  kable_styling(position = "float_right")
```

Sed in efficitur mauris. Donec vulputate non leo eget commodo. Vivamus luctus arcu at 
lorem pulvinar condimentum. Nullam felis risus, mattis vel accumsan vehicula, 
ullamcorper in risus. Nullam ullamcorper dignissim massa, ac tristique nibh fringilla 
in. Proin tortor est, ornare sit amet magna non, eleifend feugiat sapien. Fusce quis 
augue quis lectus dignissim consequat vel et dui. Aliquam dui eros, cursus a mauris 
id, volutpat blandit tellus. Nunc porta tincidunt rhoncus. Donec fermentum sem et 
justo ultricies, ut ullamcorper quam vehicula. Aenean commodo velit rhoncus nibh 
tristique, at sollicitudin nibh ultricies. Curabitur odio enim, fringilla id neque a, 
pharetra lobortis urna. Curabitur suscipit quam vitae libero vestibulum, vel ornare 
arcu pharetra. Sed sagittis mauris faucibus arcu tincidunt elementum. In sodales 
tincidunt iaculis.

Cras a eleifend sapien, a eleifend nulla. Donec ultrices molestie nibh sed facilisis. 
Aliquam eu hendrerit justo. Nullam ac dictum dui. Nullam ac lectus ut nisl consequat 
ornare. Sed accumsan rutrum varius. Nam nec felis id elit viverra consequat et non 
lorem.

Pellentesque eget blandit lorem. Curabitur at ultricies leo, sed porttitor erat. 
Vivamus fringilla erat a arcu scelerisque vestibulum. Maecenas non mollis lectus. 
Aenean a ipsum sem. Aenean nec hendrerit lacus, at ornare neque. Phasellus id nisi non 
risus faucibus condimentum.

Nulla a nulla a nulla dapibus scelerisque. Pellentesque molestie leo id porta 
tincidunt. Ut venenatis interdum egestas. Ut id maximus libero, ut iaculis lacus. 
Praesent sit amet bibendum lacus. Donec venenatis at mauris sit amet mollis. Donec 
eleifend nibh mauris, in euismod nisi hendrerit a. Cras porttitor rhoncus diam eget 
rutrum. Phasellus condimentum maximus felis sit amet fermentum. Aenean lacinia ornare 
dolor, sit amet finibus magna tempor sed.