如何创建 PDF 大纲

如何创建 PDF 大纲

根据PDF 参考 (PDF 文档,9.4MB),可以为文档创建大纲;查看器应用程序的可视目录,使用户能够跳转到大纲条目的页面。据我了解,LaTeX包创建这些大纲条目。

我想知道它的内部工作原理。我尝试了以下代码:

\def\subject#1\par{% other stuff...
  \special{pdf: out 1 << /Title (#1) /Dest [ @thispage /FitH @ypos ] >>}}

但这似乎没有在大纲中创建任何东西。你能告诉我我做错了什么吗?

答案1

我建议使用navigator软件包,可与 LaTeX、ConTeXt 和 Plain TeX 配合使用。轮廓由

\outline[<options>]{<level>}[<name>]{<title>}

其中<options>相当不言自明,<level>是一个数字,表示大纲在层次结构中的深度,<name>是一个内部名称,用于指代大纲在文档中的位置(用于链接等),并且<title>是大纲的名称。

答案2

从(普通或原始的)TeX 角度来看,创建 PDF 轮廓时存在几个问题。

  • 原始级别取决于所用的机器。例如,在 pdfTeX 中,您必须使用\pdfoutline原始,但当您计划将 dvi 处理为 pdf(例如在 XeTeX 中)时,则有\special{pdf:outline...}。这意味着您需要实现一个低级宏(例如\insertoutline),该宏的定义不同,具体取决于后处理类型和/或 TeX 机器。

  • 宏程序员很自然地会指定级别,该级别表示 PDF 轮廓树的深度。但原始命令仅延续 PDF 规范,我们必须知道树中每个节点的子节点数,而不是此节点的深度。这意味着我们需要在宏中从深度数据计算到子节点数据。这需要两遍算法。

  • PDF 大纲、PDF 信息等中的文本必须像 PDF 字符串一样进行编码。PDF 规范提到了两种可能性:PDFdocEncoding(类似于 ISO-8859-1)或 UTF-16BE。第二种变体需要将文本的内部 TeX 表示转换为非常特殊的编码。这必须在宏级别完成。

我已经在我的宏 OPmac(用于纯 TeX)中解决了所有这些问题。这些问题从实现的角度在 OPmac 的技术文档中进行了详细描述opmac-d.pdf。但抱歉,这只有捷克语。

答案3

语境,PDF 大纲被误导性地称为 PDF 书签。在文档序言中使用以下代码片段时会自动创建这些书签。

\setupinteraction[state=start] % don't forget this line!
% make chapter, section bookmarks visible when opening document
\placebookmarks[chapter,section,subsection][chapter,section]
\setupinteractionscreen[option=bookmark]
\starttext

更多详情请访问contextgarden.net

相关内容