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