在 directua 中使用宏时出现问题

在 directua 中使用宏时出现问题

我有以下外部 lua 脚本:

-- file mylua.lua
function test(input)
   tex.sprint(input)
end

以及以下lualatex文档:

\documentclass{article}
\usepackage{luacode}
\directlua{dofile("mylua.lua")}

\begin{document}

This works: \directlua{test("Hello world!")}

But this doesn't: \directlua{test("\textit{Hello world!}")}
\end{document}

这是一个简单的例子,说明了我在编写更复杂的代码时遇到的错误。我将我的 lua 代码移至外部文件,以避免转义字符的问题。但是,我不可避免地必须在调用中使用宏\directlua,而大多数时候我无法控制宏是什么。

有没有什么办法可以避免这个问题?

答案1

您想要打印 Lua 字符串"\textit..."但是\t是一个制表符因此您需要"\\textit...."在 Lua 中\directlua扩展它的参数\edef因此您需要停止\\扩展:

\documentclass{article}
\usepackage{luacode}
\directlua{dofile("mylua.lua")}

\begin{document}

This works: \directlua{test("Hello world!")}

But this doesn't: \directlua{test("\string\\textit{Hello world!}")}
\end{document}

您还可以使用

\directlua{test("\luaescapestring{\detokenize{\textit{Hello world!}}}")}

如果您无法轻松控制内容,那么这可能会更好。

在此处输入图片描述

您已经加载(但未使用)了luacode提供一些包装器的包,\directlua但我发现通常不使用它们并直接控制扩展更简单。

相关内容