我想使用宏将/MediaBox
、/BleedBox
和设置为实际页面大小。但看起来这是读取标记列表,而不是“常规宏”(如果我理解得没错的/CropBox
话)。由于我不是 expandafterguru,因此我无法实现这一点。/TrimBox
\pdfpageattr
以下 MNWE 未产生预期的结果:
\documentclass{article}
\makeatletter
\edef\pwpt{\strip@pt\dimexpr0.996264009963\paperwidth\relax} %paper width in PS points
\edef\phpt{\strip@pt\dimexpr0.996264009963\paperheight\relax} %paper height in PS points
\makeatother
\begin{document}
Paper width is \pwpt\ PS points
Paper height is \phpt\ PS points
\pdfpageattr{
/MediaBox [0 0 \pwpt \phpt]
/BleedBox [0.00000 0.00000 \pwpt \phpt]
/CropBox [0 0 \pwpt \phpt]
/TrimBox [0.00000 0.00000 \pwpt \phpt]
}
\end{document}
没有编译错误,但是生成的pdf无效。
注意:我试图自动化这个答案。
答案1
这是一个使用\expandafter
和的解决方案\space
。
使用\pdfcompresslevel 0
和\pdfobjcompresslevel 0
进入序言,您可以直接验证 PDF 文档:
/媒体框 [0 0 611.9985 791.99806] /出血框 [0.00000 0.00000 611.9985 791.99806] /裁剪框 [0 0 611.9985 791.99806] /修剪框 [0.00000 0.00000 611.9985 791.99806]
\documentclass{article}
\pdfcompresslevel 0
\pdfobjcompresslevel 0
\makeatletter
\edef\pwpt{\strip@pt\dimexpr0.996264009963\paperwidth\relax} %paper width in PS points
\edef\phpt{\strip@pt\dimexpr0.996264009963\paperheight\relax} %paper height in PS points
\makeatother
\begin{document}
Paper width is \pwpt\ PS points
Paper height is \phpt\ PS points
\edef\mypdfpageattr{
/MediaBox [0 0 \pwpt\space\phpt]^^J
/BleedBox [0.00000 0.00000 \pwpt\space\phpt]^^J
/CropBox [0 0 \pwpt\space\phpt]^^J
/TrimBox [0.00000 0.00000 \pwpt\space\phpt]
}
\expandafter\pdfpageattr\expandafter{\mypdfpageattr}
\end{document}
答案2
我使用 luatex,但在 bp 长度的计算准确性方面遇到了一些麻烦:Media|BleedBox 和 TrimBoxes 之间的距离测量结果报告为 4.97mm 而不是 5mm(Acrobat 预检报告的另一个距离为 4.98mm)。
在我使用 expl3 之后,\dim_to_decimal_in_bp
问题就消失了:5mm == 5mm。;-)
以下代码应该可以展示出[稍微]的差异(至少在宽度方面):
\RequirePackage{luatex85}
\pdfcompresslevel=0
\pdfobjcompresslevel=0
\documentclass[12pt]{article}
\usepackage[%
paperwidth=540mm,
paperheight=226mm,
margin=0cm,
noheadfoot,
]{geometry}
\makeatletter
\edef\pwpt{\strip@pt\dimexpr0.996264009963\paperwidth\relax}
\edef\phpt{\strip@pt\dimexpr0.996264009963\paperheight\relax}
\makeatother
%Alternative conversion using expl3:
\usepackage{xparse}
\ExplSyntaxOn
\NewExpandableDocumentCommand{\convert}{m}{%
\fp_eval:n
{
round ( \dim_to_decimal_in_bp:n { #1 } , 3 )
}
}
\ExplSyntaxOff
\edef\mypdfpageattr{
/MediaBox[%
0
0
\pwpt\space
\phpt]^^J
/MediaBox[%
0
0
\convert{\paperwidth}\space
\convert{\paperheight}]^^J
}
\expandafter\pdfpageattr\expandafter{\mypdfpageattr}
\begin{document}
These dimensions (at least the width) do not match the auto-generated MediaBox
definition:
Paper width is \pwpt\ PS points ($\leftarrow$ differs from auto-generated
MediaBox definition)
Paper height is \phpt\ PS points ($\leftarrow$ seems ok)
\bigskip
The following results do match the automatically added MediaBox (open pdf
file in text editor for details):
Paper width is \convert{\paperwidth}\ PS points ($\leftarrow$ seems better)
Paper height is \convert{\paperheight}\ PS points ($\leftarrow$ seems better)
\end{document}
注意:两个 MediaBox 定义/MediaBox[...
向生成的 pdf 文件添加了第二条和第三条语句(在文本编辑器中打开 pdf 了解详情):不知道第一条语句的原因是什么,以及是否可以替换。