我有一个由以下输入文件创建的 PDF 文档。
\documentclass[cmyk,a4paper]{minimal}
\usepackage{geometry,xcolor}
\pagecolor{cyan}
\parindent=0bp
\begin{document}
\fbox{$\displaystyle E=mc^2$}
\end{document}
pdfcrop
但由于背景不是白色,所以无法裁剪。我认为背景不是白色影响了边界框。那么如何解决这个问题呢?
确认
pdfcrop 的作者说马丁和列夫的报告如下:
PDF 格式不知道“页面颜色”。pdftex.def 通过在页面上放置彩色框来实现它。因此,程序无法清楚哪些框是有价值的内容,哪些框可以裁剪。
要获得正确裁剪的图像,您可以运行不带 \pagecolor 的 TeX 文档,然后运行 gs -sDEVICE=bbox -dBATCH -dNOPAUSE test.pdf 以获取边界框数据。如果您使用 hyperref,则可以使用选项 pdfpagescrop 的边界框数据。或者使用选项 --box 和边界框数据运行 pdfcrop。
——海科·奥伯迪克
答案1
我会换一种方式来做:(这实际上可能会解决你的一些其他问题)
将整个内容放在序言中的保存框中。(据我所知,您必须手动启用此正常字体使用。)然后您可以测量框的尺寸并相应地设置页面尺寸。这将为您提供已具有正确尺寸的 PDF 或 PS。对于较大的内容,我建议像往常一样\normalfont
使用包装器。minipage
该\pagecolor
命令在这里仍然有效。我原本以为你需要手动\rule
在内容后面放置一个相同大小的彩色矩形 ( )。
pdflatex
对我来说,使用(PDF),latex
-> dvips
1 (PS),latex
-> dvips
1 -> ps2pdf
(PDF)即可完成以下操作,xelatex
并lualatex
生成正确大小的文件。
1没有任何选项,-E
无需
\documentclass{article}
\usepackage[cmyk]{xcolor}
\pagecolor{cyan}
\pagestyle{empty}
\parindent=0bp
\begin{lrbox}{0}%
\normalfont
\fbox{$\displaystyle E=mc^2 $}%
\end{lrbox}
\sbox0{\raise\dp0\box0}% raise box so it is all height, no depth
%\sbox0{\rlap{\textcolor{cyan}{\rule{\wd0}{\ht0}}}\box0}% \pagecolor surprisingly works so this is not needed
\usepackage[noheadfoot,nomarginpar,margin=0pt,paperwidth=\wd0,paperheight=\ht0]{geometry}
\begin{document}
\box0
\end{document}
答案2
不管怎样,我遇到过类似的问题,但需要不同的解决方案。我的 PDF 是由第三方生成的,但背景是白色矩形,因此pdfcrop
仍然将边界框识别为包含边距。
Python 模块pdf-crop-margins
非常有用,而且 - 嗯 - 简单易用。对于非白色背景,它似乎有-t
一个开关 ( --threshold
),允许您指定对背景暗度的敏感度。我不确定它在文本比背景更亮的其他情况下会表现如何,但也许它还有其他开关。