如何对包含的 PDF 页面进行重新排序以进行批量剪切?

如何对包含的 PDF 页面进行重新排序以进行批量剪切?

如何对包含的 PDF 页面进行重新排序以进行批量剪切?[节省纸张]

情况与问题

我收到不断更新的讲座稿,这些稿件是 A4 格式的 PDF,我需要打印。由于边距较大(默认的 LaTeX 文档通常如此),文本区域显然适合 A5 纸。为了节省一些纸张,我想将这些 A4 文件打印为 A5 格式,但不调整它们的大小(因为东西会变得太小),而是裁切边距。由于我不知道最终会有多少页,所以我不能使用signature

我知道从美学角度来说这是不好的。

在下面的 MWE 中,您可以看到,我正在从使用命令找到的页边距中修剪包含的页面(尝试使用 not nup=1x2, landscapebut ) 。但是,我无法重新排列页面的顺序,以便我可以批量剪切它们并获得有序的普通 A5 纸张。稍后我想剪切页面并手动将它们粘合或打孔装订在一起。frame, noautoscale\layoutnup=1x2

问题

包括如何重新订购pdfpagesnup=1x2, landscape获取批量可剪切的 A5 页面?

让我用改编的方案展示所需的顺序这里(请给予村庄信用)如果订单如下,处理更大批量会更加实用:

..[think of overlaying not folding here]..    [folding-view here]
(front of 1st paper)  (back of 1st paper)     (stacking order)
 ________ ________     ________ ________           /|======>>/|  ...==>>/|
|        |        |   |        |        |     1 ->/ |   3 ->/ |   h-1->/ |
|        |        |   |        |        |        /  |      /  |       /  |
|        |        |   |        |        |       / 2 |     / 4 |      / h |
|_____1__|___h+1__|   |__2_____|__h+2___|       |\  |     |\  |      |\  |
                                                | \ |     | \ |  ... | \ |  
(front of 2nd paper)  (back of 2nd paper)       |  \      |  \       |  \ 
 ________ ________     ________ ________        |   |     |   |      |   |
|        |        |   |        |        |       |h+1|     |h+3|      |n-1|
|        |        |   |        |        |        \  |      \  |       \  |
|        |        |   |        |        |         \ |<-h+2  \ |<-h+4   \ | <- n
|_____3__|___h+3__|   |__4_____|__h+4___|          \|======>>\|  ...==>>\|

...

(front of last paper) (back of last paper)
 ________ ________     ________ ________
|        |        |   |        |        |
|        |        |   |        |        |
|        |        |   |        |        |
|___h-1__|___n-1__|   |__h_____|__n_____|

... 对于n带有 的页面h := n/2

MWE

\documentclass[
    12pt, 
    twoside
]{article}
\usepackage[a4paper]{geometry}
\usepackage{pdfpages}


