LaTeX表格中使用knitr/kable插入超链接

3

I have the following dataframe:

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个回答

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”,则可能可以避免这样做,但是使用第一种解决方案可能会更好。


通过您的第一个建议,我甚至不需要为HTML和LaTeX提供两条不同的路径!我注意到我还可以使用pander包:df <- df %>% dplyr::mutate(url_name = pander::pandoc.link.return(df[[2]], df[[1]])); knitr::kable(df, format = "markdown") 这样更容易阅读一些。 - petzi
我已经编辑了答案,指出第一个解决方案适用于许多输出格式。 - user2554330

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接