我想创建一个命令,它只是打印我给它的内容,但通过 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}