排除/替换不同文档版本中的部分内容

排除/替换不同文档版本中的部分内容

我必须发布两个版本的文档:

  1. 原版完整版
  2. 必须排除已在其他地方发表的章节

我的问题与版本 2 有关。简单地删除相应的章节是行不通的,因为我有三个限制:

  1. 我必须保留原始的页码(即使会有编号间隙)
  2. 两个版本的目录必须相同
  3. 如果删除了章节,我必须添加一个页面,表明该章节内容不存在,因为它已在其他地方发布

举个例子,以下是“原始完整版本”:

  • 内容
    • 第1章…………1
    • 第二章…………28
    • 第三章…………86
  • 第 1 章(第 1-27 页)
  • 第 2 章(第 28-85 页)
  • 第 3 章(第 86-110 页)

假设“第 2 章”已在其他地方出版。因此,我必须删除第 28-85 页。此外,我必须在第 28 页上显示一条注释,说明这些内容不可用,因为它们已在其他地方出版。因此,在 *.pdf 文件中,第 86 页紧跟在第 28 页之后(编号间隙)。两个版本的第 28 页示例:

第 28 页:原始完整版

原版完整版

第 28 页:精简版(第 2 章已被删除)

删除第 2 章的版本

使用\includeonly\nofiles可以删除章节,同时保留页码和目录。但是,我不知道如何用缩小的页面替换原始的“章节”页面,如上所示。

一个完美的解决方案将允许我使用某种开关来编译不同的版本。

答案1

你可以这样做:

\documentclass{book}
\usepackage{etoolbox}

\usepackage{lipsum}

\newif\iffullversion
%\fullversiontrue

\newcommand{\extrainclude}[3]{%
  \iffullversion\else
    \expandafter\preto\csname cp@#1\endcsname{%
      \chapter{#2}
      The contents of this chapter has already appeared in \cite{#3}
      \cleardoublepage
    }
  \fi
  \include{#1}
}

\iffullversion\else
  \includeonly{chapter1,chapter3}
\fi

\begin{document}

\frontmatter

\tableofcontents

\mainmatter

\include{chapter1}

\extrainclude{chapter2}{This will not appear}{whatever}

\include{chapter3}

\begin{thebibliography}{1}

\bibitem{whatever} I. Myself, My precious paper, 2015.

\end{thebibliography}

\end{document}

您可以修改定义以\extrainclude使用第三个参数(而不是参考书目条目),您可以在其中插入完整数据。

如果你取消注释该\fullversiontrue行,则会生成整个文档。当然,请在注释之前取消注释。

诀窍在于,如果chapter2.tex从中排除\includeonly,LaTeX 将执行宏\csname cp@chapter2\endcsname,我们在宏中添加适当的操作;然后将遵循标准行为,即将计数器重置为其先前的值。

相关内容