Более безопасный подход, чем бегство от снарядов, для решения проблемы

Более безопасный подход, чем бегство от снарядов, для решения проблемы

У меня есть папка с файлами, которая следует этому соглашению об именовании: "<id>-<name>". Мне нужно ссылаться на них из документа latex, но "<name>" часто меняется, поэтому мне нужно сделать это, используя только "<id>.

Мне удалось сделать это, включив shell-escapeи используя \input{|"<command>"}, чтобы запустить команду оболочки, которая получает полное имя файла из идентификатора. Это работает, но включение shell-escapeбеспокоит меня, потому что эта система время от времени компилирует файлы, которые я не создавал и не читал.

Может ли кто-нибудь придумать лучшее решение или возможно ли как-то сделать включение shell-escapeбезопасным?

решение1

Вы можете сгенерировать список файлов с помощью ls(или dirв Windows) и передать его в tex, но если вам нужно сделать это в tex, то texosqueryпо умолчанию разрешено запускать так:

С тестовым подкаталогом текущего каталога с тремя файлами

$ 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любым циклом по этому списку, который вам нужен.

Связанный контент