R语言 在Kable中断开行和粗体标题

y4ekin9u  于 9个月前  发布在  其他
关注(0)|答案(2)|浏览(86)

我如何打破我的PDF表格的标题与Kable生成,并变成粗体的上部?
这是我生成的表格:
x1c 0d1x的数据
我需要的标题是:粗体{产品内部brut} \breaklinehere {(% de variació interanual,llevat dels casos indicats)}
下面是数据集和代码:

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"))

字符串
表:

p3_1 <- read_xlsx("G:/SUBDIRECCIO-ESTUDIS/CONJUNTURA/INDICADORS MENSUALS/Automatitzacio_IC/proves R/IC_fitxer_RECULL_Maria.xlsx",
                  range = "B5:M24", 1, col_types = c("text", "numeric", "numeric", "numeric", "numeric", "numeric", "numeric", "numeric", "numeric", "numeric", "numeric", "numeric")) [, -c(2,4,5,7,9)] 

    options(knitr.kable.NA = "-")
    
    
    grp_nm <- c("Catalunya", "Espanya", "Zona euro", "Internacional")
    
    p3_1 <- 
      p3_1 %>% 
      mutate(grp = ifelse(...1 %in% grp_nm, ...1, NA),
             ...1 = case_when(str_detect(...1, "interna1") ~ "$\\text{Demanda interna}^1$",
                              str_detect(...1, "externa1") ~ "$\\text{Demanda externa}^1$",
                              TRUE ~ ...1))%>%
      fill(grp) %>% 
      filter(!...1 %in% grp_nm) %>% 
      select(grp, everything())
      
    
    kable(p3_1[, -1],
          align = "lrrrrrr",
          col.names = c("", names(p3_1[-(1:2)])),
          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"), position="center") %>% 
      column_spec(1, width="4cm") %>% 
      column_spec(2:7, width="2cm") %>% 
      row_spec(0, bold = T) %>% 
      pack_rows(index = table(p3_1$grp), background = "#E0E0E0", latex_gap_space = "0pt") %>%
      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,)


yaml:

output:
  pdf_document:
    number_sections: no
    toc: no
    toc_depth: 3
    df_print: paged
    fig_caption: yes
header-includes: 
    \usepackage{booktabs} 
    \usepackage{floatrow} 
    \floatsetup[figure]{capposition=top}
    \floatsetup[table]{capposition=top}
    \usepackage[document]{ragged2e}
    \usepackage[singlelinecheck=false]{caption}

svmlkihl

svmlkihl1#

我不能用一个最小的例子来复制你在答案的评论中提到的错误。
但是,在问题中使用您的数据和代码似乎是可行的。
其主要区别在于:
1.使用kbl而不是kable
1.使用\newline而不是\\\\
1.更改方法,仅使用乳胶textbf{...}将标题的第一部分加粗。

---
 output:
   pdf_document:
     number_sections: no
     toc: no
     toc_depth: 3
     df_print: paged
     fig_caption: yes
 header-includes: 
     \usepackage{booktabs} 
     \usepackage{floatrow} 
     \floatsetup[figure]{capposition=top}
     \floatsetup[table]{capposition=top}
     \usepackage[document]{ragged2e}
     \usepackage[singlelinecheck=false]{caption} 

 ---

x

library(kableExtra)
library(dplyr)
library(tidyr)
library(stringr)
# Note I have changed the cedilla in França to a c

p3_1 <- 
  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 Franca", "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"))
options(knitr.kable.NA = "-")

    grp_nm <- c("Catalunya", "Espanya", "Zona euro", "Internacional")

    p3_1 <- 
      p3_1 |> 
      mutate(grp = ifelse(...1 %in% grp_nm, ...1, NA),
             ...1 = case_when(str_detect(...1, "interna1") ~ "$\\text{Demanda interna}^1$",
                              str_detect(...1, "externa1") ~ "$\\text{Demanda externa}^1$",
                              TRUE ~ ...1))|>
      fill(grp) |> 
      filter(!...1 %in% grp_nm) |> 
      select(grp, everything())

    kbl(p3_1[, -1],
          align = "lrrrrrr",
          col.names = c("", names(p3_1[-(1:2)])),
          booktabs=TRUE,
          digits=1,
          format.args = list(big.mark="."),
          linesep = "" ,
          caption="\\textbf{Producte interior brut} \\newline (\\% 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"), position="center") |> 
      column_spec(1, width="4cm") |> 
      column_spec(2:7, width="2cm") |> 
      row_spec(0, bold = T) |> 
      pack_rows(index = table(p3_1$grp), background = "#E0E0E0", latex_gap_space = "0pt") |>
      footnote(general="Idescat; Eurostat; INE; BEA; ESRI; Agència Estatal d'Administració Tributària.", general_title = "Font:")  |>
      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)

的数据
导致:


的数据

9bfwbjaz

9bfwbjaz2#

正如@dufei所建议的,这可以通过设置LaTeX标题包的参数来完成。例如:

---
output: pdf_document
header-includes:
  - \usepackage[font={bf}]{caption} 
  
---

```{r}

library(kableExtra)

    kbl(mtcars[1:3, 1:4],
        caption="Caption in bold. \\\\ With a line break for a second line",
        booktabs = TRUE)
字符串
换行符是通过使用LaTeX `\\`实现的;每个反斜杠都需要转义,因此在代码中使用`\\\\`。
注意,caption包默认将标题居中。如果需要,可以使用参数对标题进行对齐和缩进。如果需要,caption包还允许您单独编辑标题的标签和文本。
x1c 0d1x的数据
以下OP注解:第一行粗体,第二行纯文本,可以用...

output: pdf_document
header-includes:

  • \usepackage[font={normalfont}]{caption}


    kbl(mtcars[1:3, 1:4],
        caption="\\textbf{Caption in bold.} \\\\ With a line break for a second plain text line",
        booktabs = TRUE)
型

![](https://i.stack.imgur.com/kbl6t.png)
的

相关问题