我目前正在编写一个应用程序模板。对于附录,我需要能够包含一些 pdf 文档。这些文档的名称存储在一个数组中。所以我需要能够 includepdf,其中文件名来自该数组。但我无法让它工作。这是我的 mwe(实际上我的模板要复杂得多,并且有一个 cls 文件,但我认为这不会导致问题):
\documentclass{scrartcl}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{pdfpages}
\usepackage{arrayjob}
\usepackage{forloop}
\newarray\pdfdocs
\pdfdocs(1)={test1}
\pdfdocs(2)={test2}
\newcounter{numofpdfdocs}
\setcounter{numofpdfdocs}{2}
\newcounter{pdfdocsindex}
\begin{document}
\forloop{pdfdocsindex}{1}{\not{\value{pdfdocsindex} > \value{numofpdfdocs}}}{%
\includepdf[pages=-]{\pdfdocs(\value{pdfdocsindex})}%
}%
\end{document}
怎么了?我的日志文件中显示:
! Incomplete iffalse; all text was ignored after line 17.
<inserted text>
fi
<*> main.tex
! Emergency stop.
<*> main.tex
! ==> Fatal error occurred, no output PDF file produced!
Transcript written on main.log.
答案1
我不知道出了什么问题(并且目前也没有时间去调查),但是如何使用它来expl3
完成这项工作?
以下定义了\placedocsfromlist
循环遍历逗号分隔的文件名列表并包含这些文件名的宏。如果您使用\placedocsfromlist*
参数的第一个标记,则将被扩展(因此您可以使用存储在宏内的列表):
\documentclass[]{article}
\usepackage{pdfpages}
\ExplSyntaxOn
\NewDocumentCommand \placedocsfromlist { s m }
{
\IfBooleanT {#1} { \exp_args:No }
\copper_place_list:n {#2}
}
\cs_new_protected:Npn \copper_place_list:n #1
{ \clist_map_inline:nn {#1} { \includepdf [pages=-] {##1} } }
\ExplSyntaxOff
\newcommand*\docslist{docA, docB, docC}
\begin{document}
\placedocsfromlist*\docslist
\placedocsfromlist{docA, docB, docC}
\end{document}
答案2
您expl3
可以轻松地对 中的每个项目应用函数clist
。
\documentclass{scrartcl}
\usepackage{pdfpages}
\usepackage{expl3}
\ExplSyntaxOn
\clist_new:N\pdfdocs
\let\myset\clist_set:Nn
\newcommand\myincludepdf[2][]{%
\clist_map_inline:Nn\pdfdocs{\includepdf[#1]{##1}}}
\ExplSyntaxOff
\begin{document}
\myset\pdfdocs{test-1, test-2}
\myincludepdf[pages=1-3, scale=.5]{\pdfdocs}
\end{document}