在 LuaTeX 中,如何转义将插入 LaTeX 中的文本?

在 LuaTeX 中,如何转义将插入 LaTeX 中的文本?

我编写了一个 Lua 函数,用于将 TXT 文件中的数据转储到我的 LaTeX 文档中。我现在遇到的问题是 TXT 文件中的数据被视为 LaTeX 代码,因此我需要使用反斜杠等转义特殊字符。有没有办法将 TXT 文件中的数据视为“纯文本”,而无需任何 LaTeX 格式?

我的直觉是:

  • 有一个用于此的 LaTeX 宏。有点像verbatim,但不以打字机字体显示我的文本。
  • 有现成的 LuaTeX 宏或函数可以实现这一点。基本上与\luaescapestring
  • 我必须手写一个特殊字符转义函数。

来源test.tex

\documentclass{article}
\directlua{dofile("test.lua")}
\begin{document}

\directlua{test("test.txt")}

\end{document}

来源test.lua

function test(filename)
  local file = io.open(filename)
  local s = file:read("*a")
  tex.print(s)
  file:close()
end

我当前的test.txt使用 LaTeX 格式:

Hello \$\#\%!

我想要的test.txt是纯文本,可能包含任何特殊字符:

Hello $#%!

答案1

用于tex.print(-2,s)获取所需的输出。

背景:该函数tex.print()接受不同数量的参数。在最简单的变体中,它接受应输出的字符串。它还接受“catcode 表”作为第一个参数(一个数字)。有预定义的 catcode 表,并且 -2 是一个 catcode 表,其中所有特殊字符都不再是特殊字符。因此tex.print(-2,"#")不会插入“catcode 为 6 的 #”,而是“catcode 为 12 的 #”。众所周知,12 是无害的“其他字符”的 catcode。

相关内容