将一系列书籍(每本都有自己的目录和索引)合并为最终的单个 PDF 的建议

将一系列书籍(每本都有自己的目录和索引)合并为最终的单个 PDF 的建议

我刚开始一个项目,我将有五本 pdf,每本都是双面的,这些书将包含自己的目录和索引。(一本已经完成了)。

五个 pdf 的完整集合被视为体积在一个系列中。

我实际上对拥有五个单独的文件很满意。

但是,我想知道,当每个卷都需要维护自己的内容时,将各个卷合并为一个文件(pdf)是容易还是痛苦的书本层面目录在开头,它有自己的书本层面每卷末尾均有索引。

理想情况下,我希望每一卷(书)都被视为单章在合并的总体目录中。即在总体文档中,第一章将是第 I 卷,第二章将是第 II 卷,等等……并且,每卷都有自己的目录和索引。

这可以在 LaTeX 之外完成吗?在 LaTex 内部完成吗?这是否太难了以至于我应该将文件分开保存?

我现在问这个问题,因为我才刚刚开始构建这个项目,基本上是在寻求建议。

谢谢,

答案1

将多个卷合并/连接成一个 .pdf 文件是可行的,但根据您的需要,这并非易事。

例如,出现以下问题:

  • 不同卷之间会有交叉引用和/或超链接吗?
  • 单卷 .pdf 文件中包含的所有超链接和书签等是否应保存在包含整个系列的 .pdf 文件中?
  • 每卷是否有自己的标题页,\frontmatter以及\backmatter/ \appendix
  • 如何调用 TeX?您是否在本地机器上安装并使用 TeX Live 或 MiKTeX 等 TeX 发行版,以便可以访问 TeX 发行版附带的所有附加程序?您是否不使用本地 TeX 安装,而是使用在线前端,例如背面安装在服务器/docker 容器中的 TeX 发行版的其他程序无法访问,并且您无法轻松地并行访问多个 .dvi 文件/.pdf 文件/TeX 输出文件,因为某些脚本确保 TeX 运行时 TeX 创建的输出文件在任何情况下都具有名称输出.pdf

总体来说,我认为有五种可能性:

  1. 创建 LaTeX 源代码,以便可以将卷直接编译为 .pdf 文件,可以单独编译为单个卷,也可以编译为整个系列。

    • 例如,在编译相同的 .tex 源文件产生不同结果的情况下,“机制”是可行的,例如,取决于在命令行上使用 -option 提供的值--jobname来确定 .log 文件的名称和生成的 .pdf 文件。
    • 例如,让 .tex 文件的代码检查是否\documentclass已经发布,如果没有,则通过\input加载包含文档前言的文件是可行的。方法 3我的答案在独立的多个子文件中使用 newcommand提供了如何实现这一点的示例。

    如果你选择其中一条路线,你需要对从一个卷到另一个卷的交叉引用/超链接做一些事情,例如使用包xr-hyper

    无论如何,您需要熟悉 LaTeX 代码的缺陷。例如,如果您使用 hyperref 让 LaTeX 自动创建超链接,那么您不能简单地在各个卷的 TeX 代码片段之间重置计数器的值(例如,该系列新卷开始时的页码或章节计数器),因为这样一来,可链接命名目标的名称(源自 LaTeX 计数器的名称和值)就不再唯一,也就是说,hyperref 包可能会尝试将多个同名的命名目标放入 pdf 文件中,这不是一个好主意,会导致 pdfTeX 引擎触发错误消息。

  2. 为各个卷创建 .pdf 文件,并使用程序将多个 .pdf 文件合并/串联为包含整个系列的单个 .pdf 文件。例如,可以使用以下程序完成此操作PDFtk或使用 pdfunite 程序poppler 实用程序。或者使用 LaTeX,使用包pdf页面,这使得在当前正在进行的 LaTeX 运行期间可以接管 .pdf 文件的所有页面和/或仅将 .pdf 文件的某些页面接管到要生成的文档中。

    但据我所知,这些方法的缺点是会禁用/删除要合并的卷中的超链接。您还可能会丢失包含在各个卷的 .pdf 文件中的书签。这种方法还存在 PDF 表单元素的问题,但我认为包含可填写表单的书籍相当少见/不太可能。

  3. 唐纳德·E·克努斯在 PDF(便携式文档格式)尚不存在时开发了 TeX。当时 LaTeX 的输出格式不是 PDF,而是 dvi——dvi 是“设备独立文件格式”的缩写,而不是“数字可视接口”;-)。之前韩世成开发 pdfTeX 后,TeX 创建 .dvi 文件并让其他程序将其转换为 .pdf 文件的做法很常见。现在仍然可以这样做。因此,仍然可以使用“老式”LaTeX 生成 .dvi 文件而不是 .pdf 文件,然后将各个卷的 .dvi 文件合并为一个包含整个系列的 .dvi 文件,然后将包含整个系列的 .dvi 文件转换为 .pdf 文件。

    通过这种方法,可以在一定程度上通过许多技巧保留单个卷内的超链接,甚至可以使包含整个系列的 .pdf 文件中出现超链接,以便在各个卷之间来回导航。
    如果您计算机上的 TeX 安装配置正确,则可以在处理单个卷时使用基于 pdfTeX 的引擎,并且只有在最后一步,当单个卷的源文本准备好时,才可以使用传统的 LaTeX 并创建 .dvi 文件进行合并。

    只有在 pdf 模式下运行的 TeX 引擎才能做到的事情无法通过这种方法实现,因为在编译为 .dvi 文件时,在 dvi 模式下运行 TeX 引擎时,事情也需要解决。此外,我还没有设法让这种方法与基于 XeTeX 的 unicode 引擎一起工作:在 XeTeX 中,dvi 格式被“扩展 dvi 格式”所取代,文件扩展名为 .xdv,我还没有找到可以像 .xdv 一样合并 .xdv 文件的软件dviconcat可用于合并 .dvi 文件。因此,使用这种方法时,XeTeX 的功能也不可用。

    在我的xr回答与包和最终 PDF 组合的交叉引用?我详细阐述了这种方法。

    尽管这种方法存在问题和限制,但我遇到过一些情况,我选择这种方法,因为它可以合并多卷,每卷都有自己的标题页\frontmatter\backmatter/ ,而不会丢失超链接\appendix。有些文档类可以在\part其中划分内容,但绝对不是所有文档类都允许您拥有多个标题页实例/ \frontmatter/ \backmatter/\appendix等。

  4. 使用包多斯特里普您可以将整个作品的 .tex 源代码保存在一组 .tex 文件中,其中可以使用标签来表示代码部分所属的卷。docstrip
    \generate命令可用于从该组 .tex 文件中提取/复制到新的 .tex 文件中,这些代码部分是组成特定卷所需的代码部分,或组成整个系列所需的代码部分。
    然后可以通过在其上运行 latex 来编译由 docstrip 生成的 .tex 文件。如果您这样做,您需要对从一个卷到另一个卷的交叉引用/超链接进行一些处理,例如,使用包xr-hyper

  5. 也许您可以使用 LaTeX 的\include..\includeonly功能,在包含所有卷的源的情况下编译内容以获得包含整个系列的 .pdf 文件,或者在仅包含特定卷的源的情况下编译内容以获得仅适用于该卷的 .pdf 文件。如果这样做,您需要对从一个卷到另一个卷的交叉引用/超链接进行一些处理,但这会很棘手,并且如果目标/目标/锚点位于另一个卷的 pdf 文件中,则自动创建的超链接可能会被破坏,而这些超链接不是来自交叉引用命令。


