从 luacode* 环境打印反斜杠

从 luacode* 环境打印反斜杠

我第一次尝试使用 LuaLaTex 时遇到了一些麻烦,试图从 LuaLaTex 内部生成 LaTex 代码。这需要我打印反斜杠(以获取 LaTeX 控制序列)。我想我现在找到了一个解决方案,但也许这也会引起其他人的兴趣,所以我还是尝试将其作为问题发布在这里。

(另请参阅以下问题在 LuaTeX 中打印 LaTeX 代码如何在 LaTeX 中插入反斜杠或波浪号?

软件包文档的luacode第 2 页写道:

luacode* 变体更进一步,甚至将反斜杠也变成了普通字符

考虑以下代码:

\documentclass{article}
\usepackage{luacode}
\begin{document}
\begin{luacode*}
  tex.sprint("\");
\end{luacode*}
\end{document}

编译这个lualatex给出错误

! LuaTeX error <\directlua >:1: unfinished string near '"");'.
\luacode@dbg@exec ...code@maybe@printdbg {#1} #1 }

然后我想我只需要添加另一个反斜杠来转义第一个:

tex.sprint("\\");

但现在我收到了错误:

! Undefined control sequence.
l.1 

答案1

问题在于其中涉及 3 个解释阶段。

  • 第一次宏扩展(由于环境原因,在我的例子中避免了这一点luacode*
  • 然后 Lua 解释结果字符串,其中反斜杠是转义字符
  • 最后,LaTex 再次解释 Lua 打印的内容。

我忘记了最后阶段。所以解决方案是:

tex.sprint("$\\backslash$");

或者

tex.sprint("\\textbackslash");

答案2

如果你想要真实的反斜杠,您可以使用:

\documentclass{article}
\usepackage{luacode}
\usepackage{fontspec}
\setmainfont{TeX Gyre Termes} 

\begin{document}

\begin{luacode*}
  tex.print(-2, "\\");
\end{luacode*}

\end{document}

在 LuaTeX 参考中:

tex.print(<number> n, <string> s, ...)

如果n为 -2,则得到的类别代码为\the\toks:除空格字符(类别代码为 10(空格))外,所有类别代码均为 12(其他)。

相关内容