使用Quarto创建pdf,无法在列表中添加换行符

问题描述 投票:0回答:1

这是我的代码示例,我想将“Sepal.Length”列分成两行。

---
title: "Unbreakable Line"
format: pdf
editor: visual
---

{r}
#| label: load-packages
#| include: false

library(tidyverse)
library(magrittr)
library(tinytex)
library(gt)


{r}

iris %>% 
  head(10) %>% 
  gt() %>% 
    cols_label(
      Sepal.Length = md("Sepal<br>Length")
    )


当我预览块时它工作正常,但是当我渲染时,我收到此错误:

“警告:发现 HTML 标签,它们将被删除。* 设置

options(gt.html_tag_check = FALSE)
以禁用此检查。”

我尝试取出 md() 并使用“ “,但这只是给了我一个空间。有关如何在此处换行的任何提示吗?

r pdf latex quarto xelatex
1个回答
0
投票

首先,当您渲染为 pdf 时,HTML 标签将不起作用,并且会被丢弃,正如警告所告诉您的那样。相反,您必须使用 LaTex 添加换行符,例如你可以使用

\\\\
。然而,这也不起作用,因为在生成的 LaTeX 代码中,反斜杠会被转义并替换为
\\textbackslash{}

为了防止转义,其他包(如

knits::kable
gtsummary::as_kable_extra
)中的函数提供了
escape=
参数,可以将其设置为
FALSE
。然而,
gt::as_latex
的情况并非如此。

解决此问题的一种可能的解决方法是使用自定义

knit_print
方法来覆盖
knit_print
提供的
gt
方法。这样做可以将
\\textbackslash{}
添加的
gt::as_latex
替换为所需的
\\
。基本上,例如在引擎盖下完成了相同的操作
gtsummary::as_kable_extra

注意:您必须在加载 ´gt

knit_print
gt` 默认值后定义或添加自定义
, otherwise it gets overridden by the 
方法。

---
title: "Unbreakable Line"
format: pdf
editor: visual
---

```{r}
#| label: load-packages
#| include: false

library(tidyverse)
library(tinytex)
library(gt)
```

```{r echo=FALSE}
knit_print.gt_tbl <- function(x, ...) {
  if (knitr::is_latex_output()) {
    res <- gt::as_latex(x)
    res[[1]] <- gsub(
      "\\textbackslash{}",
      "\\",
      res[[1]],
      fixed = TRUE
    )

    return(res)
  }

  gt:::knit_print.gt_tbl(x)
}

registerS3method(
  "knit_print", "gt_tbl", knit_print.gt_tbl,
  envir = asNamespace("knitr")
)
```

```{r echo=FALSE}
iris %>%
  head(10) %>%
  gt() %>%
  cols_label(
    Sepal.Length = "Sepal\\\\Length"
  )
```

enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.