编辑 编辑

编辑 编辑

我正在尝试制作一本 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}

A4 上的 A7 4x2

编辑 编辑

注意编辑关注编辑编辑,符合逻辑,但不按时间顺序

为了回答评论中的疑问,这里有一种添加水平和垂直规则以将页面均匀分成四部分的方法。

\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 本小册子:

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 可能更适合:

http://manpages.ubuntu.com/manpages/wily/man1/pdfnup.1.html

相关内容