luacode* 环境中的百分号(LuaLaTeX)

luacode* 环境中的百分号(LuaLaTeX)

有人可以解释一下这里发生了什么:

\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

我假设luacodeLaTeX 中的工作方式与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(+ 以下换行符) 被忽略,而第二个和第三个会写出%

所有(大多数)编程语言都使用相同的转义字符,这有点烦人\,因此当将一个语言嵌入另一个语言时,需要多次转义。

相关内容