编写与 graphicx 一起使用的文件名

编写与 graphicx 一起使用的文件名

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

相关内容