LuaTeX 中奇怪的 \luaescapestring

LuaTeX 中奇怪的 \luaescapestring
\directlua{%
  local s = [[\luaescapestring{\TeX}]]
  print(s)}

之后\luaescapestring{\TeX},我想我应该得到

T\\kern -.1667em\\lower .5ex\\hbox {E}\\kern -.125emX

然后这一行将会被 Lua 使用操作转换成字符串[[ ]](同时\\将会是\),因此,

s = "T\kern -.1667em\lower .5ex\hbox {E}\kern -.125emX"

但打印的结果是

T\\kern -.1667em\\lower .5ex\\hbox {E}\\kern -.125emX

为什么?

答案1

比较不同的输出:

\documentclass{article} 
\directlua{tex.enableprimitives("",tex.extraprimitives())}
\begin{document}

\directlua{%
  local s = [[\luaescapestring{\TeX}]]
  print(s)}

\directlua{%
  local s = "\luaescapestring{\TeX}"
  print(s)}

\end{document}


T\\kern -.1667em\\lower .5ex\\hbox {E}\\kern -.125emX\\spacefactor \\@m 
T\kern -.1667em\lower .5ex\hbox {E}\kern -.125emX\spacefactor \@m 

反斜杠[[ ... ]]没有任何意义,并且会被转义

答案2

这是因为[[...]]这是一个“安全”字符串,而这并不是它\luaescapestring应有的用途。这会在字符串中添加两个反斜杠,而不是一个。

这是常规的 Lua,对于 LuaTeX 来说没有什么特别的:

a = [[foo \\ bar]]
print(a)

b = "foo \\ bar"
print(b)

印刷

foo \\ bar
foo \ bar

\luaescapestring{}将每个反斜杠替换为两个反斜杠,而不管您定义的字符串类型(双括号或双引号),因为它不知道这一点。这样,您将在第一个字符串中获得两个反斜杠,而不是一个。

相关内容