有没有办法获取所有使用过的图形的完整路径名列表?问题是我已将变量设置$TEXINPUTS
为指向包含图像的目录(我仅使用文件名将其包括在内),但我还包含来自当前目录和上面某些目录的图像(通过../image.png
)。
我尝试了快照包,但它只给出了文件名,而没有完整的路径。
答案1
许多 TeX 编译器(pdfTeX、luaTeX、XeTeX)都有一个选项-recorder
,其行为与输出模式(DVI、PDF)无关。它在文件名中记录输入和输出文件<jobname>.fls
。
例子:
% test.tex
\documentclass{article}
\usepackage{graphicx}
\begin{document}
\includegraphics{example-image-a}
\end{document}
汇编:pdflatex -recorder test
然后test.fls
包含图像的绝对路径(grep INPUT test.fls|sort|uniq|grep png
):
INPUT /absolute-path-to/texmf-dist/tex/latex/mwe/example-image-a.png
答案2
这将在日志文件末尾输出包含的图形文件列表,并带有完整路径,除非使用相对路径调用图像文件。
\documentclass{article}
\usepackage{graphicx,grffile}
\usepackage{etoolbox,xparse}
\makeatletter
\patchcmd{\Gin@setfile}
{\@addtofilelist{#3}}
{\@addtofilelist{#3}\studentaddtoiglist{#3}}
{}{\ddt}
\makeatother
\ExplSyntaxOn
\NewDocumentCommand{\studentaddtoiglist}{m}
{
\tl_set:Nx \l_student_ig_filename_tl { #1 }
\tl_set_from_file:Nnn \l_student_ig_filename_tl { } { "|kpsewhich~\l_student_ig_filename_tl" }
\tl_gput_right:Nx \g_student_ig_files_tl { \l_student_ig_filename_tl ^^J }
}
\AtEndDocument{\typeout{\g_student_ig_files_tl}}
\tl_new:N \l_student_ig_filename_tl
\tl_new:N \g_student_ig_files_tl
\tl_gset:Nn \g_student_ig_files_tl { ***~Graphic~files~*** ^^J }
\ExplSyntaxOff
\begin{document}
\includegraphics{../curva}
\includegraphics{example-image}
\includegraphics{brave-gnu-world-logo}
\end{document}
我用这个
TEXINPUTS=/usr/local/texlive/2016/texmf-dist/doc/generic/pgf/images/: pdflatex mwe
因此,该变量TEXINPUTS
是为特定工作设置的;如果在环境中设置它,那将是相同的;在这种情况下,就pdflatex mwe
足够了。
以下是日志文件的相关部分
*** Graphic files ***
../curva.jpg
/usr/local/texlive/2016/texmf-dist/tex/latex/mwe/example-image.png
/usr/local/texlive/2016/texmf-dist/doc/generic/pgf/images/brave-gnu-world-logo.jpg
请注意,如果不设置,就找不到最后一个文件TEXINPUTS
。