![编辑 编辑](https://linux22.com/image/331327/%E7%BC%96%E8%BE%91%20%E7%BC%96%E8%BE%91.png)
我正在尝试制作一本 A7 尺寸的小册子,但我的打印机只能打印 A4 尺寸的小册子,所以我需要制作一个大致像这样的 pdf:
第 1 页(正面)
+-----+-----+-----+-----+
|--40--|--1--|--38--|--3--|
+-----+-----+-----+-----+
|--36--|--5--|--34--|--7--|
+-----+-----+-----+-----+
第 1 页(背面)
+-----+-----+-----+-----+
|--39--|--2--|--37--|--4--|
+-----+-----+-----+-----+
|--35--|--6--|--33--|--8--|
+-----+-----+-----+-----+
其中数字代表页数,页数为 40。问题是我必须使用什么命令才能使其成为现实。
抱歉我的英语不好
答案1
这不会自动对页面进行排序,但它似乎有效。
这是一份 40 页的 A7 文档。将结果称为a7-40.pdf
。
% !TEX TS-program = pdflatex
% !TEX encoding = UTF-8 Unicode
% arara: pdflatex
\pdfminorversion=7
\documentclass[twoside]{article}
\usepackage{geometry}
\geometry{paperwidth=74mm,paperheight=105mm}
\usepackage{graphicx}
\pagestyle{empty}
\begin{document}
\centering
\scalebox{30}{1}\newpage
\scalebox{30}{2}\newpage
\scalebox{30}{3}\newpage
\scalebox{30}{4}\newpage
\scalebox{30}{5}\newpage
\scalebox{30}{6}\newpage
\scalebox{30}{7}\newpage
\scalebox{30}{8}\newpage
\scalebox{30}{9}\newpage
\scalebox{10}{10}\newpage
\scalebox{10}{11}\newpage
\scalebox{10}{12}\newpage
\scalebox{10}{13}\newpage
\scalebox{10}{14}\newpage
\scalebox{10}{15}\newpage
\scalebox{10}{16}\newpage
\scalebox{10}{17}\newpage
\scalebox{10}{18}\newpage
\scalebox{10}{19}\newpage
\scalebox{10}{20}\newpage
\scalebox{10}{21}\newpage
\scalebox{10}{22}\newpage
\scalebox{10}{23}\newpage
\scalebox{10}{24}\newpage
\scalebox{10}{25}\newpage
\scalebox{10}{26}\newpage
\scalebox{10}{27}\newpage
\scalebox{10}{28}\newpage
\scalebox{10}{29}\newpage
\scalebox{10}{30}\newpage
\scalebox{10}{31}\newpage
\scalebox{10}{32}\newpage
\scalebox{10}{33}\newpage
\scalebox{10}{34}\newpage
\scalebox{10}{35}\newpage
\scalebox{10}{36}\newpage
\scalebox{10}{37}\newpage
\scalebox{10}{38}\newpage
\scalebox{10}{39}\newpage
\scalebox{10}{40}
\end{document}
现在使用pdfpages
创建 A4 页面:
\documentclass[a4paper,twoside]{article}
\usepackage{pdfpages,geometry}
\geometry{scale=1,marginparsep=0pt,marginparwidth=0pt,landscape}
\begin{document}
\includepdf[nup=4x2,pages={40,1,38,3,36,5,34,7, 32,9,30,11,28,13,26,15, 24,17,22,19,20,21,18,23, 16,25,14,27,12,29,10,31, 8,33,6,35,4,37,2,39}]{a7-40}
\end{document}
编辑 编辑
注意编辑关注编辑编辑,符合逻辑,但不按时间顺序。
为了回答评论中的疑问,这里有一种添加水平和垂直规则以将页面均匀分成四部分的方法。
\documentclass[a4paper,twoside]{article}
\usepackage{pdfpages,geometry}
\geometry{scale=1,marginparsep=0pt,marginparwidth=0pt,landscape}
\begin{document}
\newsavebox\adrielhrule
\sbox\adrielhrule{\vrule height .2pt depth .2pt width \paperwidth}
\newsavebox\adrielvrule
\sbox\adrielvrule{\hspace*{-.2pt}\vrule height \paperheight depth 0pt width .4pt}
\includepdf[nup=4x2,pages={40,1,38,3,36,5,34,7, 32,9,30,11,28,13,26,15, 24,17,22,19,20,21,18,23, 16,25,14,27,12,29,10,31, 8,33,6,35,4,37,2,39}, picturecommand={%
\setlength\unitlength{1mm}% modified from Ignasi's answer at http://tex.stackexchange.com/a/64745/
\put(0,105){\usebox{\adrielhrule}}%
\put(148.5,0){\usebox{\adrielvrule}}%
}]{a7-40}
\end{document}
编辑
为了使其更加方便,最好让 TeX 确定页面顺序并在必要时自动添加空白页以生成完整的签名。
该解决方案使用 expl3 和 egreg 的一点帮助来实现这一点。
\adrielbooklet[<other pdfpages options>]{<no. of pages>}{<pdf filename>}
<no. of pages>
将包括第一个<pdf filename>
,按适当的顺序排列它们并应用<other pdfpages options>
。
完整代码及示例:
\documentclass[a4paper,twoside]{article}
\usepackage{pdfpages,geometry,xparse}
\geometry{scale=1,marginparsep=0pt,marginparwidth=0pt,landscape}
\ExplSyntaxOn
\int_new:N \l_adriel_pages_int
\int_new:N \l_adriel_total_int
\int_set:Nn \l_adriel_pages_int { 1 }
\int_set:Nn \l_adriel_total_int { 1 }
\tl_new:N \l_adriel_pages_tl
\tl_new:N \l_adriel_pdfopts_tl
\cs_new_protected_nopar:Npn \adriel_pageorder:n #1
{
\int_compare:nTF
{
\int_mod:nn { #1 } { 4 } = 0
}
{
\int_set:Nn \l_adriel_total_int { #1 }
}
{
\int_set:Nn \l_adriel_total_int { #1 + 4 - \int_mod:nn { #1 } { 4 } }
}
\int_set:Nn \l_adriel_pages_int { \l_adriel_total_int - 1 }
\int_compare:nTF
{
\l_adriel_total_int > #1
}
{
\tl_clear:N \l_adriel_pages_tl
}
{
\tl_set:NV \l_adriel_pages_tl \l_adriel_total_int
}
\int_do_while:nn
{
\l_adriel_pages_int > 0
}
{
\int_if_odd:nTF { \l_adriel_pages_int }
{
\int_compare:nTF
{
( \l_adriel_total_int - \l_adriel_pages_int ) > #1
}
{
\tl_put_right:Nn \l_adriel_pages_tl { , }
}
{
\tl_put_right:Nx \l_adriel_pages_tl { , \int_eval:n { \l_adriel_total_int - \l_adriel_pages_int } }
}
}
{
\int_compare:nTF
{
\l_adriel_pages_int > #1
}
{
\tl_put_right:Nn \l_adriel_pages_tl { , }
}
{
\tl_put_right:Nx \l_adriel_pages_tl { , \int_eval:n { \l_adriel_pages_int } }
}
}
\int_decr:N \l_adriel_pages_int
}
}
\cs_new_protected_nopar:Npn \adriel_includepdf:nn #1 #2
{
\includepdf[#1]{#2}
}
\cs_generate_variant:Nn \adriel_includepdf:nn { V }
\cs_new_protected_nopar:Npn \adriel_booklet:nnn #1 #2 #3
{
\adriel_pageorder:n { #2 }
\tl_set:Nx \l_adriel_pdfopts_tl { {pages={\l_adriel_pages_tl}} }
\tl_put_right:Nn \l_adriel_pdfopts_tl { , #1 }
\adriel_includepdf:Vn \l_adriel_pdfopts_tl { #3 }
}
\NewDocumentCommand \adrielbooklet { O {} m m }
{
\adriel_booklet:nnn { #1 } { #2 } { #3 }
}
\ExplSyntaxOff
\begin{document}
\adrielbooklet[nup=4x2]{39}{a7-40}
\adrielbooklet[nup=4x2]{40}{a7-40}
\adrielbooklet[nup=4x2]{38}{a7-40}
\adrielbooklet[nup=4x2]{37}{a7-40}
\end{document}
这将产生 4 本小册子:
编辑 编辑 编辑
以下是带有分隔线的 (大部分) expl3 版本:
\documentclass[a4paper,twoside]{article}
\usepackage{pdfpages,geometry,xparse}
\geometry{scale=1,marginparsep=0pt,marginparwidth=0pt,landscape}
\ExplSyntaxOn
\int_new:N \l_adriel_pages_int
\int_new:N \l_adriel_total_int
\int_set:Nn \l_adriel_pages_int { 1 }
\int_set:Nn \l_adriel_total_int { 1 }
\tl_new:N \l_adriel_pages_tl
\tl_new:N \l_adriel_pdfopts_tl
\cs_new_protected_nopar:Npn \adriel_pageorder:n #1
{
\int_compare:nTF
{
\int_mod:nn { #1 } { 4 } = 0
}
{
\int_set:Nn \l_adriel_total_int { #1 }
}
{
\int_set:Nn \l_adriel_total_int { #1 + 4 - \int_mod:nn { #1 } { 4 } }
}
\int_set:Nn \l_adriel_pages_int { \l_adriel_total_int - 1 }
\int_compare:nTF
{
\l_adriel_total_int > #1
}
{
\tl_clear:N \l_adriel_pages_tl
}
{
\tl_set:NV \l_adriel_pages_tl \l_adriel_total_int
}
\int_do_while:nn
{
\l_adriel_pages_int > 0
}
{
\int_if_odd:nTF { \l_adriel_pages_int }
{
\int_compare:nTF
{
( \l_adriel_total_int - \l_adriel_pages_int ) > #1
}
{
\tl_put_right:Nn \l_adriel_pages_tl { , }
}
{
\tl_put_right:Nx \l_adriel_pages_tl { , \int_eval:n { \l_adriel_total_int - \l_adriel_pages_int } }
}
}
{
\int_compare:nTF
{
\l_adriel_pages_int > #1
}
{
\tl_put_right:Nn \l_adriel_pages_tl { , }
}
{
\tl_put_right:Nx \l_adriel_pages_tl { , \int_eval:n { \l_adriel_pages_int } }
}
}
\int_decr:N \l_adriel_pages_int
}
}
\cs_new_protected_nopar:Npn \adriel_includepdf:nn #1 #2
{
\includepdf[#1]{#2}
}
\cs_generate_variant:Nn \adriel_includepdf:nn { V }
\cs_new_protected_nopar:Npn \adriel_booklet:nnn #1 #2 #3
{
\adriel_pageorder:n { #2 }
\tl_set:Nx \l_adriel_pdfopts_tl { {pages={\l_adriel_pages_tl}} }
\tl_put_right:Nn \l_adriel_pdfopts_tl { , #1 }
\adriel_includepdf:Vn \l_adriel_pdfopts_tl { #3 }
}
\NewDocumentCommand \adrielbooklet { O {} m m }
{
\adriel_booklet:nnn { #1 } { #2 } { #3 }
}
\box_new:N \l_adriel_hline_box
\box_new:N \l_adriel_vline_box
\hbox_set:Nn \l_adriel_hline_box { \vrule height .2pt depth .2pt width \paperwidth }
\hbox_set:Nn \l_adriel_vline_box { \hspace*{-.2pt} \vrule height \paperheight depth 0pt width .4pt }
\NewDocumentCommand \adrielhrule { }
{
\box_use:N \l_adriel_hline_box
}
\NewDocumentCommand \adrielvrule { }
{
\box_use:N \l_adriel_vline_box
}
\ExplSyntaxOff
\begin{document}
\adrielbooklet
[nup=4x2,
picturecommand={%
\setlength\unitlength{1mm}% modified from Ignasi's answer at http://tex.stackexchange.com/a/64745/
\put(0,105){\adrielhrule}%
\put(148.5,0){\adrielvrule}%
}%
]{40}{a7-40}
\end{document}
答案2
不确定这是否符合页面规则,但您可能可以使用“pdf toolkit”(pdftk)之类的工具来完成此操作:
https://www.pdflabs.com/tools/pdftk-the-pdf-toolkit/
在我看来,最好保持 tex 的输出线性,稍后再应用重新排序进行打印,但我是个新手。:-)
编辑:实际上 pdfnup 可能更适合: