Cómo obtener una lista de los nombres de archivo de las figuras incrustadas en un documento

Cómo obtener una lista de los nombres de archivo de las figuras incrustadas en un documento

Tengo un documento TeX que incorpora una gran cantidad de figuras de una figcarpeta que está llena de otra enorme cantidad de otras figuras.

Me gustaría mover el documento junto con sus figuras, pero no quiero tomar toda la figcarpeta, solo las figuras que están incrustadas en el documento.

¿Existe algún paquete (o cualquier otra forma) que me permita, por ejemplo, imprimir los nombres de archivo de todas las figuras incrustadas en el documento? Algo como:

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

Luego podría simplemente copiar y pegar esa lista y agregar algunos cpen un archivo de texto sin formato y automatizar la copia de esos archivos a la ubicación deseada ejecutando el archivo en mi shell:

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

Por supuesto, esto es sólo una idea, si alguien tiene una alternativa a "listar archivos y copiar y pegar en un archivo shell", estaría encantado de escuchar =)

Respuesta1

Puede modificar la \includegraphcsmacro para agregarla a una lista e imprimir la lista al final del documento. El MWE a continuación produce el siguiente resultado:

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

Notas:

  • En este caso \lettambién funcionaría (según el comentario de egreg enCambiar el tamaño de todas las imágenes en Latex a un ancho porcentual), pero me he acostumbrado a usar \LetLtxMacrodesdeel letltxmacropaquetepara macros que tienen parámetros opcionales. \LetLtxMacroPuede encontrar una descripción detallada en esta pregunta sobre unsímbolo de raíz cuadrada cerrada.

  • La [demo]opción se usa para colocar un cuadro negro donde iría la figura para fines de demostración; en su uso real (cuando realmente tenga las figuras disponibles), debe eliminar esta opción.

  • Si lo desea, puede usar \immediate\write18y ejecutar el cpcomando Shell dentro del \foreachbucle y tener un directorio al final de la composición tipográfica que tenga las imágenes que se incluyeron. No se requeriría ningún procesamiento adicional.

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}

Respuesta2

pdflatexproporciona la bandera -recorder, que escribe un .flsarchivo. Todo lo marcado INPUTallí son archivos que se abrieron durante el procesamiento. latexmkusa la bandera -depso -deps-out=FILENAMEpara mostrar las decencias y en el último caso también las almacena en un makearchivo FILENAME.

Respuesta3

En Linux, algo como esto funcionará, sin modificar la fuente:

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

Dónde :

  • makees el comando que utiliza para generar su salida (podría ser alguna variación de pdflatex file.tex).

  • stracemuestra las llamadas al sistema. Con las opciones que proporcionamos, mantenemos solo las llamadas al sistema "abiertas" ( -eopción) para obtener las figuras que se insertan (así como otros archivos abiertos ahora). Las -fopciones son mostrar llamadas al sistema de subprocesos y las redirecciones son para mantener solo la salida de strace.

  • grep plotsselecciona las líneas que contienen una cadena común en la ruta ("trazados" en este caso).

  • sedselecciona lo que está dentro de las comillas.

  • La redirección final vuelca el resultado en un archivo.

Es posible que obtenga nombres de archivos duplicados de esta manera, pero podría ser suficiente dependiendo de lo que desee.

Respuesta4

Hay un perlguión en CTAN,depender de textoque hace todo esto y más. Maneja todo tipo de dependencias internas y externas y puede generar la información en Makefileformato perl1 por línea.

>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

información relacionada