
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.eps
em uma subpasta chamada figures
, e eu escrever \includegraphics{figures/mypic}
, então myfigures.txt
só terei figures/mypic
escrito nela, quando o que eu quero for figures/mypic.eps
escrito.
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
graphics
já 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