命令调用 LuaLaTeX 函数,参数中的反斜杠

命令调用 LuaLaTeX 函数,参数中的反斜杠

我想创建一个命令,它只是打印我给它的内容,但通过 Lua。目前毫无意义,但我想将其扩展到更复杂的用例。我在这里读过一些答案,但不太明白。简而言之,如果我将命令hello \bfseries world作为输入,我希望输出显示“hello世界“。

\documentclass{article}

\usepackage{luacode}

\newcommand\mycmd[1]{%
 \directlua{tex.sprint("--->".."\luatexluaescapestring{#1}") }
}

\begin{document}

\mycmd{Hello world}

\mycmd{Hello \\world} % a bit surprised \\ works, why?

\mycmd{Hello \bfseries world} %

\end{document}

答案1

由于您的文档加载了luacode包,因此您可以使用其\luastringN宏(N代表“不扩展”[在参数传递给 Lua 之前不扩展])来完成工作。关键是您需要防止扩展\bfseries

我想\luastringN{#1}你也可以写成"\luatexluaescapestring{\unexpanded{#1}}"。我相信你会同意前者更容易——既容易记住,也容易写出来。

在此处输入图片描述

\documentclass{article}
\usepackage{luacode}
\newcommand\mycmd[1]{\directlua{ tex.sprint ( "--->" .. \luastringN{#1} ) }}

\begin{document}
\mycmd{Hello world}

\mycmd{Hello \\world} % a bit surprised \\ works, why?

\mycmd{Hello {\bfseries world}}
\end{document}

相关内容