我怎样才能为奇数页和偶数页编写不同的 /BleedBox

我怎样才能为奇数页和偶数页编写不同的 /BleedBox

对于要出版的书,我需要/BleedBox为奇数页和偶数页提供不同的页码。我尝试通过以下方法实现此目的,\pdfpageattr如果在我的文档中只使用一次,效果会很好,对于偶数/奇数页分隔,我尝试了:

\documentclass[numbers=noenddot,10pt,paper=155mm:230mm]{scrbook}
\usepackage[frame,width=169.8truemm,height=247.4truemm,cam,pdftex,cross]{crop}
\setlength{\voffset}{7.4mm}
\setlength{\hoffset}{7.4mm}

\usepackage{ifthen,everypage}

\newcommand{\checkthatpage}[2]{%
    \ifthenelse{\isodd{\value{page}}}%
    {#1}%
    {#2}%
}%

\AddEverypageHook{\checkthatpage{An even page with no bleed left\noexpand\pdfpageattr{
            /TrimBox [20.976 28.346 460.346 680.315]
            /BleedBox [29.480 19.843 460.346 688.819]
    }}{An odd page with no bleed right\noexpand\pdfpageattr{
    /TrimBox [20.976 28.346 460.346 680.315]
    /BleedBox [20.976 19.843 468.850 688.819]
}}}

\begin{document}
This page is:
\newpage
This page is:
\newpage
This page is:
\newpage
This page is:
\newpage
\end{document}

/BleedBox但是使用这种方法,我根本没有在输出中看到任何框,我在编辑器中检查了 PDF。我做错了什么?是由于扩展,还是因为宏的位置?输出中根本没有。

附加问题:我可以通过仅设置奇数/偶数相对出血边距并/BleedBox从包装设置中获取来自动执行计算crop吗?

附加题答案:在@Ulrike Fischer 的回答以及其他问题和答案的一些补充的帮助下,我能够自己解决这个问题,请参阅我自己的答案。

答案1

您可以使用 atbegshi。如果需要切换奇数/偶数值,我将值复制到页面中。请注意,您正在覆盖 \pdfpageattr 寄存器。如果代码的其他部分也写入它,内容将丢失。

% uncompress the pdf: 
\pdfcompresslevel0
\pdfobjcompresslevel0

\documentclass[numbers=noenddot,10pt,paper=155mm:230mm]{scrbook}
\usepackage[frame,width=169.8truemm,height=247.4truemm,cam,pdftex,cross]{crop}
\setlength{\voffset}{7.4mm}
\setlength{\hoffset}{7.4mm}

\usepackage{atbegshi}

\AtBeginShipout
{\ifodd\value{page}
   \pdfpageattr{
            /TrimBox [20.976 28.346 460.346 680.315]
            /BleedBox [29.480 19.843 460.346 688.819]
     }
 \else 
    \pdfpageattr{
      /TrimBox [20.976 28.346 460.346 680.315]
      /BleedBox [20.976 19.843 468.850 688.819]
      }
 \fi     
}

\begin{document}
This page is: /TrimBox [20.976 28.346 460.346 680.315] /BleedBox [29.480 19.843 460.346 688.819] 
\newpage
This page is: /TrimBox [20.976 28.346 460.346 680.315] /BleedBox [20.976 19.843 468.850 688.819] 
\newpage
This page is: /TrimBox [20.976 28.346 460.346 680.315] /BleedBox [29.480 19.843 460.346 688.819] 
\newpage
This page is: /TrimBox [20.976 28.346 460.346 680.315] /BleedBox [20.976 19.843 468.850 688.819] 
\newpage
\end{document}

答案2

尝试一下这个版本的 MWE。

% bleedboxprob.tex SE 546714

\documentclass[numbers=noenddot,10pt,paper=155mm:230mm]{scrbook}
\usepackage[frame,width=169.8truemm,height=247.4truemm,cam,pdftex,cross]{crop}
\setlength{\voffset}{7.4mm}
\setlength{\hoffset}{7.4mm}

\usepackage{ifthen,everypage}

\newcommand{\checkthatpage}[2]{%
    \ifthenelse{\isodd{\value{page}}}%
    {#1}%
    {#2}%
}%

\AddEverypageHook{\checkthatpage{An even page with no bleed left\noexpand\pdfpageattr{
            /TrimBox [20.976 28.346 460.346 680.315]
            /BleedBox [29.480 19.843 460.346 688.819]
    }}{An odd page with no bleed right\noexpand\pdfpageattr{
    /TrimBox [20.976 28.346 460.346 680.315]
    /BleedBox [20.976 19.843 468.850 688.819]
}}}

\begin{document}
This page is: \checkthatpage{odd}{even}
\newpage
This page is: \checkthatpage{odd}{even}
\newpage
This page is: \checkthatpage{odd}{even}
\newpage
This page is: \checkthatpage{odd}{even}
\newpage
\end{document}

输出结果似乎存在矛盾。也许您需要检查一下您的代码。

答案3

我接受了@Ulrike Fischer 的回答,并给出了解决方案我如何才能动态地(使用宏)设置 PDF TrimBox 并使其独立于编译器?使用 PDFLaTeX 设置 BleedBox我还想出了我的奖励问题的答案,它允许根据现有值和给定值自动计算框。\hoffset\voffset\stockwidth\stockheight来自 的值crop。此外,您还可以定义\outsidebleed已安装页面外边缘的附加边距。

也许这对将来在这里寻找的人有帮助。

\documentclass[numbers=noenddot,10pt,paper=155mm:230mm]{scrbook}
\usepackage[frame,width=169.8truemm,height=247.4truemm,cam,pdftex,cross]{crop}
\setlength{\voffset}{7.4mm}
\setlength{\hoffset}{7.4mm}

\usepackage{xparse}
\ExplSyntaxOn

%% define bleed for the three outside edges
\dim_new:N \outsidebleed 
\dim_set:Nn \outsidebleed { 3mm }

%% values for the Trim box on all pages
\tl_new:N \trim_box
\tl_set:Nx \trim_box {
    \dim_to_decimal_in_bp:n { \hoffset} \space 
    \dim_to_decimal_in_bp:n { \stockheight - \paperheight - \voffset} \space
    \dim_to_decimal_in_bp:n { \paperwidth + \hoffset } \space
    \dim_to_decimal_in_bp:n { \stockheight - \voffset }
}

%% values for the Bleed box on odd pages
\tl_new:N \bleed_box_odd
\tl_set:Nx \bleed_box_odd {
    \dim_to_decimal_in_bp:n { \hoffset } \space 
    \dim_to_decimal_in_bp:n { \stockheight - \paperheight - \voffset } \space
    \dim_to_decimal_in_bp:n { \paperwidth + \hoffset + \outsidebleed } \space
    \dim_to_decimal_in_bp:n { \stockheight - \voffset + \outsidebleed }
}

%% values for the Bleed box on even pages
\tl_new:N \bleed_box_even
\tl_set:Nx \bleed_box_even {
    \dim_to_decimal_in_bp:n { \hoffset - \outsidebleed } \space 
    \dim_to_decimal_in_bp:n {  \stockheight - \paperheight - \voffset - \outsidebleed } \space
    \dim_to_decimal_in_bp:n { \paperwidth + \hoffset } \space
    \dim_to_decimal_in_bp:n { \stockheight - \voffset + \outsidebleed }
}

%% page attribute for odd pages
\tl_new:N \pageattr_odd
\tl_set:Nx \pageattr_odd {
    /TrimBox \space [ \trim_box ]
    \space
    /BleedBox \space [ \bleed_box_odd ]
}

%% page attribute for even pages
\tl_new:N \pageattr_even
\tl_set:Nx \pageattr_even {
    /TrimBox \space [ \trim_box ]
    /BleedBox \space [ \bleed_box_even ]
}

%% command to set the page attribute
\NewDocumentCommand{\setpdfpageattreven}{}{\exp_args:Ne \pdfpageattr { \pageattr_even } }
\NewDocumentCommand{\setpdfpageattrodd}{}{\exp_args:Ne \pdfpageattr { \pageattr_odd } }

%% just a macro to show some debug info
\NewDocumentCommand { \debuginfo } { } {
    \par\medskip\noindent
    pageattribute \space even: \\
    \mbox { \texttt { \pageattr_even } }
    \par\medskip\noindent
    pageattribute \space odd: \\
    \mbox { \texttt { \pageattr_odd } }
}

\ExplSyntaxOff

\usepackage{atbegshi}

\AtBeginShipout
{\ifodd\value{page}
    \setpdfpageattrodd
    \else 
    \setpdfpageattreven
    \fi     
}

\begin{document}
\debuginfo
Test
\newpage
Test
\newpage
Test
\newpage
Test
\newpage
Test
\newpage
Test
\newpage
Test
\end{document}

相关内容