请考虑以下示例。(这是最后一个或倒数第二个。)
代码
% 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}
笔记:
下次请使用英文名称来命名常量。