我正在尝试使用 Ruby 生成一个长的 Latex 文档。如果我使用普通的 heredoc 类型声明,Ruby 会在 Unicode 转义时检测到反斜杠(Latex 中有很多反斜杠):
doc = <<DOC
\underline{FOO}
DOC #=> invalid Unicode escape \underline{FOO}
如果我在 DOC
周围加上单引号,它会将整个内容视为字符串文字:
doc = <<'DOC'
\underline{FOO}
DOC
puts doc #=> \underline{FOO}
很好,但现在我不能使用字符串插值:
foo = "foo"
doc = <<'DOC'
string interpolation says "#{foo}".
DOC
puts doc #=> string interpolations says "#{foo}".
我想要两全其美,即字符串插值,并且不必转义每个反斜杠。这可能吗?
最佳答案
I'd like the best of both worlds, i.e. string interpolation, and not having to escape every backslash. Is this possible?
并不是真的直接使用 Ruby。问题是,在处理字符串和反斜杠时,您会一头扎进 Ruby 的预期行为中。
通常这些与 Rails 一起使用以输出 HTML,但另一种到达目的地的方法可能是使用 ERB或 Erubis及其关联的模板。它们在 Ruby 的正常字符串处理之外进行处理,但允许您嵌入变量。他们不使用熟悉的#{foo}
插值,但支持
string interpolation says "<%= foo %>".
Erubis 是 ERB 的编译版本,因此运行速度更快。 ERB 与 Ruby 一起提供,所以您可以选择。
关于Ruby Unicode 和字符串插值问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5384446/