Consider the following example.
Code
% pdflatex -shell-escape test.tex
\documentclass{article}
\usepackage{auto-pst-pdf,pstricks-add}
\usepackage[locale=DE]{siunitx}
\ExplSyntaxOn
\cs_new_eq:NN \calc \fp_eval:n
\ExplSyntaxOff
\def\Label#1{\ncput*{\small\SI{#1}{\cm}}}
\begin{document}
\def\bredde{18 }
\def\laengde{\calc{1.5*\bredde} }
\def\radius{3.0 }
\def\afstand{6.5 }
\def\afstandB{\calc{\afstand/2}}
\centering
\psset{unit=0.44cm}
\begin{pspicture}(\laengde,\bredde)
\psframe(0,0)(\laengde,\bredde)
\pnodes{P}
(!\laengde 2 div \afstand sub \bredde \radius add 2 div)%
(!\laengde \afstand sub 2 div \bredde \radius sub 2 div)%
(!\laengde 2 div \bredde \radius add 2 div)%
(!\laengde \afstand add 2 div \bredde \radius sub 2 div)%
(!\laengde 2 div \afstand add \bredde \radius add 2 div)
\multido{\iA=0+1,\iB=-2+1}{5}{%
\psdot(P\iA)
\pscircle(P\iA){\radius}
\psline[linestyle=dotted]%
(!\laengde \iB\space \afstand mul add 2 div \bredde 2 div 5 3 div \radius mul sub)%
(!\laengde \iB\space \afstand mul add 2 div \bredde 2 div 5 3 div \radius mul add)
}
\multido{\iD=-1+1}{2}{%
\psline[linestyle=dotted]%
(!\laengde 2 div 10 3 div \radius mul sub
\bredde \radius add 2 div \iD\space \radius mul add)%
(!\laengde 2 div 10 3 div \radius mul add
\bredde \radius add 2 div \iD\space \radius mul add)
}
\psset{arrows=|*-|*,nrot=:U}
\pcline[offset=-6pt]%
(!\laengde 2 div \afstand sub \bredde 2 div 5 3 div \radius mul sub)%
(!\laengde 2 div \bredde 2 div 5 3 div \radius mul sub)
\Label{\afstand}
\pcline[offset=6pt]%
(!\laengde 2 div \afstand sub \bredde 2 div 5 3 div \radius mul add)%
(!\laengde \afstand sub 2 div \bredde 2 div 5 3 div \radius mul add)
\Label{\afstandB}
\pcline[offset=6pt]%
(!\laengde 2 div 10 3 div \radius mul sub \bredde \radius sub 2 div)%
(!\laengde 2 div 10 3 div \radius mul sub \bredde \radius add 2 div)
\Label{\radius}
\psset{linestyle=none,arrows=none}
\pcline[offset=-9pt](0,0)(0,\bredde)
\Label{\bredde}
\pcline[offset=9pt](0,0)(\laengde,0)
\Label{\laengde}
\end{pspicture}
\end{document}
Output
Question
I have the desired output but the code is not very elegant. I have improved the code somewhat, already, but it can be even better, I think.
18cm
. Have I typed15cm
somewhere?