
Estou tentando automatizar lualatex
a 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.tex
contém o texto "Olá"a_folder/second_file
contém o texto "Mundo"a_folder/third_file
contém o texto "!. Como vão"a_folder/fourth_file
contém o texto "você?"
Usando lua
, gostaria de gerar o texto "HelloWorld!.How areyou?". Então escrevi lua_escaping_issue.tex
que 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.tex
recebo 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}