如何轻松地只编译页面范围或页面选择?也就是说,我想要一份文档
- 看起来和完整文档一模一样,
- 仅包含按页码手动选择的页面子集(这可以是一个连续的范围或更复杂的选择,如“12-15,23,45-49”),
- 有正确的页码,并且
- 具有正确的链接,但缺失页面的链接可能存在功能障碍或缺失。
答案1
atbegshi
提供了使用 丢弃准备发送的页面的功能\AtBeginShipoutDiscard
。与etoolbox
的列表处理功能,您可以轻松地有条件地丢弃/保留页面:
\documentclass{article}
\usepackage{lipsum,atbegshi,etoolbox}% http://ctan.org/pkg/{lipsum,atbegshi,etoolbox}
\makeatletter
\newcommand{\discardpages}[1]{% \discardpages{<csv list>}
\xdef\discard@pages{#1}% Store pages to discard
\AtBeginShipout{% At shipout, decide whether to discard page/not
\renewcommand*{\do}[1]{% How to handle each page entry in csv list
\ifnum\value{page}=##1\relax%
\AtBeginShipoutDiscard% Discard page/not
\gdef\do####1{}% Do nothing further
\fi%
}%
\expandafter\docsvlist\expandafter{\discard@pages}% Process list of pages to discard
}%
}
\newif\ifkeeppage
\newcommand{\keeppages}[1]{% \keeppages{<csv list>}
\xdef\keep@pages{#1}% Store pages to keep
\AtBeginShipout{% At shipout, decide whether to discard page/not
\keeppagefalse%
\renewcommand*{\do}[1]{% How to handle each page entry in csv list
\ifnum\value{page}=##1\relax%
\keeppagetrue% Page should be kept
\gdef\do####1{}% Do nothing further
\fi%
}%
\expandafter\docsvlist\expandafter{\keep@pages}% Process list of pages to keep
\ifkeeppage\else\AtBeginShipoutDiscard\fi% Discard page/not
}%
}
\makeatother
\discardpages{1,3,5,7,9,29,35,40}% Discard these pages.
%\keeppages{2,4,6}% Keep these pages.
\begin{document}
\lipsum[1-50]\lipsum[1-50]\lipsum[1-50]\lipsum[1-50]\lipsum[1-50]
\end{document}
删除 8 页 1、3、5、7、9、29、35、40(由 提供\discardpages{1,3,5,7,9,29,35,40}
)后,上述 47 页文档缩减为 39 页。要丢弃零页,可以使用\discardpages{}
(或不调用\discardpages
)。使用\keeppages{2,4,6}
会留下仅包含 2、4 和 6 页的 3 页文档。将其扩展以包含更复杂的页面范围应该并不困难。
以上内容不是已测试来自的超链接hyperref
。
答案2
与 David Carlisle 的回答一致,但使用纯乳胶工具,我很惊讶没有人提到pdfpages
包。
您可以编译完整文档,然后使用另一个使用 的 latex“驱动”文档提取所需页面pdfpages
。例如:
\documentclass{article} % Not really important
\usepackage{pdfpages}
\begin{document}
\includepdf[pages={12-15,23,45-49}]{main.pdf}
\end{document}
答案3
答案4
这是 Werner 的解决方案,无需花费每页循环的成本。
\documentclass{article}
\usepackage{lipsum,atbegshi}
\makeatletter
\newcommand{\discardpages}[1]{%
\xdef\discard@pages{\zap@space#1 \@empty}%
\AtBeginShipout{%
\@expandtwoargs\in@{,\the\c@page,}{,\discard@pages,}%
\ifin@\AtBeginShipoutDiscard\fi
}%
}
\newcommand{\keeppages}[1]{%
\xdef\keep@pages{\zap@space#1 \@empty}%
\AtBeginShipout{%
\@expandtwoargs\in@{,\the\c@page,}{,\keep@pages,}%
\ifin@\else\AtBeginShipoutDiscard\fi
}%
}
\makeatother
% Examples:
\discardpages{1,3,5,7,9,29,35,40}
%\keeppages{2,4,6}
\begin{document}
\lipsum[1-50]\lipsum[1-50]\lipsum[1-50]\lipsum[1-50]\lipsum[1-50]
\end{document}