código lua dentro de directlua gera um erro de sequência de escape inválido

código lua dentro de directlua gera um erro de sequência de escape inválido

Estou tentando automatizar lualatexa geração de alguma parte de um pdf. A árvore de diretórios do meu exemplo de trabalho mínimo é semelhante a esta:

│   lua_escaping_issue.tex
└───a_folder
        first_file.tex
        fourth_file.tex
        second_file.tex
        third_file.tex
  • a_folder/first_file.texcontém o texto "Olá"
  • a_folder/second_filecontém o texto "Mundo"
  • a_folder/third_filecontém o texto "!. Como vão"
  • a_folder/fourth_filecontém o texto "você?"

Usando lua, gostaria de gerar o texto "HelloWorld!.How areyou?". Então escrevi lua_escaping_issue.texque contém o seguinte:

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

Infelizmente, quando compilo, latexmk -lualatex lua_escaping_issue.texrecebo um erro:

[\directlua]:1: sequência de escape inválida perto de '"a\p'

Acredito que a ideia \directluaé que tudo seja expandido, portanto comandos suscetíveis de serem reconhecidos pelo LaTeX devem ser escapados. Já fiz isso e também testei meu arquivo puro lua e parece funcionar. Portanto, não tenho certeza do que estou fazendo de errado aqui.

Responder1

Você precisa prevenir \\e ~expandir. prefixá-los com \não faz isso:

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

informação relacionada