向循环的某些元素添加附加文本?

向循环的某些元素添加附加文本?

下面的问题有点疯狂的微优化的味道。但是我已经写了,而且我有点好奇,所以我想我还是把它贴出来吧。

以下循环迭代插入一些文件:

\foreach \n in {1,...,3}
{\includefile{\n}}

但我想在这些文件之间插入一些空白页。因此,像这样:

\includefile{1}
\includefile{2}
\addblankpage
\includefile{3}

问题是 - 是否可以在保留循环结构的情况下做到这一点? 涉及双循环的东西,例如Tikz 中的并行循环 [python-like zip]可能会有效,但实现这一目的的优雅方式并不明显。

请参阅下面完整的 MWE。

\documentclass[12pt]{article}
\usepackage{filecontents}
\usepackage{shellesc}
\usepackage{tikz}
\usepackage{pdfpages}
\usepackage{listofitems}
\newcommand{\addblankpage}{\clearpage \phantom{} \clearpage}
\begin{document}

\begin{filecontents*}{foo/bar.tex}
\documentclass[12pt]{article}
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}  % This will be output to foo/bar
  \node [font=\bfseries\Large, align=center] at (10, -10){TEST};(10,10);
\end{tikzpicture}
\end{document}
\end{filecontents*}
\ShellEscape{cd foo; pdflatex -shell-escape bar.tex}

\readlist*\Filenames{
  foo/bar.pdf,
  foo/bar.pdf,
  foo/bar.pdf
}    
\newcommand{\includefile}[1]{
\includepdf[pagecommand=
{\begin{tikzpicture}[remember picture, overlay]
  \node [font=\bfseries\Large, align=center] at (5, -5){WRITE ON TOP};
  \end{tikzpicture}}
,pages=1-]{\Filenames[#1]}
}

% Can this be done
\includefile{1}
\includefile{2}
\addblankpage
\includefile{3}

% using a loop?
\foreach \n in {1,...,3}
{\includefile{\n}}

\end{document}

答案1

似乎添加一个包含 \addblankpage 的数组,然后同时循环该数组,就可以了。如下所示:

\readlist*\Blankfiles{
  ,
  \addblankpage,
}
And then changing the loop to

\foreach \n in {1,...,3}
{\includefile{\n}\Blankfiles[\n]}

相应的 MWE 如下。欢迎评论。

\documentclass[12pt]{article}
\usepackage{filecontents}
\usepackage{shellesc}
\usepackage{tikz}
\usepackage{pdfpages}
\usepackage{listofitems}
\newcommand{\addblankpage}{\clearpage \phantom{} \clearpage}
\begin{document}

\begin{filecontents*}{foo/bar.tex}
\documentclass[12pt]{article}
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}  % This will be output to foo/bar
\node [font=\bfseries\Large, align=center] at (10, -10){TEST};
\end{tikzpicture}
\end{document}
\end{filecontents*}
\ShellEscape{cd foo; pdflatex -shell-escape bar.tex}

\readlist*\Filenames{
  foo/bar.pdf,
  foo/bar.pdf,
  foo/bar.pdf
}

\readlist*\Blankfile{
  ,
  \addblankpage,
}  

\newcommand{\includefile}[1]{
\includepdf[pagecommand=
{\begin{tikzpicture}[remember picture, overlay]
 \node [font=\bfseries\Large, align=center] at (5, -5){WRITE ON TOP};
 \end{tikzpicture}}
 ,pages=1-]{\Filenames[#1]}
}

\includefile{1}
\includefile{2}
\addblankpage
\includefile{3}

\foreach \n in {1,...,3}
{\includefile{\n}\Blankfile[\n]}

\end{document}

相关内容