使 html table 列更宽/防止单词在 RMarkdown 中换行

Make html table columns wider / prevent words from wrapping in RMarkdown

我正在用 R markdown 创建一个 html 文档,其中有一些 tables。在 table 的一列有字符值的情况下,如何确保该列足够宽以包含整个字符串而不换行?我尝试在下面使用 kableExtra,但似乎 column_specwidth 参数没有被使用,即使 bold 参数是。

library(data.table)
csd <- fread('  Oct-17  Sep-17  Aug-17  Jul-17  Jun-17  May-17  Apr-17  Mar-17  Feb-17  Jan-17  Dec-16  Nov-16  Oct-16  Sep-16  2017 YTD    2016 YTD    2015 YTD
V1                                                                  
V2      71,687  74,492  72,772  74,785  77,084  72,819  85,367  77,403  85,131  81,585  80,186  89,810  92,871  691,540 1,141,589   1,207,433
V3      22,788  22,355  23,093  23,239  23,821  23,005  25,883  22,168  24,812  23,715  22,708  28,128  29,366  211,164 353,006 411,659
V4  #DIV/0! 31.8%   30.0%   31.7%   31.1%   30.9%   31.6%   30.3%   28.6%   29.1%   29.1%   28.3%   31.3%   31.6%   30.5%   30.9%   34.1%
Some long variable name     30,047  31,910  30,046  31,766  33,455  30,913  37,524  33,683  37,589  36,571  35,590  44,447  44,295  296,933 516,597 528,305
V5      2.89%   1.83%   1.55%   1.97%   2.85%   1.37%   4.95%   5.54%   3.45%   3.12%   1.92%   2.65%   1.69%   3.01%   2.04%   0.61%
V6      867 583 465 626 952 422 1,857   1,866   1,298   1,140   682 1,179   748 8,936   10,539  3,201
V7      29,180  31,327  29,581  31,140  32,503  30,491  35,667  31,817  36,291  35,431  34,908  43,268  43,547  287,997 506,058 525,104
V8      0:23    0:15    0:10    0:20    0:29    0:14    0:53    1:03    0:33    0:24    0:20    0:25    0:17    0:29    0:21    0:06
V9      4:53    4:44    4:46    5:00    5:01    5:05    5:01    5:05    5:01    4:57    5:01    4:49    4:52    4:57    4:47    4:11
V10     86% 91% 94% 89% 83% 91% 78% 72% 81% 86% 89% 85% 92% 85% 89% 94%
V11     99.05%  98.20%  96.40%  97.25%  97.80%  96.50%  95.55%  95.85%  95.65%  96.25%  96.55%  97.75%  97.95%  96.92%  97.33%  98.23%
V12     99.75%  100.00% 99.90%  98.85%  99.00%  98.75%  99.00%  99.55%  99.85%  99.45%  99.20%  97.70%  97.55%  99.41%  98.50%  99.01%
')
csd <- csd[-1,-2]
names(csd)[1] <- 'V0'
words <- c('these','are','some','words','extreme','slightly')

csd[,1] <- replicate(nrow(csd), paste(sample(words, 7, T), collapse = " "))


library(knitr)
library(magrittr)
library(kableExtra)

csd %>% 
          kable('html', digits = 2) %>%
          column_spec(1, bold = T, width = "2600em") %>% 
          kable_styling(bootstrap_options = c("striped", "hover")) 

我认为这更像是一个 HTML/css 问题。当 HTML table 的宽度超过页面宽度时,如果没有必要,它会尝试减少列宽。如果减少 csd 的列数,您将看到 width 选项开始显示效果。

在这种情况下,一种解决方法是使用 scroll_box 函数并为 table 提供更宽的绘图区域。

csd %>% 
  kable('html', digits = 2) %>%
  column_spec(1, bold = T, width = "2600em") %>% 
  kable_styling(bootstrap_options = c("striped", "hover")) %>%
  scroll_box(width = "2000px")

更新

另一个 hacky 但 "real" 的解决方案是强制单元格显示为 inline-block

csd %>% 
  kable('html', digits = 2) %>%
  column_spec(1, bold = T, width = "2600em; display: inline-block;") %>% 
  kable_styling(bootstrap_options = c("striped", "hover"))  

更新

display: inline-block 现在默认包含在 kableExtra(开发版本)中。

如果我们默认设置 display: inline-block;,header 行的 table 列将无法自动调整其宽度。当 table 又小又紧时,它会破坏 column_spec。因此,我从默认值中删除了这一行。如果需要强行设置宽度。您可以随时使用我上面提供的方法。