
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.eps
en una subcarpeta llamada figures
, y escribo \includegraphics{figures/mypic}
, entonces myfigures.txt
sólo habré figures/mypic
escrito en ella, cuando lo que quiero sea figures/mypic.eps
que 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
graphics
ya 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