包含完整路径名的图形列表

包含完整路径名的图形列表

有没有办法获取所有使用过的图形的完整路径名列表?问题是我已将变量设置$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

相关内容