![有哪些工具可以将正确的页码应用于复合 tex 输出 pdf 文件?](https://linux22.com/image/361553/%E6%9C%89%E5%93%AA%E4%BA%9B%E5%B7%A5%E5%85%B7%E5%8F%AF%E4%BB%A5%E5%B0%86%E6%AD%A3%E7%A1%AE%E7%9A%84%E9%A1%B5%E7%A0%81%E5%BA%94%E7%94%A8%E4%BA%8E%E5%A4%8D%E5%90%88%20tex%20%E8%BE%93%E5%87%BA%20pdf%20%E6%96%87%E4%BB%B6%EF%BC%9F.png)
该问题与《拖船》的全期 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
页面标签作为数组添加到/Catalog
PDF 文件中。由于 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/S
和109
key/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
- 第 1 页:
2 << /S /D /St 109 >>
:- 第 3 页:
109
- 第 4 页:
110
- ...
- 第182页:
288
- 第 3 页:
182 << /P (cover 3) >>
或者182 << /P (cover ) /St 3 >>
:- 第183页:
cover 3
- 第183页:
进一步阅读:
- PDF 参考,PDF 1.7(第一版), 章节“12.4.2 页面标签”
- pdfmark 参考
但是,并非所有 PDF 查看器都支持页面标签。
暗示:有些查看器(例如 Okular)不会为标签保留太多空间。标签应该很短,以避免需要水平滚动才能看到整个标签。
不支持的查看器,仅显示绝对页码:
- pdfv3.04
- Google Chrome(内置查看器)v61