如何手动向 pdflatex -recorder .fls 文件添加一行?

如何手动向 pdflatex -recorder .fls 文件添加一行?

我正在使用 LuaLaTeX 包,其中包含一项功能,该功能会调用外部可执行文件(即需要 的东西-shell-escape)来从不同的源文件生成 TeX 文件,然后将其\input放入主文件中。例如,我输入\specialinclude{file.a}main.tex它会调用外部可执行文件将其转换file.afile.tex然后扩展为\input{file.tex}

我希望 latexmk 能够识别对 的依赖,file.a这样它就知道main.pdf如果file.a发生更改就重建,即使实际包含的文件file.tex并没有改变。我将latexmk/lualatex-recorder选项一起使用,成功识别了 的使用,file.tex但没有识别file.a。有没有办法手动告诉recorder选项已输入文件?这将导致文件INPUT file.a中出现一行main.fls。我在想\recorder{file.a}在调用 之前应该怎么做\specialinclude{file.a}

答案1

以下是三种解决方案:

  1. 由于latexmk还会检查.log文件的依赖项,因此您可以通过在文件中写入适当的行latexmk来确认是否存在依赖项。以下定义就是这样做的:file.a.log\recorder

    \newcommand\recorder[1]{\typeout{(#1)}}
    
  2. .fls通过打开文件而不读取文件来获取文件名:

    \newread\tmpread
    \newcommand\recorder[1]{%
        \openin\tmpread=#1
        \closein\tmpread
    }
    
  3. 无需让您的文档处理file.a,而是定义自定义依赖项以从 生成file.texfile.a这样可以避免使用,并且具有仅在发生变化-shell-escape时才调用外部程序的优点。file.a

哪种解决方案最适合您的情况取决于具体情况,例如,LuaLaTex 包除了简单地调用外部程序之外还能做什么。

相关内容