You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

kableExtra格式化表格时p值列乘号x斜体问题如何解决

表格p-value列乘号x被自动斜体化问题

我正在尝试格式化一张表格,发现其中一列的显示效果不符合预期。从下方图片可以看到,标题为"p-value"的列中数值显示为1.0<em>x</em>10^-5的样式,我无法查明该列中乘号x被斜体化的原因。我想要实现的效果是该列每个数值显示为1.0 x 10^-5,即乘号x不斜体,且x前后各有一个空格。请问有没有人知道该如何修复这个问题?下方附上我用来生成表格的代码以及示例数据集。
问题展示图

示例代码

kbl(df.test, format = "html", table.attr = "style='width:40%;'", escape = F, align = "r") %>%
      kable_styling(bootstrap_options = c("striped", "hover", "condensed", "responsive")) %>%
      kable_classic(full_width = F, html_font = "Times New Roman")

示例数据

structure(list(SNP = c("abc", "abc", "abc"), Gene = c("xyz", 
"xyz", "xyz"), Cases = c(87L, 86L, 72L), `% Population` = structure(19:17, .Label = c("$12.4^{+5.3}_{-4.2}$", 
"$12.7^{+5.4}_{-4.3}$", "$13.3^{+5.4}_{-4.4}$", "$13.6^{+5.5}_{-4.4}$", 
"$13.9^{+5.5}_{-4.4}$", "$13.9^{+5.5}_{-4.5}$", "$14.2^{+5.5}_{-4.5}$", 
"$14.8^{+5.6}_{-4.6}$", "$15.4^{+5.7}_{-4.7}$", "$16.0^{+5.8}_{-4.8}$", 
"$16.3^{+5.8}_{-4.8}$", "$17.2^{+5.9}_{-4.9}$", "$19.8^{+6.2}_{-5.3}$", 
"$20.4^{+6.2}_{-5.3}$", "$20.7^{6.2}_{-5.4}$", "$21.0^{+6.2}_{-5.4}$", 
"$21.3^{+6.3}_{-5.4}$", "$25.4^{+6.6}_{-5.9}$", "$25.7^{+6.6}_{-5.9}$"
), class = "factor"), p.value = structure(c(12L, 14L, 18L), .Label = c("$1.0 x 10^{-5}$", 
"$1.1 x 10^{-4}$", "$1.2 x 10^{-5}$", "$1.3 x 10^{-3}$", "$1.4 x 10^{-5}$", 
"$1.5 x 10^{-3}$", "$1.7 x 10^{-4}$", "$2.0 x 10^{-4}$", "$2.0 x 10^{-5}$", 
"$2.9 x 10^{-4}$", "$4.0 x 10^{-4}$", "$5.2 x 10^{-7}$", "$5.6 x 10^{-4}$", 
"$6.3 x 10^{-7}$", "$6.6  x 10^{-4}$", "$6.6 x 10^{-4}$", "$7.8 x 10^{-4}$", 
"$8.5 x 10^{-6}$", "$9.2 x 10^{-4}$"), class = "factor")), row.names = c(NA, 
3L), class = "data.frame")

问题原因

你调用kbl时设置了escape = F,且p.value列的数值都包裹在$符号中,这是LaTeX数学公式的标识,数学环境下的字母默认会被渲染为斜体,才会出现乘号x被斜体的问题。

解决方法

  • 方法1:修改p.value列的公式内容,把x替换为LaTeX的普通文本标记\text{x},前后空格也可以直接放在\text{}里,示例格式为$1.0 \text{ x } 10^{-5}$,渲染后x就是正常普通文本格式。
  • 方法2:如果不需要LaTeX公式渲染,直接删除p.value列内容前后的$符号,内容会被识别为普通文本,x自然不会被斜体。
  • 方法3:不想手动修改原始数据的话,可以在生成表格前批量处理p.value列:
df.test$p.value <- gsub(" x ", "\\\\text{ x }", df.test$p.value)

内容的提问来源于stack exchange,提问作者neuron

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 00:45:06