You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

R Markdown生成PDF时如何将kable输出的表格旋转90度为横向布局

问题根因

kableExtra提供的landscape()函数不兼容longtable=TRUE参数,只会触发页面页码旋转,无法旋转表格内容、也不能正确适配横向页面布局。

修正后的完整可运行代码

---
output: pdf_document
header-includes:
  \usepackage{lscape}
  \usepackage{longtable}
  \usepackage{booktabs}
---

```{r setup, include=FALSE}
knitr::opts_chunk$set(echo = FALSE)

Report page - 该页面保持纵向布局

library(knitr)
library(kableExtra)

for (i in 1:3) {
  # 手动开启横向页面环境
  cat("\\begin{landscape}\n")
  # 渲染表格,保留longtable参数
  tb <- kable(iris[i:(i+5), ], format = "latex", align = "c", 
              booktabs = TRUE, longtable = TRUE, row.names = FALSE,
              escape = FALSE) %>%
    kable_styling(latex_options = c("striped"), full_width = T)
  # 输出表格
  cat(tb, "\n")
  # 手动关闭横向页面环境,后续页面恢复纵向
  cat("\\end{landscape}\n")
  # 分页避免多个表格挤在同一页
  cat("\\newpage\n")
}
### 关键调整说明
- 放弃使用`landscape()`函数包裹表格,改为手动插入LaTeX的`landscape`环境命令,完美兼容`longtable`参数
- 所有kable原有样式配置(条纹行、居中对齐、全宽等)全部保留,不需要修改原有业务逻辑
- 横向环境仅包裹需要旋转的表格页,其余页面自动保持纵向布局
- `longtable=TRUE`参数完全保留,支持超长表格自动分页
- 若多个连续表格都要使用横向布局,可将`\begin{landscape}`放在循环开始前、`\end{landscape}`放在循环结束后,避免不必要的分页

内容的提问来源于stack exchange,提问作者user16024709
相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 14:09:04