R kableExtra 两个中心对齐:一个用于带有换行符的列,另一个用于其他

Posted

技术标签:

【中文标题】R kableExtra 两个中心对齐:一个用于带有换行符的列,另一个用于其他【英文标题】:R kableExtra two center alignments: one for columns with linebreaks and another for others 【发布时间】:2022-01-18 08:19:37 【问题描述】:

所需的输出

使用 R kableExtra,我想在 PDF 和 html 输出中创建下表格式(至少存在换行符、居中和 LaTeX 方程),如下所示。

代码尝试

以下 R 代码正确呈现所需的 PDF 输出:

#-------------------
library(tidyverse)
library(kableExtra)
#-------------------

fs_dt <- tibble(
  school = 1:4,
  nstudents = c(1471,890,1021,1587),
  nf_total = c(792,447,511,800),
  nf_intv = c(25,15,20,40),
  nsmokers = c(10,3,6,27)
)

fs_dt %>% 
 kbl(booktabs = T,
    col.names = linebreak(c("School",
                  "No. of students",
                  "No. of females\n($M_i$)",
                  "No. of females interviewed\n($m_i$)",
                  "$\\sum_i\\in\\mathcalS y_ij$"),
                  align = "c"),
    escape = FALSE,
    align = "ccccc"
    ) %>% 
  kable_styling(latex_options = c("striped","hold_position"))

但是,HTML 输出如下所示,其中缺少第三和第四列名称。

问题

我们如何在不使用条件编码的情况下使用单个代码实现两种输出(例如,is_html_output()/is_latex_output())?

【问题讨论】:

huxtable 解释换行符,如果可以接受的话。 【参考方案1】:

这里有个小问题。

kableExtra 不适用于“HTML 模式”中的\n

你能做什么?

    编织成 HTML 时,您可以将 \n 更改为 &lt;br&gt;

    这并不方便,尤其是当您有很多表时(每次都将\n 更改为&lt;br&gt;

    对于这种情况,您可以使用column_spec:

    #your code above
    escape = FALSE,
    align = "ccccc"
    ) %>% 
    column_spec(3, width = "3cm") %>%
    column_spec(4, width = "5.3cm") %>% #4.8 cm for PDF!!!
    kable_styling(latex_options = c("striped","hold_position"))
    

    你应该每次都确定你的宽度(有时是每个输出),这有点乏味。

    每个解决方案都有一些水下岩石,所以我们必须妥协:(

【讨论】:

以上是关于R kableExtra 两个中心对齐:一个用于带有换行符的列,另一个用于其他的主要内容,如果未能解决你的问题,请参考以下文章

scss 带边框的中心对齐菜单

与科学记数法 kableExtra table R markdown html 结合时,十进制后的数字不一致

带约束的 UIImageView 的 iOS 动画

R:带多行文字的直方图字幕:如何在列中获得表格对齐?

如何将两个按钮和视图从左到中对齐,从中心到右对齐

文本对齐:中心不适用于 div 元素