我正在使用knitr生成一些报告。我使用kable在文档中生成HTML表。在标题中,我想使用换行符(或其他html标记)来增强表格
<!--begin.rcode results='asis'
s <- rbind(c(1,2,3,4),c(1,2,3,4),c(1,2,3,4))
kable(s, col.names=c("Try Newline\nn","Try HTML break<br>%","Past 6 months\nn","\n%"))
end.rcode-->
正如你所看到的,我正在尝试不同的选择而没有太大的成功。
在我的结果中,换行符(\ n)只是在HTML源代码中的换行符中翻译。
标签被翻译成HTML特殊字符。
有什么建议吗?
答案 0 :(得分:9)
据我所知,pipe table syntax不支持单元格中的换行符,所以如果使用pandoc
将markdown转换为HTML(这是RStudio使用的),那么你最好选择一些功能更丰富的表语法,例如multiline
或grid
。不确定如何使用kable
执行此操作,但pander
支持这些:
> library(pander)
> colnames(s) <- c("Try Newline\nn","Try HTML break<br>%","Past 6 months\nn","\n%")
> pander(s, keep.line.breaks = TRUE)
-------------------------------------------------------
Try Newline Try HTML break<br>% Past 6 months %
n n
------------- --------------------- --------------- ---
1 2 3 4
1 2 3 4
1 2 3 4
-------------------------------------------------------
但这还不够,因为pandoc
会自动删除换行符,因此您必须根据related docs添加强制换行符(“反斜杠后跟换行符”) 。例如。以下代码按预期转换为HTML:
> colnames(s) <- c("Try Newline\\\nn","Try HTML break\\\n%","Past 6 months\\\nn","\\\n%")
> pander(s, keep.line.breaks = TRUE)
-----------------------------------------------------
Try Newline\ Try HTML break\ Past 6 months\ \
n % n %
-------------- ----------------- ---------------- ---
1 2 3 4
1 2 3 4
1 2 3 4
-----------------------------------------------------
答案 1 :(得分:0)
有一种方法可以限制列宽,您可以用它来帮助实现此目的。使用column_spec()
,您可以在其中指定列以及以不同单位(如cm,in,em)的宽度。
答案 2 :(得分:0)
因此看来kable会将<>转换为HTML等效项,即"<"
和">"
,所以我有一个快速解决方案,只要您实际上不需要<>其他任何地方。这使我可以在表格的列标题中换行。
基本上,完成表后,只需将HTML中的"<"
和">"
替换为<和>,然后将其另存为HTML文件。像这样:
tbl_output <- gsub("<", "<", tbl_output)
tbl_output <- gsub(">", ">", tbl_output)
write(tbl_output, "TableOutput.html")
其中tbl_output是kable的输出。
或者,特别是如果您需要在表中的其他位置使用<>,则可以为换行符创建自己的字符串,然后在末尾为<br>
换行。