directlua 中的 lua 代码会抛出无效的转义序列错误

directlua 中的 lua 代码会抛出无效的转义序列错误

我正在尝试利用来lualatex自动生成 pdf 的某些部分。我的最小工作示例的目录树如下所示:

│   lua_escaping_issue.tex
└───a_folder
        first_file.tex
        fourth_file.tex
        second_file.tex
        third_file.tex
  • a_folder/first_file.tex包含文本“Hello”
  • a_folder/second_file包含文本“世界”
  • a_folder/third_file包含文本“!. How are”
  • a_folder/fourth_file包含文字“你?”

使用lua,我想生成文本“HelloWorld!.How areyou?”。所以我写了lua_escaping_issue.tex包含以下内容的内容:

\documentclass{article}

\begin{document}


        \directlua
            {
                require 'lfs'
                
                for file in lfs.dir("a\_folder") do
                    if file ~= "." and file ~= ".." then
                        tex.print("\\input\{" .. "a\_folder/" .. file .. "\}")
                    end 
                end
            }

\end{document}

不幸的是,当我编译时latexmk -lualatex lua_escaping_issue.tex出现错误:

[\directlua]:1: '"a\p' 附近的转义序列无效

我认为这个想法\directlua是所有内容都会被扩展,因此容易被 LaTeX 识别的命令应该被转义。我已经这样做了,并且还在 pure 中测试了我的文件lua ,它似乎有效。所以我不确定我在这里做错了什么。

答案1

您需要防止\\~扩大。在它们前面加上前缀并\不能做到这一点:

\documentclass{article}

\begin{document}
    \directlua{
% no   require 'lfs'
                
        for file in lfs.dir("a_folder") do
           if file \string~= "." and file \string~= ".." then
              tex.sprint( "\string\\input{a_folder/" .. file .. "}" )
           end 
        end

    }   
\end{document}

相关内容