Abordagem mais segura do que o shell-escape para resolver o problema

Abordagem mais segura do que o shell-escape para resolver o problema

Eu tenho uma pasta de arquivos que segue esta convenção de nomenclatura: "<id>-<nome>". Preciso me referir a eles em um documento de látex, mas "<nome>" muda frequentemente, então preciso fazer isso usando apenas "<id>.

Consegui fazer isso ativando shell-escapee usando \input{|"<command>"}, para executar um comando shell que obtém o nome completo do arquivo de um ID. Funciona, mas a habilitação shell-escapeme preocupa, porque esse sistema compila, de vez em quando, arquivos que eu não fiz e não li.

Alguém consegue pensar em uma solução melhor ou é de alguma forma possível tornar a habilitação shell-escapesegura?

Responder1

Você pode gerar uma lista de arquivos usando ls(ou dirno windows) e passá-la para o tex, mas se precisar fazer isso dentro do tex então texosqueryé permitido rodar por padrão assim:

Com um subdiretório de teste do diretório atual com três arquivos

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

esse documento

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

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

\end{document}

produz saída terminal de

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

o mesmo \zzzacontece com a lista de nomes de arquivos separados por vírgula, substitua \showpor qualquer loop nessa lista que você precisa fazer.

informação relacionada