使用knitr / kable在LaTeX表中链接文本

时间:2018-05-31 06:35:41

标签: r latex knitr bookdown kableextra

我有以下数据框:

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兼容的解决方案,但如果这不可能,我准备学习任何表包可以做到这一点。)

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

1 个答案:

答案 0 :(得分: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",你可能不会这样做,但是你可能最好不要使用第一个解决方案。