有哪些工具可以将正确的页码应用于复合 tex 输出 pdf 文件?

有哪些工具可以将正确的页码应用于复合 tex 输出 pdf 文件?

该问题与《拖船》的全期 pdf 文件有关,该文件可供电子参考或下载。所有文章始终单独发布,但单个前后一致的 pdf 文件下载起来更为方便。

一期的 tugboat 总是会包含用纯 tex、pdflatex 以及通常的 xetex 准备的项目,也可能会有用上下文准备的项目或者需要 lua(la)tex 的项目。因此,不可能将一期完整的杂志作为一个完整的单元来准备。另外,目录总是在封底。

最近的一个(明智的)建议是将电子版打包,目录放在最前面,然后按照与印刷版相同的顺序排列其余内容。

现在用于打包完整版 pdf 的工具是 ghostscript [9.21]。它只是将单独的文章文件连接起来。它不会创建书签或任何链接;添加这些会给已经超负荷工作的志愿者带来不合理的负担。

在以这种方式打包第 38:2 期之后,我在检查 pdf 时注意到,导航箭头和“第 mm 页,共 nnn 页”消息之间的框中指示的页码与实际页面上的页码不符。由于目录的一个目的是显示起始页码,因此非常需要能够直接输入页码来访问特定项目。

我使用 acrobat 来阅读 pdf 文件;而负责准备输出文件的 karl berry 却不这样做,当我提到这种脱节时,他不知道我在说什么——他的 pdf 阅读器 xpdf [v.3] 以稍微不同的方式显示页面信息。

最后的问题是:有哪些(免费软件)工具可以至少指定一个起始页码,以便 pdf 文件中页面的逻辑页码与屏幕上显示的页面图像上的页码相同?

附录: 在回复一条(现已删除)评论时,询问为什么我们不要求提供拖船提交的源文件,我们的确是!整理拖船问题的整个痛苦过程已在“生产说明”专栏中详细说明,该专栏出现在 TUG@BachoTeX 2017 会议记录 问题。 (此链接转至问题目录;引用的文章出现在第 263 页。)

附录#2: 为了回答有关页码在两个浏览器中如何显示的详细信息的请求,这里是它们:
- xpdf:第 1 页,共 183 页
- acrobat:284(1/183)
文件中页面的排列如下:
  封面 4(目录)、封面 2、109(标题页) - 288.封面 3

答案1

页面标签作为数组添加到/CatalogPDF 文件中。由于 PDF 文件是由 ghostscript 生成的,因此操作员可以在 PostScript 文件中设置它pdfmark并将其添加到 ghostscript 的输入文件中,例如:

gs -sDEVICE=pdfwrite -dBATCH -dNOPAUSE -sOutputFile=combined.pdf pagelabels.ps file1.pdf file2.pdf file3.pdf

文件pagelabels.ps

[
  {Catalog} <<
    /PageLabels <<
      /Nums [
        0 << /P (cover ) /S /D >>
        2 << /S /D /St 109 >>
        182 << /P (cover 3) >>
      ]
    >>
  >>
/PUT pdfmark

需要PDF的以下语法元素:

  • 数字 ( 0, 2, 109, 182)
  • 名称前面带有斜线 ( /PageLabels, /P, /S, /D, /St)
  • (cover )字符串可以用括号 ( , )给出(cover 3)
  • 数组使用方括号作为分隔符 ( [... ])。数组元素可以是任何对象类型。
  • 字典使用双尖括号 ( <<... >>)。它们包含键值对。键始终是名称,值可以是任何对象。例如,数组中的第四个对象/Nums是一个字典<< /S /D /St 109 >>),它有两个键/S/St。值分别/D为 key/S109key /St
  • 注释字符%与 TeX 中的相同。

/Nums字典中数组中的元素/PageLabels声明了页面标签。从零开始的索引后面跟着一个字典,该字典定义了从此页面开始的页面的页面标签。字典中的键:

  • /P指定字首
  • /S设置风格表示页码。样式及其 LaTeX 等效项:

    • /D\arabic
    • /R\Roman
    • /r\roman
    • /A\Alph
    • /a\alph
  • /St设置开始页,默认为1。

上述规范生成以下页面标签:

  • 0 << /P (cover ) /S /D >>

    • 第 1 页:cover 1
    • 第2页:cover 2
  • 2 << /S /D /St 109 >>

    • 第 3 页:109
    • 第 4 页:110
    • ...
    • 第182页:288
  • 182 << /P (cover 3) >>或者182 << /P (cover ) /St 3 >>

    • 第183页:cover 3

进一步阅读:

但是,并非所有 PDF 查看器都支持页面标签。

暗示:有些查看器(例如 Okular)不会为标签保留太多空间。标签应该很短,以避免需要水平滚动才能看到整个标签。

  • 不支持的查看器,仅显示绝对页码:

    • pdfv3.04
    • Google Chrome(内置查看器)v61

相关内容