如何获取文档中嵌入图形的文件名列表

如何获取文档中嵌入图形的文件名列表

我有一个 TeX 文档,其中嵌入了大量来自fig另一个包含大量其他图形的文件夹的图形。

我想将文档连同其中的图表一起移动,但我不想移动整个fig文件夹,只想移动文档中嵌入的图表。

是否有一个包(或任何其他方式)允许我打印出文档中嵌入的所有图形的文件名?例如:

fig/figurename1.eps
fig/figurename2.eps
...
etc

然后我可以复制粘贴该列表并cp在纯文本文件中添加一些内容,然后通过在我的 shell 中运行该文件自动将这些文件复制到我想要的位置:

$ cp fig/figurename1.eps wherever/fig/
$ cp fig/figurename2.eps wherever/fig/
...
etc

当然这只是一个想法,如果有人有“文件列表和在 shell 文件中复制粘贴”的替代方法,我会很乐意听取 =)

答案1

您可以修改\includegraphcs宏以添加到列表中并在文档末尾打印列表。下面的 MWE 产生以下输出:

Figures included were
 images/figA.jpg
 images/figB.png

笔记:

  • 在这种情况下\let也会有工作(根据 egreg 的评论将 Latex 中的所有图像调整为百分比宽度),但我已经习惯\LetLtxMacro使用包裹letltxmacro对于具有可选参数的宏。\LetLtxMacro可以在有关闭平方根符号

  • [demo]选项用于在放置图形的位置放置一个黑框,以供演示目的使用,在实际使用中(当您实际有可用的图形时),您需要删除此选项。

  • 如果您愿意,您可以在循环中使用\immediate\write18并执行shell 命令,并在排版结束时获得一个包含所包含图像的目录。无需进一步处理。cp\foreach

代码:

\documentclass{article}
\usepackage[demo]{graphicx}% Remove [demo] option in real usage.
\usepackage{letltxmacro}
\usepackage{pgffor}


%% https://tex.stackexchange.com/questions/14393/how-keep-a-running-list-of-strings-and-then-process-them-one-at-a-time
\newcommand\FigList{}
\newcommand\AddFigToList[1]{\edef\FigList{\FigList#1,}}

\LetLtxMacro{\OldIncludegraphics}{\includegraphics}
\renewcommand{\includegraphics}[2][]{%
    \AddFigToList{#2}%
    \OldIncludegraphics[#1]{#2}%
}

\newcommand*{\ShowListOfFigures}{%
    \typeout{Figures included were}%
    \foreach \x in \FigList {%
        %\par\x% <-- uncomment if you want the list in the PDF as well
        \typeout{ \x}
    }%
}
\AtEndDocument{\ShowListOfFigures}

\begin{document}
\includegraphics{images/figA.jpg}

\includegraphics{images/figB.png}
\end{document}

答案2

pdflatex提供标志-recorder,用于写入.fls文件。标记INPUT在那里的所有内容都是它在处理过程中打开的文件。 latexmk使用标志-deps-deps-out=FILENAME显示体面,在最后一种情况下,还将它们存储在make格式化的中FILENAME

答案3

在 Linux 上,可以这样做,无需修改源代码:

strace -fe open  make 2>&1  1>/dev/null | grep plots | sed 's/.*\"\(.*\)\".*/\1/' > plots.list

在哪里 :

  • make是您用来构建输出的命令(可能是的某种变体 pdflatex file.tex)。

  • strace显示系统调用。使用我们提供的选项,我们仅保留“打开”系统调用(-e选项)以获取插入的数字(以及现在打开的其他文件)。选项-f是显示子进程的系统调用,重定向是仅保留 strace 输出。

  • grep plots选择包含路径中的公共字符串的行(在本例中为“plots”)。

  • sed选择引号内的内容。

  • 最后的重定向将结果转储到文件中。

您可能会通过这种方式获得重复的文件名,但根据您的需要,这可能已经足够好了。

答案4

CTAN 上有一段perl脚本,泰克森它可以完成所有这些工作,甚至更多。它可以处理各种内部和外部依赖关系,并可以以 或每行 1 个格式生成Makefile信息perl

>texdepend
Find LaTex dependencies, Version: 0.96, Michael Friendly ([email protected])
Usage: C:\batchfiles\texdepend.pl <options> texfile[.tex]
  where <options> may be abbreviated to unique truncations, and are:
   -help               print this measly help
   -expand             expand package/include file to full path names
   -format = make      print dependencies in Makefile format
             perl      print in the form of perl assignments (LatexMk)
             1         print one per line (with # separators)
   -ignore = list      list of file types to be ignored in .log [default: fd]
   -out = filename     send output to filename
   -print =            Any one or more of i (includes) p (packages)
                       f (figs) b (bibfiles) s (styles) d (all dependencies)
   -styles = list      list of file types for  from .log [default: sty]
   -verbose

相关内容