包含目录中的所有 PDF 文件,而无需添加每一个文件?

包含目录中的所有 PDF 文件,而无需添加每一个文件?

我希望用一个命令包含目录 /pdfs 中的所有 PDF,这样我只需将新的 PDF 放入目录中,而不必担心每次编译时实际执行它们。就像这样:

\includepdf[pages=-]{pdfs/some.pdf}
\includepdf[pages=-]{pdfs/random.pdf}
\includepdf[pages=-]{pdfs/pdf.pdf}
\includepdf[pages=-]{pdfs/files.pdf}
...

但例如

\includepdf[pages=-]{pdfs/*} 

在我的文档的末尾。

pdfjam * -o all_files.pdf我目前所做的是在目录中运行命令,删除新文件,并将其保存\includepdf[pages=-]{pdfs/all_files.pdf}在我的文档中。但这是一个有点繁琐和无意义的练习,我觉得应该有一种更简单的方法。

有任何想法吗?

答案1

您可以编写一个 Makefile,将所有文件名转储到辅助宏(空格分隔,确保没有文件名包含空格)中,然后由 LaTeX 进行解析。

Makefile,更改my_latex_file.tex为 .tex 文件的实际文件名(重要的:Makefile 中的缩进必须是制表符,而不是空格)

PDFS = $(wildcard pdfs/*.pdf)
TEX = pdflatex

main: my_latex_file.tex $(PDFS)
    $(TEX) -jobname="$(<:%.tex=%)" "\def\mypdffiles{$(PDFS)}\input{$<}"

还有一个小型 LaTeX 文件,其中包含宏中包含的每个 PDF \mypdffiles(如果已定义):

\documentclass[]{article}

\usepackage{pdfpages}
\usepackage{xparse}
\ExplSyntaxOn
\seq_new:N \l_elade_pdf_files_seq
\msg_new:nnn { elade } { missing-macro }
  { The~macro~#1 doesn't~exist. }
\NewDocumentCommand \IncludePDFs { O{} }
  {
    \cs_if_exist:NTF \mypdffiles
      {
        \seq_set_split:NnV \l_elade_pdf_files_seq { ~ } \mypdffiles
        \seq_map_inline:Nn \l_elade_pdf_files_seq
          {
            \includepdf [ { #1 } ] { ##1 }
          }
      }
      { \msg_error:nnn { elade } { missing-macro } { \mypdffiles } }
  }
\ExplSyntaxOff

\begin{document}
\IncludePDFs[pages=-]
\end{document}

然后使用make而不是pdflatex(或任何版本)进行编译。您可能需要稍微扩展 Makefile 以覆盖所有内容,或者将其设置为调用(arara如果您愿意的话)。

相关内容