You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.16 12:09:31