Como obter uma lista dos nomes dos arquivos das figuras incorporadas em um documento

Como obter uma lista dos nomes dos arquivos das figuras incorporadas em um documento

Eu tenho um documento TeX que incorpora uma grande quantidade de figuras de uma figpasta que está cheia de outra quantidade enorme de outras figuras.

Gostaria de mover o documento junto com suas figuras, mas não quero levar a figpasta inteira, apenas as figuras que estão embutidas no documento.

Existe algum pacote (ou alguma outra forma) que me permita, por exemplo, imprimir os nomes dos arquivos de todas as figuras incorporadas no documento? Algo como:

fig/figurename1.eps
fig/figurename2.eps
...
etc

Eu poderia então simplesmente copiar e colar essa lista e adicionar alguns cpem um arquivo de texto simples e automatizar a cópia desses arquivos para o local desejado, executando o arquivo em meu shell:

$ cp fig/figurename1.eps wherever/fig/
$ cp fig/figurename2.eps wherever/fig/
...
etc

Claro que isso é apenas uma ideia, se alguém tiver uma alternativa para "listagem de arquivos e copiar e colar em um arquivo shell", ficaria feliz em ouvir =)

Responder1

Você pode modificar a \includegraphcsmacro para adicioná-la a uma lista e imprimir a lista no final do documento. O MWE abaixo produz a seguinte saída:

Figures included were
 images/figA.jpg
 images/figB.png

Notas:

  • Neste caso \lettambém teria funcionado (conforme comentário de egreg emRedimensione todas as imagens em Latex para uma largura percentual), mas me acostumei a usar \LetLtxMacrofromo letltxmacropacotepara macros que possuem parâmetros opcionais. Uma descrição detalhada \LetLtxMacropode ser encontrada nesta pergunta sobre umsímbolo de raiz quadrada fechada.

  • A [demo]opção é utilizada para colocar uma caixa preta onde a figura iria para fins de demonstração, no seu uso real (quando você realmente tem as figuras disponíveis), você precisa remover esta opção.

  • Se você quiser, você pode usar \immediate\write18e executar o cpcomando shell dentro do \foreachloop e ter um diretório no final da composição que contém as imagens que foram incluídas. Nenhum processamento adicional seria necessário.

Código:

\documentclass{article}
\usepackage[demo]{graphicx}% Remove [demo] option in real usage.
\usepackage{letltxmacro}
\usepackage{pgffor}


%% https://tex.stackexchange.com/questions/14393/how-keep-a-running-list-of-strings-and-then-process-them-one-at-a-time
\newcommand\FigList{}
\newcommand\AddFigToList[1]{\edef\FigList{\FigList#1,}}

\LetLtxMacro{\OldIncludegraphics}{\includegraphics}
\renewcommand{\includegraphics}[2][]{%
    \AddFigToList{#2}%
    \OldIncludegraphics[#1]{#2}%
}

\newcommand*{\ShowListOfFigures}{%
    \typeout{Figures included were}%
    \foreach \x in \FigList {%
        %\par\x% <-- uncomment if you want the list in the PDF as well
        \typeout{ \x}
    }%
}
\AtEndDocument{\ShowListOfFigures}

\begin{document}
\includegraphics{images/figA.jpg}

\includegraphics{images/figB.png}
\end{document}

Responder2

pdflatexfornece o sinalizador -recorderque grava um .flsarquivo. Tudo o que está marcado INPUTali são arquivos que foram abertos durante o processamento. latexmkusa a bandeira -depsou -deps-out=FILENAMEpara mostrar as decências e no último caso também armazena-as em um makearquivo FILENAME.

Responder3

No Linux, algo assim servirá, sem modificar a fonte:

strace -fe open  make 2>&1  1>/dev/null | grep plots | sed 's/.*\"\(.*\)\".*/\1/' > plots.list

Onde :

  • makeé o comando que você usa para construir sua saída (pode ser alguma variação de pdflatex file.tex).

  • straceexibe as syscalls. Com as opções que estamos disponibilizando, mantemos apenas as syscalls ( -eopção) "abertas" para obter as figuras que estão inseridas (bem como outros arquivos abertos agora). A -fopção é exibir syscalls de subprocessos e os redirecionamentos são para manter apenas a saída do strace.

  • grep plotsseleciona as linhas que contêm uma string comum no caminho ("plotagens" neste caso).

  • sedseleciona o que está dentro das aspas.

  • O redirecionamento final despeja o resultado em um arquivo.

Você pode obter nomes de arquivos duplicados dessa maneira, mas pode ser bom o suficiente dependendo do que você deseja.

Responder4

Existe um perlscript no CTAN,texdependeque faz tudo isso e muito mais. Ele lida com todos os tipos de dependências internas e externas e pode gerar as informações no formato Makefile, perlou 1 por linha.

>texdepend
Find LaTex dependencies, Version: 0.96, Michael Friendly ([email protected])
Usage: C:\batchfiles\texdepend.pl <options> texfile[.tex]
  where <options> may be abbreviated to unique truncations, and are:
   -help               print this measly help
   -expand             expand package/include file to full path names
   -format = make      print dependencies in Makefile format
             perl      print in the form of perl assignments (LatexMk)
             1         print one per line (with # separators)
   -ignore = list      list of file types to be ignored in .log [default: fd]
   -out = filename     send output to filename
   -print =            Any one or more of i (includes) p (packages)
                       f (figs) b (bibfiles) s (styles) d (all dependencies)
   -styles = list      list of file types for  from .log [default: sty]
   -verbose

informação relacionada