我需要输出整个页面的一些 .png(实际上,我需要粘贴左页和右页,我目前正在使用 imagemagick 执行此操作)。我知道这可以通过独立类来完成,但我需要对回忆录类中的整本书执行此操作(例如这一)。
我可以通过获取 pdf 然后使用一些 pdf 实用程序来做到这一点,但我想知道是否有更有效的方法来做到这一点(因为我会这样做数千次)。最接近我的理想结果是使用 dvipng,使用选项-T bbox
,遗憾的是这会遗漏一些边距。还有其他直接与 .tex 文件或 .dvi 输出一起使用的选项吗?
对于特定情况,源文件如下:
\documentclass[smalldemyvopaper,11pt]{memoir}
\usepackage{lipsum}
\begin{document}
\lipsum[1-5]
\end{document}
然后使用该命令dvipng -T 5.675in,8.5in example.dvi
显示的图像与预期完全不同。该5.675in,8.5in
部分取自回忆录类文档表 1.3。请注意左边部分也是怎样被切割的。
答案1
如果您有权访问它,我会使用该实用程序,它是处理 pdf 文件的实用程序pdftoppm
的一部分。poppler
(我不确定您所说的“粘贴”左页和右页是什么意思。)
以您的示例文件(我将其命名为testpng.tex
)为例,我可以运行
pdflatex testpng.tex
这会将页面生成为 PDF。然后我运行
pdftoppm -png testpng.pdf tpn
(-png
开关要求以 png 格式输出,参数tpn
设置输出 png 文件的前缀)此命令生成三个 png 文件(因为您在 PDF 输出中从三页开始),分别名为tpn-1.png
、tpn-2.png
和tpn-3.png
。例如,第二页如下所示
我认为页边距正确。您可以阅读手册页看看它还能做什么。
另一种方法是使用该dvipng
工具,正如 OP 指出的那样,该工具运行速度更快。OP 观察到的问题是,在指定纸张尺寸后,边距显示不正确。
这是因为dvipng
根据-T
参数输出的方式:
- 如果
-T bbox
指定,则 dvipng 输出一个包含以下内容的最小矩形图像- 这dvi 起源(默认情况下,该点位于页面左上角水平和垂直方向各 1 英寸处)
- 以及页面上的所有墨水。
- 如果
-T tight
指定,则 dvipng 输出一个包含页面上所有墨水的最小矩形图像。 - 如果
-T <width>,<height>
输出的图像是具有指定尺寸的矩形,其内容是相对于dvi 起源(请记住,该点距离纸张的顶部和左侧边缘均为 1 英寸)。
为了说明这一点,请考虑以下 TeX 源
\documentclass{book}
\usepackage{geometry}
\geometry{paperwidth=5in, paperheight=7in, inner=0.4in, outer=2in, top=1.2in, bottom=2in}
\usepackage{lipsum}
\begin{document}
\lipsum[1-5]
\end{document}
其边距严重不平衡。如果您使用dvipng -T5in,7in
,前两页将呈现以下内容:
第 1 页:
第2页:
您会看到第 1 页上的部分文本被截断,这是因为内边距设置为 0.4 英寸,距离边缘不到 1 英寸。您还可以测量一下,看看在这两种情况下,剩余的顶部边距是否正好是 0.2 英寸,这意味着两个页码现在都消失了。
为了获得预期的完整页面,您需要做的就是将 dvi 原点在水平和垂直方向上精确移动 1 英寸,使其与页面的左上角对齐。请注意猜测或目测是必须的。以下是使用 的相同两页的输出dvipng -T5in,7in -O1in,1in
;请注意,严重不对称的边距是受尊重的,与大卫建议,设置偏移参数时不需要摆弄文档的实际边距。
第 1 页:
第2页: