对于要出版的书,我需要/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}