% Border space as numbered in layout scheme ( https://tex.stackexchange.com/a/376643/ )
% top = 2 - 4 + 5 + 6
\newlength{\distup}
\setlength{\distup}{\dimexpr\voffset+1in+\topmargin+\headheight+\headsep\relax} % looks good with geometry a4paper but not without

% % left = 1+3
\newlength{\distleft}
\setlength{\distleft}{\dimexpr1in+\hoffset+\oddsidemargin\relax}
% \addtolength{\distleft}{20pt} % doesnt work due to twosided import

% % bottom = 11 + ? // = paperheight - oben - textheight
\newlength{\distdown}
\setlength{\distdown}{\dimexpr\paperheight-\distup-\textheight\relax}
% \addtolength{\distdown}{5pt} % we can cut a little more

% % right = 9 + 10 + ? // = paperwidth - link - textwidth
\newlength{\distright}
\setlength{\distright}{\dimexpr\paperwidth-\distleft-\textwidth\relax}
% \addtolength{\distright}{20pt} % doesnt work due to twosided import
% %

\begin{document}
    \includepdf[
        pages=-,
        nup=1x2,
        landscape,
        clip,
        trim={{\distleft} {\distdown} {\distright} {\distup}},
        offset={-9pt 0pt}, % -9pt centers // works with twoside but not nup=1x2, landscape
        % noautoscale,
        frame
    ]{testfile.pdf}
    
\end{document}

我正在使用给定的 PDF,但这应该适用于 MWE(尽管我注意到,我的边距似乎不适合这里?):

testfile.tex

\documentclass[
    12pt
]{article}
\usepackage{pdfpages}

\usepackage{lipsum}

\begin{document}
    \lipsum
\end{document}

笔记:

第一种情况“(可能更容易实现?)”在我下面的答案中得到了解决,但上面的其余问题没有得到解决。我会继续提出这个问题,以便集中精力并接受该部分的答案。

答案1

TeXlive 中有booklet.tex宏(来自 olsak-misc 包)。用法:创建一个包含两行的文档:

\def\document{filename}  % filename.pdf will be processed
\input booklet

然后运行pdftex使用这个两行文件运行(没有 LaTeX,没有 pdfLaTeX)。该宏在书中有记录TeX 实用主义(仅限捷克语)。或者,您可以使用命令行:

pdftex '\def\document{filename} \input booklet'

答案2

好吧,你总是可以计算出 的正确值signature。你只需要知道 pdf 的总页数,这可以通过 TeX 引擎特定的命令(例如\lastsavedimageresourcepagesluaTeX)访问。其他引擎的命名不同。

在以下示例中,我使用 pdfpages 中的一些独立于 TeX 引擎的内部宏(例如\AM@pagecount)来获取总页数。经过几次简短计算后,计数器便mysig包含了正确的值signature

\documentclass[a4paper]{article}
\usepackage{pdfpages}

\makeatletter
\newcounter{mysig}
\newcommand\myincludepdf[2][]{%
  \def\AM@currentdocname{#2}%
  \AM@getpagecount
  \setcounter{mysig}{\AM@pagecount-\AM@pagecount/4*4}%
  \ifnum\c@mysig>0
    \setcounter{mysig}{\AM@pagecount/4*4+4}%
  \else
    \setcounter{mysig}{\AM@pagecount/4*4}%
  \fi
  \includepdf[#1,landscape, pages=-, signature=\c@mysig]{#2}%
}
\makeatother

\begin{document}

\myincludepdf{dummy.pdf}

\end{document}

答案3

所以我找到了这个已解决的问题这回答了问题的一部分:

任何一个(可能更容易实现?):
(front of 1st paper)    (back of 1st paper)
 ________ ________       ________ ________
|        |        |     |        |        |
|        |        |     |        |        |
|        |        |     |        |        |
|_____1__|_____3__|     |__2_____|__4_____|

应该像这样堆叠

          /|=====>>/|
     1 ->/ |  5 ->/ |
        /  |     /  |
       / 2 |    / 6 |
       |\  |    |\  |
       | \ |    | \ |  ...
       |  \     |  \ 
       |   |    |   |
       | 3 |    | 7 |
        \  |     \  |
         \ |<- 4  \ |<- 8
          \|=====>>\|

像这样使用pgfpmorepages,创建所需的布局:

\documentclass[
    12pt, 
    % a4paper
    twoside
]{article}
\usepackage[a4paper]{geometry}

\usepackage{pgfmorepages} % before pdfpages !
\usepackage{pdfpages}

%
\newlength{\distup}
\setlength{\distup}{\dimexpr\voffset+1in+\topmargin+\headheight+\headsep\relax}
\newlength{\distleft}
\setlength{\distleft}{\dimexpr1in+\hoffset+\oddsidemargin\relax}
\newlength{\distdown}
\setlength{\distdown}{\dimexpr\paperheight-\distup-\textheight\relax}
\newlength{\distright}
\setlength{\distright}{\dimexpr\paperwidth-\distleft-\textwidth\relax}
%

\pgfmorepagesloadextralayouts

\pgfpagesuselayout{4 on 2, book format}[
  a4paper,
  landscape,
  % border code=\pgfusepath{draw}
]

\begin{document}
    \includepdf[
        pages=-,
        clip,
        trim={{\distleft} {\distdown} {\distright} {\distup}},
        frame
    ]{testfile.pdf}

\end{document}

编辑:

  1. 这显然不允许翻转每隔一页(或者我无法弄清楚如何翻转);reverse second引发了编译错误)。请随意改进这个答案或添加改进的答案。
  2. book format短页边装订但打印选项可以解决问题!

相关内容