我正在尝试修改命令\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 和 snappy.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