用于清理LaTeX编译字符串的函数?

时间:2015-09-30 11:52:10

标签: r latex knitr sweave

虽然xtable()有一个sanitize.text.function参数,允许使用特殊字符清理字符串以阻止LaTeX编译在Sweave / knitr文档中中断,但该包不会将该函数导出到用户空间。

如何在asdf_text上下文之外清理xtable之类的字符串,以便将其转换为asdf\_text之类的内容? (如果可能的话,我宁愿选择一个小型,独立的解决方案。)

2 个答案:

答案 0 :(得分:5)

除非我误解了您的问题,否则我认为您已忽略了latexTranslate,这也在Hmisc包中(并记录在与?latex相同的帮助页面上):

  

'latexTranslate'翻译字符串中的特定项目        对于LaTeX格式,例如,为上标制作'a ^ 2 = a \ $ ^ 2 \ $'        在变量标签内。希腊字母的LaTeX名称(例如,        如果'greek == TRUE','" alpha"')会添加反斜杠。数学        根据需要插入模式。 'latexTranslate'假设输入        文字总是有匹配,例如'[)[](]()',以及那个周围        通过'\ $ \ $'就行了。

library("Hmisc")
latexTranslate("asdf_text")
## [1] "asdf\\_text"
latexTranslate("a^2")
## [1] "a$^{2}$"

答案 1 :(得分:2)

到目前为止,我发现提供reportRx的包sanitizestr()

  

清理字符串以不破坏LaTeX

     

如果返回' asis'带有特殊字符的字符串会破坏LaTeX。由knitr。每次我们使用一个主reportRx函数时都会发生这种情况。我们首先用这个函数清理我们的字符串,以阻止LaTeX破坏。

require(reportRx)
sanitizestr("asdf_text")
## [1] "asdf\\_text"

然而,我的抱怨是它带来了很多依赖......

另一个解决方案是tikzDevice,它提供sanitizeTexString(),并且具有更少的强制依赖关系:

  

替换字符串中的LaTeX特殊字符

     

当sanitize = TRUE替换特殊的LaTeX字符时,tikzDevice使用此函数[...]

require(tikzDevice)
sanitizeTexString("asdf_text")
## [1] "asdf{\\_{}}text"