preview
实际上,一旦我知道了包的存在,以下看起来像重新发明轮子的方法就被抛弃了。
% WithoutPreview.tex
\documentclass{article}
\usepackage{pstricks}
\newcommand\All{0.1}
\newcommand\Left{-\All}
\newcommand\Right{\All}
\newcommand\Bottom{-\All}
\newcommand\Top{\All}
%%%%%%%%%%%% BEGIN SETTINGS %%%%%%%%%%%%
\headheight=0pt
\headsep=0pt
\parindent=0pt
\topskip=0pt
\topmargin=-72.27pt
\oddsidemargin=-72.27pt
\paperwidth=\dimexpr\Right\psxunit-\Left\psxunit\relax
\paperheight=\dimexpr\Top\psyunit-\Bottom\psyunit\relax
\special{papersize=\the\paperwidth,\the\paperheight}
\pagestyle{empty}
%%%%%%%%%%%%% END SETTINGS %%%%%%%%%$%%%
\begin{document}
\begin{pspicture}(\Left,\Bottom)(\Right,\Top)
\psframe[linewidth=0.01](\Left,\Bottom)(\Right,\Top)
\end{pspicture}
\end{document}
其理念WithoutPreview.tex
是产生具有紧密纸张尺寸的单一输出。
使用以下批处理文件,
rem batch.bat takes an input file name WITHOUT extension.
latex %1
dvips -D10000 -t unknown %1
gswin32c -r10000 -dAutoRotatePages=/None -dNOPAUSE -dBATCH -sDEVICE=pdfwrite -sOutputFile=%1.pdf %1.ps
我得到了以下不够紧密的输出。
注意:边缘处有随机的空白。无法预测它们的确切位置。它们有时在左侧和顶部边缘,有时在左侧和底部边缘等。它们取决于指定的设置。
一旦我知道了包的存在preview
并使用它,我就放弃了我在中使用的方法WithoutPreview.tex
。
以下代码使用preview
包,
% WithPreview.tex
\documentclass{article}
\usepackage{pstricks}
\newcommand\All{0.1}
\newcommand\Left{-\All}
\newcommand\Right{\All}
\newcommand\Bottom{-\All}
\newcommand\Top{\All}
%%%%%%%%%%%% BEGIN SETTINGS %%%%%%%%%%%%
\usepackage[active,tightpage]{preview}
\PreviewBorder=0pt
\PreviewEnvironment{pspicture}
%%%%%%%%%%%%% END SETTINGS %%%%%%%%%$%%%
\begin{document}
\begin{pspicture}(\Left,\Bottom)(\Right,\Top)
\psframe[linewidth=0.01](\Left,\Bottom)(\Right,\Top)
\end{pspicture}
\end{document}
当使用相同的批处理文件进行编译时,batch.bat
它会产生如下的紧密输出。
注意:随机空白已经消失了!
昨天传来坏消息,因为我无法将preview
这个包与 PSTricks 相关包和animate
包一起使用。
问题
是否在后台preview
调用?如果不调用,它会施展什么样的魔法来产生紧凑的纸张尺寸?我感兴趣的是提取用于产生紧凑纸张尺寸的片段代码,并将其插入到我的 中。pdfcrop
preview
pdfcrop
preview
WithoutPreview.tex
注意:xelatex
可以提供比 does 更好的输出latex-dvips-ps2pdf
,但是xelatex
运行速度太慢。
另一点需要注意的是:preview
软件包忽略了\pagecolor{<non-white color>}
序言中声明的内容。不过,这不是什么大问题,因为非白色背景可以通过 PSTricks 获得psframe*[linecolor=<non-white>](...,...)(...,...)
。
答案1
preview 不会调用 pdfcrop。以下是插入到您的示例中的 preview 相关代码。您可以清楚地看到,它只是获取 sp 中的 tex 框大小,然后使用相关转换因子 (65781.76) 将其转换为 postscript 页面大小:
\documentclass{article}
\usepackage{pstricks}
\newcommand\All{0.1}
\newcommand\Left{-\All}
\newcommand\Right{\All}
\newcommand\Bottom{-\All}
\newcommand\Top{\All}
\makeatletter
\newbox\prv
\begin{document}
\setbox\prv\vbox{\noindent
\begin{pspicture}(\Left,\Bottom)(\Right,\Top)
\psframe[linewidth=0.01](\Left,\Bottom)(\Right,\Top)
\end{pspicture}
\par\unskip\setbox0\lastbox
\nointerlineskip\hbox{\unhbox0}%
}
\voffset=-\ht\prv
\hoffset=0pt\relax
\shipout\vbox{%
\@begindvi
\special{!userdict begin/preview-bop-level 0 def%
/eop-hook{/preview-bop-level dup load dup 0 gt{1 sub}if store}bind def
/bop-hook{preview-bop-level 0 le{7{currentfile token not{stop}if
65781.76 div DVImag mul}repeat 72 add 72 2 copy gt{exch}if 4 2 roll
neg 2 copy lt{exch}if dup 0 gt{pop 0 exch}
{exch dup 0 lt{pop 0}if}ifelse 720 add exch 720 add 3 1 roll
4{5 -1 roll add 4 1 roll}repeat
<</PageSize[5 -1 roll 6 index sub 5 -1 roll 5 index sub]%
/PageOffset[7 -2 roll [1 1 dtransform exch]%
{0 ge{neg}if exch}forall]>>setpagedevice}if%
/preview-bop-level dup load dup 0 le{/isls false def%
/vsize 792 def/hsize 612 def}if 1 add store}bind def end}
\special{ps::0 0 0 0
\number\ht\prv \space\number\dp\prv \space\number\wd\prv \space}
\box\prv
}
\end{document}