在 RMarkdown 中,为什么 kable table 打印在 header 下方?

In RMarkdown, why is the kable table printing below the header here?

我正在尝试使用 for 循环在其自己的页面上的 table 中垂直打印 tibble 的每一行来生成报告。 tables 打印得很好,但我想把 headers 放在每页的顶部(最终是文本)。由于打印 header 的代码行(在我自己的文档中显示为 header 而不是在我的 reprex 中,不知道为什么)在打印 [=30= 的代码行之上],使用 kable,我希望 header 打印在 table 之上。我怀疑 kable 在幕后做了一些我不了解的事情,但我无法确定是什么。

我做错了什么,如何在每页的顶部打印 headers?

我在下面提供了:当前输出的屏幕截图。

相关部分:

---
title: "kable-order-reprex"
author: "Rob Creel"
date: "6/4/2021"
output: pdf_document
---
 
```{r setup, include=FALSE}
knitr::opts_chunk$set(echo = TRUE)
library(tidyverse)
library(magrittr)
library(kableExtra)
```
 
 
```{r chunk1, echo=FALSE, results='asis'}
for (i in 1:nrow(mtcars)) {
  # Generate Table
  mtcars %>%
    slice(1) %>%
    stack() %>%
    select(ind, values) %>%
    kable(col.names = NULL) %>%
    kable_styling() -> my_table
 
  cat("\n\n\pagebreak\n")
 
  # Print Header
  cat(paste0("## ", mtcars %>% rownames() %>% extract2(i)))
 
  # Print Table
  print(my_table)
  cat("\n\n\pagebreak\n")
}
```

mis-ordered 输出的图片。:

据我所知,一切都在按预期进行。问题是 float management in LaTeX.

您可以通过在 kable_styling() 中设置参数 latex_options 来更改 kable 输出的行为。例如

mtcars %>%
  slice(1) %>%
  stack() %>%
  select(ind, values) %>%
  kable(col.names = NULL) %>%
  #Use either "hold_position" or "HOLD_position"
  kable_styling(latex_options = "hold_position") -> my_table

hold_position对应h,而HOLD_positionH(read more about float options here),其中H比[=14=更严格] 并强制浮点输出的位置位于它在代码中的位置。另见 ?kable_stylinglatex_options 项)

查看类似问题及答案