如何处理带有页码的 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。
我使用 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。