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包含文字“你好”
  • 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 識別的命令應該被轉義。我已經這樣做了,並且還以純方式測試了我的文件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}

相關內容