LaTeX 中的链接文本 table 与 knitr/kable

Linked text in LaTeX table with knitr/kable

我有以下数据框:

site_name           | site_url
--------------------| ------------------------------------
3D Printing         | https://3dprinting.stackexchange.com
Academia            | https://academia.stackexchange.com
Amateur Radio       | https://ham.stackexchange.com

我想生成第三列,其中 link 与文本集成在一起。在 HTML 中,我想出了以下伪代码:

df$url_name <- "[content of site_name](content of site_url)"

导致以下工作程序代码:

if (knitr::is_html_output()) {
    df <- df %>% dplyr::mutate(url_name = paste0("[", df[[1]], "](", df[[2]], ")"))
    knitr::kable(df)
}

在 LaTeX 中也有 knitr 的方法吗?

(我更喜欢与 kableExtra 兼容的解决方案,但如果这不可能,我准备学习任何 table 包可以做到这一点。)

*** 添加:我刚刚注意到上面的代码在带有 yaml header output: pdf_document 的普通 .Rmd 文档中工作。但不在我的 bookdown 项目中。

问题出在 knitr::kable。它不识别 bookdown 项目需要 Markdown 输出,所以你需要明确地告诉它:

df <- df %>% dplyr::mutate(url_name = paste0("[", df[[1]], "](", df[[2]], ")"))
knitr::kable(df, format = "markdown")

这适用于任何类型的 Markdown 输出:html_documentpdf_documentbookdown::pdf_book 等。

或者,如果 table 的其他部分需要 LaTeX 输出,您可以编写 LaTeX 等价物。当然,这不适用于 HTML 输出,但对于 PDF 目标应该没问题:

df <- df %>% dplyr::mutate(urlName = paste0("\href{", df[[2]], "}{", df[[1]], "}"))
knitr::kable(df, format = "latex", escape = FALSE)

对于这个,我不得不更改列名称;下划线在 LaTeX 中是特殊的。如果您将其保留为 format = "markdown",您可能不这样做就可以逃脱,但是使用第一个解决方案可能会更好。