如何修正RMarkdown PDF中table1包表格与文本的顺序问题?
解决RMarkdown PDF中table1表格与文本穿插显示的问题
问题现象
使用RMarkdown生成PDF文档时,table1包生成的表格无法与文本、标题按预期穿插排列,所有文本内容集中显示在文档开头,全部表格则排在文档末尾。
修正原理
问题根源在于提前在代码块中预先生成了table1对象,table1生成的对象本质是LaTeX格式的代码片段,提前生成会导致这些代码被knitr缓存,最终集中输出到文档末尾。正确的做法是让表格在对应位置即时渲染输出。
具体修正方法
方法1:直接在目标位置生成表格(推荐)
将table1的生成逻辑直接移到需要显示表格的代码块中,避免提前缓存对象:
--- title: "Example" author: "" date: "`r Sys.Date()`" output: pdf_document --- ```{r setup, include=FALSE} knitr::opts_chunk$set(echo = TRUE) library(table1)
R Markdown
本文将展示我在RMarkdown中使用table1包遇到的问题。
# 仅预处理数据集,不生成table1对象 df <- mtcars df$cyl <- factor(df$cyl) df$gear <- factor(df$gear) label(df$mpg) <- "Mileage" label(df$cyl) <- "Cylinders" label(df$hp) <- "Horsepower" label(df$gear) <- "Number of Forward Gears" label(df$wt) <- "Weight" units(df$mpg) <- "miles/(US)gallon" units(df$wt) <- "1000 pounds" caption1 <- "Motor Trend Road Test Stats, grouped by number of forward gears" caption2 <- "Motor Trend Road Test Stats, grouped by number of cylinders"
此处为标题信息
补充文本
# 直接在该代码块中生成并输出表格 table1(~ mpg + hp + wt | gear, data=df, overall=c(right="Total"), caption=caption1)
另一个标题
更多说明
table1(~ mpg + hp + wt + gear | cyl, data=df, overall=c(right="Total"), caption=caption2)
### 方法2:保留对象生成,强制即时输出 如果需要保留`summary1`、`summary2`对象,需在调用时使用`print()`,并开启代码块的`results='asis'`选项: ```yaml --- title: "Example" author: "" date: "`r Sys.Date()`" output: pdf_document --- ```{r setup, include=FALSE} knitr::opts_chunk$set(echo = TRUE) library(table1)
R Markdown
本文将展示我在RMarkdown中使用table1包遇到的问题。
df <- mtcars df$cyl <- factor(df$cyl) df$gear <- factor(df$gear) label(df$mpg) <- "Mileage" label(df$cyl) <- "Cylinders" label(df$hp) <- "Horsepower" label(df$gear) <- "Number of Forward Gears" label(df$wt) <- "Weight" units(df$mpg) <- "miles/(US)gallon" units(df$wt) <- "1000 pounds" caption1 <- "Motor Trend Road Test Stats, grouped by number of forward gears" # 生成对象但不自动输出 summary1 <- table1(~ mpg + hp + wt | gear, data=df, overall=c(right="Total"), caption=caption1) caption2 <- "Motor Trend Road Test Stats, grouped by number of cylinders" summary2 <- table1(~ mpg + hp + wt + gear | cyl, data=df, overall=c(right="Total"), caption=caption2)
此处为标题信息
补充文本
# 使用print强制输出表格 print(summary1)
另一个标题
更多说明
print(summary2)
## 关键注意点 所有输出table1表格的代码块必须添加`results='asis'`选项,因为table1生成的是原生LaTeX代码,需要让knitr直接将其插入到文档对应位置,而不是作为普通文本输出。 内容的提问来源于stack exchange,提问作者Judy
相关产品推荐
相关产品推荐

