Escribir nombres de archivos utilizados con GraphicX

Escribir nombres de archivos utilizados con GraphicX

Estoy intentando modificar el comando \includegraphics{}para escribir el nombre del archivo incluido, incluida su ruta y extensión, en un archivo de texto. Lo que tengo hasta ahora es:

\makeatletter
\newwrite\myfile
\immediate\openout\myfile=myfigures.txt
\let\TempCmd\Ginclude@graphics
\renewcommand{\Ginclude@graphics}[1]{\TempCmd{#1}\immediate\write\myfile{#1}}
\makeatother

El único problema con esto es que la extensión del archivo no se escribirá si no se especifica. Por ejemplo, si tengo mypic.epsen una subcarpeta llamada figures, y escribo \includegraphics{figures/mypic}, entonces myfigures.txtsólo habré figures/mypicescrito en ella, cuando lo que quiero sea figures/mypic.epsque se escriba.

Intenté husmear en graphicx.sty y snapshot.sty para ver si puedo descubrir cómo manejan las extensiones de nombre de archivo y hackear algo yo mismo, pero no he podido resolverlo todavía. Si pongo \filename@parse{#1}ahí no obtengo nada \filename@ext.

Aquí está mi ejemplo de trabajo mínimo (solo proporcione alguna imagen de su elección):

\documentclass{article}
\usepackage{graphicx}

\makeatletter
\newwrite\myfile
\immediate\openout\myfile=myfigures.txt
\let\TempCmd\Ginclude@graphics
\renewcommand{\Ginclude@graphics}[1]{\TempCmd{#1}\immediate\write\myfile{#1}}
\makeatother

\begin{document}
\includegraphics{mypic}
\end{document}

Respuesta1

graphicsya está probando varias extensiones y, dependiendo del back-end elegido, determina qué archivo usa, por lo que desea conectarse allí justo antes de que llame al back-end para incluir realmente el archivo, no en el comando de nivel superior.

\documentclass{article}
\usepackage{graphicx}

\makeatletter
\newwrite\myfile
\immediate\openout\myfile=myfigures.txt
\let\TempCmd\Gin@setfile
\def\Gin@setfile#1#2#3{\TempCmd{#1}{#2}{#3}\immediate\write\myfile{#3}}
\makeatother

\begin{document}
\includegraphics{mypic}
\end{document}

produce

mypic.png

información relacionada