Schreiben von mit graphicx verwendeten Dateinamen

Schreiben von mit graphicx verwendeten Dateinamen

Ich versuche, den Befehl so zu ändern, \includegraphics{}dass der Name der eingeschlossenen Datei, einschließlich Pfad und Erweiterung, in eine Textdatei geschrieben wird. Bisher habe ich Folgendes erhalten:

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

Das einzige Problem dabei ist, dass die Dateierweiterung nicht geschrieben wird, wenn sie nicht angegeben ist. Wenn ich beispielsweise mypic.epsin einem Unterordner namens habe figuresund schreibe \includegraphics{figures/mypic}, myfigures.txtwird nur dann figures/mypichineingeschrieben, wenn das figures/mypic.epsgeschrieben werden soll, was ich will.

Ich habe versucht, in graphicx.sty und snapshot.sty herumzustöbern, um herauszufinden, wie sie mit Dateinamenerweiterungen umgehen, und selbst etwas zusammenzuhacken, aber ich habe es noch nicht herausgefunden. Wenn ich \filename@parse{#1}dort eingebe, bekomme ich nichts dafür \filename@ext.

Hier ist mein minimales funktionierendes Beispiel (stellen Sie einfach ein Bild Ihrer Wahl bereit):

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

Antwort1

graphicsprobiert bereits verschiedene Erweiterungen aus und ermittelt, je nach ausgewähltem Back-End, welche Datei Sie verwenden. Sie möchten sich also dort einklinken, kurz bevor es das Back-End aufruft, um die Datei tatsächlich einzubinden, und nicht beim Befehl der obersten Ebene.

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

Produziert

mypic.png

verwandte Informationen