修补 `\includegraphics` 以调用 `\embedfile`

修补 `\includegraphics` 以调用 `\embedfile`

我想制作一个包,自动将所有必要的*)源文件附加到输出 PDF。我从embedfilefilehookcurrfile包开始,然后放入

\embedfile\currfilename
\AtBeginOfInputs{\embedfile\currfilename}
\AtBeginOfIncludes{\embedfile\currfilename}

在序言中。到目前为止,一切都很简单。

下一步是在调用时附加图像文件\includegraphics。我的第一次尝试与中的解决方案类似embedall

\LetLtxMacro\embedall@latex@includegraphics\includegraphics
\newcommand\embedall@includegraphics[2][]{%
    \embedfile[desc=image]{#2}
    \embedall@latex@includegraphics[#1]{#2}%
}

image.png但它有一个限制,只有给出了完整的图像文件名(如)才有效。

我想象在确定完整文件名后,我必须修补要graphicx调用的某个宏\embedfile(或要定义某个适当的钩子)。我查看了graphics.stygraphicx.sty,但我无法找出正确的补丁。

有人对此有什么想法吗?

*) 此时,“必需”本质上意味着那些被认为包含文档内容的文件。

答案1

抱歉,这很简单:

\let\es@Gin@setfile\Gin@setfile
\def\Gin@setfile#1#2#3{\es@Gin@setfile{#1}{#2}{#3}\embedfile{#3}}

似乎可以完成这项工作。

答案2

我将使用不同的补丁,将\Gin@setfile文件添加到文件列表中:

\documentclass{article}
\usepackage{graphicx,embedfile,etoolbox}

\makeatletter
\patchcmd{\Gin@setfile}
  {\@addtofilelist}
  {\embedfile{#3}\@addtofilelist}
  {}{}
\makeatother

\begin{document}

\includegraphics{example-image}

\includegraphics{example-image-a.png}

\end{document}

在此处输入图片描述

相关内容