Условное выделение вывода - PullRequest
0 голосов
/ 16 июня 2020

Полагаю, мне здесь не хватает чего-то очевидного, но какое-то время я был в тупике. У меня есть настройка файла .Rmd, и почти все хорошо сочетается с Markdown_strict и latex_fragment (с небольшой предварительной обработкой на этом), но пока неважно.

Вот файл sample.Rmd, который у меня на входе. Я не мог понять, как вкладывать обратные кавычки, поэтому на данный момент это псевдо-экранирование.

---
title: "Sample"
output:
  md_document:
    preserve_yaml: yes
    variant: markdown_strict+raw_html+all_symbols_escapable
  latex_fragment: default
knit: (function(inputFile, encoding) {
  rmarkdown::render(inputFile, encoding = encoding,
  output_dir = ".", output_format = "all") })
---
\`\`\`{r setup, include=FALSE}
knitr::opts_chunk$set(echo = FALSE)

sqlcode <- function(sql, code = "") {
  if (knitr::is_latex_output()) {
    return(paste0('\n```{=sql}\n',sql,'\n```\n'))
  } else if (!knitr::is_html_output(excludes = "markdown")) {
    if (length(code)>0) {
      code = paste0(" ", code," ")
    } else {
      code = " "
    }
    pre <- paste0("{{< sql",code,">}}\n")
    post <- "\n{{< /sql >}}"
    return(knitr::raw_html(paste0(pre,sql,post)))
  }
}
\`\`\`

This is a sample.

\`\`\`{r echo=FALSE} 
sqlcode("SELECT *
FROM TABLE", "sample")
\`\`\`

Фрагмент LaTeX, который мне нужен:

This is a sample.

\begin{Shaded}
\begin{Highlighting}[]
\KeywordTok{SELECT} \OperatorTok{*}
\KeywordTok{FROM}\NormalTok{ TABLE}
\end{Highlighting}
\end{Shaded}

Я получаю:

This is a sample.

\begin{verbatim}
## [1] "\n```{=sql}\nSELECT *\nFROM TABLE\n```\n"
\end{verbatim}

Что касается MD, я действительно получаю то, что хочу, а именно:

---
title: "Sample"
output:
  md_document:
    preserve_yaml: yes
    variant: markdown_strict+raw_html+all_symbols_escapable
  latex_fragment: default
knit: (function(inputFile, encoding) {
  rmarkdown::render(inputFile, encoding = encoding,
  output_dir = ".", output_format = "all") })
---

This is a sample.

{{< sql sample >}}
SELECT *
FROM TABLE
{{< /sql >}}

Для тех, кто знаком с Hu go, это специальные шорткоды, которые я использую для Hu go -сгенерированный сайт. Отсутствие идентификатора кода SQL намеренно, затем выделяется с помощью hu go.

Во всяком случае, как мне получить sqlcode (...) для вывода изолированного блока, который pando c будет правильно выделять в LaTeX, или, альтернативно, какую часть pdf_document.R мне следует настроить по порядку чтобы добиться этого? Я пробовал различные функции knitr, которые отмечают выходные данные, и я могу получить промежуточный MD-файл, который я мог бы обработать для удаления некоторых маркеров, но мне не удалось обработать этот промежуточный MD-файл до того, как knitr отправит его в Pando c.

1 Ответ

1 голос
/ 16 июня 2020

Через некоторое время проб и ошибок разобрался. Это так же просто, как изменить одну строку -_-

sqlcode <- function(sql, code = "") {
  if (knitr::is_latex_output()) {
    knitr::raw_output(paste0('\n```sql\n',sql,'\n```\n'), markers=NULL)
  } else if (!knitr::is_html_output(excludes = "markdown")) {
    if (length(code)>0) {
      code = paste0(" ", code," ")
    } else {
      code = " "
    }
    pre <- paste0("{{< sql",code,">}}\n")
    post <- "\n{{< /sql >}}"
    return(knitr::raw_html(paste0(pre,sql,post)))
  }
}
...