Sichererer Ansatz zur Problemlösung als Shell-Escape

Sichererer Ansatz zur Problemlösung als Shell-Escape

Ich habe einen Ordner mit Dateien, der dieser Namenskonvention folgt: „<id>-<name>“. Ich muss von einem Latex-Dokument aus auf sie verweisen, aber „<name>“ ändert sich häufig, daher muss ich nur „<id>“ verwenden.

Dies ist mir gelungen, indem ich aktiviert shell-escapeund verwendet habe \input{|"<command>"}, um einen Shell-Befehl auszuführen, der den vollständigen Dateinamen aus einer ID abruft. Das funktioniert, aber die Aktivierung shell-escapemacht mir Sorgen, da dieses System von Zeit zu Zeit Dateien kompiliert, die ich weder erstellt noch gelesen habe.

Fällt jemandem eine bessere Lösung ein oder ist es irgendwie möglich, die Aktivierung shell-escapesicher zu gestalten?

Antwort1

lsSie können mit (oder in Windows) eine Dateiliste generieren dirund sie an Tex übergeben. Wenn Sie dies jedoch innerhalb von Tex tun müssen, texosqueryist die Ausführung standardmäßig zulässig:

Mit einem Test-Unterverzeichnis des aktuellen Verzeichnisses mit drei Dateien

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

dieses Dokument

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

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

\end{document}

erzeugt eine Terminalausgabe von

$ 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
             
? 

Das Gleiche \zzzgilt für die durch Kommas getrennte Liste der Dateinamen. Ersetzen Sie diese \showdurch die gewünschte Schleife über diese Liste.

verwandte Informationen