PSTricks 图形太大;正常缩放似乎不起作用

PSTricks 图形太大;正常缩放似乎不起作用

请考虑以下示例:

\documentclass{article}

\usepackage{pstricks}

\begin{document}

\begin{figure}
\def\radius{19.2}
\def\lige{33.3}
\newlength\R \R=\radius\psunit
\newlength\hW \hW=\lige\psunit
\hW=0.5\hW
\centering
 \psset{
   unit=0.2,
   linewidth=1pt
 }
  \begin{pspicture}(-35.5,-18.9)(34.9,18.9)
   \psset{
     linecolor=red
   }
    \psarc( \hW,0){\R}{270}{90}
    \psarc(-\hW,0){\R}{90}{270}
    \psline(-\hW, \R)(\hW, \R)  
    \psline(-\hW,-\R)(\hW,-\R)
   \psset{
     linecolor=black,
     linestyle=dotted
   }
    \psline(-\hW,-\R)(-\hW,\R)
    \psline( \hW,-\R)( \hW,\R)
    \psline(\dimexpr-\hW-\R,0)(\dimexpr\hW+\R,0)
    \rput*(0,0){\lige\,cm}
    \rput*(\dimexpr-\hW-0.5\R,0){\radius\,cm}
    \rput*(\dimexpr \hW+0.5\R,0){\radius\,cm}
    \rput(-\hW,0){\textbf{+}}
    \rput( \hW,0){\textbf{+}}
  \end{pspicture}
\end{figure}

\end{document}

这个数字太大了,改变unit选项显然没有效果。

我该如何解决?

PS:该图的比例曾经正确,因此我显然引入了一些“可疑”的东西,但我不知道那是什么。

答案1

我注意到你的代码包含一个逻辑错误。画布大小必须是

(-\dimexpr\hW+\R,-\radius)(\dimexpr\hW+\R,\radius)

所以现在我的答案有额外的价值。为什么不接受它?:-)

\documentclass{article}

\usepackage{pstricks}

\begin{document}

\begin{figure}

\centering
 \psset{
   unit=0.2,
   linewidth=1pt
 }
\def\radius{19.2}
\def\lige{33.3}
\newlength\R \R=\radius\psunit
\newlength\hW \hW=\lige\psunit
\hW=0.5\hW
  \begin{pspicture}(-\dimexpr\hW+\R,-\radius)(\dimexpr\hW+\R,\radius)
   \psset{
     linecolor=red
   }
    \psarc( \hW,0){\R}{270}{90}
    \psarc(-\hW,0){\R}{90}{270}
    \psline(-\hW, \R)(\hW, \R)  
    \psline(-\hW,-\R)(\hW,-\R)
   \psset{
     linecolor=black,
     linestyle=dotted
   }
    \psline(-\hW,-\R)(-\hW,\R)
    \psline( \hW,-\R)( \hW,\R)
    \psline(\dimexpr-\hW-\R,0)(\dimexpr\hW+\R,0)
    \rput*(0,0){\lige\,cm}
    \rput*(\dimexpr-\hW-0.5\R,0){\radius\,cm}
    \rput*(\dimexpr \hW+0.5\R,0){\radius\,cm}
    \rput(-\hW,0){\textbf{+}}
    \rput( \hW,0){\textbf{+}}
  \end{pspicture}
\end{figure}

\end{document}

答案2

另一种方法是在 Postscript 端进行计算。必须使用 启用此功能\SpecialCoor,并允许访问!符号。

然后像 一样进行简单的加法\pnode(! 1 2 add 1){A},这相当于\plot(3, 1){A}

因此你的例子也可以写成:

\documentclass[pstricks, border=3pt]{standalone}

\begin{document}
\def\radius{19.2}
\def\R{\radius\space}
\def\lige{33.3}
\def\hW{16.65 }

\SpecialCoor

 \psset{%
   unit=0.2,
   linewidth=1pt
 }%
  \begin{pspicture}(-35.5,-18.9)(34.9,18.9)
   \psset{linecolor=red}
    \psarc(\hW,0){\R}{270}{90}
    \psarc(-\hW,0){\R}{90}{270}
    \psline(-\hW, \R)(\hW, \R)  
    \psline(-\hW,-\R)(\hW,-\R)
   \psset{
     linecolor=black,
     linestyle=dotted
   }
    \psline(-\hW,-\R)(-\hW,\R)
    \psline( \hW,-\R)( \hW,\R)
    \psline(! -\hW \R sub 0)(!\hW \R add 0)
    \rput*(0, 0){\lige\,cm}
    \rput*(! -\hW -0.5 \R mul add 0){\R\,cm}
    \rput*(! \hW 0.5 \R mul add 0){\R\,cm}
    \rput(-\hW,0){\textbf{+}}
    \rput( \hW,0){\textbf{+}}
  \end{pspicture}

\end{document}

请注意,我定义\R\radius\space,并明确在中的数字后留一个空格\hW,因此并不总是必须写例如(!\hW\space \radius\space add 0)才能获得所需的空格,但根据上述定义,它写为(!\hw \R add)

相关内容