From 59161ce421c69ad679d1c22d540f51b9e68a2497 Mon Sep 17 00:00:00 2001 From: Karl Berry Date: Sun, 13 Jul 2014 21:30:08 +0000 Subject: pst-optexp git-svn-id: svn://tug.org/texlive/trunk@34592 c570f23f-e606-0410-a88d-b1316a301751 --- .../texmf-dist/tex/latex/pst-optexp/pst-optexp.sty | 282 ++++++++++----------- 1 file changed, 137 insertions(+), 145 deletions(-) (limited to 'Master/texmf-dist/tex/latex/pst-optexp') diff --git a/Master/texmf-dist/tex/latex/pst-optexp/pst-optexp.sty b/Master/texmf-dist/tex/latex/pst-optexp/pst-optexp.sty index c4936e3a675..02f6447b991 100644 --- a/Master/texmf-dist/tex/latex/pst-optexp/pst-optexp.sty +++ b/Master/texmf-dist/tex/latex/pst-optexp/pst-optexp.sty @@ -9,7 +9,7 @@ %% This is a generated file. %% %% Project: pst-optexp -%% Version: 4.8 (2014/02/28) +%% Version: 4.10 (2014/06/04) %% %% Copyright (C) 2007-2014 by Christoph Bersch %% @@ -31,7 +31,7 @@ %% \NeedsTeXFormat{LaTeX2e}[1999/12/01] \ProvidesPackage{pst-optexp} - [2014/02/28 v4.8 Optical experimental setups with PSTricks] + [2014/06/04 v4.10 Optical experimental setups with PSTricks] \RequirePackage{ifthen} \RequirePackage{pstricks} \RequirePackage{pst-xkey} @@ -723,6 +723,23 @@ \psset[optexp]{optboxwidth=#1, optboxheight=#2}% }% \psset[optexp]{optboxsize=1.4 0.8}% +\define@key[psset]{optexp}{sourcewidth}{% + \pst@checknum{#1}\POE@key@sourcewidth +} +\define@key[psset]{optexp}{sourceheight}{% + \pst@checknum{#1}\POE@key@sourceheight +} +\define@key[psset]{optexp}{sourcesize}{% + \pst@expandafter\POE@psset@@sourcesize{#1} {} {} {}\@nil +}% +\def\POE@psset@@sourcesize#1 #2 #3\@nil{% + \ifx\\#2\\% + \PackageWarning{pst-optexp}{% + Parameter 'sourcesize' requires two numbers.}% + \fi + \psset[optexp]{sourcewidth=#1, sourceheight=#2}% +}% +\psset[optexp]{sourcesize=1.4 0.8}% \define@key[psset]{optexp}{arrowcompwidth}{% \pst@checknum{#1}\POE@key@arrowcompwidth } @@ -1587,7 +1604,7 @@ \pst@getint{#1}\POE@key@beampathcount }% \define@choicekey+[psset]{optexp}{beamalign}% - [\val\nr]{rel,abs,relative,absolute}% + [\val\nr]{rel,abs,relative,absolute,firstcomp}% {% \ifcase\nr\relax \let\POE@key@beamalign\POE@str@relative @@ -2263,9 +2280,11 @@ /beamalign \ifx\POE@key@beamalign\POE@str@absolute\space absolute - \else + \else\ifx\POE@key@beamalign\POE@str@relative\space relative - \fi def + \else + firstcomp + \fi\fi def /beampathskip \POE@key@beampathskip\space def \POE@key@beampathcount\space dup -1 gt { beampathskip add } if /beampathcount ED /useNA \ifPOE@useNA true \else false \fi def @@ -2331,6 +2350,7 @@ \ifx\pslinestyle\@none\ifx\psk@ArrowInside\@empty 1\else 0\fi\else 0\fi \addto@pscode{ cleartomark false false }% \else + \POE@HandleSourceBeam \addto@pscode{% {/nbeam {\POE@key@n cvx exec} bind def \ifPOE@pswarning @@ -2346,7 +2366,7 @@ 0 exch } if } ifelse \tx@ScreenCoor] cvx - \POE@key@beamangle\space + beamangle currentdict /lastBeamPointTmp undef currentdict /lastVecTmp undef loadbeampoints 1 ge @@ -2385,7 +2405,30 @@ \def\POE@strokesinglebeam{% gsave /Lineto /lineto load def - \tx@Drawbeam + 20 dict begin + DrawbeamPrepare + counttomark 3 gt { + \ifx\psk@arrowA\arrowType@H + \pst@number\pshooklength + \else + \psk@arrowsize\space CLW mul add dup \psk@arrowlength\space mul exch \psk@arrowinset mul neg add + \fi + /arrowlength exch def + /arrowminlength \POE@key@ArrowInsideMinLength\space\pst@number\psunit mul def + /arrowmaxlength \POE@key@ArrowInsideMaxLength\space\pst@number\psunit mul def + /arrowpos \psk@ArrowInsidePos\space def + /arrowno \psk@ArrowInsideNo\space cvi def + /ArrowPosStart \psk@ArrowInsideOffset\space def + /dArrowPosStart \psk@ArrowInsidePos\space def + counttomark 3 idiv /N exch def + (\psk@ArrowInside) length 0 gt { + DrawbeamArrowInside + }{ + DrawbeamSimple + } ifelse + } if + cleartomark + end \tx@setlinejoin \pst@number\pslinewidth SLW \pst@usecolor\pslinecolor @@ -2395,6 +2438,7 @@ }% \def\drawwidebeam@ii{% \def\pst@fill##1{ gsave ##1 grestore }% + \POE@HandleSourceBeam \addto@pscode{% {/nbeam {\POE@key@n cvx exec} bind def \ifPOE@pswarning @@ -2404,8 +2448,8 @@ \fi}% }% \addto@pscode{% - \POE@key@beamangle\space dup - \POE@key@beamdiv\space 0.5 mul dup 4 -1 roll add 3 1 roll sub + beamangle dup + beamdiv 0.5 mul dup 4 -1 roll add 3 1 roll sub }% \addto@pscode{% [ \POE@key@beampos\space counttomark dup @@ -2416,12 +2460,11 @@ 0 exch } if } ifelse - mark \POE@key@beamwidth\space counttomark 0 eq { - 0 + currentdict /beamwidth known { + beamwidth currentdict /beamwidth undef } { - 0.5 mul - } ifelse - exch pop + mark \POE@key@beamwidth\space counttomark 0 eq { 0 } if exch pop + } ifelse 0.5 mul 3 copy add \tx@ScreenCoor\space ToVec 5 1 roll sub \tx@ScreenCoor ] cvx @@ -2499,96 +2542,6 @@ { \tx@NodeScale @NewNode @NewNode } if }% }% -\pst@def{Drawbeam}< - { counttomark 6 le { - exit - } if - 3 index not { - pop pop pop - }{ - exit - } ifelse - } loop - { counttomark 3 le { - exit - } if - counttomark 3 sub index not { - counttomark -3 roll pop pop pop - }{ - exit - } ifelse - } loop - counttomark 3 le { - cleartomark - }{ - counttomark 3 div cvi /N ED - (\psk@ArrowInside) length 0 gt { - \ifx\psk@arrowA\arrowType@H % do we have a Hook arrow at the beginning? - \pst@number\pshooklength % yes - \else - \psk@arrowsize\space CLW mul add dup \psk@arrowlength\space mul exch \psk@arrowinset mul neg add - \fi - /arrowlength exch def - 6 copy pop % copy all four values for the arrow line - /y1 ED /x1 ED pop /y2 ED /x2 ED % save them - /Alpha y2 y1 sub x2 x1 sub Atan def % the gradient of the line - pop 3 -1 roll 5 1 roll - ArrowA - x1 Alpha cos arrowlength mul add % dx add - y1 Alpha sin arrowlength mul add % dy add, to get the current point at the end of the arrow tip - 5 -1 roll 3 1 roll true - /N N 1 sub def - N { - 6 copy pop - /y1 ED /x1 ED pop /y2 ED /x2 ED /draw ED - x1 y1 x2 y2 @ABDist dup - \POE@key@ArrowInsideMinLength\space\pst@number\psunit mul ge - exch \POE@key@ArrowInsideMaxLength\space\pst@number\psunit mul dup 0 lt - 3 1 roll le or and { - x1 y1 - \psk@ArrowInsidePos\space 1 gt { - /Alpha y2 y1 sub x2 x1 sub Atan def - /ArrowPos \psk@ArrowInsideOffset\space def - /dArrowPos \psk@ArrowInsidePos\space abs def - \psk@ArrowInsideNo\space cvi { - /ArrowPos ArrowPos dArrowPos add def - x1 Alpha cos ArrowPos mul add - y1 Alpha sin ArrowPos mul add - 6 index { ArrowInside } if - pop pop - } repeat - }{ - /ArrowPos \psk@ArrowInsideOffset\space def - /dArrowPos \psk@ArrowInsideNo 1 gt {% - 1.0 \psk@ArrowInsideNo 1.0 add div - }{\psk@ArrowInsidePos } ifelse def - \psk@ArrowInsideNo\space cvi { - /ArrowPos ArrowPos dArrowPos add def - x2 x1 sub ArrowPos mul x1 add - y2 y1 sub ArrowPos mul y1 add - 6 index { ArrowInside } if - pop pop - } repeat - } ifelse - pop pop - } if - draw {Lineto}{moveto} ifelse - } repeat - }{ - pop 5 copy 3 -1 roll pop - ArrowA pop pop pop pop - counttomark 3 idiv -1 2 { - pop { - lineto - }{ - moveto - } ifelse - } for - } ifelse - {CP 4 2 roll ArrowB lineto pop pop } {moveto} ifelse - pop - } ifelse -> \def\POE@getcomprange#1-#2\@nil{% \ifx\\#2\\% \ifx\\#1\\% @@ -3002,41 +2955,6 @@ }% \ignorespaces}% \let\newOptexpElecComp\newOptexpFiberComp -\def\POE@compalias#1#2{% - \POE@Verb{% - /\oenode{}{#2} dup currentdict exch known { - load /\oenode{}{#1} ED - } { - pop - } ifelse - (\oenode{}{#1}) (\oenode{}{#2}) - tx@NodeDict begin - 1 { - 3 copy inttostr dup - 3 1 roll 2 copy NodeName - currentdict exch known { - NodeName load 3 1 roll NodeName ED - 1 add - } { - pop (N) NodeName load 3 1 roll - pop (N) NodeName ED - pop exit - } ifelse - } loop - [ (A) (B) (@A) (@B) (Center) (Label) (Rotref) - (TrefA) (TrefB) (@TrefA) (@TrefB) (Ext) - counttomark { - counttomark 3 add -2 roll 2 copy counttomark 1 add 2 roll - 3 -1 roll dup 4 1 roll NodeName dup - currentdict exch known { - load 3 1 roll exch NodeName ED - } { - pop pop pop - } ifelse - } repeat pop pop pop - end - }% -\ignorespaces}% \def\optplane{% \@ifnextchar[%] {\optplane@i}{\optplane@i[]}% @@ -3047,6 +2965,43 @@ (! \POE@tempa exch 1 sub exch \tx@UserCoor)% (! \POE@tempa exch 1 add exch \tx@UserCoor)% \ignorespaces}% +\def\POE@SaveBeamParameters{% + \let\POE@tempA\POE@key@beamangle + \let\POE@tempB\POE@key@beamdiv + \let\POE@tempC\POE@key@beamwidth + \let\POE@tempD\POE@key@beamalign + \let\POE@key@beamangle\relax + \let\POE@key@beamdiv\relax + \let\POE@key@beamwidth\relax + \let\POE@key@beamalign\relax +}% +\def\POE@SetSourceAndRestoreBeamParameters{% + \let\POE@key@sourcebeamangle\POE@key@beamangle + \let\POE@key@sourcebeamdiv\POE@key@beamdiv + \let\POE@key@sourcebeamwidth\POE@key@beamwidth + \let\POE@key@sourcebeamalign\POE@key@beamalign + \let\POE@key@beamangle\POE@tempA + \let\POE@key@beamdiv\POE@tempB + \let\POE@key@beamwidth\POE@tempC + \let\POE@key@beamalign\POE@tempD +}% +\def\POE@HandleSourceBeam{% + \addto@pscode{% + counttomark 0 eq not { + dup cvn load dup /source known { + /source get { def } forall + }{ pop } ifelse + } if + beamalign firstcomp eq { + dup dup (Center) NodeName tx@NodeDict exch known not { + pop /beamalign relative def + } { + RelConnAngle@tref exch atan /beamangle exch def + /beamalign absolute def + } ifelse + } if + }% +}% \def\begin@OptexpObj{% \global\advance\POE@cnt by 1 \addbefore@par{compname={}}% @@ -3054,7 +3009,9 @@ \begingroup \POE@insideobjtrue \POE@Verb{InitOptexpComp }% + \POE@SaveBeamParameters \use@par + \POE@SetSourceAndRestoreBeamParameters \let\POE@key@comp@Yshift\POE@key@compshift% \let\POE@key@comp@Xshift\POE@key@compoffset% \edef\POE@refnodeA{\oenodeRefA{}}% @@ -3090,9 +3047,16 @@ \POE@transformnode{\oenode@RefB{}}{\oenode@TrefB{}}% }% }% +\def\POE@unsetbeamparameters{% + \let\POE@key@beamangle\relax + \let\POE@key@beamdiv\relax + \let\POE@key@beamwidth\relax +}% \def\end@OptexpObj{% \ifnum9<1\POE@key@compname\else - \POE@compalias{\POE@key@compname}{\the\POE@cnt}% + \POE@Verb{ + (\oenode{}{\POE@key@compname}) + (\oenode{}{\the\POE@cnt}) CompAlias }% \fi \endgroup \ignorespaces% @@ -3283,7 +3247,7 @@ \ifPOE@backlayer \POE@Verb{% (1) (3) (\oenode{}{}) CorrectDipoleIfc - (2) (N) (\oenode{}{}) CorrectDipoleIfc + (2) (4) (\oenode{}{}) CorrectDipoleIfc }% \ifPOE@fiberpresetin@ \ifPOE@fiberpresetin@top @@ -3335,7 +3299,7 @@ \ifPOE@backlayer \POE@Verb{% (1) (2) (\oenode{}{}) CorrectDipoleIfc - (1) (N) (\oenode{}{}) CorrectDipoleIfc + (1) (3) (\oenode{}{}) CorrectDipoleIfc }% \ifPOE@fiberpresetin@ \drawfiber@{FiberIn}[stopnode=1](#1){} @@ -3381,8 +3345,8 @@ \POE@drawcomponent{wdmcoupler}{#4} \ifPOE@backlayer \POE@Verb{% - (1) (N) (\oenode{}{}) CorrectDipoleIfc - (2) (N) (\oenode{}{}) CorrectDipoleIfc + (1) (3) (\oenode{}{}) CorrectDipoleIfc + (2) (3) (\oenode{}{}) CorrectDipoleIfc }% \ifPOE@fiberpresetout@ \drawfiber@{FiberOut}[startnode=N]{}(#3) @@ -3738,6 +3702,7 @@ \newOptexpDipole{crystal} \newOptexpDipole{polarization} \newOptexpDipole{optbox} +\newOptexpDipole{optsource}{position=start} \newOptexpDipole{optplate} \newOptexpDipole{optretplate} \newOptexpDipole{optdetector}{position=end} @@ -4613,6 +4578,33 @@ }% }% \let\optbox@comp\POE@comp@rectangle +\def\optsource@ref{% + \let\POE@key@optboxwidth\POE@key@sourcewidth + \let\POE@key@optboxheight\POE@key@sourceheight + \optbox@ref +}% +\def\optsource@nodes{% + \POE@dipole@nodes + \POE@Verb{% + \oenode{}{} begin + 4 dict dup /source exch def begin + \if\POE@key@sourcebeamangle\relax\else + /beamangle \POE@key@sourcebeamangle\space def + \fi + \if\POE@key@sourcebeamdiv\relax\else + /beamdiv \POE@key@sourcebeamdiv\space def + \fi + \if\POE@key@sourcebeamwidth\relax\else + /beamwidth \POE@key@sourcebeamwidth\space def + \fi + \if\POE@key@sourcebeamalign\relax\else + /beamalign \POE@key@sourcebeamalign\space def + \fi + end + source length 0 eq { currentdict /source undef } if + end }% +}% +\let\optsource@comp\POE@comp@rectangle \def\optplate@ref{% \POE@setref{/@@y \POE@key@plateheight\space 0.5 mul def }% }% @@ -5580,7 +5572,7 @@ \ifPOE@backlayer \POE@Verb{% (1) (3) (\oenode{}{}) CorrectDipoleIfc - (2) (N) (\oenode{}{}) CorrectDipoleIfc + (2) (4) (\oenode{}{}) CorrectDipoleIfc }% \ifPOE@wirepresetin@top \drawwire@{WireIn1}[stopnode=1](#1){} -- cgit v1.2.3