![如何才能双面打印索引卡且每页有多张卡片?](https://linux22.com/image/288066/%E5%A6%82%E4%BD%95%E6%89%8D%E8%83%BD%E5%8F%8C%E9%9D%A2%E6%89%93%E5%8D%B0%E7%B4%A2%E5%BC%95%E5%8D%A1%E4%B8%94%E6%AF%8F%E9%A1%B5%E6%9C%89%E5%A4%9A%E5%BC%A0%E5%8D%A1%E7%89%87%EF%BC%9F.png)
Stackexchange 上有几个关于“学习卡”的答案,指出了几种解决方案,但这部分不是我的问题。我已经设计了它们,制作了正面和背面的 (DIN A 6),并获得了一个 PDF,其中包含每张索引卡的连续页面“正面:背面”。
现在我要打印它们,但我的问题就从这里开始。
这个想法是将这些卡片的 2x2 排列在 DIN A4 纸上,这样我就可以用常用的硬件打印它们。这可以通过使用pdfpages
包后处理第一个名为“cards.pdf”的 PDF 来实现,然后创建第二个:
\documentclass[landscape]{scrartcl}
\usepackage{pdfpages}
\begin{document}
\includepdf[frame, pages={1, 3, 5, 7}, nup=2x2]{cards.pdf}
\includepdf[frame, pages={6, 8, 2, 4}, nup=2x2]{cards.pdf}
\end{document}
效果很好,但您可能已经意识到,我必须手动指定页码,如果卡片数量很多,这可能是一项艰巨的任务。一定有更简单的方法来实现这一点。
这就是我的问题:我怎样才能双面打印这些索引卡,每页打印多张卡片,使得一张卡片的正面后面正好贴合其背面,位于打印纸的最里面?
答案1
较长的文章
我使用的是双重翻转/反射方法。它需要几个步骤,请使用pdflatex
或lualatex
。下面的示例可以稍作修改以与 一起使用xelatex
,请参阅如何自动输出页面顺序以便在一张 Letter 纸上打印小册子的 8 页?,其中我使用了\XeTeXpdfpagecount
而不是\pdfximage
和\pdflastximagepages
。然后所有三个主要的 LaTeX 引擎都可以运行。
步骤 1:要打印的材料
我正在模拟 32 张不相关的名片,两面都排版。我们将尝试在 A4 纸上打印 4x4 张,双面打印和长边打印。我附上了 TeX 代码 ( mal-pdf-part1.tex
) 和前八页(共 64 页)的预览。
% run: any LaTeX engine mal-pdf-part1.tex
\documentclass[a4paper,landscape]{article}
\paperwidth=0.25\paperwidth
\paperheight=0.25\paperheight
\pdfpagewidth=\paperwidth
\pdfpageheight=\paperheight
\usepackage{tikz}
\begin{document}
\newcount\malc
\malc=0
\loop
\advance\malc by 1
\foreach \mcolor/\mside in {green/front,blue/back} {%
\newpage
\pagecolor{\mcolor}%
\begin{tikzpicture}[remember picture, overlay]
\node[font=\bfseries,scale=10,yshift=0.8mm] at (current page) {\the\malc}; % front side
\node[font=\bfseries,scale=4,yshift=-4mm] at (current page) {\mside{} side}; % back side
\end{tikzpicture}%
}% End of \foreach...
\ifnum\malc<32\repeat % E.g. a number of business cards...
\end{document}
步骤 2:重新排列奇数页(正面/右页)
一般来说,我们只需要选择它们(步骤 2a)并使用包nup=4x4
中的basic pdfpages
(步骤 2b)。我附上了 TeX 文件和 PDF 文件的预览。这是文件mal-pdf-part2a.tex
(预览由 8 页组成,共 32 页):
% run: pdflatex or lualatex mal-pdf-part2a.tex
\documentclass{article}
\usepackage{pdfpages}
\begin{document}
\def\malfile{mal-pdf-part1.pdf}
\pdfximage{\malfile}
\newcount\malc \malc=0
\loop
\advance\malc by 1%
\ifnum\malc<\pdflastximagepages
\ifodd\malc\else
\includepdf[fitpaper,pages={\the\malc},angle=90]{\malfile}
\fi
\repeat
\end{document}
这是mal-pdf-part2b.tex
文件:
% run: pdflatex or lualatex mal-pdf-part2b.tex
\documentclass[a4paper]{article}
\usepackage{pdfpages}
\begin{document}
\includepdf[pages={-},nup=4x4,frame]{mal-pdf-part2a.pdf}
\end{document}
步骤 3:重新排列偶数页(背面/反面页面)
在步骤 3a 中,我们选择偶数页,旋转它们(如果需要,长边打印时旋转 -90 度,短边打印时旋转 90 度)并首次反映它们。这是文件mal-pdf-part3a.tex
和 32 页中的前 8 页的预览:
% run: pdflatex or lualatex mal-pdf-part3a.tex
\documentclass{article}
\usepackage{pdfpages}
\begin{document}
\def\malfile{mal-pdf-part1.pdf}
\pdfximage{\malfile}
\newcount\malc \malc=0
\loop
\advance\malc by 1%
\ifnum\malc<\pdflastximagepages
\ifodd\malc
\includepdf[fitpaper,pages={\the\malc},angle=-90,reflect]{\malfile}
% We would use angle=90 for short-edge duplex printing.
% We use angle=-90 for long-edge duplex printing.
\fi
\repeat
\end{document}
这是mal-pdf-part3b.tex
文件:
% run: pdflatex or lualatex mal-pdf-part3b.tex
\documentclass[a4paper]{article}
\usepackage{pdfpages}
\begin{document}
\includepdf[pages={-},nup=4x4,frame]{mal-pdf-part3a.pdf}
\end{document}
步骤 4:将 PDF 文件放在一起
我们的最后一步是将这两个 PDF 文件放在一起。最终的 PDF 文件由 4 页(2 张 A4 纸)组成。我们可以看到,我们再次反射了后面的页面。这是在重新排列步骤之后发生的,因此打印后矩形将开始相互契合。
我附上了最后的 TeX 源代码和最终 PDF 文件的预览。此文件已准备好打印(长边、双面、A4 纸),然后每张纸切成 16 块。
在生产中,我们必须注意,由于技术限制(办公室激光和墨水打印机),页面周围通常有 5 毫米的空间,打印机无法打印。我们通常在最后一步使用比例参数(本例中两次)。我scale=1
在这个例子中使用的是,在生产中我通常使用scale=0.92
。
% run: pdflatex or lualatex mal-pdf-part4.tex
\documentclass{article}
\usepackage{pdfpages}
\begin{document}
\def\malfile{mal-pdf-part2b.pdf}
\pdfximage{\malfile}
\newcount\malc % inicialization of page counter
\malc=0 % setting the counter
\loop
\advance\malc by 1%
\includepdf[fitpaper,pages={\the\malc},scale=1]{mal-pdf-part2b.pdf} % 0.92 in production
\includepdf[fitpaper,pages={\the\malc},reflect,scale=1]{mal-pdf-part3b.pdf} % 0.92 in production
\ifnum\malc<\pdflastximagepages\repeat
\end{document}
结束语
在此示例中,我们运行:
pdflatex mal-pdf-part1.tex
pdflatex mal-pdf-part1.tex
pdflatex mal-pdf-part2a.tex
pdflatex mal-pdf-part2b.tex
pdflatex mal-pdf-part3a.tex
pdflatex mal-pdf-part3b.tex
pdflatex mal-pdf-part4.tex
我们可以轻松地将nup
参数从更改为任何我们喜欢的内容,但是,在和 中也4x4
需要进行更改。mal-pdf-part2b.tex
mal-pdf-part3b.tex
我们在生产中不使用frame
参数(相同的两个文件)。
如果我们需要在文档中间某处输入一个空白页,我们通常\newpage\mbox{}
在第一步中使用(在我们排版正面和背面时使用两次)。
如果我们输入较少的论文(本例中小于 32 篇),则mal-pdf-part1.tex
剩余空间将为空。由于双重反射方法,空白处也将适合。我附上了一个我输入 30 页而不是 32 页的示例。
答案2
编号与我认为您想要的不匹配,但是这应该可以实现您想要的:
我使用\foreach
循环遍历假设每页有 4 张卡片的页面。如果卡片数量不足,则没有采取任何预防措施。
\documentclass[landscape]{scrartcl}
\usepackage{pdfpages}
\usepackage{pgffor}
\newcommand\setmycard[2]{%
\edef\myimportedpagenumber{\number\numexpr(#1-1)*8+#2\relax}%%
\expandafter\edef\csname ae@card@\number\numexpr#2\relax\endcsname{\myimportedpagenumber}}
\newcommand\getmycard[1]{\csname ae@card@\number\numexpr#1\relax\endcsname}
\begin{document}
\foreach \mycard in {1,2,3}
{%%
\setmycard\mycard{1}%%
\setmycard\mycard{2}%%
\setmycard\mycard{3}%%
\setmycard\mycard{4}%%
\setmycard\mycard{5}%%
\setmycard\mycard{6}%%
\setmycard\mycard{7}%%
\setmycard\mycard{8}%%
\includepdf[frame,pages={\getmycard{1},
\getmycard{3},
\getmycard{5},
\getmycard{7}},nup=2x2] {cards.pdf}%%
\includepdf[frame,pages={\getmycard{6},
\getmycard{8},
\getmycard{2},
\getmycard{4}},nup=2x2] {cards.pdf}%%
}
\end{document}