我有以下数据框:
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
项目中。
答案 0 :(得分:1)
问题在于knitr::kable
。它无法识别bookdown
项目需要Markdown输出,因此您需要明确告诉它:
df <- df %>% dplyr::mutate(url_name = paste0("[", df[[1]], "](", df[[2]], ")"))
knitr::kable(df, format = "markdown")
这适用于任何类型的Markdown输出:html_document
,pdf_document
,bookdown::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"
,你可能不会这样做,但是你可能最好不要使用第一个解决方案。