然而,无论使用什么方法,都无法避开 LaTeX 内核、正在使用的文档类、hyperref 包以及可能正在使用的其他包的内部问题。

为此,您需要熟悉 LaTeX 内部结构,例如,如何实现诸如\tableofcontents\label..之类的机制\ref,以及 hyperref 和类似软件包如何更改这些机制。要了解正在发生的事情并能够根据自己的需要进行调整,您需要阅读 LaTeX 内核和 LaTeX 软件包的(注释)源代码。这很乏味,而且容易出错。例如,还因为有些软件包会在加载其他软件包时覆盖其他软件包的代码。

您还需要了解.pdf 文件以及“命名目的地”的概念。

抱歉,没有描述具体流程。

根据您的项目的当前信息状态来描述具体的过程并不容易。

由于这样的项目需要修改代码,因此必须确切知道应使用哪种 TeX 引擎和哪种代码(documentclass、LaTeX 包等)。还需要了解构成“最终产品”的 .pdf 文件应提供的功能。以及除 TeX/LaTeX/pdfLaTeX 之外,您工作流程中可用的 TeX 相关程序。可能的状态\write18包提供的功能的状态壳牌也可能很有趣。(\write18/shellesc 用于从 TeX/LaTeX 内部启动其他程序;由于这可以被视为安全风险,\write18/shellesc 现在通常默认受到限制或禁用。)

例如,需要有关文档类和包等的知识,以便创建和微调用于组合和调整 .toc 文件的机制,从而获得一个总目录。对于大多数文档类,LaTeX 会创建一个扩展名为 .toc 的辅助文本文件,其中包含目录数据。表格列表(扩展名:.lot)和图表列表(扩展名:.lof)也是如此。

答案2

我认为该pdfpages软件包(我从未使用过)使您能够将 PDF 文件包含到 LaTeX 文档中,这样您就可以创建由 5 个 PDF 组成的单个文档。

但是,您还想创建一个概述文档,其中包含自己的目录,将包含的 PDF 列为章节,而它们实际上是书籍。

这也许可以做到,留给其他人去做,但我不确定读者对结果会有什么反应。每本书的页码将从一开始,然后继续。如何引用第一章的第二页与第三章的第二页?

我倾向于创建第六个 PDF 文件来描述这些卷的集合。也许有些读者只对你的第四本书感兴趣,下载整个集合就太麻烦了。

无论如何,请考虑一下您的读者以及您想如何与他们互动。

祝你好运。

答案3

好的...所以,现在我已经创建了其中几个卷...我找到了我想要的完美解决方案......并且链接不会中断。

我的解决方案?使用 GoodNotes。导入时,GoodNotes 会询问:您是否要将此 PDF 作为其自己的单独文档导入,还是应将导入插入到当前打开的文档中,紧接着当前页面?

后一种选择允许合并两个 pdf,前提是您位于 pdf 的最后一页,其中您想要附加当前 pdf - 内部链接继续有效。我的六卷将各自拥有自己的封面、目录、页码、工作链接,完全符合您的要求。

在创建最终 PDF 后,在 GoodNotes 应用程序中,可以将每卷的起始页添加到 GoodNotes 大纲(已经遵守所有 LaTeX 编译的“章节”)...因此 GoodNotes 的大纲将包括内部章节以及您“添加到”该大纲的任何其他页面(并且您还可以对添加到大纲中的那些页面进行描述,例如第 I 卷、第 II 卷等)

相关内容