我想根据 PSTricks 设置来设置纸张大小。PSTricks 设置可以是无维度的值和/或有维度的值。
说实话我因为懒,没有看过 TeXBook,只是看了别人的例子,但不知道其中的原理,简单来说,我有两个问题:
- 为什么以下计算不起作用?我应该如何对有维度和无维度的值进行算术运算。
- 减少复杂长度和无量纲值计算的舍入误差的最佳做法是什么?
\documentclass{minimal}
\usepackage{pstricks}
\psset
{
xunit=2cm,
yunit=1cm
}
\newcommand\Left{-4}
\newcommand\Right{4}
\newcommand\Bottom{-4}
\newcommand\Top{4}
\newcommand\Padding{0}
\topmargin=-72.27pt
\oddsidemargin=-72.27pt
\parindent=0pt
\paperwidth=\dimexpr\Right\psxunit-\Left\psxunit+2\Padding\psxunit\relax
\paperheight=\dimexpr\Top\psyunit-\Bottom\psyunit+2\Padding\psyunit\relax
\special{papersize=\the\paperwidth,\the\paperheight}
\begin{document}
\begin{pspicture}(\Left,\Bottom)(\Right,\Top)
\psframe(\Left,\Bottom)(\Right,\Top)
\end{pspicture}
\end{document}
答案1
您实际上是在计算\psxunit
4-(-4)+20 = 28。
\paperwidth=\dimexpr\psxunit*\numexpr(\Right-\Left+2*\Padding)\relax
该2\Padding
位扩展为“20”。
答案2
因为 egreg 的建议\numexpr
不能用于非整数值,所以我必须使用自己的方法,如下所示。它可以工作,但似乎太复杂了,需要进一步简化。
\documentclass{minimal}
\usepackage{pstricks}
\psset
{
xunit=1cm,
yunit=1cm
}
\newcommand\Left{-1}
\newcommand\Right{1}
\newcommand\Bottom{-1}
\newcommand\Top{1}
\newcommand\Padding{0.35}
\topmargin=\dimexpr\Padding\psyunit-72.27pt\relax
\oddsidemargin=\dimexpr\Padding\psxunit-72.27pt\relax
\parindent=0pt
\paperwidth=\dimexpr\Right\psxunit-\Left\psxunit+2\dimexpr\Padding\psxunit\relax\relax
\paperheight=\dimexpr\Top\psyunit-\Bottom\psyunit+2\dimexpr\Padding\psyunit\relax\relax
\special{papersize=\the\paperwidth,\the\paperheight}
\begin{document}
\begin{pspicture}[showgrid](\Left,\Bottom)(\Right,\Top)
\psframe(\Left,\Bottom)(\Right,\Top)
\end{pspicture}
\end{document}