Escrevendo nomes de arquivos usados ​​com graphicx

Escrevendo nomes de arquivos usados ​​com graphicx

Estou tentando modificar o comando \includegraphics{}para escrever o nome do arquivo incluído, incluindo seu caminho e extensão, em um arquivo de texto. O que tenho até agora é:

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

O único problema com isso é que a extensão do arquivo não será gravada se não for especificada. Por exemplo, se eu tiver mypic.epsem uma subpasta chamada figures, e eu escrever \includegraphics{figures/mypic}, então myfigures.txtsó terei figures/mypicescrito nela, quando o que eu quero for figures/mypic.epsescrito.

Tentei fuçar em graphicx.sty e snapshot.sty para ver se consigo descobrir como eles lidam com extensões de nome de arquivo e hackear algo sozinho, mas ainda não consegui descobrir. Se eu colocar \filename@parse{#1}lá, não ganho nada \filename@ext.

Aqui está meu exemplo mínimo de trabalho (basta fornecer alguma imagem de sua escolha):

\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}

Responder1

graphicsjá está tentando várias extensões e, dependendo do back-end escolhido, está descobrindo qual arquivo você usa, então você deseja conectá-lo antes de chamar o back-end para realmente incluir o arquivo, não no comando de nível 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}

Produz

mypic.png

informação relacionada