3

我有以下数据框:

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

我想生成与文本集成的链接的第三列。在 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 标头的普通 .Rmd 文档中工作output: pdf_document。但不在我的bookdown项目中。

4

1 回答 1

1

问题出在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等。

或者,如果您需要表格的其他部分的 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",但是使用第一个解决方案可能会更好。

于 2018-05-31T08:46:34.223 回答