루아코드는 \newcommand에서는 작동하지만 \NewDocumentCommand에서는 작동하지 않습니다.

루아코드는 \newcommand에서는 작동하지만 \NewDocumentCommand에서는 작동하지 않습니다.

다음 코드를 상상해 보세요.

\documentclass{book}

\usepackage{luacode}
\usepackage{xparse}

\NewDocumentCommand{\HelloWorld}{}{Hello World}
\newcommand{\DefaultHelloWorld}{Hello World}

\begin{luacode}
    luatexbase.add_to_callback("wrapup_run", function()
        io.write("\HelloWorld")
        -- io.write("\DefaultHelloWorld")
    end, "Post-process pdf")
\end{luacode}

\begin{document}
    Hello World!
\end{document}

\newcommandusing이 완벽하게 작동하고 로 확장되지만 io.write("Hello World")으로 전환하자마자 다음 오류가 발생 하는 이유는 무엇입니까 \NewDocumentCommand(로그 파일 발췌):

Package: xparse 2023-10-10 L3 Experimental document command parser
)[\directlua]:2: invalid escape sequence near '"\H'.
\luacode@dbg@exec ...code@maybe@printdbg {#1} #1 }
                                           
l.14 \end{luacode}
           
The lua interpreter ran into a problem, so the
remainder of this lua chunk will be ignored.

답변1

감사합니다울리케 피셔

방금 다음으로 전환해야했습니다 \NewExpandableDocumentCommand.

\documentclass{book}

\usepackage{luacode}
% \usepackage{xparse} % REMOVED -- see @David Carlisle's comment

\NewDocumentCommand{\OldHelloWorld}{}{Hello World}        % OLD
\NewExpandableDocumentCommand{\HelloWorld}{}{Hello World} % NEW -- working
\newcommand{\DefaultHelloWorld}{Hello World}

\begin{luacode}
    luatexbase.add_to_callback("wrapup_run", function()
        io.write("\HelloWorld")
        -- io.write("\DefaultHelloWorld")
    end, "Post-process pdf")
\end{luacode}

\begin{document}
    Hello World!
\end{document}

관련 정보