内容提要
knitr 的 kable() 函数新增多项改进:HTML 表头自动添加 scope 属性以提升无障碍性;LaTeX 支持数字数学模式排版和可调整标题位置;simple 格式遇换行自动改用多行表格;支持保留空白和自定义 NA 显示。
延伸解读
无障碍改进:HTML 表头自动添加 scope 属性
kable() 现在为 HTML 表格的列标题自动添加 scope="col",无需手动设置,这有助于屏幕阅读器用户识别表头。若希望行名也作为行标题,可设置全局选项 options(knitr.table.html.row.header = TRUE),使行名单元格变为 <th scope="row">。该选项默认关闭,因为 <th> 与 <td> 的渲染样式可能不同。
LaTeX 数字排版与标题位置调整
针对 LaTeX 输出,kable() 新增 numeric.math 参数,可将数值列以数学模式排版,从而正确显示负号、无穷大和科学计数法,并保留小数/千位分隔符的间距。同时,caption.pos 参数允许将浮动表格的标题置于底部(默认顶部),适应不同学科惯例。两者均可通过全局选项设置。
格式兼容性与细节优化
当 format = "simple" 的表格单元格内包含换行符时,kable() 会自动改用 Pandoc 多行表格,避免布局错乱。此外,新增 na 参数可在单次调用中控制 NA 的显示方式(如隐藏或显示为短横线),其优先级高于全局选项 knitr.kable.NA。若需保留单元格中的前后空白,可设置 options(knitr.kable.keep.whitespace = TRUE)。
Q&A
kable() 在 HTML 表格中如何提升无障碍性?
kable() 现在自动为列标题添加 scope="col" 属性,无需设置。如果希望行名列也被视为行标题(<th scope="row">),可以通过全局选项 options(knitr.table.html.row.header = TRUE) 启用,默认关闭。
kable() 在 LaTeX 输出中如何处理数字排版?
kable() 新增 numeric.math 参数,可将数值列以数学模式排版,从而正确显示负号、无穷大和科学计数法,并用花括号包裹小数/千位分隔符逗号以保留间距。可通过 knitr::kable(df, format = "latex", numeric.math = TRUE) 或全局选项 options(knitr.table.numeric.math = TRUE) 启用。
如何调整 LaTeX 浮动表格的标题位置?
使用新的 caption.pos 参数,例如 knitr::kable(df, format = "latex", caption = "...", caption.pos = "bottom") 可将标题置于底部。也可通过全局选项 options(knitr.table.caption.pos = "bottom") 设置。默认标题在顶部。
kable() 的 simple 格式遇到单元格内换行会怎样处理?
当 simple 格式的表格单元格中包含换行符(\n)时,kable() 会自动检测并改用 Pandoc 多行表格(multiline table)输出,从而保留对齐。
如何保留 kable() 表格单元格中的前后空白?
默认情况下 kable() 会修剪单元格中的前后空白。若需保留(例如在等宽字体下用空格对齐数字),可设置全局选项 options(knitr.kable.keep.whitespace = TRUE)。
kable() 中如何控制 NA 值的显示?
新增 na 参数,可在单次调用中控制 NA 的显示方式,例如 knitr::kable(x, na = "") 隐藏 NA,或 knitr::kable(x, na = "--") 显示为破折号。该参数是全局选项 knitr.kable.NA 的按调用等效项,且当两者同时设置时,na 参数优先。