Knitr-подобный (встроенный) форматирование кода - PullRequest
0 голосов
/ 06 июня 2018

В документе LyX / LaTeX я использую knitr для включения (R) фрагментов кода.

Я хотел бы объяснить свой код ниже фрагмента, повторяявстроенные разделы.

Как мне добиться такого же форматирования текста внутри строки (без оценки)?

На вопрос Ихуэй есть вопрос и ответ , делающий это в rmarkdown и еще один другой ответ от него, что он должен быть похож на LaTeX, но когда я пытаюсь использовать код из ответа rmarkdown, он выдает ошибки в LyX.

Я получаю ошибку:

Error in if (knitr:::pandoc_to() != "latex") return(code) : 
argument is of length zero

Когда я удаляю строку if (knitr ...., я получаю выходной документ, но код строки отформатирован как обычный текст.

Какие-нибудь мысли?

РЕДАКТИРОВАТЬ : по запросу MWE

\documentclass{article}

\begin{document}

<<include=FALSE>>=
local({
  hi_pandoc = function(code) {
    if (knitr:::pandoc_to() != 'latex') return(code)
    if (packageVersion('highr') < '0.6.1') stop('highr >= 0.6.1 is required')
    res = highr::hi_latex(code, markup = highr:::cmd_pandoc_latex)
    sprintf('\\texttt{%s}', res)
  }
  hook_inline = knitr::knit_hooks$get('inline')
  knitr::knit_hooks$set(inline = function(x) {
    if (is.character(x) && inherits(x, 'AsIs')) hi_pandoc(x) else hook_inline(x)
  })
})
@

Test inline R code: \Sexpr{ I("plot(cars, main = 'A scatterplot.')") }.
Normal inline code \Sexpr{pi}.

A code block:

<<>>=
plot(cars, main = 'A scatterplot.')
1 + 2 # a comment
@

\end{document}

1 Ответ

0 голосов
/ 06 июня 2018

У меня работает следующее:

\documentclass{article}
\begin{document}

<<include=FALSE>>=
local({
  hi_pandoc = function(code) {
    if (packageVersion('highr') < '0.6.1') stop('highr >= 0.6.1 is required')
    res = highr::hi_latex(code, markup = highr:::cmd_latex)
    sprintf('\\texttt{%s}', res)
  }
  hook_inline = knitr::knit_hooks$get('inline')
  knitr::knit_hooks$set(inline = function(x) {
    if (is.character(x) && inherits(x, 'AsIs')) hi_pandoc(x) else hook_inline(x)
  })
})
@

Test inline R code: \Sexpr{ I("plot(cars, main = 'A scatterplot.')") }.
Normal inline code \Sexpr{pi}.

A code block:

<<>>=
plot(cars, main = 'A scatterplot.')
1 + 2 # a comment
@

\end{document}

Я удалил knitr:::pandoc_to и заменил highr:::cmd_pandoc_latex на highr:::cmd_latex, так как вы не используете pandoc.Результат:

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...