还有哪些类似 \pdffilesize 的宏?

还有哪些类似 \pdffilesize 的宏?

\pdffilesize所以我刚刚了解到这个答案

还有其他类似的东西吗?\the\inputlineno不久前我学到了打印输入文件行号的方法。

具体来说,pdf 是否有页数?通过这种方式,您还可以提取有关文件的哪些其他信息?

为了澄清起见,我想问的是还\pdffilesize存在哪些其他命令?

答案1

foo.pdf您可以使用以下技巧打印页数:

\sbox0{\pdfximage{foo.pdf}}\the\pdflastximagepages

以下是该手册的摘录pdftex

\pdflastximagepages(只读整数)
此只读寄存器返回先前通过命令访问的文件的最高页码\pdfximage。这仅适用于 PDF 文件;对于 PNG、JPEG 或 JBIG2 文件,它始终返回 1。

这里有一个更大的文件相关原语列表。请注意,它们在 LuaTeX 中不可用,但可以使用包进行模拟pdftexcmds。我写的地方{file}是指<general text>这样的东西,它里面的扩展<balanced text>是一个文件名;特别是{test.tex}可以使用,但也可以{\jobname.tex}

  • \pdffilemoddate{file}扩展为 的修改日期,file格式D:20101122164111-08’00’为 其中D:YYYYMMDDHHMMSSXhh'mm'X 为+-hhmm是与 UTC 的差值。所有字符的类别代码均为 12。

  • \pdfcreationdate扩展到 PDF 文件的创建日期(格式与之前相同)

  • \pdffilesize{file}扩展到文件大小(以字节为单位)

  • \pdfmdfivesum file {file}扩展为文件的 MD5(此处file后面\pdfmdfivesum是关键字,因此必须明确出现)

  • \pdffiledump offset <number> length <number> {file}offset <number>如果缺失,则扩展为从 0 开始的文件十六进制转储;如果存在,<number>则将忽略字节。如果length <number>缺失,则将转储整个文件;否则<number>将仅转储字节。

答案2

Egreg 提供了一种使用 pdfTeX 从 PDF 本身提取信息来获取 PDF 页数的方法,但值得补充的是,为什么简单的“核心 TeX”方法不起作用。

您可能知道 TeX 使用这些\count0信息来提供有关正在输出哪个页面的信息,并且这些信息用于向打印页面添加页码信息。但是,TeX 不会使用它来跟踪“从文档开头开始的绝对页面”。您可以通过一个简短的演示文件看到这一点

\documentclass{article}
\usepackage{lipsum}
\begin{document}
\count0 10 %
\lipsum
\end{document}

这将产生两页输出,但是由于我将第一页设置为“10”,因此它们被列为第 10 页和第 11 页。\count0在页面输出时,TeX 会将 的值写入日志(在方括号中),并且它表明就 TeX 而言,这些确实是第十页和第十一页:

This is pdfTeX, Version 3.1415926-2.4-1.40.13 (TeX Live 2012)
 \write18 enabled.
entering extended mode
(./test.tex
LaTeX2e <2011/06/27>
Babel <v3.8m> and hyphenation patterns for english, dumylang, nohyphenation, ge
rman-x-2012-05-30, ngerman-x-2012-05-30, afrikaans, ancientgreek, ibycus, arabi
c, armenian, basque, bulgarian, catalan, pinyin, coptic, croatian, czech, danis
h, dutch, ukenglish, usenglishmax, esperanto, estonian, ethiopic, farsi, finnis
h, french, friulan, galician, german, ngerman, swissgerman, monogreek, greek, h
ungarian, icelandic, assamese, bengali, gujarati, hindi, kannada, malayalam, ma
rathi, oriya, panjabi, tamil, telugu, indonesian, interlingua, irish, italian, 
kurmanji, latin, latvian, lithuanian, mongolian, mongolianlmc, bokmal, nynorsk,
 polish, portuguese, romanian, romansh, russian, sanskrit, serbian, serbianc, s
lovak, slovenian, spanish, swedish, turkish, turkmen, ukrainian, uppersorbian, 
welsh, loaded.
(/usr/local/texlive/2012/texmf-dist/tex/latex/base/article.cls
Document Class: article 2007/10/19 v1.4h Standard LaTeX document class
(/usr/local/texlive/2012/texmf-dist/tex/latex/base/size10.clo))
(/usr/local/texlive/2012/texmf-dist/tex/latex/lipsum/lipsum.sty) (./test.aux)
[10{/usr/local/texlive/2012/texmf-var/fonts/map/pdftex/updmap/pdftex.map}]
[11] (./test.aux) )</usr/local/texlive/2012/texmf-dist/fonts/type1/public/amsfo
nts/cm/cmr10.pfb>
Output written on test.pdf (2 pages, 22281 bytes).
SyncTeX written on test.synctex.gz.
Transcript written on test.log.

事实上,页码也可能重复出现

\documentclass{article}
\usepackage{lipsum}
\begin{document}
\lipsum
\count0 1 %
\lipsum
\end{document}

因此,\count0只有当您能确定没有发生任何事情时,它才是可靠的,但一般情况并非如此。

答案3

简单地放在\usepackage{lastpage}序言中和 某处(通常在页脚的“页面”中\pageref{LastPage}) 。\thepage\pageref{LastPage}

相关内容