比 shell-escape 更安全的解决问题方法

比 shell-escape 更安全的解决问题方法

我有一个文件夹,里面的文件遵循这个命名约定:“<id>-<name>”。我需要从 latex 文档中引用它们,但“<name>”经常更改,所以我只需要使用“<id>”即可。

我已成功通过启用shell-escape和使用 来执行此操作\input{|"<command>"},以运行从 ID 获取完整文件名的 shell 命令。它有效,但启用shell-escape让我担心,因为此系统有时会编译我没有制作且没有读取的文件。

有人能想到更好的解决方案吗,或者是否有可能使启用变得shell-escape安全?

答案1

ls您可以使用(或在 Windows 中)生成文件列表dir并将其传递给 tex,但如果您需要在 tex 中执行此操作,则texosquery默认允许运行:

当前目录下有一个 test 子目录,其中包含三个文件

$ ls testdir
a-b.txt  a-c.txt  z-a.txt

这个文件

\documentclass{article}
\usepackage{texosquery}
\begin{document}

\TeXOSQueryRegularFileList\zzz{,}{testdir}
\show\zzz

\end{document}

产生终端输出

$ pdflatex dd124
This is pdfTeX, Version 3.14159265-2.6-1.40.21 (TeX Live 2020) (preloaded format=pdflatex)
 restricted \write18 enabled.
entering extended mode
(./dd124.tex
LaTeX2e <2020-02-02> patch level 5
L3 programming layer <2020-08-07>
(/usr/local/texlive/2020/texmf-dist/tex/latex/base/article.cls
Document Class: article 2019/12/20 v1.4l Standard LaTeX document class
(/usr/local/texlive/2020/texmf-dist/tex/latex/base/size10.clo))
(/usr/local/texlive/2020/texmf-dist/tex/latex/texosquery/texosquery.sty
(/usr/local/texlive/2020/texmf-dist/tex/latex/texosquery/texosquery.tex
(/usr/local/texlive/2020/texmf-dist/tex/latex/texosquery/texosquery.cfg)))
(/usr/local/texlive/2020/texmf-dist/tex/latex/l3backend/l3backend-pdfmode.def)
(./dd124.aux) (|texosquery-jre8 -ir , testdir )
> \zzz=macro:
->a-b.txt,a-c.txt,z-a.txt.
l.6 \show\zzz
             
? 

所以\zzz是逗号分隔的文件名列表,\show用您需要对该列表执行的任何循环替换。

相关内容