
\includegraphics{}
私は、インクルードされたファイルの名前(パスと拡張子を含む)をテキスト ファイルに書き込むコマンドを変更しようとしています。これまでのところ、次のようになっています。
\makeatletter
\newwrite\myfile
\immediate\openout\myfile=myfigures.txt
\let\TempCmd\Ginclude@graphics
\renewcommand{\Ginclude@graphics}[1]{\TempCmd{#1}\immediate\write\myfile{#1}}
\makeatother
これに関する唯一の問題は、ファイル拡張子が指定されていない場合は書き込まれないことです。たとえば、mypic.eps
というサブフォルダーにがありfigures
、 と書き込む\includegraphics{figures/mypic}
と、書き込む必要があるのはmyfigures.txt
だけです。figures/mypic
figures/mypic.eps
graphicx.sty と snapshot.sty を調べて、ファイル名拡張子の処理方法を調べ、自分で何かをハックできるかどうかを確認しようとしましたが、まだわかりません。\filename@parse{#1}
そこに と入力しても、何も表示されません\filename@ext
。
これが私の最小限の動作例です (選択した画像を提供するだけです):
\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}
答え1
graphics
すでにさまざまな拡張機能を試しており、選択したバックエンドに応じてどのファイルを使用するかを判断しているため、トップレベルのコマンドではなく、バックエンドを呼び出して実際にファイルをインクルードする直前にそこにフックする必要があります。
\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}
生産する
mypic.png