6

在 Scala 字符串中需要逐字包含此文字:\usepackage{x}. 因此,需要的是

val s = """ ... \usepackage{X} ... """

println(s)
... \usepackage{X} ...

迄今为止的尝试包括,

scala> """\usepackage{X}"""
<console>:1: error: error in unicode escape
       """\usepackage{X}"""
            ^

scala> raw"""\usepackage{X}"""
<console>:1: error: error in unicode escape
       raw"""\usepackage{X}"""
               ^

单个双引号字符串也被证明是不成功的。

http://docs.scala-lang.org/overviews/core/string-interpolation.html之后,一个工作示例包括

scala> raw"a\nb"
res1: String = a\nb

这不包括 unicode 案例。

4

1 回答 1

10

您似乎面临SI-4706问题:Unicode 文字语法阻碍了三引号的常见用例

在 Scala 中,unicode 转义序列不仅在字符或字符串文字内部进行处理。以下代码是否有效可能并不明显:

scala> 5 \u002B 10
res0: Int = 15

不幸的是,如果您不想完全禁用 unicode 转义,似乎没有一个好的方法(-Xno-uescape仅在 Scala 2.13.1 之前可用,请参阅PR #8282ee8c1ef8)。

SI-4706 问题中建议的解决方法之一是分隔反斜杠字符:

scala> """\""" + """usepackage{X}"""
res1: String = \usepackage{X}
于 2014-06-05T11:48:50.970 回答