如何在kable表格中添加浅灰水平线并设置底部线为粗橙色
问题描述
我有如下数据集:
structure(list(...1 = c("Catalunya", "PIB", "Demanda interna1", "Demanda externa1", "Espanya", "PIB", "Demanda interna1", "Demanda externa1", "Zona euro", "PIB", "Demanda interna1", "Demanda externa1", "PIB d'Alemanya", "PIB de França", "PIB d'Itàlia", "Internacional", "PIB de la UE-27", "PIB dels EUA", "PIB del Japó"), `2020` = c(NA, -11.9, -7.4, -4.5, NA, -11.2, -9, -2.2, NA, -6.1, -5.57, -0.53, -3.8, -7.5, -9, NA, -5.6, -2.2, -4.3), `2021` = c(NA, 6.2, 3.8, 2.4, NA, 6.4, 5.9, 0.5, NA, 5.6, 4.24, 1.36, 3.2, 6.4, 8.3, NA, 5.7, 5.8, 2.1), `2022` = c(NA, 5.5, 2.7, 2.8, NA, 5.5, 5.12183164381576, 0.378168356184236, NA, 3.6, 3.76, -0.16, 1.8, 2.5, 3.7, NA, 3.5, 1.9, 1.1), `1r 2023` = c(NA, 3.2, 1.1, 2.1, NA, 4.1, 1.3, 2.8, NA, 1.2, 0.63, 0.57, -0.2, 1, 2.1, NA, 1.1, 1.71772942152937, 2), `2n 2023` = c(NA, 2.1, 1.2, 0.9, NA, 2, 2.2, -0.2, NA, 0.5, 0.46, 0.04, 0.1, 1.1, 0.3, NA, 0.4, 2.38237207285343, 1.7), `3r 2023` = c(NA, 2.1, NA, NA, NA, 1.8, 1.6, 0.2, NA, 0.1, NA, NA, -0.4, 0.7, 0, NA, 0.1, 3, 1.2)), row.names = c(NA, -19L), class = c("tbl_df", "tbl", "data.frame"))
我正在使用以下代码创建Markdown转PDF的表格:
options(knitr.kable.NA = "-") p3_1[3,1] <- p3_1[7,1] <- p3_1[11,1] <- "$\\text{Demanda interna}^1$" p3_1[4,1] <- p3_1[8,1] <- p3_1[12,1] <- "$\\text{Demanda externa}^1$" kable(p3_1, align = "lrrrrrr", col.names = c("", names(p3_1[-1])), booktabs=TRUE, digits=1, format.args = list(big.mark="."), linesep = "" , caption="Producte interior brut (\\% de variació interanual, llevat dels casos indicats)", escape = FALSE) %>% add_header_above(c("", "Any" = 3, "Trimestre" = 3), bold=T) %>% kable_styling(latex_options=c("HOLD_position","scale_down"), bootstrap_options = c("condensed"), position="center") %>% column_spec(1, bold=T, width="4cm") %>% column_spec(2:7, width="2cm") %>% row_spec(0, bold = T) %>% row_spec(c(1, 5, 9, 16), background="lightgray") %>% row_spec(19, extra_css = "border-bottom: 1px solid;") %>% footnote(general="Idescat; Eurostat; INE; BEA; ESRI; Agència Estatal d'Administració Tributària.", general_title = "Font:", footnote_as_chunk = T,) %>% footnote(general="$^{A}$Dada avançada. $^{1}$Contribució al creixement. $^{2}$Sèrie original corregida d'efectes de calendari. $^{3}$En valors constants. Exclou estacions de servei.", escape = F, general_title = "Nota:", threeparttable = TRUE, footnote_as_chunk = T,)
生成的表格效果如下:
请问如何为整个表格添加浅灰色水平线,并将底部线条设置为更粗的橙色?
解决方案
由于你是生成PDF(基于LaTeX渲染),不能使用CSS样式,需要通过LaTeX命令来控制线条的颜色和粗细,以下是修改后的完整代码:
options(knitr.kable.NA = "-") p3_1[3,1] <- p3_1[7,1] <- p3_1[11,1] <- "$\\text{Demanda interna}^1$" p3_1[4,1] <- p3_1[8,1] <- p3_1[12,1] <- "$\\text{Demanda externa}^1$" # 生成表格 kable(p3_1, align = "lrrrrrr", col.names = c("", names(p3_1[-1])), booktabs=TRUE, digits=1, format.args = list(big.mark="."), linesep = "" , caption="Producte interior brut (\\% de variació interanual, llevat dels casos indicats)", escape = FALSE) %>% add_header_above(c("", "Any" = 3, "Trimestre" = 3), bold=T) %>% kable_styling(latex_options=c("HOLD_position","scale_down"), bootstrap_options = c("condensed"), position="center") %>% column_spec(1, bold=T, width="4cm") %>% column_spec(2:7, width="2cm") %>% row_spec(0, bold = T) %>% row_spec(c(1, 5, 9, 16), background="lightgray") %>% # 为除最后一行外的所有行添加浅灰色水平线 row_spec(1:(nrow(p3_1)-1), extra_latex = "\\arrayrulecolor{gray!30}\\hline\\arrayrulecolor{black}") %>% # 为最后一行设置橙色粗底部线条(1.5pt为线条粗细,可按需调整) row_spec(nrow(p3_1), extra_latex = "\\arrayrulecolor{orange}\\specialrule{1.5pt}{0pt}{0pt}\\arrayrulecolor{black}") %>% footnote(general="Idescat; Eurostat; INE; BEA; ESRI; Agència Estatal d'Administració Tributària.", general_title = "Font:", footnote_as_chunk = T,) %>% footnote(general="$^{A}$Dada avançada. $^{1}$Contribució al creixement. $^{2}$Sèrie original corregida d'efectes de calendari. $^{3}$En valors constants. Exclou estacions de servei.", escape = F, general_title = "Nota:", threeparttable = TRUE, footnote_as_chunk = T,)
关键说明:
- LaTeX颜色支持:需要在你的R Markdown文档YAML头部添加颜色包引用,否则橙色和灰色线条无法正常显示:
header-includes: - \usepackage{xcolor} - 浅灰色水平线:通过
row_spec循环遍历除最后一行外的所有行,使用\\arrayrulecolor{gray!30}临时将线条颜色改为浅灰色,画完线后再改回黑色,避免影响后续元素。 - 橙色粗底部线条:使用
\\specialrule{1.5pt}{0pt}{0pt}自定义线条粗细(1.5pt),并通过\\arrayrulecolor{orange}设置线条颜色为橙色,最后恢复默认黑色。
内容的提问来源于stack exchange,提问作者Maria
相关产品推荐
相关产品推荐

