Что-то вроде \includeonly, но для \includepdf?

Что-то вроде \includeonly, но для \includepdf?

Предположим, у нас есть документ, подобный представленному ниже.

\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}

Связанный контент