我有一个 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