我撰写过几本书、课堂笔记、论文,其中包含许多图表。所有图表都位于名为 \figures 的同一个 Windows 文件夹中,因为它们可能在多个文档中使用。
当我需要将单个文档发送给某人时,我希望将该文档的 .tex 文件与所需的图形一起压缩,而不是 \figures 文件夹中的所有图形。
我如何才能知道自动地单个 .tex 文档中使用/引用了哪些图形(文件名.ext)。目前,我必须手动搜索才能找出需要哪些图形(文件名)。
答案1
\includegraphics
使用纯 LaTeX 解决方案,你可以使用如下包装器:
\documentclass{article}
\usepackage{graphicx}
\newwrite\figuresusedout
\immediate\openout\figuresusedout=\jobname.figs%
\NewDocumentCommand{\FigureUsedOut}{m}{%
\immediate\write\figuresusedout{#1}
}
\NewDocumentCommand{\IncludeGraphics}{ O{} m }{%
\includegraphics[#1]{#2}\FigureUsedOut{#2}%
}
\begin{document}
\begin{figure}[t]
\IncludeGraphics[width=0.1\textwidth]{./figures/red.png}
\caption{Red}
\end{figure}
\begin{figure}[b]
\IncludeGraphics[width=0.4\textwidth]{./figures/green.png}
\caption{green}
\end{figure}
\end{document}
结果是:
在名为的子目录中使用这些图像./figures/
:
green.png
:
purple.png
:
red.png
:
这将生成一个带有扩展名的输出文件,其中.figs
包含以下内容:
./figures/red.png
./figures/green.png
可能有很多更好的方法可以做到这一点,包括使用外部程序等以及改进的最新软件包,但这个是有效的。
答案2
如果您将该\listfiles
命令添加为 tex 文件的第一个命令(甚至在 之前\documentclass
),则日志文件将以列出它使用的所有文件结束。这将包括您加载的所有包(以及它们加载的包等),但它也将包括您的图表。
答案3
我只是简化了@JamesT 的解决方案,使其更加简洁,并避免了更改所有\includegraphics
命令的需要......
\documentclass{article}
\usepackage{graphicx}
\newwrite\graphics
\immediate\openout\graphics=\jobname.graphics%
\let\oincludegraphics\includegraphics% store original \includegraphics
\renewcommand{\includegraphics}[2][]{% prepend to it (could also use xpatch, etc.)
\immediate\write\graphics{#2}
\oincludegraphics[#1]{#2}}
\begin{document}
\includegraphics[width=0.4\textwidth]{example-image-a}
\includegraphics[width=0.4\textwidth]{example-image-b}
\end{document}
产品\jobname.graphics
含有:
example-image-a
example-image-b
您也可以通过注释掉\newwrite ... \oincludegraphics[#1]{#2}}
来删除这个内容。