Directlua 内の lua コードが無効なエスケープ シーケンス エラーをスローします

Directlua 内の lua コードが無効なエスケープ シーケンス エラーをスローします

私は を利用してlualatexPDF の一部の生成を自動化しようとしています。最小限の動作例のディレクトリ ツリーは次のようになります。

│   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「!. お元気ですか?」というテキストが含まれています
  • 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

\\およびが拡張されるのを防ぐ必要があります~。 wih をプレフィックスとして付けても、\これは実現されません。

\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}

関連情報