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

lan*_*oni 4 latex r sweave knitr

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

如何清除像上下文asdf_text之外的字符串xtable,以便将其转换为类似的东西asdf\_text?(如果可能的话,我更喜欢一个小型,独立的解决方案.)

Ben*_*ker 5

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

'latexTranslate'将字符串中的特定项目转换为LaTeX格式,例如,为变量标签内的上标制作'a ^ 2 = a\$ ^ 2\$'.如果'greek == TRUE',希腊字母的LaTeX名称(例如,'"alpha"')将添加反斜杠.根据需要插入数学模式.'latexTranslate'假设输入文本总是匹配,例如'[)[](]()','\ $\$'周围的条件是OK.

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


lan*_*oni 2

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

清理字符串以免破坏 LaTeX

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

require(reportRx)
sanitizestr("asdf_text")
## [1] "asdf\\_text"
Run Code Online (Sandbox Code Playgroud)

然而,我的抱怨是它带有相当多的依赖项......


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

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

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

require(tikzDevice)
sanitizeTexString("asdf_text")
## [1] "asdf{\\_{}}text"
Run Code Online (Sandbox Code Playgroud)