summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKarl Berry <karl@freefriends.org>2007-07-28 00:27:44 +0000
committerKarl Berry <karl@freefriends.org>2007-07-28 00:27:44 +0000
commitaea330a2bc712291777bdb4bf73fe68b594227ff (patch)
tree0b9da9ec2538ad2c548401d7b329a9d9490b272b
parent45f7ca5889d4629472094f1267ed18522e3ab472 (diff)
new pstricks package pst-optexp
git-svn-id: svn://tug.org/texlive/trunk@4671 c570f23f-e606-0410-a88d-b1316a301751
-rwxr-xr-xBuild/cdbuild/ctan2tds.pl1
-rwxr-xr-xBuild/tools/tpm-ctan-check3
-rw-r--r--Master/texmf-dist/doc/generic/pst-optexp/README14
-rw-r--r--Master/texmf-dist/doc/generic/pst-optexp/doc/parque-nacional.eps286
-rw-r--r--Master/texmf-dist/doc/generic/pst-optexp/doc/pst-optexp-doc.pdfbin0 -> 259301 bytes
-rw-r--r--Master/texmf-dist/doc/generic/pst-optexp/doc/pst-optexp-doc.tex726
-rw-r--r--Master/texmf-dist/tex/generic/pst-optexp/pst-optexp.tex884
-rw-r--r--Master/texmf-dist/tex/latex/pst-optexp/pst-optexp.sty16
-rw-r--r--Master/tlpkg/tlpsrc/collection-pstricks.tlpsrc1
-rw-r--r--Master/tlpkg/tlpsrc/pst-optexp.tlpsrc2
10 files changed, 1932 insertions, 1 deletions
diff --git a/Build/cdbuild/ctan2tds.pl b/Build/cdbuild/ctan2tds.pl
index 6f8cf3ea359..7430e045cde 100755
--- a/Build/cdbuild/ctan2tds.pl
+++ b/Build/cdbuild/ctan2tds.pl
@@ -277,6 +277,7 @@ chdir $startdir || die "chdir($startdir) failed: $!";
'pst-lens', "&MAKEpst",
'pst-light3d', "&MAKEpst",
'pst-math', "&MAKEpst",
+ 'pst-optexp', "&MAKEpst",
'pst-optic', "&MAKEpst",
'pst-osci', "&MAKEpst",
'pst-pdf', "&MAKEpst",
diff --git a/Build/tools/tpm-ctan-check b/Build/tools/tpm-ctan-check
index b388c0944fb..fad160b436b 100755
--- a/Build/tools/tpm-ctan-check
+++ b/Build/tools/tpm-ctan-check
@@ -103,7 +103,8 @@ my @WorkingTPM = qw(
pst-barcode pst-blur pst-dbicons pst-eps pst-eucl pst-fill
pst-fr3d pst-fractal pst-func
pst-geo pst-grad pst-infixplot pst-labo
- pst-lens pst-math pst-optic pst-osci pst-pdf pst-pdgr pst-qtree
+ pst-lens pst-math pst-optexp pst-optic
+ pst-osci pst-pdf pst-pdgr pst-qtree
pst-slpe pst-uml pst-vue3d
pstricks pstricks-add
qcm qstest qtree
diff --git a/Master/texmf-dist/doc/generic/pst-optexp/README b/Master/texmf-dist/doc/generic/pst-optexp/README
new file mode 100644
index 00000000000..742e2d4d270
--- /dev/null
+++ b/Master/texmf-dist/doc/generic/pst-optexp/README
@@ -0,0 +1,14 @@
+The package pst-optexp is a collection of optical components
+that facilitate easy sketching of optical experimental
+setups. Mechanisms for proper alignment of different components are
+provided internally. This way the user does not have to care for proper
+orientation of the elements.
+
+This is version 1.0, the first official release.
+
+This material is subject to the LaTeX Project Public License.
+See http://www.ctan.org/tex-archive/help/Catalogue/licenses.lppl.html
+for the details of that license.
+
+--
+Christoph Bersch 2007/7/18
diff --git a/Master/texmf-dist/doc/generic/pst-optexp/doc/parque-nacional.eps b/Master/texmf-dist/doc/generic/pst-optexp/doc/parque-nacional.eps
new file mode 100644
index 00000000000..9576fcfe18a
--- /dev/null
+++ b/Master/texmf-dist/doc/generic/pst-optexp/doc/parque-nacional.eps
@@ -0,0 +1,286 @@
+%!PS-Adobe-3.0 EPSF-3.0
+%%Creator: jpeg2ps V1.9 by Thomas Merz
+%%Title: parque-nacional.jpg
+%%CreationDate: Thu Jun 16 20:16:59 2005
+%%BoundingBox: 20 20 173 176
+%%DocumentData: Clean7Bit
+%%LanguageLevel: 2
+%%EndComments
+%%BeginProlog
+%%EndProlog
+%%Page: 1 1
+/languagelevel where {pop languagelevel 2 lt}{true} ifelse {
+ (JPEG file 'parque-nacional.jpg' needs PostScript Level 2!\n) dup print flush
+ /Helvetica findfont 20 scalefont setfont 100 100 moveto show showpage stop
+} if
+save
+/RawData currentfile /ASCII85Decode filter def
+/Data RawData << >> /DCTDecode filter def
+20 20 translate
+152.64 155.52 scale
+/DeviceRGB setcolorspace
+{ << /ImageType 1
+ /Width 212
+ /Height 216
+ /ImageMatrix [ 212 0 0 -216 0 216 ]
+ /DataSource Data
+ /BitsPerComponent 8
+ /Decode [0 1 0 1 0 1]
+ >> image
+ Data closefile
+ RawData flushfile
+ showpage
+ restore
+} exec
+s4IA0!"_al8O`[\!<E12!+Z'0s5<qn7<iNY!!#_f!%IsK!!iQ)zs8E!76ZQaHFCe
+u*GA2/4+B3#c+@f!t;#f8M6N@8l"9\i0"U"r2"U,&6#7LkC#6tJE$O[7L&J#Ke&J
+#Hc',DQ(',2?"&J5j'(`FD8+!2R<(Et+K*[D^H+!1I:!(-bj"U,,8#7_"F%NZ;r'
+HS;:*Zc@D*Zc@D*Zc@D*Zc@D*Zc@D*Zc@D*Zc@D*Zc@D*Zc@D*Zc@D*Zc@D*ZcC&
+^]4rP!8%;$!s'SG!YGG8&HVpM!#tt=!!`N*zzz!<NB-"pY59s24n2&-)_4"9\f1"
+9f#8$j-J0!!*-'!!EH;"qi(6#89BI;.4Hq#S]%V'dKEW_)"DU@Zn(e(*k1aEm`h^
+-8e.h@s*BtUU'E$PLKQM!#bk<!WrH(zz!!!!"!WW<+":"nE!%ec_!WiE)!<WH*!s
+J]*z!<Ni8+VHL41-nb@'-^j!6@k7D;K9P#nGh2B$j-M1!YGMH!'^J'SXa]ne?gg?
+kYZ,od_eG!>[LbIS[utmW+pLKbgIj#Umkd]=W=Y>Q6Op+D/T;\oX5dX<,'8Uf9U^
+O$OnX=eS$OM,T@1O+HIQ&?S\r.:\IU<A+p8Hacl\#`Z,ApG!^cid[Qh_r?Jjs,Ip
+oCgdhF33Ir[M!.+*YD_BMAZKm<5Ejr'\5UtV\;s=qIG7W;@o,NWF13.e7:^\j3H"
+f1H8sX:X+70p.icV]1DMlZVPjJ=j-=0"ab!Lh\Yi,[gBG:JE46sAu,3J)H"XR2`V
+.EfkPUn0@q>s4SMeVHdCR!c&5'akOl*BmF\&.Lk1CmHJ,FeTPa3>[E$p6eZ/^:R+
+rCR[N(hH@8Q;7U0AfusH-Zu8kj73i$,9ok+SE7!(5X,1!-#i5UArOp$-=phe>deN
+k3>+k.M^qd:I!-GuX8YZ[pdP2_P>2j"@5fe<!:(W[i?g\p6\c%3<g$&TS!Q-1fDM
+JKDQtS`>,ihmJNYcCo@)!t[[07WV$aMmisJFn;MM""J9MbUf0/Y2Y">lrSpAJT8m
+[gf#$+ke\R6?X<2"+'IuJ,"DAVg\aYt)Q%SlU8"XQ]bU-Kr-&A*1*]qPQqg&D&/F
+-C;C&"+3aDPq)Z==LtqOHleGgJ#2,OE"a%^4a`j7o:b!fN+;kV=rc6SL:jt[=Wp'
+m@Y6(9i$EkWa"gPkIVo"=siOYDO$]BPUBmhi!n^B<rm*HH,e;f:nF.uV(9_]Q;`d
+<[;;[3:8YgUBSB0"o+]Cl_'q[N\:cE-bEa`[f%aoB;">0/%$;/9`@X4j11l,D1DL
+Ia*,W_KL4bBMP*.[&PC$WSn(o4`NB3b0k.<,u/DC>09AIs@H>?nAY-tgo)OpXT>j
+U*#8gS>@PH&3E/@C&:aTsfVT[kG<S1DPll9r<@K^=Yt8-s<NYB3EcDifq8,aaR%p
+-_Oa/[I70dR8]Y3AU6M[O1<2#t[;%f%o*!IP@./+Y:gGR7?/S!WbjW2nX!+>S"i;
+%
+B[Q)9W/[SW;F6jegX"76o]iFH5M43E4Z]2.rK\@cOuB>WM8MOok9_TK[[IUa"27j
+7F?p<`60V6U]i;m7kLO%Oe;kG%D3lW8tf+%V)\#I&qSdhXH\q)HYIQ[T^ds,f*g1
+](A#%2[</@W)!+FMbU99r+8^_h$e8@,YNY8)Pbk[_9M=RUr?YY1d)/IWdOC1ufiH
+"U#NmG(8nT%KDT-FV"YT[T.aZi:g.=@#?7`%@Fi9QAS?8\hW$#[rh,JO$r*Z=>gq
+>;g1sI/M[aUX^ne>)AU@u..naV:A.pJEa1G2O3D(Ou+=Ak6i'5bB8I?!6`SXg@?'
+m:a@N4:[Rg(rWA6]'$OpC[eanaM@VW^TftD8dgc7>I*"O#W%=K.&th_bTaf(07AV
+Eg4'_ZPr7^fd]QW!#tc&Up^rUDN81Fm;5RUO7[LaX(XB6ICl2Ja`L*&[Bho]_U?O
+X]iM/G$<<Q?/d*>'Fj(0b"DnVr,UlX7cC%__o0<p`j:-]8]J$2C((1!EH&8=8S<Z
+F*iEhMg18`R+iGl<8q07^0/PBhaZu`*2>se-@Z_FcJ/\q9,b"pfp7_L4R9iWX-&m
+0TR^=/"H8d`]s%fL]U`.X[2>!d38DFhFu=F;DQ;H-,sX*o)u_bQ;mG2JZY>Dg^4<
+bE,TH#*!GX:D['`MB;uDI'!\W,79?\Hi1_JCC\#0WnF&dDk:V-;J0a)cBq)VosUn
+ar<us[s@L)Qk:M0cQE@bEJ+;sA@RU_d/k,I+7-9<3)\>e(ho`0m\Ddh[lu0<l`;L
+mND_;5"#o+NDH)at+IcOqZ9jilD0gWfKN?[LSL$h;E5)ObNU^3cYFq:D7$jcX!#7
+DMJ.Rq@8idI?'REqG@7l]IV,Q$Edj<b5P[QRUBq](5IO+B2Uu!ngB'ME&0F=_C!<
+#Z(`TFV&[a\MHo"%l*q93R0>=WUk&''khr1':R860m4R_E`$MuNcj8$!C>]#Rjs@
+9gj&g99ZG00dk%!'qHfa[f%$Ai_rUOH)r&Rigqso14S+b]?V/-*ZSicd%!Cm(bIb
+U&%![#U!Jf8q;c@?Ql3neE8W8.(An[U+.r%&>Z)p@AueJ"A<:$81(#"k`:j[M:[e
+VI#LRnGj:G9Edo3G%t3R"E`/+c"t!E";ObR#6ms'"EaYTfQriLK&)J!r_O,-LYd"
+Dc..3Feq?ceJV=8S)D%4=6^%?s!Js"c-<`XNHa_A1%R?r#,>>ChC$6@&*$t0!Di>
+eU*bHG?o$"@02AgDG08cTYX5WpsS-Z-lSNRa;YRiS3!8n4'6\f5!dIZWuqVM9bo*
+fh#KR19G=9pFAbb-X2NTDICYL>5tL/?s2C1aH:M\8bu4MFK%_<24re*s(&*V)AVe
+h'^<GoX%L;<:b"!F)'ec3L52YiiT2b$0g^1)0p2kPqu0!8)g%?B/;oAI$[m%Q'Dt
+JkGWOm4njL1g?)D'.[tT]-rESUkG39Jlo'D0nVB2"N"omY>S<60GE.XE2H>K0F;O
+cOn-C:H5lm\PW?;fYIn3JucXcOION.fLdSjp2R)>iHBF@%>N*1>P+F%i2iRSkOEC
+Z8las)5QQ6fBt7,>t=#6b/K:uNmV3_)'-!<Q4C^f%RnPsblfn3k&=&kkR;?B@ZJ"
+GfW4@LtWe$;$8%K*EJ/ku;arNX.Ae$A\eo0VDp9BJ?A5#B4(f[>lD6_LeKnl$0CA
+H-^Vpk)4h`[O8o(<;<S;iCBCWVU5+gaT>`bcOqUoT1_e!`$@17g-%+`lYfnM<g>X
+?d5;0jK?MI[QgG#CfCO^-KD7lq].l)r,qp2[%s%ZO>C]#Si*rf@gZSubC2);L5T*
+,o#ds:q8->jBf8b>E.no9u>Eiiq_oZbn</%T"?Krn):W`eub:lL=9fdrj8I?nIUu
+1cp5*.!EN?P'Q[I(3MBI8aNUi#"b'%BO(YShA#h[<s9?oJn9O^fe;dHrP-rr>kLf
+`(s2AUe`VRj'"p#PAT;rrBp4Ir^pGN?!D3A]q<b)u[I"O''U\#97\G#8'o`<DTID
+RZMeg\tLI9TW!!.<K]jXY8V[ElYe2nG]Q3FehP2Y"_*<`WT:u($2:uBh9(o'F;]Y
+6^!FtUMb.,>9(,616ES\@"X/c:(3unD(Vq]7h8S_s7>M'XF=AEoX>:]NP3+0>$mp
+,'=CtN-/lsNR%$D5>HW]QV]u@gq[>a:$o'BeF/9(anduITn-<d5kc=0\fFgQ3$S*
+W4M*_6m2@`nXIS&a;M`+B]'ULD<HXX^%H[H'=#@DfRk$VFF&I)Q[Wl//]bg.@m19
+$53W;GDkV`"\Lp_:,Q\R7pnAh0EVRBf.50amR?@p[IZ,0.ug:U#t-'La4P[8[qk`
+Je)i>a.7Hl_L*MbQ]5SBNDDE.VID!B,X!Y4Q^5u)apK[tHX+Ie\Jeci29!!\S%lo
+6P(J:kW"=<3Zm;91h>D^6QZ*#&<L-*"^_PPQ:/9b>d4WY[NR[=$RJD:mA2_/p&3<
+0CBUiF9VlGl20SrtKeb*M!e!XHXU8!a6X7JrJ'm4Uj%t#3aPGb(ar\eNm`mlhU;W
+8,#h4UuQ4N&-*lQ1A=p1.l854Ldph+_:?igj[S1IuKXbZ#@QqUYlB&NRaf<JrP[1
+hVQU7srPfOd:o+\QF&[,m?e=,lAkbUmiXdiWJ37!EA-n8D7lN^9@WsZ],X)Pals8
+MM/Xtb;-8%4jn>Yh,%t,WQ"q`ODLQkQaecK?[.`*=6qBjUSq-F220,1_hs_j`=j?
+_prV#t=Jf&t7S8,8#O:0i[Si9^Dtf.D\fnTRLiLrm(#`>6$`b.HX!r'l/M4CFLE6
+gu?co&'r1N<ZONSZUrE(+5=%:UR0>F#*0%&j[-9\9'gMho/-Bo-[@8/pi=uVj^<4
+3`LOJFI""\DbZ2Uk&OY*6*0=6r'XKa#A!p=/E@#2IFQX[U4r&:,EEcPWa'>?i+&!
+U4j"9(e!FIZJ`k'+O_Ar1WYlOqpZPk*a!+48jk]d0XX06$42qU3^Z%EtG*rMC[a%
+N5\(%l[Rs/.f+b\lM>SN6>fPl8fk2[/eOR<5#<IXe"Sn=T$=p[iTgdW80mML@>\$
+I8.+&k8s0J6/84!9p5T>P>SBD!5tmRdp6--M`'+C8_))-drrAeT^N>j2Nr4?jE6G
+JHI!NDJ4tBQVXi(omlAHrgPuUfo:'mTN@D^i^':I?a?qId+!5HqhfZ%470#nfRXN
+=#B^/NkBo\"3_+)G,O6&?n.88#c/.u<]emNfiC6@GV4Ws#s0D65;sYgQ."3I<\-,
+ZkZZ6:LaiA(g^D9>m>I`+HVC.$lZ"8o<7S\'^`Q.7sZ!9!<?=.p*hSrF5`m%p9T1
+%
+H9sLl:[<RroDpCM"=/(XlGMEqF(aRm)amX-rLQ+-gT%,gm)SPLh5]VBm?9cKS?^,
+:of.gHN=c-NR-F:e%1BNhuukr@g'DulHU&E_XhYBk(-OTP1d/l^MuN^IBJ39c6de
+,/&KR`nIA$7M)/"@UJkoE^.ZRdQDHI+hVd9FF[%)d]G#uE\4afpDBG"3RspWZl)q
+DJP<!\%Q5!AaS;Bea,sZ1J1_"7F;M*A6qb1Kk-W#R;WF=I=eCq]9(7+c5&4+Zp(.
+Y?V(8@VgRqXCM7Jf*O=fk[Y<t]8RJk`mGqdNF-n<VcY"\Cau7D]'M>bp*.SC;.ug
+@AI=AVjYM>aJ'o&i(.#!*c%j_Q]M$iJ/57K#(B1<to88U8;Vkb"[NC?sfY:rJn@<
+`b/;)\=\@tNjPb6RSrAb<MXAags)*srrB=AXgLFL_X6p/F<6VD)YZo$hD7rA/3\s
+;$`@X,+hE@B8Y;2o%b"r;+aHjNA"1^LN@?/(86]sXBMq0[[%,69:8'rI*rb17*])
+$L.Di/Y[na+tY#Vj`<BB@*U^mD)MZ,l4OYJN2,0Z=gfpd!(Y\Ulb_0FnHH&8/VSo
+B.1PfhLjqi-Z$DQX\Q`=sfd-KE:F@J+q,HeAHlM5JeeQBGj!TGq/`@$.X9="iYRe
+dJE#Xb,bZA18uAPhC9*LZ^+nQ$eSM?IJi46#ZZ=ca<9oCC8FhBi%=I29$sYU8qET
+;N6`cgIV!gm3$i&DZeThVS[&WM$E6FXq[Za_oslXm^\0-Bo+W+_0XNuO"&'h*[dD
+@IEOi7JE-+j^U'`,=<P,\[83C*M:Xgt,j7JLli%K<<Oi%q!e8`idMd4kOU?&>YYo
+TJh9_(Z,U@snhCYOKk*>;p+RM?fHC^$BfFnnb\sq03HR_9\Y*W)6LthDF#%iLA.C
+;V."S7dMnr1A#UR2'?3Cu-Wh-u-fUpuI,:$iT#,ko>kRSoom')&bIFPCuk7-np*E
+p'Mo@eS6O5;_(aBV=\U()GZ=nI:Kd;RgI]j1&eg?bXSY,037-(/IGd-UpUr8aeUN
+<n=&u=&ucY;;i1PDK?e;_JOX`'tk5Z<Flee0jiFYNh<3K!)R3k)l:CVOSiKV23FA
+*In10;CJbl%a[jeIW/%\)MkoJ<P7VT17eR0L7crl05*7!<g<,!6?ZEKK[S]LTPJ&
+$u^k;R)_uB`+\R4-h-4E9"EL-gT7s-RkpIU3_(W4[!q[$T@lP8,C(6YKQgAWCaR[
+R4+F>,&2ECh`-Z@[`D!0B['hW4N>/.+,X@r\42&77guAP7m4.BIYfVGj@l/!H3]W
+$6N<6NP"ZPRnCD7T!_;HpR!4ntMrq*iAFXp2:-Z&u_aK@gUIjWb!X51u,I/ArT`(
+UEoa4Z3#sH6Ae&e,2G9cCqME"*,][62J!Os>mSndBKDmOF.8[21>&M1OaGs`,5$@
+Mmb>SkZ#QR0CgJN_EMj&PN%e29[.X"U<;.%h8p`a%+nTL_S#0RPgA+=e6g!Y$@k7
+[qGhS+U3LRlI1\.C'.jM#XP\k([,>]/>H]-O9$sK5*-X]Gag(;U\f>Dj&fB@*$]0
+,HY:Pue"P#XNq$#EOnjjk?5RW/ZSKW'Ec'dVpW\>;J_#2)bE6ZrtO39*u'DJb--3
+(@':9YW+c>:L_Z6Y\PXgp&9AJ802U+%SB?:F1&M[bHeQP(bgP\lLkD4/3[pn:)-\
+C;]`4&QarRS9$bbIG5o7gBAuS.ilIA/Su6N)k0FMMJ%pHCMVk[-RfboRM5<0V8pu
+db*aP2RfF?Tacq&rBR4A0<ZT0pNXS%O'oaY`PmT$ZX`US-TERc\&jQIc,s[Vb:10
+leNCBUg__P5;H7Z?PPN$na;ACtQD'cQ$5F@,%5a:-Zl_I(d:R@Q;<4(_u1CPqsC$
+*:ZUZ.K2Ko=J*fdir,cSBK)M'n.#/RV6[8Y:.ZMl89gq@]'PU_Jce;$fipALU%HD
+51"gDB;3D!NS&!=\Zt7>&>`aRPDu.Ms^=%`fWfd;CMoU.9*8RG[JH:AWYJ]4J6"B
+e>^l].0o,/o'OZD9H^e8/rQQ?4+]Pfe>2/p<0shH3d988E79^>#$V4,C"5mHR9G9
+G4c*m-QRMk6@7WXL!C6l:DMC"g-XEG*=XPRF'c&1YR<+PON.kCBb*?Ns!8bjigLC
+fD*#[_*_7Q((;**V"Soq;fq,AQYK(+dB_:7YIfQ'8UEj%Z=(>4,VI^#Xt-L4Mj+X
+5OHOM#^-&h[t*<OR4G3:)C?F=_.!&0fCK%:L1V'TOlkEc?]I([VT!f^0Q[*bGe)?
+oA</Q2&=cfAqJY4R"g#(Ga_?FGLYGTPJ*h`5M$=MC"cV(5N];#/^-#UiH?!m3BC1
+X7:#cTXC_sC-"V1TWH/P:a7gF+b[]ND(W'?7Vc:E80jf+m_<:UQ[.2Q-.`p?D0s3
+/3p%a*!$hC"m$Y29l_)M])@e6UCH^L)rrB#t+8BBUmZS:%`'+DRq%#b<hrqUdPL/
+l!]M'jg\1,2W$Up3MQ$\<6&9igVqEc<Y"uh/G5jJar`$8\482Q7AOtY5t&oXR2#V
+CXNg(TSl<_0SY916fV0"u4m6tATWO@WGMZuo#,F9Xe&2@uN=L.I;o_>r4l(5.(/<
+eCrs((a3O6.ueQrF++i^`X*E!GD^OPs>T1"COM/!$I5Ug(n0M5$ab;<,8;L+70L0
+k+u5d;6?S:5+k^"@[2XXQI,&n^<m?)Otq^GpY$mt!j]upBr\A9Ld7cu.3$9NS[kP
+2GRC]Yh.]2U@T3k8D4jBF.3cQZFFbE::AkpYJPo+(CMHV>9gh-PM^J0Jcu%c,^)8
+@+"KN^tUL]><Ihmg&j<[Ca!2)fZ95D#k)D>dBZe]jArrC-14A!*[/lq,lmZSL>#;
+Mt;]P,;e-D7c@6DIkY>qp-0/JBOT7;RR!b^u)_NJROHfe>RL#G>1'qC5S.b!]^ef
+Knk0:#^P[3G)U09?-GNBbLfW;f_u:L`*c-K]VDN@WmYPrrCLrT;`d`dToFY$;qSF
+P_B9U/i5dPU@8f+;T,(SUfFH/C7D.]WJ!J+P*D4G9K8:#O9`W82X(j%-,qLrHmp:
+BY\JFk9YF2-`?gA:J]pQD9AGTtMT<%VeaV:%:?VGDDL%4f=hmQ,:g^"IglqOqn[F
+>"E;A9E[Sk9&St@?T.m[&,7e1UUl7B-?";@Ye1r':e<QB@:pr4,1YgZiPj(3EF]S
+*FgKnYdEhJmY3H=G'7?@dR94<m2N'kPTV_H];c0N;Z;A)*qJc.!_E7AH?jKS:N86
+Vb"MZ#-r&+iG@=5erV+e8)6@1RAaFb^cTu,1jsD!!1T4#E3<*BA,QV<,)`*WD_pD
+XY!RIaBDq9*U=%!!TK3>m=K#Wge$L[+ia2pP;u41:+DT#Q#j=TMcM<LV!*"0(V%'
+&k_j3NRgi4L/N$MmjYgFk?JV.9ZC=#@<p1d@&7OYL?POLrns8Y&=N-YVMa`f2:=K
+?Ee#kO_[)3?PjLSV5ClEn-'K$*Gf6]p]<JIBuP49HW0.?8rn0F]3NNlQOFgC+dQI
+Lgo+S<BP'BK`ac\Q@Se>\s&_Fs"BCC)UT0GID2-%R44,\ih%>)d?]#-&5D]"Mk2>
+`4R70Z%iF"]OTh71rX<.a"V0T4nc;[>IS[Ih&_AKa"8$$47!U&8j':beLKu&eqNn
+S#TLqS5O]48Tb:>7rji*,;4YT*I!M`(R_D`I!\)p]):!RV+W;-U<F06;e&^Y"+(*
+>a!`i;Bjbg%,q/cn8ouZ,3b[9O@D:ReTbr9dSi!BS*(PWnUaKcD9.mh43A/LT5aZ
+@>Toh]RAfST=3o<SE[)l#s4!_c*X3#XDL=5B_-Y8u<i/]Q[1mLrV4)H#2]Ek:m9L
+2[Bia)u0[-=AC`DL\lSk3WG,n2`&,33#g+[Y0@i1>_I83K!>I]un2/d()8(p=lfM
+A$FS-0XZ/1@HN"Wab((E1W@&5d;8^#eXr&%AHENg*173'mN=CMV\ES<6T&OS=cU`
+2UbQfC6Wer;O!?OTaE)+<,S0W2EF9epXU(ZD%)#W5On:1pkblape`"+2?`eFS9WQ
+IG8@9(-8!-kM3F\]`4NIKD.7[EAcUs.gU))M-*\@\VGNh67o0Zfkn2$(!_u`@)dH
+NMH,a3YmiemnlNBVBLaL4k`5%"B9j%!lm9e-AEnT!;[aN<Q:bS9lT3F\FEr3p+"J
+I2?E%X9L>[O9sV'T.G+Z;C9X?2YD;oq<.!(M`:rr=.s)GOnb8%c&Job.i$J*<k=g
+nH6&,<:".`AqA$P?qhV^J1K,fb[C(p@s&jPQpc:6`3_Z9LRfD.93-_#9DCY"LsVs
+bt>YsOj(s1[a^T)()_6=g7.C4/tk^S?]ll5O_9D2?^AZF.W5^Sf2F,!(F9]X]:nd
+R!F":R\5'p3Ia9UC>*4c2G_Xt=`\f#I6i`II[rZu"f(!tD()3(RpaW7uAhkajfdU
+XPSAD[(Xfp,;+"P>UKdEeP9A,o?9jKBF04(e]*KlbTH%dEsn)\5HE!YeV6n`D:c,
+#;q8M[bi?_S&3EFO,%iXA\@>enm)N2@eu)9/Z_/g2ZT"JrQGg*p'!USq5fmYh)FZ
+F1mBXNb6u,j!gJPVn"jAYkJ]8XTqPBr7DlOf`$V',YKld\meUm8N+NQO:.,PbuDi
+`CAq`R&NqcpE+'b7bV`DP+YB@'@<'$Fg%G3_/aS)P+Zf/XdhPA)G56%6$g>W0WCD
+/=&gZm3N;PVLSSXP8#0Vnc^9lf5`r!af!dc[Ptm$0QtBSeY`F$>\6!bbFZG\]D=W
+o.dmbj\0+c=cq0JRDh+?P4E[B8[/Kl>":1_.*YSX^iKs.R:(Ucaa,,&5S;qa!Z,b
+d;@=p3)9-b79f%$CEJ_d4(eoZn8^K8Nu,.V<r?H"'S1d_]hY*X%-Hccj:e*YD<12
+\<#8Q+&<D3b5hDpj$_T\t@`^L0P"S7(t/1-6%2o9sog).LA_,MOJeO8KIg2Op%B<
+VnOGMTD&9bdP#*4"+(L;,iYjRQfDumW[sqPQX6.iC::-3<2SN'f0="-Z?=SMj\Lh
+Jm2I7;"XVl7&X.K8\rh*&LI#aRrrDWuGd>'i2>G;-W%EnHFEq+oa,f<K5c&L7_,E
+:u!@VsNdb,k`%&t>d!\JI(I@KN.CVfUE8uP'kQssoSkEC7UcmP-Qgmo43i7N`lDs
+)Ss(trH7RXHeX<"[J:SnFt=p-`bAr6+eiV:JHFFNe/E,USOe,Y]D3g9'4-/L/#tZ
+O8:$^*nn7a]HW"*n(bC-Sd,q@8:ViQX"bG4]&3U7,Jl%3Pp/+WDqSTK^4HgGr28K
+bKIC!4lmnDXno:)_r?OP3,ok3EjX#H#ptpUL<V69T@uhnV\Lq8*LPl@#*4RTNQKR
+%
+q=i!oVUVEEDabfiOABNSc0]?f"RQsn?:O5E0E1tO+EC(!IM?50nGA2eqAe84;mfj
+]QQH66JN'2Vd[pLWEo$pgpH::".4L+o4r,&@MXj:`rR$C1r*>%ipp\.up)U;7C+F
+1EaXOU$nl2tBgoVeVDfgmuiOSjG<T7Q0]("Sib\,"#UeMPqf&\:j>JT8P\@HeV8@
+?Fa8G6&L;`lHqlb7)4pY8X7.C3R_gPoU))?0]Ce@Cn'jT,VXd.=#=MjSKolqiZA`
+HQ?drNaN/+U^GeGo6-+'qGiol&ZCphe[UIo4D$N%!cWE9$`CX<VkIhpj-C\H73pE
+dd6*mY0[7$hBH36b.,-9Yn8EbEmp$_!%^WTh@UeDEcW6[,C%9"?0,\5NnVL5Bh;2
+lALgIT\Ub+kguT=gda01ir_.j4@B"B]EL0$c3k1=*5U,5G^^9>ih]8M]EP`_<>ao
+K/kQc+4dMq.j]#Ghl9WFdUS<]oW(K3;K;@6A<faC.56Bi0\TUaT[pBYb3XWh4P=\
+gm8TQPXX]S;Rg>/G_'>s4m&dpA0fgIk=38lArdmbru:%PYJRM)9K6rr?I>A4f*+>
+KSF#*h.%gL"Ku!b#B$JAWrHsc(m7He<m_$l,U.U%`>eBjW+I8Ka=u;!"dB&WM[%<
+?K0#RAm=("ej7M2k0;)akiUIPnF?fdC.qNZ`(h!)9Q<m'7\Z<].I_kAbt0mZ/_#c
+CTVSP6h$pQ)050[hSekgO$S^Yt*N>Cg>\LFBWM`(Lb9SL3"GEToP_*_@RgYUrqNr
+qI"3-`X?-ua4p(UgKDRLUb-@OUU?2C#@(bGlW!db^,X4o9$oFXRPh[a]fnUjsD!/
+Hb#MW.i5F%cb6-=?j^6!n#_OHc!59-kj,L:[]k?GHg^*RJT+8h$,@P?uU<Xe2<EV
+9%Wh(\M^lTV8-!cI\HCYA_bibQAcE%.HD="6'7[ULZuhR!!euWO8VHQu^rDd3**9
+F)Ie:8[d_$crj;GYd=b%WCc<9MN:5>_]\<l'Y'3&;,Wlggmk]C\KgBD>#&;sSU="
+hhU%X0=GMVg""]`7oe;8^R[a*![]WVsXn$)3]&i@>&M:GV.7e:^;U*]VYu1&[Jm&
+e[;RD-'JeSL#,K:'b99U6o<+5\*YDHR*is^9=8pRVj?^uV3#ReeuA0j2'>*K8Z&?
+Zdfb(GT@J].?GOI>sIEbW[Q=#n:DD62Oo,mkZV@^4jrg`l>O_b;iZ#]g0l$0l@Jf
+D4hY<b.J\AdYeAR>tOf)g&<lJ;])]%80>O0.trsBqtkTZjR#4$NN;>Zm3$r+.'b=
+,)=;'Si:V@$t3re22X)X[+qJTMp/\q.VWdnK&T^J(NXPl-!.iK)CHD</5>U`Vcf9
+^1@rplmPKDjk8ONi=Gq&UU]1<B0SNtl1*q"i:9`I(n=d^_O[hdEXEH[A@lM@d1Dd
+gmo.,D*`4YJD>W".@bKPKj1=LoO.bk=-e@#hRXo"gMTc(h$;5EFmDA"WL\6"A%$*
+b1Y6D/g!ZBDDuR'ao(UbNCe/f(@i,5)UXH<sa=1tXQM@"b<U!;C[B5U07dp*dlsV
+N3qrMK&Bc:!69%>@g_#Ybe6A<*,@0D08r_SYEM?-0ddTmo3P,$Hjj^rDOb<`et5C
+Z\JJ[l[D^r9#@m_SNj,ab'8oom;d2Yf.NW,%!:M$Z#]P;-^:6KF[oXakmSVXY<gh
+_$&-VPQ^gs1pl47D[]ftl%COu@N+1o(fs-I`Kd@KQPn,SN&.<gI,5jSjBG"Mj"f9
+canj4&ObA#+p'W$*qef/]lDrP9"Q;_I`Bali_&=g;$!0dk0CN]+h_blt"2WA=T8c
+f>e6J3&E#5X889uXSs&oNHRi5oB4<(K/J;r\Ti8,T-3p2QTh0OqIT;ADrqE1sKfO
+ggQ[:RKF5*eH7;S&^mU=c(ED`,*Z/iEW/!jNOGL^!]Z/Gbj!f>]l*#8BikJ.br7S
+aF/hBRC<`F'Ka6IGgj1M_jVQU4:ks7SO=lE*D:$,%Km>qlO3t;(9i3pD%&\&m0*h
+96m)U<0!K:c&VQNKKU>mG#sUBN!J7s,5XqtY#H(3[-38o["Eu6-$GbNfE*m]]&r>
+=4XH]X/lBCp3PNn/3e0Z.XfXR^MR.U+bB,d&P;_C&l9;$fRD/C=qRrF$?]\<K`aM
+mYu),<oJ,-(Nk8m8P/B$_U'g`]E'NC-RPVN=H!-sc0F^7B-$#*n?u`o--.7OCo02
+Ic<WkhN5=:LU&u,>Ci;:j'\V/Dq;j"/VYW>:eFh;K]CQVNTpOTlkCt(DkTcHhEEC
+<#!f4D^sJ2V+8%WDEkib1NTm#1Wr*rhG]CK\<Y^FW"Pb&PGkt0VqKnFgdnEOPWn^
++O?T`Y#[$Z^[bl`QNQYrIaQmEn1TL2X>!1:W"VnON)*EWG^7rPi/&!V1@i8A3V^3
+ssr3H`2CB>9(k(SCNaNEb4[hRNs;A<=nEA&O[;K$?J_d7u-Z?s!*j]U/=;HdIoe=
+oprS-X'Q+,@%q1fU.8&`nr<)jNXKFkLKY;s+lbR=4HKd.9n=f1h+2A<8]-m-AR,\
+Pp#hV-$OP3LemE;KH]b4EOn*]Z655B117m;\$mjAo0h-\MVKT_$9U*Xd_rs\CN4T
+il.auM3=*7=2m"GX7Wgo\Jf_5:\$7oCFVsn\a"Kj)),%,JgMS3OBo7-&o/`SJ>!_
+sG!3[,"b]KWH;^&)_Prcn?a?^Lnqq%)P,Wn189INBOpE;ZmRQf[/Q4<j3M1DZDL$
+Z)dTfRZ<nIN7jEKo!r5?4'?]LaPp1"UiqdIKL6\mec8\"T5mPk#Q`70XSY^lQrAg
+m7#=4T4OJJPN?K%dXpqXf[k[PPqOaN7/qo8L8Cfe^c'Z[RG\-!'9,p\A):.hhA<5
+8n6>4_bBGj2U])ds10ee-)%SSP>YWn0oh]a9ieSg3&<c&GE>jX%\@QX=$,;b#N.S
+T#jO7Na!-4/q"8#FXV92ROEL0l->B#BZFhYd9J`%63Hhc1+OiZ'+J%Q$+7T.0lNr
+Z7fcQhpM<]&f3mmeJ,'*IKY@^sM=H8:8Lg8pGp-(,o$\_>N_??Yh0=*#KPC=:,7+
+onr\.\=6'*4^5sQ7l_@fRuhZe7[N*0GL_j!0=XRh9@)GaolFfV6,S2*gP!U.[SUF
+Ul,/OF0p'TQtE*P7*e(kk]4RWIP-7?T755!\l@nKj$-1DQq6bt;h@]_dCN'Cb`Da
+@0F@iI<(D=L&[UQNl8/$sB2HKP<W-i>to@da9Qk[3T)!+hd9oh),*n+"7P3`97F(
+D&jI2kse=F-J'P)Rs@<6VLi'uieK&t&:o1BZsu\uG%nqc)Ca7$DI\PLMs*P7;HRd
+1UR+^`!,Anah+%.Qr]ap!;U;kn)#jRMYk3`\8L\BG3fq_2Pm&9YJjBXUrG<EVZ`H
+-q&>YDQl$U)^FTYR@)W.?.Z8d&`e$AS.k[gE"M?6Eo-nSRE=fW%Y_G8,3q8ERSi7
+U^k8)79Go>jc88QZ8\"+01=p?Hbq_t`[?2+8B^SNA<cq3=UG9dRiO3jRI=!D:/[=
+I\PjBs^Q)0P8ZYA`hiYE8=)X*4f-\V+00R7r%l4?p!?7+,@k62(mXcboFl(>]HPB
+W@5l^!.Z\$/[i]5d\rOK#?0^?Q1m,;DBu((ER(eM2$!%K]6D/*cNrbA*%rY_^1G6
+oi(WGIZ^?t#>r,\RC-0'<dE.[l;i[2BLG\?1Kf5^!(DbIpK6(pm\P,mMEt'EiUpT
++^;+9rBgB4X<=62.H*L1p(F-9G&XXbNJ[K+U"am437?:0,arrA*dk%RDf<$Ygff%
+/$-@9fJ2iOt!3\ZdOIe=M7F.B'jC9Q^Vfgn/)^Y$q`g<R-pMhS]IPdpEU%RmEO4;
+NQ_jaqPVgd,&6,\A,6%"]<(7;\))=3*,%eKdL*@C_R0).rf!G4CPtr>Ge>,*29S`
+1J#J5AlQNGQ?tBn+/i)![_X=[TT7A%D@!c'-)O;%R[,@0E`@(]b5m_`^&H8IqmML
+$<EcOFQZc\KLLkM*?mKoa)@__e`'q+u;N\lud5Ka\]VCn'o3!4\_m4[2*fqbkD=g
+tk8uTOMm%jX].caJ7PXRIAP&>3`GCLQ8.5[Ka6CB[cm4s-.7VT2N5:lAoE<j<O+H
+N%-r,]`s?78C2R,tH]HZh`1@%p]b>MfA[i>J'$F^X)_h:$`'ThZj]CY%W*r+X4=X
+dOW-GXj9B@l^!Rr5I+^gTH'E!nKoWHutRN9K'>sDn:Lgl3UT8FE!VEc`i*Pq+$MN
+V-+:*Vg,nK]0mH6@rP07mZ+GOd#)h+Zs)Oq<GG($a]b4`8fE9sD]2sl35:Hkj3lB
+nL9BhJC?S;dU_K?`)Wh/7WThtg(KO8BL?'2bE+*PY?D3M.fb2(>Mi/<ge9't:#cB
+jh6Q:2OM-SIl5psV=+j0dRBAVb<7VUP!amcU*$+RHHR[<'"G$3<R5=1I#f<r_)N?
+:k1,8C->%CAPuijN"2Rt(Qrdc:H6eeT/5m2TgN<<8S(I'T)k`$OJ)R4^BT*L"uij
+/%]I8'8sAcI[q<#GG^WTlA^d'3(`+AGal1[]g:BPP/<6P'gcTZOLsj5;t3QHqqdD
+Qch-M&`tFg5*&WF5X<jCHL(*'M\1EL?`YGCU<C[$qp.koXR=6F9%(BV_!7,1*pXZ
+NH#)7\rJu\Z6G:D:*@!2OUX_5#J+F6+70t?\9"3F]@CZ%PeZj6aT0DO:_?o;-h>(
+_+M76Ctl&#XnWDHHVH&5*JDB*Z@'@t_QSss*9Gcp%o8tI,oAYm_rbqu\m/-D./b'
+MtB`&dKk:fJ[VqdfY+H,^]4"cD^LX=Q3Wf=E.>15=3#EEV^OdmN+'7&$[%]1[G=O
+:%5;UG)[s3hN\lbfmE72OJ>Ap=@h"ej"kkGD[BN.Ue4o9g)?rb;.FJ8@QLAnZ^j`
+/Fs/7fW4VHU3="g\%G/*+=&6?:/c4Q"cku'!VPP7"dF^C-kW0M@9bsXH@I4)QifU
+Z/Z"3+,!J`nWJo!M=#[@7(%<g<&h!LFRM_QVE>%Xgjdo/c@#YAj#?tH43Y4/0`9a
+WZST_+^b:P3:&>_/"SA22OX/UQB_lf<<#SD0O\@:sJ>I9=07;bF\M4$C\W0D/6X:
+D`SlU`$+f"Zl=CK"6g6N7$@M_9]W.7e/H-.7P]"gp9,CeaQ33^A66d@RM$L749+G
+"XgS8nTF9Mnl^Sb?KLj+Jg;\#uLr26#.F,>`KarQ+qacPUVj?.`ra:Q^Vs[Yfnb>
+Df'UhJH?1J91(\nfjU(_"@u*1\Je[G4d[Xo-mch)\[K8Beff#J7HRc2MCY]l#[UN
+>i%#-;r)n`(#55:3^N9_mYt7R,PBB;+Et`>+WL%A+V<#4n3EEGgXS+)%bQ0W4"1p
+jpBQUm[7AWP0WAN%[S:sT]K&P3k5$'e-!X*[<o1P3>IhcY!j#X3@Q'"2kiIiH7bH
+TRrHJ?jkEWXdI)hDdHJH@n&H;?'RahK#oS/0a+,:F[mCT+_/UdF'tG$:Q!>7CS!'
+:-n'c*+C[qNqg=VELZD&q&)#GNM$a7[_%@RNiJ'UfJDXj,Gg^AR<>:Y;%)B+!Ugi
+:FTTsRHUot_H)Wt9h\=-[k0"5C$4$A:OieS^0;Z0O^aNK90.UUT0`lN.MfaiVo.t
+S!\mm7)E?m5[P42:S7Ybf8sq,);gFm&FbBqen>Pa=&CTiIcT5f4fgTJ`RrEtd=Gr
+*5ocS)Q">"*(DeE'%Znd<2oHd-NTG!nrD*BSLkA0I5TqH:?RZ!Ah:5=Hr/M43u+]
+fp7!YsCmdbF%d:Il$@g<^M?5um,%<@TDe;f_](5XN],ej@J&mbH[m\C_2TY0cTHL
+(r5J\'^S??f)hQk:+D;'(++=8h>>/K3R60TKn0UAt:8>_+V)FR<;AANA3>eM$K9P
+$&='`W2/'rD5+4B@!]c(Un9AYX53T2]T^MF;G]p9:ep(RklM!0[eSL?=rFohNB!^
+LeSn&(]>=[V&BX,mO8ml~>
+%%EOF
diff --git a/Master/texmf-dist/doc/generic/pst-optexp/doc/pst-optexp-doc.pdf b/Master/texmf-dist/doc/generic/pst-optexp/doc/pst-optexp-doc.pdf
new file mode 100644
index 00000000000..bf4dcb67978
--- /dev/null
+++ b/Master/texmf-dist/doc/generic/pst-optexp/doc/pst-optexp-doc.pdf
Binary files differ
diff --git a/Master/texmf-dist/doc/generic/pst-optexp/doc/pst-optexp-doc.tex b/Master/texmf-dist/doc/generic/pst-optexp/doc/pst-optexp-doc.tex
new file mode 100644
index 00000000000..76e8b330781
--- /dev/null
+++ b/Master/texmf-dist/doc/generic/pst-optexp/doc/pst-optexp-doc.tex
@@ -0,0 +1,726 @@
+\documentclass[headinclude,DIV12]{scrartcl}
+
+\usepackage[latin1]{inputenc}
+\usepackage[T1]{fontenc}
+\usepackage[english]{babel}
+
+\usepackage{scrpage2}
+\usepackage{url}
+%
+\usepackage{pstricks}
+\usepackage{pst-optexp}
+\let\verPstOptExp\fileversion
+\let\datePstOptExp\filedate
+\usepackage{multicol}
+\usepackage{showexpl}
+\lstset{breakatwhitespace}
+\usepackage{nicefrac}
+\usepackage{graphicx}
+\usepackage[colorlinks,linktocpage]{hyperref}
+%
+% New commands
+%
+\DeclareRobustCommand\cs[1]{\texttt{\char`\\#1}}
+\newcommand{\OptExpPackage}{\textsf{`pst-optexp'}}
+\newcommand{\parameter}[1]{\texttt{#1}}
+\let\param\textrm
+\def\@UrlFont{\small\ttfamily}
+
+%
+% Settings
+\setkomafont{sectioning}{\normalfont\normalcolor\bfseries}
+\setcounter{tocdepth}{2}
+%
+\makeatletter
+\renewenvironment{description}
+ {\list{}{\labelwidth\z@ \itemindent-\leftmargin
+ \itemsep0pt \parsep0pt
+ \let\makelabel\descriptionlabel}}
+ {\endlist}
+\makeatother
+%
+% Kopfzeile mit scrpage2 definieren
+\clearscrheadfoot
+\setheadsepline{0.4pt}
+\ihead{\OptExpPackage}\ohead{A PSTricks package to draw optical experimental setups}
+\pagestyle{scrheadings}
+
+\psset{subgriddiv=0,griddots=10,gridlabels=7pt}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\begin{document}
+ \title{\texttt{pst-optexp}\\ A PSTricks package to draw optical experimental setups}
+ \author{Christoph Bersch \textless
+ \href{mailto:usenet@bersch.net}{\texttt{usenet@bersch.net}}\textgreater}
+ \date{\datePstOptExp\enspace\enspace Version \verPstOptExp}
+
+\maketitle
+
+\setlength{\columnseprule}{0.6pt}
+\begin{multicols}{2}
+{\parskip 0pt \tableofcontents}
+\end{multicols}
+\section{Introduction}
+The package \texttt{pst-optexp} is a collection of optical components
+that facilitate easy sketching of optical experimental
+setups. Mechanisms for proper alignment of different components are
+provided internally. This way the user does not have to care for proper
+orientation of the elements.
+
+\section{Components}
+
+In the following sections \ref{sec:mirror}--\ref{sec:custom} the
+available components with their parameters are described. Up to now
+there are two types of components: those which require two reference
+points and do not alter the direction of the passing light beam (for
+example lenses and retardation plates) and those which work in
+reflection and require three reference points (mirrors, grids,
+beamsplitters etc.).
+
+In section \ref{sec:general} general parameters are described that are not proprietary
+to a specific unit but can be used for several different components. Finally, in
+section \ref{sec:labels} the options for the positioning of labels are
+explained.
+
+\subsection{Lens}\label{sec:lens}
+
+\begin{description}
+\item[\param{lensheight} (dimension):] (\emph{default:~\texttt{1}})
+\item[\param{lenswidth} (dimension):] (\emph{default:~\texttt{0.3}})
+\item[\param{lenstype} (plainconvex, plainconcave, convexplain, concaveplain, biconvex, biconcave):] (\emph{default:~\texttt{biconvex}})
+\item[\param{lensradius} (dimension):] (\emph{default:~\texttt{\cs{empty}}})
+\end{description}
+
+For the convex lenses only two parameters are used. If the
+parameter \parameter{lensradius} is set, its value will be used together
+with \parameter{lensheight} to draw the
+lens. Otherwise \parameter{lenswidth} and
+\parameter{lensheight} are used. For concave lenses all three parameters
+are needed.
+
+\medskip
+
+\begin{LTXexample}[width=3.5cm]
+\begin{pspicture}(3,3)\psgrid
+ \pnode(0,2){A}
+ \pnode(3,1){B}
+ \psline[linecolor=green](A)(B)
+ \lens[lenstype=plainconvex](A)(B){Lens}
+\end{pspicture}
+\end{LTXexample}
+
+\bigskip
+
+\begin{LTXexample}[width=3.5cm]
+\begin{pspicture}(3,3)\psgrid
+ \pnode(0,2){A}
+ \pnode(3,1){B}
+ \psline[linecolor=green](A)(B)
+ \lens[lenstype=convexplain](A)(B){Lens}
+\end{pspicture}
+\end{LTXexample}
+
+\bigskip
+
+\begin{LTXexample}[width=3.5cm]
+\begin{pspicture}(3,3)\psgrid
+ \pnode(0,2){A}
+ \pnode(3,1){B}
+ \psline[linecolor=green](A)(B)
+ \lens(A)(B){Lens}
+\end{pspicture}
+\end{LTXexample}
+
+\bigskip
+\begin{LTXexample}[width=3.5cm]
+\begin{pspicture}(3,3)\psgrid
+ \pnode(0,2){A}
+ \pnode(3,1){B}
+ \psline[linecolor=green](A)(B)
+ \lens[lenstype=plainconcave](A)(B){Lens}
+\end{pspicture}
+\end{LTXexample}
+
+\bigskip
+\begin{LTXexample}[width=3.5cm]
+\begin{pspicture}(3,3)\psgrid
+ \pnode(0,2){A}
+ \pnode(3,1){B}
+ \psline[linecolor=green](A)(B)
+ \lens[lenstype=concaveplain](A)(B){Lens}
+\end{pspicture}
+\end{LTXexample}
+
+\bigskip
+\begin{LTXexample}[width=3.5cm]
+\begin{pspicture}(3,3)\psgrid
+ \pnode(0,2){A}
+ \pnode(3,1){B}
+ \psline[linecolor=green](A)(B)
+ \lens[lenstype=biconcave](A)(B){Lens}
+\end{pspicture}
+\end{LTXexample}
+
+\medskip
+
+\subsection{General plate}
+
+\begin{description}
+\item[\param{plateheight} (dimension):] (\emph{default:~\texttt{1}})
+\item[\param{platelinewidth} (dimension):] (\emph{default:~\texttt{2\cs{pslinewidth}}})
+\end{description}
+
+\medskip
+
+\begin{LTXexample}[width=3.5cm]
+\begin{pspicture}(3,3)\psgrid
+ \pnode(0,1.5){A}
+ \pnode(3,1.5){B}
+ \psline[linecolor=green](A)(B)
+ \optplate(A)(B){filter}
+\end{pspicture}
+\end{LTXexample}
+
+\medskip
+
+\subsection{Retardation plate}
+
+\begin{description}
+\item[\param{plateheight} (dimension):] (\emph{default:~\texttt{1}})
+\item[\param{platewidth} (dimension):] (\emph{default:~\texttt{0.1}})
+\end{description}
+
+\medskip
+
+\begin{LTXexample}[width=3.5cm]
+\begin{pspicture}(3,3)\psgrid
+ \pnode(0,1.5){A}
+ \pnode(3,1.5){B}
+ \psline[linecolor=green](A)(B)
+ \optretplate(A)(B){$\nicefrac{\lambda}{2}$}
+\end{pspicture}
+\end{LTXexample}
+
+\medskip
+
+\subsection{Pinhole}
+
+\begin{description}
+\item[\param{phlinewidth} (dimension):] (\emph{default~\texttt{2\cs{pslinewidth}}})
+\item[\param{owidth} (dimension):] (\emph{default:~\texttt{1}})
+\item[\param{iwidth} (dimension):] (\emph{default:~\texttt{0.1}})
+\end{description}
+
+\medskip
+
+\begin{LTXexample}[width=3.5cm]
+\begin{pspicture}(3,3)\psgrid
+ \pnode(0,1.5){A}
+ \pnode(3,1.5){B}
+ \psline[linecolor=green](A)(B)
+ \pinhole(A)(B){PH}
+\end{pspicture}
+\end{LTXexample}
+
+\medskip
+
+\subsection{Crystal}
+
+\begin{description}
+\item[\param{crystalwidth} (dimension):] (\emph{default:~\texttt{2}})
+\item[\param{crystalheight} (dimension):] (\emph{default:~\texttt{0.8}})
+\item[\param{caxislength} (dimension):] (\emph{default:~\texttt{0.6}})
+\item[\param{caxisinv} (boolean):] (\emph{default:~\texttt{false}})
+\item[\param{voltage} (boolean):] (\emph{default:~\texttt{false}})
+\item[\param{lamp} (boolean):] (\emph{default:~\texttt{false}})
+\item[\param{lampscale} (real):] (\emph{default:~\texttt{0.3}})
+\end{description}
+
+\medskip
+
+\begin{LTXexample}[width=3.5cm]
+\begin{pspicture}(3,3)\psgrid
+ \pnode(0,1.5){A}
+ \pnode(3,1.5){B}
+ \crystal[crystalwidth=1.5,%
+ crystalheight=0.6,%
+ fillstyle=solid,%
+ fillcolor=yellow!90!black,%
+ labelangle=-45,%
+ voltage,%
+ lamp](A)(B){SBN}
+ \psline[linecolor=green](A)(B)
+\end{pspicture}
+\end{LTXexample}
+
+\medskip
+
+\subsection{Box}
+
+\begin{description}
+\item[\param{optboxheight} (dimension):] (default:~\texttt{0.5})
+\item[\param{optboxwidth} (dimension):] (default:~\texttt{1})
+\item[\param{endbox} (boolean):] (default: \texttt{false})
+\end{description}
+
+\medskip
+
+\begin{LTXexample}[width=3.5cm]
+\begin{pspicture}(3,3)\psgrid
+ \pnode(0,0){A}
+ \pnode(3,2){B}
+ \psline[linecolor=green](A)(B)
+ \optbox[labeloffset=-1](A)(B){Box}
+\end{pspicture}
+\end{LTXexample}
+
+\bigskip
+
+\begin{LTXexample}[width=3.5cm]
+\begin{pspicture}(3,3)\psgrid
+ \pnode(0,0){A}
+ \pnode(2,2){B}
+ \psline[linecolor=green](A)(B)
+ \optbox[endbox,labeloffset=1,labelangle=180](A)(B){Box}
+\end{pspicture}
+\end{LTXexample}
+
+\bigskip
+
+\begin{LTXexample}[width=3.5cm]
+\begin{pspicture}(3,3)\psgrid
+ \pnode(0,0){A}
+ \pnode(2,2){B}
+ \psline[linecolor=green](A)(B)
+ \optbox[endbox,labelrelative](A)(B){Box}
+\end{pspicture}
+\end{LTXexample}
+
+\medskip
+
+\subsection{Detector}
+
+\begin{description}
+\item[\param{detsize} (dimension):] (default: \texttt{0.5})
+\end{description}
+
+\medskip
+
+\begin{LTXexample}[width=3.5cm]
+\begin{pspicture}(3,3)\psgrid
+ \pnode(0,0){A}
+ \pnode(2,1){B}
+ \psline[linecolor=green](A)(B)
+ \detector[labeloffset=-1](A)(B){detector}
+\end{pspicture}
+\end{LTXexample}
+
+\medskip
+
+\subsection{Polarisation}
+
+\begin{description}
+\item[\param{pol} (parallel,perp,misc,lcirc,rcirc):] (\emph{default:~\texttt{parallel}})
+\item[\param{polwidth} (dimension):] (\emph{default:~\texttt{0.6}})
+\end{description}
+
+\medskip
+
+\begin{LTXexample}[width=3.5cm]
+\begin{pspicture}(3,3.2)\psgrid
+ \pnode(0,0.4){A1}\pnode(3,0.4){B1}
+ \pnode(0,1){A2}\pnode(3,1){B2}
+ \pnode(0,1.6){A3}\pnode(3,1.6){B3}
+ \pnode(0,2.2){A4}\pnode(3,2.2){B4}
+ \pnode(0,2.8){A5}\pnode(3,2.8){B5}
+ \psline[linecolor=green](A1)(B1)
+ \psline[linecolor=green](A2)(B2)
+ \psline[linecolor=green](A3)(B3)
+ \psline[linecolor=green](A4)(B4)
+ \psline[linecolor=green](A5)(B5)
+ \polarisation[pol=misc,position=0.2](A5)(B5)
+ \polarisation[pol=perp,position=0.35](A4)(B4)
+ \polarisation[pol=parallel,position=0.5](A3)(B3)
+ \polarisation[pol=rcirc,position=0.65](A2)(B2)
+ \polarisation[pol=lcirc,position=0.8](A1)(B1)
+\end{pspicture}
+\end{LTXexample}
+
+\medskip
+
+%
+%
+% MIRROR
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\subsection{Mirror}\label{sec:mirror}
+
+\begin{description}
+\item[\param{mirrorwidth} (dimension):] (\emph{default:~\texttt{1}})
+\item[\param{mirrorlinewidth} (dimension):] (\emph{default:~\texttt{0.7\cs{pslinewidth}}})
+\item[\param{mirrortype} (normal,piezo,extended):] (\emph{default:~\texttt{normal}})
+\item[\param{mirrordepth} (dimension):] (\emph{default:~\texttt{0.08}})
+\item[\param{variable} (boolean):] (\emph{default:~\texttt{false}})
+\end{description}
+
+The style of the extended mirror is defined as a
+psstyle \parameter{ExtendedMirror} and can be changed using
+\cs{newpsstyle}. The appearence of the piezo mirror likewise can be
+changed by adapting the psstyle \parameter{PiezoMirror}.
+
+\medskip
+
+\begin{LTXexample}[width=3.5cm]
+\begin{pspicture}(3,3)\psgrid
+ \pnode(0,0){A}
+ \pnode(2,2){G}
+ \pnode(0,3){B}
+ \psline[linecolor=green](A)(G)(B)
+ \mirror(A)(G)(B){Mirror}
+\end{pspicture}
+\end{LTXexample}
+
+\bigskip
+
+\begin{LTXexample}[width=3.5cm]
+\begin{pspicture}(3,3)\psgrid
+ \pnode(0,0){A}
+ \pnode(2,2){G}
+ \pnode(0,3){B}
+ \psline[linecolor=green](A)(G)(B)
+ \mirror[variable](A)(G)(B){Mirror}
+\end{pspicture}
+\end{LTXexample}
+
+\bigskip
+
+\begin{LTXexample}[width=3.5cm]
+\begin{pspicture}(3,3)\psgrid
+ \pnode(0,0){A}
+ \pnode(2,2){G}
+ \pnode(0,3){B}
+ \psline[linecolor=green](A)(G)(B)
+ \mirror[mirrortype=piezo](A)(G)(B){Piezo}
+\end{pspicture}
+\end{LTXexample}
+
+\bigskip
+
+\begin{LTXexample}[width=3.5cm]
+\begin{pspicture}(3,3)\psgrid
+ \pnode(0,0){A}
+ \pnode(2,2){G}
+ \pnode(0,3){B}
+ \psline[linecolor=green](A)(G)(B)
+ \mirror[mirrortype=extended,
+ mirrordepth=0.1](A)(G)(B){Extended mirror}
+\end{pspicture}
+\end{LTXexample}
+
+\medskip
+
+\subsection{Beamsplitter}
+
+\begin{description}
+\item[\param{bswidth} (dimension):] (\emph{default:~\texttt{1}})
+\end{description}
+
+\medskip
+
+\begin{LTXexample}[width=3.5cm]
+\begin{pspicture}(3,3)\psgrid
+ \pnode(0,2){A}
+ \pnode(2,2){G}
+ \pnode(3,0){B}
+ \psline[linecolor=green](A)(G)(B)
+ \beamsplitter(A)(G)(B){BS}
+\end{pspicture}
+\end{LTXexample}
+
+\medskip
+
+
+\subsection{Optical grid}
+
+\begin{description}
+\item[\param{optgridcount} (integer):] (\emph{default:~\texttt{10}})
+\item[\param{optgridwidth} (dimension):] (\emph{default:~\texttt{1}})
+\item[\param{optgridheight} (dimension):] (\emph{default:~\texttt{0.1}})
+\item[\param{optgriddepth} (dimension):] (\emph{default:~\texttt{0.05}})
+\item[\param{optgridlinewidth} (dimension):] (\emph{default:~\texttt{0.7\cs{pslinewidth}}})
+\item[\param{reverse} (boolean):] (\emph{default:\texttt{false}})
+\end{description}
+
+\medskip
+
+\begin{LTXexample}[width=3.5cm]
+\begin{pspicture}(3,3)\psgrid
+ \pnode(0,2.5){A}
+ \pnode(1.5,2){G}
+ \pnode(0,0){B}
+ \psline[linecolor=green](A)(G)(B)
+ \optgrid(A)(G)(B){grid}
+\end{pspicture}
+\end{LTXexample}
+
+\bigskip
+
+
+\begin{LTXexample}[width=3.5cm]
+\begin{pspicture}(3,3)\psgrid
+ \pnode(0,2.5){A}
+ \pnode(1.5,2){G}
+ \pnode(0,0){B}
+ \psline[linecolor=green](A)(G)(B)
+ \optgrid[reverse](A)(G)(B){grid}
+\end{pspicture}
+\end{LTXexample}
+
+\bigskip
+
+\begin{LTXexample}[width=3.5cm]
+\begin{pspicture}(3,3)\psgrid
+ \pnode(0,2.5){A}
+ \pnode(1.5,2){G}
+ \pnode(0,0){B}
+ \psline[linecolor=green](A)(G)(B)
+ \optgrid[optgridcount=6,%
+ optgriddepth=0.2,%
+ optgridheight=0.3](A)(G)(B){grid}
+\end{pspicture}
+\end{LTXexample}
+
+\medskip
+
+
+\subsection{Custom components}\label{sec:custom}
+
+\begin{LTXexample}[width=3.5cm]
+\begin{pspicture}(3,3)\psgrid
+ \pnode(0,2){A}
+ \pnode(3,1){B}
+ \optdipole(A)(B){%
+ \rput(0,0){%
+ \includegraphics[scale=0.25]{parque-nacional}
+ }
+ }{Label}
+ \psline[linecolor=red](A)(B)
+\end{pspicture}
+\end{LTXexample}
+
+\bigskip
+
+\begin{LTXexample}[width=3.5cm]
+\begin{pspicture}(3,3)\psgrid
+ \pnode(0,0){A}
+ \pnode(1.5,2){G}
+ \pnode(3,1.5){B}
+ \opttripole(B)(G)(A){\rput[b](0,0){Text}}{Label}
+ \psline[linecolor=red](A)(G)(B)
+\end{pspicture}
+\end{LTXexample}
+
+\medskip
+
+\subsection{General options}\label{sec:general}
+
+\begin{description}
+\item[\param{angle} (real):] (\emph{default:~\texttt{0}})
+\item[\param{optional} (boolean):] (\emph{default:~\texttt{false}})
+\item[\param{position} (real):] (\emph{default:~\texttt{\cs{empty}}})
+\item[\param{abspos} (dimension):] (\emph{default:~\texttt{\cs{empty}}})
+\item[\param{showoptdots} (boolean):] (\emph{default:~\texttt{false}})
+\end{description}
+
+The parameter \parameter{angle} is available for the macros \cs{optbox}
+and \cs{crystal} only, as for the most other cases it would make
+no sense. \parameter{optional} can be used with every component and marks it as
+optional and can be configured by changing the psstyle \parameter{OptionalStyle}.
+\parameter{position} is equivalent to the \parameter{npos} parameter of \cs{ncput},
+but is used only for the \lq dipole\rq-macros to position the component
+between the two given points. In addition, there is a parameter
+\parameter{abspos} that allows absolute positioning between the two line
+points. \parameter{showoptdots} shows in black the two points calculated for the
+positioning of the component, and in red the reference point for the
+label.
+
+\medskip
+
+\begin{LTXexample}[width=3.5cm]
+ \begin{pspicture}(3,3)\psgrid
+ \pnode(0,1){A}
+ \pnode(3,1){B}
+ \psline[linecolor=green](A)(B)
+ \optbox[labeloffset=-1,%
+ angle=10](A)(B){Box}
+ \end{pspicture}
+\end{LTXexample}
+
+\bigskip
+
+\begin{LTXexample}[width=3.5cm]
+ \begin{pspicture}(3,3)\psgrid
+ \pnode(0,1.5){A}
+ \pnode(3,1.5){B}
+ \psline[linecolor=green](A)(B)
+ \lens[optional](A)(B){L}
+ \end{pspicture}
+\end{LTXexample}
+
+\bigskip
+
+\begin{LTXexample}[width=3.5cm]
+ \begin{pspicture}(3,3)\psgrid
+ \pnode(0,1.5){A}
+ \pnode(3,1.5){B}
+ \psline[linecolor=green](A)(B)
+ \lens[position=0.8](A)(B){L}
+ \end{pspicture}
+\end{LTXexample}
+
+\bigskip
+
+\begin{LTXexample}[width=3.5cm]
+ \begin{pspicture}(3,3)\psgrid
+ \pnode(0,1.5){A}
+ \pnode(3,1.5){B}
+ \psline[linecolor=green](A)(B)
+ \lens[abspos=1](A)(B){L}
+ \end{pspicture}
+\end{LTXexample}
+
+\bigskip
+
+\begin{LTXexample}[width=3.5cm]
+ \begin{pspicture}(3,3)\psgrid
+ \pnode(0,0){A}
+ \pnode(1.5,2){G}
+ \pnode(0,3){B}
+ \psline[linecolor=green](A)(G)(B)
+ \mirror[labelangle=0,showoptdots](A)(G)(B){Mirror}
+ \end{pspicture}
+\end{LTXexample}
+
+\medskip
+
+\subsection{Labels}\label{sec:labels}
+
+\begin{description}
+\item[\param{labeloffset} (dimension):] (\emph{default:~\texttt{1}})
+\item[\param{labelangle} (real):] (\emph{default:~\texttt{-90}})
+\item[\param{labelstyle} (macro):] (\emph{default:~\texttt{\cs{small}}})
+\item[\param{labelalign} (\cs{rput} pos string):] (\emph{default:~\texttt{c}})
+\item[\param{labelrelative} (boolean):] (\emph{default:~\texttt{false}})
+\end{description}
+
+\parameter{labeloffset} specifies the offset from the center of the component, \parameter{labelangle} is the
+absolute angle which is independent of the component orientation,
+\parameter{labelstyle} is the textstyle that is used to typeset the
+label and \parameter{labelalign} corresponds to the refpoint of
+\cs{rput}. With \parameter{labelrelative} the label is oriented like the
+component is.
+
+\newpage
+\section{Examples}
+\begin{LTXexample}[pos=t,vsep=10mm]
+\begin{pspicture}(12,2.4)\psgrid
+\pnode(1,1.2){CCD}\pnode(12,1.2){Start}
+\psline[linewidth=2\pslinewidth,linecolor=green!90!black](Start)(CCD)
+\psset{plateheight=1.5,
+ lensheight=1.5,
+ lensradius=2}
+\polarisation[pol=perp,
+ position=0.1](Start)(CCD)
+\optretplate[position=0.15](Start)(CCD){$\nicefrac{\lambda}{2}$}
+\lens[lensheight=0.5,
+ lensradius=0.5,
+ position=0.25](Start)(CCD){$L_1$}
+\lens[position=0.5](Start)(CCD){$L_2$}
+\optplate[position=0.57,
+ labelangle=90,
+ platelinewidth=3\pslinewidth](Start)(CCD){SLM}
+\optplate[position=0.63,
+ labelangle=270](Start)(CCD){PF}
+\lens[position=0.7](Start)(CCD){$L_3$}
+\optbox[endbox](Start)(CCD){CCD}
+\end{pspicture}
+\end{LTXexample}
+
+\begin{LTXexample}[pos=t,vsep=10mm]
+\begin{pspicture}(6,3.5)
+ \psgrid[subgriddiv=1,griddots=10,gridlabels=7pt]
+ \psset{labelstyle=\scriptsize}
+ \pnode(1.5,1){LaserOut}
+ \pnode(3,1){Grid}
+ \pnode(6,3){Out}
+ \pnode(4,3){Mvar}
+ \psline[linewidth=2\pslinewidth,
+ linecolor=red!90!black](LaserOut)(Grid)(Out)\psline(Grid)(Mvar)
+ \optbox[endbox,optboxwidth=1.5](Grid)(LaserOut){diodelaser}
+ \optretplate[position=0.3,
+ labeloffset=0.7](LaserOut)(Grid){$\nicefrac{\lambda}{4}$}
+ \optgrid[labeloffset=0.5](LaserOut)(Grid)(Out){grid}
+ \mirror[variable,
+ labelangle=20,
+ labeloffset=1](Grid)(Mvar)(Grid){variable mirror}
+\end{pspicture}
+\end{LTXexample}
+
+\psset{unit=1cm}
+\begin{LTXexample}[pos=t,vsep=10mm]
+\begin{pspicture}(9,6)\psgrid
+ \pnode(1.5,5){Laser}\pnode(4,5){PBS}\pnode(6.5,5){PBS2}
+ \pnode(6.5,5.7){piezo}\pnode(4,2){BSFwd}\pnode(6.5,2){BSBwd}
+ \pnode(2,2){BS4f}\pnode(2,0.5){M4f3}\pnode(8,2){M4f1}
+ \pnode(8,0.5){M4f2}\pnode(1,2){CCD}
+ \psline[linecolor=green!90!black,linewidth=2\pslinewidth]%
+ (Laser)(PBS2)(piezo)(BSBwd)(M4f1)(M4f2)(M4f3)(BS4f)(CCD)
+ \psline[linecolor=green!90!black,linewidth=2\pslinewidth](PBS)(BSFwd)(BS4f)
+ \psset{mirrorwidth=0.6, plateheight=0.7, owidth=0.7, labeloffset=0.6, labelstyle=\scriptsize, lensheight=0.8, lenswidth=0.2, bswidth=0.5}
+ \optbox[endbox,optboxwidth=1.5, optboxheight=0.7]%
+ (PBS)(Laser){\parbox{1.5cm}{\centering Nd:YAG\\ 532\,nm}}
+ \lens[lensheight=0.5, position=0.2](Laser)(PBS){MO}
+ \pinhole[position=0.3, labelangle=90](Laser)(PBS){PH}
+ \lens[position=0.5](Laser)(PBS){L}
+ \optretplate[position=0.8](Laser)(PBS){$\nicefrac{\lambda}{2}$}
+ \beamsplitter[labelangle=90](Laser)(PBS)(BSFwd){PBS}
+ \optretplate[labelangle=180](PBS)(BSFwd){$\nicefrac{\lambda}{2}$}
+ \lens[position=0.8,labelangle=180](PBS)(BSFwd){L}
+ \optretplate(PBS)(PBS2){$\nicefrac{\lambda}{2}$}
+ \beamsplitter[labelangle=0](PBS)(PBS2)(piezo){PBS}
+ \optretplate[labelangle=180, abspos=0.5](PBS2)(piezo){$\nicefrac{\lambda}{4}$}
+ \mirror[mirrortype=piezo, labelangle=0](PBS2)(piezo)(PBS2){PZ}
+ \lens[position=0.8,labelangle=0](PBS2)(BSBwd){L}
+ \beamsplitter(PBS)(BSFwd)(BSBwd){BS}
+ \beamsplitter(PBS2)(BSBwd)(BSFwd){BS}
+ \crystal[crystalwidth=1, crystalheight=0.5, voltage, lamp, fillstyle=solid, fillcolor=yellow!90!black, labeloffset=0.8](BSFwd)(BSBwd){SBN:Ce}
+ \mirror[labelangle=0](BSBwd)(M4f1)(M4f2){M}
+ \mirror[labelangle=0](M4f1)(M4f2)(M4f3){M}
+ \lens(M4f2)(M4f3){L}
+ \mirror[labelangle=180](M4f2)(M4f3)(BS4f){M}
+ \beamsplitter[labelangle=90](M4f3)(BS4f)(CCD){BS}
+ \optbox[endbox](BS4f)(CCD){CCD}
+ \lens[abspos=0.7](BSFwd)(BS4f){L}
+ \lens[abspos=0.7](BSBwd)(M4f1){L}
+ \psline[linecolor=green!90!black, linewidth=2\pslinewidth](BSFwd)(BSBwd)
+\end{pspicture}
+\end{LTXexample}
+
+\section{Known bugs}
+
+For some reason, filling of the concave lenses by
+specifiying \parameter{fillstyle} does not work properly. For sure there
+are other bugs, but they are not known, yet. If you find some, do not
+hesitate to contact me.
+
+\section{ Todo}
+
+\begin{itemize}
+\item Add components for fiber optics.
+\end{itemize}
+
+Drawing of extended beams with focusing, and so on, is not planned to be
+integrated in the near future due to missing ideas for the realization.
+
+
+\end{document}
diff --git a/Master/texmf-dist/tex/generic/pst-optexp/pst-optexp.tex b/Master/texmf-dist/tex/generic/pst-optexp/pst-optexp.tex
new file mode 100644
index 00000000000..7d63383b3dc
--- /dev/null
+++ b/Master/texmf-dist/tex/generic/pst-optexp/pst-optexp.tex
@@ -0,0 +1,884 @@
+%%
+%% This is file `pst-optexp.tex',
+%%
+%% IMPORTANT NOTICE:
+%%
+%% Package `pst-optexp.tex'
+%%
+%% Christoph Bersch <usenet _at_ bersch.net>
+%%
+%% This program can be redistributed and/or modified under the terms
+%% of the LaTeX Project Public License Distributed from CTAN archives
+%% in directory CTAN:/macros/latex/base/lppl.txt.
+%%
+%% DESCRIPTION:
+%% `pst-optexp' is a PSTricks package to draw optical experimental setups
+%%
+\csname PSToptexpLoaded\endcsname
+\let\PSToptexpLoaded\endinput
+%
+%
+\def\fileversion{1.0}
+\def\filedate{2007/07/18}
+\message{`pst-optexp' v\fileversion, \filedate\space (CB)}
+%
+% DPC interface to the `keyval' package (until keyval based version of PSTricks)
+%
+\edef\PstAtCode{\the\catcode`\@} \catcode`\@=11\relax
+\pst@addfams{optexp}
+\SpecialCoor
+%
+% In some versions of pstricks-add previous to 2.81 the macro
+% \nlput is buggy. In these cases it is redefined here.
+\ifdim\pstricksaddfileversion pt<2.81pt
+\typeout{}
+\typeout{pst-optexp: please update pstricks-add to version >= 2.81}
+\typeout{}
+\def\psLDNode(#1)(#2)#3#4{%
+% #1: node A #2: node B #3: dimen measured from A #4: node name
+ \pst@getcoor{#1}\pst@tempA%
+ \pst@getcoor{#2}\pst@tempB%
+ \pssetlength\pst@dimp{#3}%
+ \pnode(!%
+ \pst@tempA /YA exch \pst@number\psyunit div def
+ /XA exch \pst@number\psxunit div def
+ \pst@tempB /YB exch \pst@number\psyunit div def
+ /XB exch \pst@number\psxunit div def
+ /dx XB XA sub def
+ /dy YB YA sub def
+ /angle dy dx Atan def
+ /linelength \pst@number\pst@dimp \pst@number\psunit div def
+ XA linelength angle cos mul add YA linelength angle sin mul add ){#4}%
+}
+\def\nlput{\pst@object{nlput}}
+\def\nlput@i(#1)(#2)#3#4{%
+ \begin@SpecialObj
+ \psLDNode(#1)(#2){#3}{temp@lnput}
+ \pcline[linestyle=none](#1)(temp@lnput)%
+ \ncput[npos=1]{#4}%
+ \end@SpecialObj
+}%
+\fi
+% IF's
+%
+\newif\ifPst@optexp@variable
+\newif\ifPst@optexp@crystal@voltage
+\newif\ifPst@optexp@crystal@caxisinv
+\newif\ifPst@optexp@reverse
+\newif\ifPst@optexp@crystal@lamp
+\newif\ifPst@optexp@component@optional
+\newif\ifPst@optexp@debug@showoptdots
+\newif\ifPst@optexp@endbox
+\newif\ifPst@optexp@labelrelative
+%
+% Strings
+\def\pst@string@pol@polperp{perp}
+\def\pst@string@pol@polparallel{parallel}
+\def\pst@string@pol@polmisc{misc}
+\def\pst@string@pol@polrcirc{rcirc}
+\def\pst@string@pol@pollcirc{lcirc}
+\def\pst@string@mirror@type@piezo{piezo}
+\def\pst@string@mirror@type@plain{plain}
+\def\pst@string@mirror@type@extended{extended}
+%
+\def\pst@string@lens@type@plainconvex{plainconvex}
+\def\pst@string@lens@type@convexplain{convexplain}
+\def\pst@string@lens@type@biconvex{biconvex}
+\def\pst@string@lens@type@plainconcave{plainconcave}
+\def\pst@string@lens@type@concaveplain{concaveplain}
+\def\pst@string@lens@type@biconcave{biconcave}
+%
+\newpsstyle{OptionalStyle}{linestyle=dotted}
+\newpsstyle{ExtendedMirror}{linestyle=none,%
+ hatchwidth=0.5\psk@optexp@mirror@linewidth,%0.6pt,%
+ hatchsep=1.4\psk@optexp@mirror@linewidth,%
+ fillstyle=hlines}
+\newpsstyle{PiezoMirror}{fillstyle=solid,fillcolor=black!30}
+%
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% Parameterdefinitions
+%
+% General
+\define@key[psset]{optexp}{optional}[true]{\@nameuse{Pst@optexp@component@optional#1}}
+\define@key[psset]{optexp}{position}{\edef\psk@optexp@position{#1}}
+\define@key[psset]{optexp}{abspos}{\edef\psk@optexp@abspos{#1}}
+\define@key[psset]{optexp}{angle}{\edef\psk@optexp@angle{#1}}
+\define@key[psset]{optexp}{reverse}[true]{\@nameuse{Pst@optexp@reverse#1}}
+%
+% Lens
+\define@key[psset]{optexp}{lensheight}{\edef\psk@optexp@lens@height{#1}}
+\define@key[psset]{optexp}{lenswidth}{\edef\psk@optexp@lens@width{#1}}
+\define@key[psset]{optexp}{lensradius}{\edef\psk@optexp@lens@radius{#1}}
+% Lens Type
+% 0 -> plainconvex
+% 1 -> convexplain
+% 2 -> biconvex
+% 3 -> plainconcave
+% 4 -> concaveplain
+% 5 -> biconcave
+%
+\define@key[psset]{optexp}{lenstype}{%
+ \def\pst@tempA{#1}
+ \edef\psk@optexp@lens@type{%
+ \ifx\pst@string@lens@type@plainconvex\pst@tempA 0\else
+ \ifx\pst@string@lens@type@convexplain\pst@tempA 1\else
+ \ifx\pst@string@lens@type@biconvex\pst@tempA 2\else
+ \ifx\pst@string@lens@type@plainconcave\pst@tempA 3\else
+ \ifx\pst@string@lens@type@concaveplain\pst@tempA 4\else
+ \ifx\pst@string@lens@type@biconcave\pst@tempA 5%
+ \fi\fi\fi\fi\fi\fi%
+}}
+%
+% Pinhole
+\define@key[psset]{optexp}{iwidth}{\edef\psk@optexp@pinhole@iwidth{#1}}
+\define@key[psset]{optexp}{owidth}{\edef\psk@optexp@pinhole@owidth{#1}}
+\define@key[psset]{optexp}{phlinewidth}{\edef\psk@optexp@pinhole@linewidth{#1}}
+%
+% Beamsplitter
+\define@key[psset]{optexp}{bswidth}{\edef\psk@optexp@bswidth{#1}}
+%
+% Crystal
+\define@key[psset]{optexp}{crystalwidth}{\edef\psk@optexp@crystal@width{#1}}
+\define@key[psset]{optexp}{crystalheight}{\edef\psk@optexp@crystal@height{#1}}
+\define@key[psset]{optexp}{caxislength}{\edef\psk@optexp@crystal@caxislength{#1}}
+\define@key[psset]{optexp}{voltage}[true]{\@nameuse{Pst@optexp@crystal@voltage#1}}
+\define@key[psset]{optexp}{caxisinv}[true]{\@nameuse{Pst@optexp@crystal@caxisinv#1}}
+\define@key[psset]{optexp}{lamp}[true]{\@nameuse{Pst@optexp@crystal@lamp#1}}
+\define@key[psset]{optexp}{lampscale}{\def\psk@optexp@lamp@scale{#1}}
+%
+% Mirror
+\define@key[psset]{optexp}{mirrorwidth}{\edef\psk@optexp@mirror@width{#1}}
+\define@key[psset]{optexp}{mirrorlinewidth}{\edef\psk@optexp@mirror@linewidth{#1}}
+\define@key[psset]{optexp}{mirrortype}{\edef\psk@optexp@mirror@type{#1}}% piezo, extended, plain
+\define@key[psset]{optexp}{mirrordepth}{\edef\psk@optexp@mirror@depth{#1}}
+\define@key[psset]{optexp}{variable}[true]{\@nameuse{Pst@optexp@variable#1}}
+%
+% Grid
+\define@key[psset]{optexp}{optgridcount}{\edef\psk@optexp@optgrid@count{#1}}
+\define@key[psset]{optexp}{optgridwidth}{\edef\psk@optexp@optgrid@width{#1}}
+\define@key[psset]{optexp}{optgridheight}{\edef\psk@optexp@optgrid@height{#1}}
+\define@key[psset]{optexp}{optgriddepth}{\edef\psk@optexp@optgrid@depth{#1}}
+\define@key[psset]{optexp}{optgridlinewidth}{\edef\psk@optexp@optgrid@linewidth{#1}}
+%
+% Box
+\define@key[psset]{optexp}{optboxwidth}{\edef\psk@optexp@optbox@width{#1}}
+\define@key[psset]{optexp}{optboxheight}{\edef\psk@optexp@optbox@height{#1}}
+\define@key[psset]{optexp}{endbox}[true]{\@nameuse{Pst@optexp@endbox#1}}
+%
+% Plate
+\define@key[psset]{optexp}{platelinewidth}{\edef\psk@optexp@plate@linewidth{#1}}
+\define@key[psset]{optexp}{plateheight}{\edef\psk@optexp@plate@height{#1}}
+%
+% Optical Retardation Plate
+\define@key[psset]{optexp}{platewidth}{\edef\psk@optexp@plate@width{#1}}
+%
+% Detector
+\define@key[psset]{optexp}{detsize}{\edef\psk@optexp@detector@size{#1}}
+%
+% Polarisation
+\define@key[psset]{optexp}{polwidth}{\edef\psk@optexp@polarisation@width{#1}}
+\define@key[psset]{optexp}{pollinewidth}{\edef\psk@optexp@polarisation@linewidth{#1}}
+\define@key[psset]{optexp}{pol}{\edef\psk@optexp@pol{#1}}
+%
+% Label
+\define@key[psset]{optexp}{labelangle}{\edef\psk@optexp@label@angle{#1}}
+\define@key[psset]{optexp}{labeloffset}{\edef\psk@optexp@label@offset{#1}}
+\define@key[psset]{optexp}{labelstyle}{\def\psk@optexp@label@style{#1}}
+\define@key[psset]{optexp}{labelalign}{\def\psk@optexp@label@align{#1}}
+\define@key[psset]{optexp}{labelrelative}[true]{\@nameuse{Pst@optexp@labelrelative#1}}
+%
+% Debug
+\define@key[psset]{optexp}{showoptdots}[true]{\@nameuse{Pst@optexp@debug@showoptdots#1}}
+%
+%
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% Makros
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\def\lens{\@ifnextchar[{\pst@lens}{\pst@lens[]}}
+\def\pinhole{\@ifnextchar[{\pst@pinhole}{\pst@pinhole[]}}
+\def\beamsplitter{\@ifnextchar[{\pst@beamsplitter}{\pst@beamsplitter[]}}
+\def\crystal{\@ifnextchar[{\pst@crystal}{\pst@crystal[]}}
+\def\optgrid{\@ifnextchar[{\pst@optgrid}{\pst@optgrid[]}}
+\def\mirror{\@ifnextchar[{\pst@mirror}{\pst@mirror[]}}
+\def\polarisation{\@ifnextchar[{\pst@polarisation}{\pst@polarisation[]}}
+\def\optbox{\@ifnextchar[{\pst@optbox}{\pst@optbox[]}}
+\def\optplate{\@ifnextchar[{\pst@optplate}{\pst@optplate[]}}
+\def\optretplate{\@ifnextchar[{\pst@optretplate}{\pst@optretplate[]}}
+\def\detector{\@ifnextchar[{\pst@detector}{\pst@detector[]}}
+\def\optdipole{\@ifnextchar[{\pst@optdipole}{\pst@optdipole[]}}
+\def\opttripole{\@ifnextchar[{\pst@opttripole}{\pst@opttripole[]}}
+%
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% default settings
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\psset{%
+ angle=0
+ ,lenswidth=0.2
+ ,lensheight=1
+ ,lenstype=biconvex
+ ,mirrorwidth=1
+ ,mirrordepth=0.08
+ ,pol=\pst@string@pol@polparallel
+ ,optgridcount=10
+ ,optgridwidth=1
+ ,optgridheight=0.1
+ ,optgriddepth=0.05
+ ,bswidth=1
+ ,owidth=1
+ ,iwidth=0.1
+ ,crystalwidth=2
+ ,crystalheight=0.8
+ ,caxislength=0.6
+ ,optboxwidth=1
+ ,optboxheight=0.5
+ ,position=\@empty
+ ,abspos=\@empty
+ ,labeloffset=1
+ ,labelangle=-90
+ ,labelstyle=\small
+ ,mirrortype=\pst@string@mirror@type@plain,
+ ,labelalign=c
+ ,lensradius=\@empty
+ ,mirrorlinewidth=2\pslinewidth
+ ,plateheight=1
+ ,platelinewidth=2\pslinewidth
+ ,platewidth=0.1
+ ,polwidth=0.6
+ ,pollinewidth=0.7\pslinewidth
+ ,optgridlinewidth=0.7\pslinewidth
+ ,phlinewidth=2\pslinewidth
+ ,lampscale=0.3
+ ,detsize=0.5
+}%
+%
+%
+%
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% Macro implementations
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% Some of the components need three points to be positioned.
+% These are:
+%
+% 1. startpoint of the beam (in the PS-Code: (XA,YA))
+% 2. reflectionpoint on the surface (XG, YG)
+% 3. endpoint (XB,YB)
+%
+% With these three points \pst@calcNodes calculates two new points 'tempNode@A'
+% and 'tempNode@B', between which the component is placed by the macro
+% \pst@draw@component in the way, that 'angle of incidence' == 'angle of deflection'
+% regarding the reflection surface (mirror, diagonal of the beamsplitter,
+% grid etc.)
+%
+\def\pst@calcNodes#1#2#3{{%
+ \pst@getcoor{#1}\pst@tempa%
+ \pst@getcoor{#2}\pst@tempb%
+ \pst@getcoor{#3}\pst@tempc%
+ \pnode(!%
+ \pst@tempa /YA exch \pst@number\psyunit div def
+ /XA exch \pst@number\psxunit div def
+ \pst@tempb /YG exch \pst@number\psyunit div def
+ /XG exch \pst@number\psxunit div def
+ \pst@tempc /YB exch \pst@number\psyunit div def
+ /XB exch \pst@number\psxunit div def
+ /ax XG XA sub def
+ /ay YG YA sub def
+ /bx XB XG sub def
+ /by YB YG sub def
+ /a ax 2 exp ay 2 exp add sqrt def
+ /b bx 2 exp by 2 exp add sqrt def
+ /cx ax a div bx b div add def
+ /cy ay a div by b div add def
+ /c cx 2 exp cy 2 exp add sqrt def
+ %
+ % if c=0, then set the coordinates of the vector manually
+ % depending on the dotproduct (and thus, if 'a' and 'b'
+ % are parallel or antiparallel
+ c 0 eq
+ {/dotprod ax bx mul ay by mul add def
+ dotprod 0 gt
+ % if dotprod > 0 then a and b are parallel
+ {/cx ax def
+ /cy ay def}
+ % else a and b are antiparallel
+ {/cx ay def
+ /cy ax neg def} ifelse
+ /c a def
+ }if
+ /X@A XG cx c div add def
+ /Y@A YG cy c div add def
+ /X@B XG cx c div sub def
+ /Y@B YG cy c div sub def
+ %
+ % chirality:
+ % test the order of the input points as a input angle > 90°
+ % doesn't really make sens.
+ % So if 'chir' <= 0 exchange the calculated coordinates of
+ % A and B and otherwise leave it as is
+ /chir ax by mul ay bx mul sub def
+ chir 0 le
+ {/XAtmp X@A def
+ /YAtmp Y@A def
+ /X@A X@B def
+ /Y@A Y@B def
+ /X@B XAtmp def
+ /Y@B YAtmp def}if
+ X@A Y@A){tempNode@A}%
+ \pnode(! X@B Y@B){tempNode@B}%
+}\ignorespaces}%
+%
+%
+% If a macro requests only two points, they are equivalent to
+% 'tempNode@A' and 'tempNode@B'. But for easier implementation of other
+% macros the given points are assigned to the temporary nodes. In
+% addition \pst@regNodes defines the x- and the y-coordinate of the two
+% inputpoints (XA,YA) (XB,YB) in PS-Code
+%
+%
+\def\pst@regNodes#1#2{{%
+ \pnode(#1){tempNode@A}
+ \pnode(#2){tempNode@B}
+}\ignorespaces}%
+%
+%
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% COMPONENT WRAPPERS
+%
+\def\pst@lens[#1](#2)(#3)#4{{%
+ \pst@regNodes{#2}{#3}%
+ \pst@draw@component{#1}{#4}\pst@draw@lens%
+}\ignorespaces}%
+%
+%
+%
+\def\pst@pinhole[#1](#2)(#3)#4{{%
+ \pst@regNodes{#2}{#3}%
+ \pst@draw@component{#1}{#4}\pst@draw@pinhole%
+}\ignorespaces}%
+%
+%
+%
+\def\pst@mirror[#1](#2)(#3)(#4)#5{{%
+ \pst@calcNodes{#2}{#3}{#4}%
+ \pst@draw@component{#1}{#5}\pst@draw@mirror%
+}\ignorespaces}%
+%
+%
+%
+\def\pst@optgrid[#1](#2)(#3)(#4)#5{{%
+ \pst@calcNodes{#2}{#3}{#4}%
+ \pst@draw@component{#1}{#5}\pst@draw@optgrid%
+}\ignorespaces}%
+%
+%
+%
+\def\pst@beamsplitter[#1](#2)(#3)(#4)#5{{%
+ \pst@calcNodes{#2}{#3}{#4}%
+ \pst@draw@component{#1}{#5}\pst@draw@beamsplitter%
+}\ignorespaces}%
+%
+%
+%
+\def\pst@crystal[#1](#2)(#3)#4{{%
+ \pst@regNodes{#2}{#3}%
+ \pst@draw@component{#1}{#4}\pst@draw@crystal%
+}\ignorespaces}%
+%
+%
+%
+\def\pst@optbox[#1](#2)(#3)#4{{%
+ \pst@regNodes{#2}{#3}%
+ \psset{labeloffset=0}%
+ \pst@draw@component{#1}{#4}\pst@draw@optbox%
+}\ignorespaces}%
+%
+%
+%
+\def\pst@optplate[#1](#2)(#3)#4{{%
+ \pst@regNodes{#2}{#3}%
+ \pst@draw@component{#1}{#4}\pst@draw@optplate%
+}\ignorespaces}%
+%
+%
+%
+\def\pst@optretplate[#1](#2)(#3)#4{{%
+ \pst@regNodes{#2}{#3}%
+ \pst@draw@component{#1}{#4}\pst@draw@optretplate%
+}\ignorespaces}%
+%
+%
+%
+\def\pst@detector[#1](#2)(#3)#4{{%
+ \pst@regNodes{#2}{#3}%
+ \psset{endbox}
+ \pst@draw@component{#1}{#4}\pst@draw@detector%
+}\ignorespaces}%
+%
+%
+%
+\def\pst@polarisation[#1](#2)(#3){{%
+ \pst@regNodes{#2}{#3}%
+ \pst@draw@component{#1}{}\pst@draw@polarisation%
+}\ignorespaces}%
+%
+%
+%
+\def\pst@optdipole[#1](#2)(#3)#4#5{{%
+ \pst@regNodes{#2}{#3}%
+ \pst@draw@component{#1}{#5}{\pnode(0,0){tempNode@Label}#4}%
+}\ignorespaces}%
+%
+%
+%
+\def\pst@opttripole[#1](#2)(#3)(#4)#5#6{{%
+ \pst@calcNodes{#2}{#3}{#4}%
+ \pst@draw@component{#1}{#6}{\pnode(0,0){tempNode@Label}#5}%
+}\ignorespaces}%
+%
+%
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% DRAW COMPONENTS
+%
+% This macro is called by every unit
+%
+\def\pst@draw@component#1#2#3{{%
+ \psset{labelsep=1}%
+ \psset{#1}%
+%
+ \ifPst@optexp@endbox%
+ \psset{position=1}%
+ \fi%
+%
+% linestyle to use, if component should be marked as optional
+ \ifPst@optexp@component@optional
+ \psset{style=OptionalStyle}
+ \fi
+ \ncline[linestyle=none,fillstyle=none,npos=]{tempNode@A}{tempNode@B}%
+%
+% if parameter 'position' is given, use it for 'npos'
+ \ifx\psk@optexp@position\@empty
+%
+% then check if absolute positioning is wanted
+ \ifx\psk@optexp@abspos\@empty
+ \ncput[nrot=:U,npos=]{#3}
+ \else
+ \nlput[nrot=:U](tempNode@A)(tempNode@B){\psk@optexp@abspos}{#3}
+ \fi
+ \else
+ \ncput[nrot=:U,npos=\psk@optexp@position]{#3}
+ \fi
+ \ifPst@optexp@labelrelative
+ \ncline[linestyle=none]{tempNode@A}{tempNode@Label}
+ \ncput[nrot=:U,npos=1]{\rput[\psk@optexp@label@align](0,0){\psk@optexp@label@style #2}}%
+ \else
+ \nput[labelsep=\psk@optexp@label@offset]%
+ {\psk@optexp@label@angle}%
+ {tempNode@Label}%
+ {\rput[\psk@optexp@label@align](0,0){\psk@optexp@label@style #2}}%
+ \fi
+%
+% Show dots for debugging
+ \ifPst@optexp@debug@showoptdots
+ \psdot[linecolor=red](tempNode@Label)
+ \psdot[linecolor=black](tempNode@A)
+ \psdot[linecolor=black](tempNode@B)
+ \fi
+}\ignorespaces}%
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% MIRROR
+%
+\def\pst@draw@mirror{{%
+ \pstVerb{%
+ /m@width \psk@optexp@mirror@width\space def
+ }
+ \ifPst@optexp@variable
+ \psarc[linewidth=0.8\pslinewidth,arrowinset=0,arrowscale=0.8]{<->}
+ (! m@width 2 div 0.4 sub 0){0.6}{-20}{20}
+ \psarc[linewidth=0.8\pslinewidth,arrowinset=0,arrowscale=0.8]{<->}
+ (! m@width 2 div 0.4 sub neg 0){0.6}{160}{200}
+ \fi
+ \psline[linewidth=\psk@optexp@mirror@linewidth](! m@width -2 div 0)(! m@width 2 div 0)
+%
+% piezo
+ \ifx\psk@optexp@mirror@type\pst@string@mirror@type@piezo%
+ \psframe[style=PiezoMirror](! m@width 8 div 0)(! m@width -8 div m@width 5 div)
+ \psbezier(! 0 m@width 5 div)%
+ (! 0 m@width 3 div)%
+ (! m@width 4 div m@width 4 div)%
+ (! m@width 8 div m@width 2 div)%
+ \fi
+ \ifx\psk@optexp@mirror@type\pst@string@mirror@type@extended%
+ \psframe[style=ExtendedMirror]%
+ (! m@width -2 div \psk@optexp@mirror@depth\space )%
+ (! m@width 2 div 0)%
+ \fi
+%
+% labelnode
+ \pnode(0,0){tempNode@Label}
+}\ignorespaces}%
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% LENS
+%
+\def\pst@draw@lens{{%
+%
+ \pstVerb{%
+ /lens@h \psk@optexp@lens@height\space 2.0 div def
+ }%
+ %
+ \ifnum\psk@optexp@lens@type<3
+ %
+ % CONVEX
+ %
+ % Use only parameters 'lenswidth' and 'lensheight' to draw the lens, if 'lensradius'
+ % is not set
+ %
+ \ifx\psk@optexp@lens@radius\@empty
+ \pstVerb{%
+ /lens@a \psk@optexp@lens@width\space 2.0 div def
+ /lens@r lens@a 2.0 div lens@h lens@h mul 2.0 lens@a mul div add def
+ }%
+ %
+ % otherwise use 'lensradius' and 'lensheight'
+ %
+ \else
+ \pstVerb{%
+ /lens@r \psk@optexp@lens@radius\space def
+ /lens@a lens@r lens@r 2 exp lens@h 2 exp sub sqrt sub def
+ }%
+ \fi%
+ %
+ % draw the lens
+ %
+ \pstVerb{%
+ /lens@d lens@r lens@a sub def
+ /lens@alpha lens@h lens@d atan def
+ /lens@yshift lens@d def
+ }%
+ \else
+ %
+ % CONCAVE
+ %
+ % All three parameters 'lensheight', 'lenswidth' and 'lensradius' are needed
+ \pstVerb{%
+ /lens@a \psk@optexp@lens@width\space 2.0 div def
+ }%
+ \ifx\psk@optexp@lens@radius\@empty
+ \pstVerb{%
+ /lens@r lens@h 1.5 mul def
+ }%
+ \else
+ \pstVerb{%
+ /lens@r \psk@optexp@lens@radius\space def
+ }%
+ \fi%
+ %
+ %
+ %
+ \pstVerb{%
+ /lens@d lens@r dup mul lens@h dup mul sub sqrt def
+ /lens@alpha lens@h lens@d atan def
+ /lens@yshift lens@r lens@a add def
+ }%
+ \fi%
+ %
+ %
+ \def\temp@LeftPlot{%
+ \parametricplot[plotstyle=curve,arrows=c-c]{-1}{1}{%
+ lens@r lens@alpha t mul 180 add cos mul lens@yshift add lens@r lens@alpha t mul 180 add sin mul}%
+ }%
+ \def\temp@RightPlot{%
+ \parametricplot[plotstyle=curve,arrows=c-c]{-1}{1}{%
+ lens@r lens@alpha t mul cos mul lens@yshift sub lens@r lens@alpha t mul sin mul}%
+ }%
+ %
+ %
+ \pscustom{%
+ \ifcase\psk@optexp@lens@type
+ % plainconvex
+ \temp@RightPlot%
+ \closepath%
+ \or%
+ % convexplain
+ \temp@LeftPlot%
+ \closepath%
+ \or%
+ % biconvex
+ \temp@LeftPlot%
+ \temp@RightPlot%
+ \or%
+ % plainconcave
+ \temp@LeftPlot%
+ \psline{c-c}(! 0 lens@h neg)%
+ (! 0 lens@h)%
+ (! lens@r lens@d sub lens@a add lens@h)%
+ \or%
+ % concaveplain
+ \temp@RightPlot%
+ \psline{c-c}(! 0 lens@h)%
+ (! 0 lens@h neg)%
+ (! lens@r lens@d sub lens@a add neg lens@h neg)%
+ \or%
+ % biconcave
+ \temp@RightPlot%
+ \psline{c-c}(! lens@r lens@d sub lens@a add lens@h)%
+ \temp@LeftPlot%
+ \psline{c-c}(! lens@r lens@d sub lens@a add neg lens@h neg)%
+ \fi%
+ }
+%
+% labelnode
+ \pnode(0,0){tempNode@Label}
+}\ignorespaces}%
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% PINHOLE
+%
+\def\pst@draw@pinhole{{%
+ \psline[linewidth=\psk@optexp@pinhole@linewidth]%
+ (! 0 \psk@optexp@pinhole@owidth\space 2 div)%
+ (! 0 \psk@optexp@pinhole@iwidth\space 2 div)%
+ \psline[linewidth=\psk@optexp@pinhole@linewidth]%
+ (! 0 \psk@optexp@pinhole@owidth\space -2 div)%
+ (! 0 \psk@optexp@pinhole@iwidth\space -2 div)%
+%
+% labelnode
+ \pnode(0,0){tempNode@Label}
+}\ignorespaces}
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% BEAMSPLITTER
+%
+\def\pst@draw@beamsplitter{{%
+ \pstVerb{%
+ /bs@width \psk@optexp@bswidth\space 2.0 div def
+ }%
+ \psline{cc-cc}(! bs@width neg 2 sqrt mul 0)%
+ (! bs@width 2 sqrt mul 0)
+ \rput[c]{45}(0,0){\psframe(! bs@width neg bs@width neg)(! bs@width bs@width)}
+%
+% labelnode
+ \pnode(0,0){tempNode@Label}
+}\ignorespaces}%
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% CRYSTAL
+%
+\def\pst@draw@crystal{{%
+ \rput[c]{\psk@optexp@angle}(0,0){%
+ \pstVerb{%
+ /c@width \psk@optexp@crystal@width\space 2 div def
+ /c@height \psk@optexp@crystal@height\space 2 div def
+ /c@caxisL \psk@optexp@crystal@caxislength\space 2 div def}%
+ \psframe(! c@width neg c@height neg)(! c@width c@height)
+ \ifPst@optexp@crystal@voltage%
+ \psline(! c@width 4 div 3 mul neg c@height)%
+ (! c@width 4 div 3 mul neg c@height 0.2 add)
+ \pscircle[fillstyle=solid,%
+ fillcolor=white](! c@width 4 div 3 mul neg c@height 0.2 add){0.04}
+ \psline(! c@width 4 div 3 mul neg c@height neg)%
+ (! c@width 4 div 3 mul neg c@height neg 0.2 sub)%
+ \psline(! c@width 4 div 3 mul neg 0.15 sub c@height neg 0.2 sub)%
+ (! c@width 4 div 3 mul neg 0.15 add c@height neg 0.2 sub)%
+ \fi
+%
+ \ifPst@optexp@crystal@lamp
+ \rput{180}(! c@width c@height 1.4 \psk@optexp@lamp@scale\space mul add){\lamp}%
+ \fi
+ \ifPst@optexp@crystal@caxisinv
+ \psline[linestyle=dashed,%
+ dash=2pt 2pt,%
+ linewidth=0.7\pslinewidth,%
+ arrowinset=0]{->}%
+ (! 0 c@height neg)(! 0 c@height c@caxisL add)%
+ \else
+ \psline[linestyle=dashed,%
+ dash=2pt 2pt,%
+ linewidth=0.7\pslinewidth,%
+ arrowinset=0]{->}%
+ (! 0 c@height)(! 0 c@height neg c@caxisL sub)%
+ \fi
+ }%
+%
+% labelnode
+ \pnode(0,0){tempNode@Label}
+}\ignorespaces}%
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% POLARISATION
+%
+%
+\def\pst@draw@polarisation{{%
+%
+ \ifx\psk@optexp@pol\pst@string@pol@polparallel
+ \psline[linestyle=solid,linewidth=\psk@optexp@polarisation@linewidth,arrowscale=0.8]{<->}%
+ (! 0 \psk@optexp@polarisation@width\space 2 div neg)%
+ (! 0 \psk@optexp@polarisation@width\space 2 div)%
+ \fi
+ \ifx\psk@optexp@pol\pst@string@pol@polperp
+ \psdot[dotsize=0.05](0,0)%
+ \pscircle[fillstyle=none,linestyle=solid,linewidth=\psk@optexp@polarisation@linewidth](0,0){0.12}%
+ \fi
+ \ifx\psk@optexp@pol\pst@string@pol@polmisc
+ \psline[linestyle=solid,linewidth=\psk@optexp@polarisation@linewidth,arrowscale=0.8]{<->}%
+ (! 0 \psk@optexp@polarisation@width\space 2 div neg)%
+ (! 0 \psk@optexp@polarisation@width\space 2 div)%
+ \psdot[dotsize=0.05](0,0)%
+ \pscircle[fillstyle=none,linestyle=solid,linewidth=0.7\pslinewidth](0,0){0.12}
+ \fi
+ \ifx\psk@optexp@pol\pst@string@pol@polrcirc
+ \psellipticarc[linewidth=\psk@optexp@polarisation@linewidth]{->}(0,0)(!
+ \psk@optexp@polarisation@width\space 4 div
+ \psk@optexp@polarisation@width\space 2 div)%
+ {20}{-20}
+ \fi
+ \ifx\psk@optexp@pol\pst@string@pol@pollcirc
+ \psellipticarc[linewidth=\psk@optexp@polarisation@linewidth]{<-}(0,0)(!
+ \psk@optexp@polarisation@width\space 4 div
+ \psk@optexp@polarisation@width\space 2 div)%
+ {20}{-20}
+ \fi
+}\ignorespaces}%
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% OPTICAL GRID
+%
+\def\pst@draw@optgrid{{%
+ \pstVerb{%
+ /g@count \psk@optexp@optgrid@count\space def
+ /g@width \psk@optexp@optgrid@width\space 2 div def
+ /g@height \psk@optexp@optgrid@height\space def
+ /g@depth \psk@optexp@optgrid@depth\space def
+ /g@step g@width 2 mul g@count div def}%
+ \ifPst@optexp@reverse%
+ \pscustom[linewidth=\psk@optexp@optgrid@linewidth]{%
+ \psline(! g@width g@depth)(! g@width g@height)%
+ (! g@width neg g@height)(! g@width neg g@depth)
+ \multido{\i=0+1}{\psk@optexp@optgrid@count}{%
+ \psline{cc-cc}(! g@width neg \i\space g@step mul add g@depth)%
+ (! g@width neg \i\space g@step mul add 0)%
+ (! g@width neg \i\space 1 add g@step mul add g@depth)%
+ }
+ }%
+ \else%
+ \pscustom[linewidth=\psk@optexp@optgrid@linewidth]{%
+ \psline(! g@width g@depth)(! g@width g@height)%
+ (! g@width neg g@height)(! g@width neg g@depth)
+ \multido{\i=0+1}{\psk@optexp@optgrid@count}{%
+ \psline{cc-cc}(! g@width neg \i\space g@step mul add g@depth)%
+ (! g@width neg \i\space 1 add g@step mul add 0)%
+ (! g@width neg \i\space 1 add g@step mul add g@depth)%
+ }
+ }%
+ \fi%
+%
+% labelnode
+ \pnode(0,0){tempNode@Label}
+}\ignorespaces}%
+%
+% OPTBOX
+%
+\def\pst@draw@optbox{{%
+ \ifPst@optexp@endbox
+ \pnode(!%
+ /box@width \psk@optexp@optbox@width\space def
+ /box@height \psk@optexp@optbox@height\space def
+ box@width 2 div 0){tempNode@Label}%
+ \psframe(! 0 box@height 2 div neg)%
+ (! box@width box@height 2 div)%
+ \else
+ \pnode(!%
+ /box@width \psk@optexp@optbox@width\space def
+ /box@height \psk@optexp@optbox@height\space def
+ 0 0){tempNode@Label}%
+ \rput{\psk@optexp@angle}(0,0){%
+ \psframe(! box@width 2 div neg box@height 2 div neg)%
+ (! box@width 2 div box@height 2 div)%
+ }%
+ \fi
+}\ignorespaces}%
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% OPTPLATE
+%
+\def\pst@draw@optplate{{%
+ \psline[linewidth=\psk@optexp@plate@linewidth]%
+ (! 0 \psk@optexp@plate@height\space 2 div neg)%
+ (! 0 \psk@optexp@plate@height\space 2 div)
+%
+% labelnode
+ \pnode(0,0){tempNode@Label}
+}\ignorespaces}%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% DETECTOR
+%
+\def\pst@draw@detector{{%
+ \pnode(! \psk@optexp@detector@size\space 3 div 0){tempNode@Label}%
+ \pswedge(0,0){\psk@optexp@detector@size}{-90}{90}
+}\ignorespaces}%
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% OPTRETPLATE
+%
+\def\pst@draw@optretplate{{%
+ \pstVerb{%
+ /orp@height \psk@optexp@plate@height\space 2.0 div def
+ /orp@width \psk@optexp@plate@width\space 2.0 div def
+ }%
+ \psframe(! orp@width neg orp@height neg)(! orp@width orp@height)
+ \psline{cc-cc}(! orp@width neg orp@height)%
+ (! orp@width orp@height neg)
+%
+% labelnode
+ \pnode(0,0){tempNode@Label}
+}\ignorespaces}%
+%
+%
+%
+\def\lamp{{%
+ \psset{linewidth=0.6\pslinewidth}
+ \pstVerb{/l@s \psk@optexp@lamp@scale\space def}
+%
+ \pscurve[fillstyle=none](! -0.05 l@s mul 0)%
+ (! -0.1 l@s mul 0.15 l@s mul)%
+ (! -0.2 l@s mul 0.25 l@s mul)%
+ (! -0.25 l@s mul 0.5 l@s mul)%
+ (! 0 0.7 l@s mul)%
+ (! 0.25 l@s mul 0.5 l@s mul)%
+ (! 0.2 l@s mul 0.25 l@s mul)%
+ (! 0.1 l@s mul 0.15 l@s mul)%
+ (! 0.05 l@s mul 0)
+ \multido{\i=-210+40}{7}{%
+ \rput{\i}(! 0 0.45 l@s mul){\psline(! -0.35 l@s mul 0)(! -0.6 l@s mul 0)}
+ }
+}\ignorespaces}
+%
+%
+\endinput
+%
diff --git a/Master/texmf-dist/tex/latex/pst-optexp/pst-optexp.sty b/Master/texmf-dist/tex/latex/pst-optexp/pst-optexp.sty
new file mode 100644
index 00000000000..3f8357a1ec7
--- /dev/null
+++ b/Master/texmf-dist/tex/latex/pst-optexp/pst-optexp.sty
@@ -0,0 +1,16 @@
+\ProvidesPackage{pst-optexp}[2007/07/18 package wrapper for
+pst-optexp.tex]
+\RequirePackage{pstricks}
+\RequirePackage{pst-xkey}
+\RequirePackage{pst-node}
+\RequirePackage{pst-plot}
+\RequirePackage{multido}
+%
+\RequirePackage{pstricks-add}
+\let\pstricksaddfileversion\fileversion
+%
+%
+\input{pst-optexp.tex}
+\ProvidesFile{pst-optexp.tex}
+ [\filedate\space v\fileversion\space `PST-optexp']
+\endinput
diff --git a/Master/tlpkg/tlpsrc/collection-pstricks.tlpsrc b/Master/tlpkg/tlpsrc/collection-pstricks.tlpsrc
index 6e372e6ce10..8c49608001e 100644
--- a/Master/tlpkg/tlpsrc/collection-pstricks.tlpsrc
+++ b/Master/tlpkg/tlpsrc/collection-pstricks.tlpsrc
@@ -30,6 +30,7 @@ depend Package/pst-labo
depend Package/pst-lens
depend Package/pst-light3d
depend Package/pst-math
+depend Package/pst-optexp
depend Package/pst-optic
depend Package/pst-osci
depend Package/pst-pdgr
diff --git a/Master/tlpkg/tlpsrc/pst-optexp.tlpsrc b/Master/tlpkg/tlpsrc/pst-optexp.tlpsrc
new file mode 100644
index 00000000000..b993a35618c
--- /dev/null
+++ b/Master/tlpkg/tlpsrc/pst-optexp.tlpsrc
@@ -0,0 +1,2 @@
+name pst-optexp
+category Package