Предположим, у нас есть документ, подобный представленному ниже.
\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}