有人可以解释一下这里发生了什么:
\documentclass{article}
\usepackage{luacode}
\begin{document}
\begin{luacode*}
tex.print("xx\%a","yy\\%b","zz\\\%c")
\end{luacode*}
\end{document}
结果是xxyy%b zz%c
。(xx、yy、zz 是清楚的。) 被\%a
“忽略”,\\%b
和\\\%c
导致“相同” (或 c)。在 PDF 输出中%b
获取 的首选方法是什么?为什么 被忽略?从 lua 调用返回后,TeX 会看到什么?%
\%a
答案1
我假设luacode
LaTeX 中的工作方式与ConTeXt 中的\startluacode
...相同\stopluacode
。luacode 在将控制权交给 lua 之前会扩展其内容。因此,
xx\%a
=>xx%a
(因为\%
=%
)yy\\%b
=>yy\%b
(因为\\
=\
)zz\\\%c
=>zz\%c
(因为\\
=\
和\% = %
)
因此,(正如 Paŭlo Ebermann 提到的),lua 将以下内容写入 TeX 输入流:
%a 年\%b zz\%c
这解释了您获得的输出。也许以下测试文件可以清楚地说明这一点(比较控制台输出和 pdf 输出)。
\def\%{?} \def\?{!} \开始文本 \启动lua代码 tex.print("xx\%a","yy\\%b","zz\\\%c") 打印(“xx\%a”,“yy\\%b”,“zz\\\%c”) \stoplua代码 \停止文本
答案2
我认为单数的\
作用是转义 Lua 中的下一个字母,使其自身消失。因此,TeX 可以看到以下三行:
xx%a
yy\%b
zz\%c
显然第一个会导致%a
(+ 以下换行符) 被忽略,而第二个和第三个会写出%
。
所有(大多数)编程语言都使用相同的转义字符,这有点烦人\
,因此当将一个语言嵌入另一个语言时,需要多次转义。