如何处理带有页码的 kable 输出叠加?

How to handle the overlay of kable output with page number?

我使用 kbl() 函数,在我用 knitr 编译成 pdf 的 rnw 文件中,从数据帧开始制作 table。我使用 kableExtra 选项 scale_down 使 table 大小适应页面大小。它工作正常,但 table 覆盖了我的 pdf 输出的页码。我想知道处理此类问题的最佳方法是什么。在此先感谢您的帮助。

我有三个建议。第一个可能是在你的 Rmarkdown 代码中使用 \newpage 将你的 table 设置到下一页,这是乳胶代码。第二个选项可能是在 Kable_styling 函数中设置 latex_options="HOLD_position"。这会将 table 设置在某个地方,这可能会帮助您解决问题。第三个选项是使用“longtable = TRUE”,这意味着 table 在下一页继续。这是选项一和选项二的代码:

```{r}
library(knitr)
library(tidyverse)
library(kableExtra)

df <- data.frame(x = 1:10, y = 11:20)

kable(df) %>%
  kable_styling(latex_options = "HOLD_position")

```

\newpage

```{r}

kable(df) %>%
  kable_styling(latex_options = "HOLD_position")

```

看起来像这样:

这是选项三的代码:

```{r}
library(tidyverse)
library(knitr)
library(kableExtra)
df <- data.frame(x = 1:50, y = 11:60)

kable(df, "latex", longtable = T, booktabs = T) %>%
  kable_styling(latex_options = c("repeat_header"), font_size = 7) 
```

看起来像这样:

您可以添加一些 Latex 代码,将表格环境放入一个框中并调整内容的大小。下面是一个使用 \resizebox

的例子

这是 tab,一个 LaTex table 具有由 kable:

生成的高斯随机数
```{r, message = F, warning=F}
library(knitr)
library(tidyverse)
library(kableExtra)

ncol <- 10
nrow <- 30
df <- map_dfc(1:ncol, ~ data.frame(round(rnorm(nrow), 2))) %>% 
  set_names(letters[1:ncol])

tab <- kbl(df, format = "latex")
```

下面是如何使用 resizebox 按文本 height/width 调整大小(有关缩放工作原理的详细信息,请参阅 tex.stackexchange 上的 this post

```{r, results='asis'}
cat(
"\begin{table}
\centering
\resizebox*{\textwidth}{\dimexpr\textheight-2\baselineskip\relax}{%",
tab,
"\n}
\end{table}"
)
```

30x10 的结果 table

让我们将行和列加倍 (ncol <- 20; nrow <- 60)

结果为 60x20 table。