假设我们有一个如下的文档。
\documentclass{scrartcl}
\usepackage{pdfpages}
\begin{document}
\include{Text_A}
\include{Text_B}
\include{Text_C}
\include{Text_D}
\includepdf{Attachment_A}
\includepdf{Attachment_B}
\includepdf{Attachment_C}
\end{document}
我可以使用\includeonly
命令仅编译某些部分。因此,如果我只想要Text_A
和Text_C
,我可以将其添加\includeonly{Text_A,Text_C}
到序言中。现在我的问题是,这仅适用于包含在中的部分\include
。
我正在寻找一种方法来将其与 中包含的部分结合起来\includepdf
。因此,如果我只想要Text_A
、Attachment_A
和Attachment_C
,我必须逐行注释掉这些行。如果通过 包含了很多文件\includepdf
,并且命令包含多行选项,那么这会相当不愉快。
我可以进行一些重构并将\includepdf
命令放入单个文件中,以便我能够\include
在主文档中专门使用。但我想知道是否有更优雅的解决方案?
答案1
您可以借用\includeonly
所用的测试\include
。
这仅包括 B 的文本和附件
\documentclass{scrartcl}
\usepackage{pdfpages}
\makeatletter
\let\oldincludepdf\includepdf
\newcommand\zzincludepdf[2][]{%
\@tempswatrue
\if@partsw
\@tempswafalse
\edef\reserved@b{#2}%
\@for\reserved@a:=\@partlist\do
{\ifx\reserved@a\reserved@b\@tempswatrue\fi}%
\fi
\if@tempswa
\IfFileExists{#2.pdf}{\oldincludepdf[#1]{#2}}{\typeout{no file #2.pdf}}%
\fi}
\let\includepdf\zzincludepdf
\makeatother
\includeonly{Text_B,Attachment_B}
\begin{document}
\include{Text_A}
\include{Text_B}
\include{Text_C}
\include{Text_D}
\includepdf{Attachment_A}
\includepdf[pages=-]{Attachment_B}
\includepdf{Attachment_C}
\end{document}