我想制作一个包,自动将所有必要的*)源文件附加到输出 PDF。我从embedfile
、filehook
和currfile
包开始,然后放入
\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.sty
和graphicx.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}