首页 > 解决方案 > 如何在 R 中处理乳胶命令?

问题描述

我使用 knitr() 并希望根据输出目标(Latex 或 HTML)转换内联 Latex 命令,如“\label”和“\ref”。

为此,我需要(以编程方式)生成正确表示反斜杠的有效 R 字符串:例如“\label”应变为“\\label”。目标是用双反斜杠替换文本片段中的所有反斜杠。

但似乎我什至无法读取这些字符串,更不用说处理它们了:如果我定义:

okstr <- function(str) "do something"

然后当我打电话时

okstr("\label")

我直接得到一个错误“无法识别的转义序列”(当然,因为 \l 是错误的)

所以我的问题是:有没有人知道一种在不使用转义机制的情况下读取字符串(在 R 中)的方法?

是的,我知道我可以手动完成,但这就是重点:我需要以编程方式完成。有很多问题与这个问题很接近,我花了一些时间浏览,但我发现没有一个可以为此产生可行的解决方案。

此致。

标签: rescapinglatexbackslash

解决方案


在 R 代码中,您需要遵守 R 的语法约定。并且由于\in strings 用作转义字符,因此它需要形成有效的转义序列(并且\l在 R 中不是有效的转义序列)。

根本没有办法解决这个问题。

但是,如果您正在从其他地方读取字符串,例如使用readLinesscan任何其他文件读取函数,您已经获得了正确的字符串,并且不需要处理。

或者,如果您绝对想在 R 中的文字字符串中编写类似 LaTeX 的命令,只需为\;使用不同的字符。例如,+。只要确保你的函数在任何地方都能正确处理它,并且你保持一种获取文字的方式+。这里有一个建议:

okstr("+label{1 ++ 2}")

then的实现okstr需要将 single +by\和 double ++by替换+(使上述结果为\label{1 + 2})。但是请考虑这需要以什么顺序发生,以及您希望如何处理更复杂的情况;例如,以下产量应该是什么:okstr("1 +++label")


推荐阅读