在knitr中使用\ Sexpr {}的公式的未评估内联代码

时间:2017-11-03 16:20:03

标签: r latex knitr

我喜欢将type(text.lower()) #=> <type 'str'> 用于内联R代码,包括突出显示。但是,这似乎不适用于公式。似乎代字号是一个问题。它只是没有在pdf中显示。

这是一个最小的例子:

\Sexpr{''}

我得到的是以下内容:

enter image description here

感谢任何帮助。

1 个答案:

答案 0 :(得分:2)

仔细观察在setup中定义的内联函数的结果:

inline('lm(response ~ treatment, data)')

"[1]  \\hlkwd{lm}\\hlstd{(response} \\hlopt{~} \\hlstd{treatment, data)}"

这里有两个问题:代字号用\ hlopt {}而不是\ hlstd {}标记,并且没有正确标记为LaTeX的符号。为此,您需要将其插入\textasciitilde

我不知道是否有办法修改highr::hi_latex来正确解释所有数学符号,如代字号。除此之外,您可以按如下方式修改LaTeX输出 post facto

<<setup, echo=FALSE, message=FALSE>>=
library(knitr)
library(dplyr)
library(stringr)

knit_hooks$set(inline = function(x) { 
  if (is.numeric(x)) return(knitr:::format_sci(x, 'latex')) 
  highr:::hi_latex(x) %>% 
    str_replace("~", "\\\\textasciitilde") %>% 
    str_replace("hlopt", "hlstd")
  }) 
@