可以通过 \(pdf)filesize 找到哪些文件?

可以通过 \(pdf)filesize 找到哪些文件?

使用 pdfTeX 编译以下代码:

\documentclass{article}
\begin{document}
1 \pdffilesize{XITS-Regular.otf} \par
2 \pdffilesize{/usr/local/texlive/2020/texmf-dist/fonts/opentype/public/xits/XITS-Regular.otf} \par
3 \pdffilesize{book.cls} \par
\end{document}

它给

1
2 270496
3 23147

在 XeTeX 中,该\filesize命令给出相同的结果。为什么XITS-Regular.otf找不到\(pdf)filesize?有没有关于可以搜索哪些文件的说明?

实际上我使用 LaTeX3\file_if_exist:nTF来检查某些东西是否存在。\file_if_exist:nTF {XITS-Regular.otf}转到错误的分支所以我认为这是由于\pdffilesize原语造成的。

答案1

该命令使用与 以及\pdffilesize相同的搜索路径。\input\file_if_exist:nTF

但是,您可以使用以下命令在整个 TeX 树中进行搜索kpsewhich

\everyeof{\noexpand}\endlinechar=-1
\pdffilesize{\input|"kpsewhich XITS-Regular.otf" }

\bye

使用 TeX Live 2020,同样可以

\everyeof{\noexpand}\endlinechar=-1
\pdffilesize{\input{|"kpsewhich XITS-Regular.otf"}}

\bye

对于 LaTeX,使用\@@input

这将打印 270496。

\input这是如何工作的?当传递给(原始文件)的文件名以 开头|时,TeX 引擎 (除了不使用扩展名的 “Knuth TeX”) 将其解释为 “管道”。

文件名的其余部分应该是用双引号括起来的 shell 命令;TeX 运行被暂停,shell 命令被执行,将其输出传送到 TeX,然后恢复其工作。

它本质上与$(command arguments)Bash shell 中的机制相同。

有些命令kpsewhich被视为“安全”,因此它们在“受限 shell 逃逸”下执行,默认情况下启用此功能。完整列表如下

bibtex bibtex8 extractbb gregorio kpsewhich 
makeindex  repstopdf r-mpost texosquery-jre8

可以运行其他 shell 命令,但需要启用-shell-escape

相关内容