虽然xtable()
有一个sanitize.text.function
参数,允许使用特殊字符清理字符串以阻止LaTeX编译在Sweave / knitr文档中中断,但该包不会将该函数导出到用户空间。
如何在asdf_text
上下文之外清理xtable
之类的字符串,以便将其转换为asdf\_text
之类的内容? (如果可能的话,我宁愿选择一个小型,独立的解决方案。)
答案 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"