【问题标题】:How to stop kable from repeating one row to the end of the page如何阻止 kable 将一行重复到页面末尾
【发布时间】:2019-08-11 20:59:24
【问题描述】:

正如标题所暗示的,我写了一个 Rmarkdown 文件来打印一个表格,由于我无法理解的原因,它取表格的第一行并重复它直到到达页面的末尾:

似乎表格以某种方式设置为固定宽度,但我不确定这是为什么,我也不确定为什么只有一行重复。我希望它看起来很正常。表格未覆盖的页面的其余部分可以是空白的。感谢您的帮助。

我曾尝试在kable_styling 中弄乱full_width 参数,但这并没有什么不同。

这是一个可重现的示例。这是标题:

---
title: ""
always_allow_html: yes
output:
  pdf_document:
    latex_engine: xelatex
geometry: margin=0.3in
header-includes:
- \usepackage[T1]{fontenc}
- \usepackage{array}
- \usepackage{booktabs}
- \usepackage{xcolor}
- \usepackage{makecell}
- \usepackage{longtable}
- \usepackage{multirow}
- \usepackage{wrapfig}
- \usepackage{float}
- \usepackage{colortbl}
- \usepackage{pdflscape}
- \usepackage{tabu}
- \usepackage{threeparttable}
- \usepackage{threeparttablex}
- \usepackage[normalem]{ulem}
- \usepackage{makecell}
- \setmainfont{Helvetica}
- \pagenumbering{gobble}
- \DeclareTextCommand{\nobreakspace}{TU}{\leavevmode\nobreak\ }
documentclass: article
classoption: a4paper
---

这是一个重现问题的 R 块,注意我使用了设置 {r, echo=FALSE, message = FALSE, warning = FALSE}


# Packages
suppressMessages(library(extrafont))
suppressMessages(library(dplyr))
suppressMessages(library(pander))
suppressMessages(library(kableExtra))

# Data
table_info <- data.frame(a=1:4, b=1:4, c=1:4, d=1:4, e=1:4, f=1:4, g=1:4, h=1:4, i=1:4)

nrow_table <- nrow(table_info)
ncol_table <- ncol(table_info)

column_ems <- c("2em", rep("1.125em", ncol_table - 1))

fsize <- 10

  ktable <- table_info %>%
    mutate_all(linebreak) %>%
    kable(escape = FALSE, align = paste0(rep('l', ncol_table), collapse=""),
          col.names = NULL,
          booktabs = TRUE, format = "latex" , linesep = "") %>%
    row_spec(1:nrow_table, color = "darkgray") %>%
    column_spec(1, column_ems[1]) %>%
    column_spec(2, column_ems[2]) %>%
    column_spec(3, column_ems[3]) %>%
    column_spec(4, column_ems[4]) %>%
    column_spec(5, column_ems[5]) %>%
    column_spec(6, column_ems[6]) %>%
    column_spec(7, column_ems[7]) %>%
    column_spec(8, column_ems[8]) %>%
    column_spec(9, column_ems[9]) %>%
    kable_styling(font_size = fsize) %>%
    row_spec(1, align = 'c') %>%
    row_spec(2, font_size = fsize - 2)


ktable <- ktable %>% row_spec(1:(nrow_table-1), hline_after = TRUE)


ktable <- ktable %>% add_header_above(c(" " = 1, "Manganese" = 2,
                                        "Phosphorus" = 2,
                                        "Potassium" = 2,
                                        "Zinc" = 2), bold = T)
}

ktable

此代码输出的表格如下所示:

预期的输出应该是同一张表,但在标题下方的第一行中没有所有额外的 1。

【问题讨论】:

    标签: r latex r-markdown kable kableextra


    【解决方案1】:

    我不知道这是 kableExtra 错误还是您滥用它,但问题出在对 kable() 的初始调用中。你有

    kable(escape = FALSE, align = paste0(rep('l', ncol_table), collapse=""),
    

    稍后,LaTeX 中的对齐设置会重复多次。如果您将该行更改为

    kable(escape = FALSE, align = 'l',
    

    然后问题就消失了:

    【讨论】:

    • 这确实解决了我的问题,并且看起来像是 kable 错误 - 如果 align 参数是一个向量,其字符数等于它应该支持的列数被扩展为指定每个单独列的对齐方式。值得庆幸的是,在这种情况下我不需要这样做,因为无论如何整个事情都是对齐的。感谢您的帮助。
    • 我不确定这是一个错误。我认为kable() 文档要求c('l", "l", ...) 而不是"ll...",如果我将原来的align 规范更改为align = rep('l', ncol_table),我会得到正确的结果。
    猜你喜欢
    • 2020-05-18
    • 1970-01-01
    • 2018-01-07
    • 1970-01-01
    • 1970-01-01
    • 2023-03-15
    • 1970-01-01
    • 2020-07-29
    • 2015-12-22
    相关资源
    最近更新 更多