From aea330a2bc712291777bdb4bf73fe68b594227ff Mon Sep 17 00:00:00 2001 From: Karl Berry Date: Sat, 28 Jul 2007 00:27:44 +0000 Subject: new pstricks package pst-optexp git-svn-id: svn://tug.org/texlive/trunk@4671 c570f23f-e606-0410-a88d-b1316a301751 --- Build/cdbuild/ctan2tds.pl | 1 + Build/tools/tpm-ctan-check | 3 +- Master/texmf-dist/doc/generic/pst-optexp/README | 14 + .../doc/generic/pst-optexp/doc/parque-nacional.eps | 286 +++++++ .../doc/generic/pst-optexp/doc/pst-optexp-doc.pdf | Bin 0 -> 259301 bytes .../doc/generic/pst-optexp/doc/pst-optexp-doc.tex | 726 +++++++++++++++++ .../tex/generic/pst-optexp/pst-optexp.tex | 884 +++++++++++++++++++++ .../texmf-dist/tex/latex/pst-optexp/pst-optexp.sty | 16 + Master/tlpkg/tlpsrc/collection-pstricks.tlpsrc | 1 + Master/tlpkg/tlpsrc/pst-optexp.tlpsrc | 2 + 10 files changed, 1932 insertions(+), 1 deletion(-) create mode 100644 Master/texmf-dist/doc/generic/pst-optexp/README create mode 100644 Master/texmf-dist/doc/generic/pst-optexp/doc/parque-nacional.eps create mode 100644 Master/texmf-dist/doc/generic/pst-optexp/doc/pst-optexp-doc.pdf create mode 100644 Master/texmf-dist/doc/generic/pst-optexp/doc/pst-optexp-doc.tex create mode 100644 Master/texmf-dist/tex/generic/pst-optexp/pst-optexp.tex create mode 100644 Master/texmf-dist/tex/latex/pst-optexp/pst-optexp.sty create mode 100644 Master/tlpkg/tlpsrc/pst-optexp.tlpsrc 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`[\![LbIS[utmW+pLKbgIj#Umkd]=W=Y>Q6Op+D/T;\oX5dX<,'8Uf9U^ +O$OnX=eS$OM,T@1O+HIQ&?S\r.:\IUs4SMeVHdCR!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,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^B0/%$;/9`@X4j11l,D1DL +Ia*,W_KL4bBMP*.[&PC$WSn(o4`NB3b0k.<,u/DC>09AIs@H>?nAY-tgo)OpXT>j +U*#8gS>@PH&3E/@C&:aTsfVT[kGS"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[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$<'Fj(0b"DnVr,UlX7cC%__o0se-@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 +are(ho`0m\Ddh[lu0=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'^S<60GE.XE2H>K0F;O +cOn-C:H5lm\PW?;fYIn3JucXcOION.fLdSjp2R)>iHBF@%>N*1>P+F%i2iRSkOEC +Z8las)5QQ6fBt7,>t=#6b/K:uNmV3_)'-!lD6_LeKnl$0CA +H-^Vpk)4h`[O8o(<;`bcOqUoT1_e!`$@17g-%+`lYfnMX +?d5;0jK?MI[QgG#CfCO^-KD7lq].l)r,qp2[%s%ZO>C]#Si*rf@gZSubC2);L5T* +,o#ds:q8->jBf8b>E.no9u>Eiiq_oZbnkLf +`(s2AUe`VRj'"p#PAT;rrBp4Ir^pGN?!D3A]q9(,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-a.7Hl_L*MbQ]5SBNDDE.VID!B,X!Y4Q^5u)apK[tHX+Ie\Jeci29!!\S%lo +6P(J:kW"=<3Zm;91h>D^6QZ*#&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&NRafYh,%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&'r1NF#*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#\$ +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!bp*.SC;.ug +@AI=AVjYM>aJ'o&i(.#!*c%j_Q]M$iJ/57K#(B1YYo +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 +,&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&>`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*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^9gh-PM^J0Jcu%c,^)8 +@+"KN^tUL]>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':em=K#Wge$L[+ia2pP;u41:+DT#Q#j=TMcM\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;-Ua!`i;Bjbg%,q/cn8ouZ,3b[9O@D:ReTbr9dSi!BS*(PWnUaKcD9.mh43A/LT5aZ +@>Toh]RAfST=3o_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[O9sV'T.G+Z;C9X?2YD;oq<.!(M`:rr=.s)GOnb8%c&Job.i$J*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'i2>G;-W%EnHFEq+oa,fd!\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%ipp\.up)U;7C+F +1EaXOU$nl2tBgoVeVDfgmuiOSjGJT8P\@HeV8@ +?Fa8G6&L;`lHqlb7)4pY8X7.C3R_gPoU))?0]Ce@Cn'jT,VXd.=#=MjSKolqiZA` +HQ?drNaN/+U^GeGo6-+'qGiol&ZCphe[UIo4D$N%!cWE9$`CXih]8M]EP`_<>ao +K/kQc+4dMq.j]#Ghl9WFdUS<]oW(K3;K;@6A/G_'>s4m&dpA0fgIk=38lArdmbru:%PYJRM)9K6rr?I>A4f*+> +KSF#*h.%gL"Ku!b#B$JAWrHsc(m7HeeBjW+I8Ka=u;!"dB&WM[%< +?K0#RAm=("ej7M2k0;)akiUIPnF?fdC.qNZ`(h!)9QCg>\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&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 +D4hYtOf)g&O0.trsBqtkTZjR#4$NN;>Zm3$r+.'b= +,)=;'Si:V@$t3re22X)X[+qJTMp/\q.VWdnK&T^J(NXPl-!.iK)CHDU`Vcf9 +^1@rplmPKDjk8ONi=Gq&UU]1W".@bKPKj1=LoO.bk=-e@#hRXo"gMTc(h$;5EFmDA"WL\6"A%$* +b1Y6D/g!ZBDDuR'ao(UbNCe/f(@i,5)UXH@g_#Ybe6A<*,@0D08r_SYEM?-0ddTmo3P,$Hjj^rDOb<`et5C +Z\JJ[l[D^r9#@m_SNj,ab'8oom;d2Yf.NW,%!:M$Z#]P;-^:6KF[oXakmSVXYe6J3&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$?]\Ci;:j'\V/Dq;j"/VYW>:eFh;K]CQVNTpOTlkCt(DkTcHhEEC +<#!f4D^sJ2V+8%WDEkib1NTm#1Wr*rhG]CK\!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[/Q44_bBGj2U])ds10ee-)%SSP>YWn0oh]a9ieSg3&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/$sB2HKPto@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&9YJjBXUrGYDQl$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]HPB +W@5l^!.Z\$/[i]5d\rOK#?0^?Q1m,;DBu((ER(eM2$!%K]6D/*cNrbA*%rY_^1G6 +oi(WGIZ^?t#>r,\RC-0'Ge>,*29S` +1J#J5AlQNGQ?tBn+/i)![_X=[TT7A%D@!c'-)O;%R[,@0E`@(]b5m_`^&H8IqmML +$3`GCLQ8.5[Ka6CB[cm4s-.7VT2N5:lAoEMfA[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)OqMi/%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( +_+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(%%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*[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 Binary files /dev/null and b/Master/texmf-dist/doc/generic/pst-optexp/doc/pst-optexp-doc.pdf 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 +%% +%% 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 -- cgit v1.2.3