Связанный текст в таблице LaTeX с knitr / kable - PullRequest
0 голосов
/ 31 мая 2018

У меня есть следующий фрейм данных:

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, но если это невозможно, я готов изучить любой пакет таблиц, способный сделать это.)

*** ДОБАВЛЕНО: Я простозаметил, что приведенный выше код работает в обычном документе .Rmd с заголовком yaml output: pdf_document.Но не в моем bookdown проекте.

1 Ответ

0 голосов
/ 31 мая 2018

Проблема с 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", но тогда вам, вероятно, было бы лучше использовать первое решение.

...