【问题标题】:Function to sanitize strings for LaTeX compilation?为 LaTeX 编译清理字符串的功能?
【发布时间】:2015-09-30 11:52:09
【问题描述】:

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

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

【问题讨论】:

  • 谁投票结束,为什么?
  • 我投票决定关闭(并回答,这可能有点精神分裂症)。 SO有很强的反推荐政策;您可以将问题改写为“我该如何解决这个问题?”,表明您想要一个简单/独立的解决方案——而不是“什么包具有/具有此功能”?f
  • @BenBolker 谢谢你的解释。我现在修改了这个问题,希望能更好地满足这些期望。 (在获得否决票/关闭投票之前获得有关如何改进问题的建议真的更好。根据我的经验,一旦一个问题获得一个关闭投票,无论多么适当的改进都不会使其免于关闭......)

标签: r latex knitr sweave


【解决方案1】:

除非我误解了你的问题,否则我认为你忽略了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}$"

【讨论】:

  • 我绝对忽略了latexTranslate()!它甚至没有出现在我的 sos 搜索中,因为我正在搜索 sanitize 关键字......
  • latexTranslate 对我的任务的一个优势是它不会与现有的乳胶代码混淆。 xtablesanitizestr 将清除 \\textbf{} 以便在像 "\\textbf{abc_def}" 这样的字符串中, textbf 命令不再起作用。 latexTranslate 只保留乳胶代码,但会清理下划线。
【解决方案2】:

到目前为止,我找到了包reportRx,它提供了sanitizestr()

清理字符串以不破坏 LaTeX

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

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

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


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

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-01-27
    • 1970-01-01
    • 2015-06-28
    • 2011-06-22
    • 1970-01-01
    • 1970-01-01
    • 2010-12-16
    • 1970-01-01
    相关资源
    最近更新 更多