Код lua внутри directlua выдает ошибку недопустимой escape-последовательности

Код lua внутри directlua выдает ошибку недопустимой escape-последовательности

Я пытаюсь использовать 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содержит текст "!. Как дела"
  • a_folder/fourth_fileсодержит текст «вы?»

Используя lua, я хотел бы сгенерировать текст "HelloWorld!.How are you?". Поэтому я написал , 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

Вам необходимо предотвратить расширение \\и . Добавление к ним префикса с помощью h этого не сделает:~\

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

Связанный контент