
Я пытаюсь использовать 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}