PSTricks 常量的定义(再次)和代码的改进

PSTricks 常量的定义(再次)和代码的改进

请考虑以下示例。(这是最后一个或倒数第二个。)

代码

% pdflatex -shell-escape test.tex

\documentclass{article}

\usepackage{auto-pst-pdf,pstricks-add}
\usepackage[locale=DE]{siunitx}

\begin{document}

\begin{figure}
\def\radius{19.2}
\def\lige{33.3}
%\edef\bredde{\dimexpr2*\radius\relax\space}
\pstFPmul\bredde{2}{\radius}
%\edef\laengde{\dimexpr\bredde+\lige\relax\space}
\pstFPadd\laengde{\bredde}{\lige}
 \centering
 \psset{unit=0.168cm}
% \psset{unit=\psunit}
  \begin{pspicture}(\laengde,\bredde)
   \pcline(\radius,0)(!\radius\space \lige\space add 0)
   \psarc(!\radius\space \lige\space add \radius\space){\radius}{270}{90}
   \pcline(!\radius\space \lige\space add 2 \radius\space mul)%
    (!\radius\space 2 \radius\space mul)
   \psarc(\radius,\radius){\radius}{90}{270}
  \psset{linestyle=dotted,arrows=|*-,offset=0pt}
   \pcline(\radius,\radius)(0,\radius)
   \ncput*{\SI{\radius}{\cm}}
   \pcline[arrows=|*-|*](\radius,\radius)(!\radius\space \lige\space add \radius\space)
   \ncput*{\SI{\lige}{\cm}}
   \pcline(!\radius\space \lige\space add \radius\space)%
    (!2 \radius\space mul \lige\space add \radius\space)
   \ncput*{\SI{\radius}{\cm}}
   \pcline(\radius,\radius)(\radius,0)
   \pcline(\radius,\radius)(!\radius\space 2 \radius\space mul)
   \pcline(!\radius\space \lige\space add \radius\space)%
    (!\radius\space \lige\space add 0)
   \pcline(!\radius\space \lige\space add \radius\space)%
    (!\radius\space \lige\space add 2 \radius\space mul)
  \end{pspicture}
\end{figure}

\end{document}

输出

在此处输入图片描述

问题

我得到了想要的输出,但代码不太优雅。此外,我仍然不明白如何使用\psunit(参见这个答案)。

答案1

另一个对称物体。原点是中心:

\documentclass{article}
\usepackage{auto-pst-pdf,pstricks-add}
\usepackage[locale=DE]{siunitx}
\begin{document}

\psset{unit=1.68mm,linewidth=1pt}
\def\Radius{19.2}  \def\lige{33.3}
\newlength\R \R=\Radius\psunit %  relative setting to \psunit
\newlength\hW  \hW=\lige\psunit \hW=0.5\hW

\begin{pspicture}(-\hW,-\R)(\hW,\R)
  \psarc( \hW,0){\R}{270}{90}
  \psarc(-\hW,0){\R}{90}{270}
  \psline[linestyle=dotted](-\hW,-\R)(-\hW,\R)
  \psline[linestyle=dotted]( \hW,-\R)( \hW,\R)
  \psline[linestyle=dotted](\dimexpr-\hW-\R,0)(\dimexpr\hW+\R,0)
  \psline(-\hW, \R)(\hW, \R)  
  \psline(-\hW,-\R)(\hW,-\R)
  \rput*(0,0){\SI{\lige}{\cm}}
  \rput*(\dimexpr-\hW-0.5\R,0){\SI{\Radius}{\cm}}
  \rput*(\dimexpr\hW+0.5\R,0) {\SI{\Radius}{\cm}}
  \rput(-\hW,0){\textbf{+}}\rput(\hW,0){\textbf{+}}
\end{pspicture}

\end{document}

答案2

使用pst-sex包裹同时在 TeX 和 PS 世界中提供常量。

在此处输入图片描述

\documentclass[pstricks,border=1pt]{standalone}
\usepackage{pst-node}
\usepackage{pst-sex}
\usepackage[locale=DE]{siunitx}

\const[1]{Radius}{19.2}
\const[1]{Width}{33.3}
\const{Height}{2*Radius}
\const{Length}{Width+Height}

\psset{unit=0.168cm}

\begin{document}
\begin{pspicture}(\Length,\Height)
    \LoadConstants
    \def\Semi{%
        \pnodes{P}(!Radius Height)(!Radius Width add Height)(!Radius Width add Radius)
        \psline(P0)(P1)
        \psarcn(P2){!Radius}{90}{-90}
        \pcline[linestyle=dotted](P1|0,0)(P1)
        \ncput{\psline(-3pt,0)(3pt,0)\psline(0,-3pt)(0,3pt)}
        \pcline[linestyle=dotted](P2)([nodesep=\Radius]P2)
        \ncput{\rput*{*0}(0,0){\SI{\Radius}{\cm}}}
    }\Semi
    %\rput(!Radius Width add 0){\rput{180}(0,0){\rput(-\Radius,-\Height){\Semi}}}
    %\uput{0}[0]{180}(!Radius Width add 0){\rput(-\Radius,-\Height){\Semi}}
    \rput{180}(!Radius 2 mul Width add Height){\Semi}
    \pcline[linestyle=dotted](!Radius Radius)(!Radius Width add Radius)
    \ncput*{\SI{\Width}{\cm}}
\end{pspicture}
\end{document}

笔记:

下次请使用英文名称来命名常量。

相关内容