如何找出乳胶文件中使用/包含的图形

如何找出乳胶文件中使用/包含的图形

我撰写过几本书、课堂笔记、论文,其中包含许多图表。所有图表都位于名为 \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}}来删除这个内容。

相关内容