Lua中实现TeX文件导入替换时的递归函数与无限循环问题求助
Lua中实现TeX文件导入替换时的递归函数与无限循环问题求助
各位大佬好!我最近在折腾一个小工具,想用Lua把TeX文件里的\import命令替换成对应子文件的内容,把分散的章节合并成一个完整的TeX文件。
我的主文件input.tex结构是这样的:
\begin{document} \import{./}{Capitolo1.tex} \import{./}{Capitolo2.tex} \end{document}
目前我已经写了几个基础的Lua函数,用来检查文件是否存在、读取文件内容行,还有搜索识别\import命令的位置和对应的文件名,代码如下:
function file_exists(name) local f = io.open(name, "r") if f ~= nil then io.close(f) return true else return false end end function rows_from(file) if not file_exists(file) then return {} end local rows = {} for line in io.lines(file) do rows[#rows + 1] = line end return rows end function search_for_import(tex) local tbl = {} local rows = rows_from(tex) for j = 1, #rows do if string.sub(rows[j],1,7) == "\\import" then table.insert(tbl,{ [1] = j, -- 记录\import所在的行号 [2] = string.sub(rows[j],13,-2), -- 提取要导入的文件名 }) print(string.sub(rows[j],13,-2)) end end -- 后续的替换逻辑还没写完,现在遇到了棘手的问题 end
现在我卡在了递归处理这一步:如果被导入的子文件(比如Capitolo1.tex)里面也包含\import命令,我需要继续递归替换它的导入内容,但很容易出现问题:
- 要是出现循环导入的情况(比如A文件导入B,B又导入A),会直接无限递归下去
- 不知道怎么正确把原文件中的
\import行,替换成目标文件的全部内容,同时还要处理目标文件里的嵌套导入
有没有朋友能帮我看看怎么完善这个递归逻辑,或者有没有更稳妥的实现思路呀?
备注:内容来源于stack exchange,提问作者user3204810
相关产品推荐
相关产品推荐

