是否可以使用具有更精确边界框的 \newsavebox?

是否可以使用具有更精确边界框的 \newsavebox?

这里有两种情况。第一种情况,我想将纸张尺寸设置为 的大小$\displaystyle E=mc^2$;第二种情况,我想将其设置为 的大小\fbox{$\displaystyle E=mc^2$}

不幸的是,在这两种情况下,我的输出的顶部和底部都被裁剪了。

笔记:下面截图中的灰色框不是我画的,而是 Adob​​e Reader X 的背景颜色。

情况 1:不使用\fbox

\documentclass[cmyk]{minimal}

\usepackage{pstricks}

\newsavebox\IBox
\savebox\IBox{$\displaystyle E=mc^2$}

\newdimen\mywidth
\newdimen\myheight
\mywidth=\wd\IBox
\myheight=\ht\IBox

\paperwidth=\mywidth
\paperheight=\myheight
\voffset=-1in
\hoffset=-1in
\topskip=0bp

\special{papersize=\the\mywidth,\the\myheight}

\parindent=0cm
\pagecolor{cyan}

\begin{document}
\begin{pspicture}(\mywidth,\myheight)
\psframe[linecolor=red](\mywidth,\myheight)
\rput[lb](0,0){\usebox{\IBox}}
\end{pspicture}
\end{document}

在此处输入图片描述

笔记:顶部和底部被裁剪。

案例 2:使用\fbox

\documentclass[cmyk]{minimal}

\usepackage{pstricks}

\newsavebox\IBox
\savebox\IBox{\fbox{$\displaystyle E=mc^2$}}

\newdimen\mywidth
\newdimen\myheight
\mywidth=\wd\IBox
\myheight=\ht\IBox

\paperwidth=\mywidth
\paperheight=\myheight
\voffset=-1in
\hoffset=-1in
\topskip=0bp

\special{papersize=\the\mywidth,\the\myheight}

\parindent=0cm
\pagecolor{cyan}

\begin{document}
\begin{pspicture}(\mywidth,\myheight)
%\psframe[linecolor=red](\mywidth,\myheight)
\rput(0.5\mywidth,0.5\myheight){\usebox{\IBox}}
\end{pspicture}
\end{document}

在此处输入图片描述

笔记:顶部和底部被裁剪。

问题:

如何提高的准确性\newsavebox?可能吗?

答案1

保存框尺寸尽可能准确。此问题是由于您仅使用高度不是总高度(= 高度 + 深度)框。任何框都有宽度、高度和深度(低于基线的量)。您只将页面大小设置为其高度,因此裁剪掉的量等于深度。因为您将框居中,所以裁剪会影响顶部和底部的垂直和水平方向。

您可以通过添加(这可能需要调整垂直居中,因为它可能是特定于基线的)或简单地确保没有深度来解决这个问题\dp\IBox\myheight例如\raisebox

第二种情况:

对于第二种情况,只需执行以下操作:

\savebox\IBox{\raisebox{\depth}{\fbox{$\displaystyle E=mc^2$}}}

将深度推向高度的更低级别的方法是:

\savebox\IBox{...}
\sbox\IBox{\raise\dp\IBox\box\IBox}

这样做的好处是,您可以使用环境,lrbox而不是\savebox允许逐字或其他不允许宏包裹的特殊材料。

第一种情况:

对于第一种情况,您仍然需要规划规则宽度和间隔(正如\fbox所做的那样),这些应该添加到\mywidth和中\myheight。然后,您应该将框垂直和水平居中。

或者手动添加额外的高度和宽度:

\documentclass[cmyk]{minimal}

\usepackage{pstricks}

\newsavebox\IBox

\newlength\mymargin
\setlength\mymargin{2pt}
\savebox\IBox{%
    \raisebox{\dimexpr\depth+\mymargin\relax}
    [\dimexpr\totalheight+2\mymargin\relax]{\hspace\mymargin$\displaystyle E=mc^2$\hspace\mymargin}}

\newdimen\mywidth
\newdimen\myheight
\mywidth=\wd\IBox
\myheight=\ht\IBox

\paperwidth=\mywidth
\paperheight=\myheight
\voffset=-1in
\hoffset=-1in
\topskip=0bp

\special{papersize=\the\mywidth,\the\myheight}

\parindent=0cm
\pagecolor{cyan}

\begin{document}
\begin{pspicture}(\mywidth,\myheight)
\psframe[linecolor=red](\mywidth,\myheight)
\rput[lb](0,0){\usebox{\IBox}}
\end{pspicture}
\end{document}

结果

相关内容