summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/doc/generic/pst-optexp/pst-optexp-doc.tex
diff options
context:
space:
mode:
Diffstat (limited to 'Master/texmf-dist/doc/generic/pst-optexp/pst-optexp-doc.tex')
-rw-r--r--Master/texmf-dist/doc/generic/pst-optexp/pst-optexp-doc.tex855
1 files changed, 855 insertions, 0 deletions
diff --git a/Master/texmf-dist/doc/generic/pst-optexp/pst-optexp-doc.tex b/Master/texmf-dist/doc/generic/pst-optexp/pst-optexp-doc.tex
new file mode 100644
index 00000000000..2ae93949627
--- /dev/null
+++ b/Master/texmf-dist/doc/generic/pst-optexp/pst-optexp-doc.tex
@@ -0,0 +1,855 @@
+\documentclass[headinclude,DIV12]{scrartcl}
+
+\usepackage[latin1]{inputenc}
+\usepackage[T1]{fontenc}
+\usepackage[english]{babel}
+
+\usepackage{scrpage2}
+\usepackage{url}
+%
+\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
+\newcommand{\paramvalue}[1]{\texttt{#1}}
+\newcommand{\defaultparam}[1]{\emph{default:} \paramvalue{#1}}
+\def\lbracket{[}
+\def\rbracket{]}
+
+%
+% Settings
+\setkomafont{sectioning}{\normalfont\normalcolor\bfseries}
+%
+\makeatletter
+\renewenvironment{description}
+ {\list{}{\labelwidth\z@ \itemindent-\leftmargin
+ \itemsep0pt \parsep0pt
+ \let\makelabel\descriptionlabel}}
+ {\endlist}
+\makeatother
+%
+\clearscrheadfoot
+\setheadsepline{0.4pt}
+\ihead{\OptExpPackage}\ohead{A PSTricks package to draw optical experimental setups}
+\ofoot{\pagemark}
+\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. Macros for convenient definition of new
+user-defined components are also provided.
+
+\section{Components}
+
+In the sections \ref{sec:lens}--\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.
+
+The appearence of all components can be changed with the corresponding
+standard PSTricks parameters such as \parameter{fillstyle}
+or \parameter{linestyle}. For some components changing only parts of the
+layout is possible (e.g. the extended part of mirrors). For those cases
+psstyles are provided that influence only the corresponing part of the
+components and can be redefined using \cs{newpsstyle}.
+
+\subsection{Lens}\label{sec:lens}
+
+\begin{description}
+\item[\param{lensheight}:] \paramvalue{<value>} (\defaultparam{1})
+\item[\param{lenswidth}:] \paramvalue{<value>} (\defaultparam{0.3})
+\item[\param{lensradius}:] \paramvalue{<value> [<value>]} (\defaultparam{\cs{empty}})
+\item[\param{lensradiusleft}:] \paramvalue{<value>} (\defaultparam{1})
+\item[\param{lensradiusright}:] \paramvalue{<value>} (\defaultparam{1})
+\item[\param{lens}:] \paramvalue{<value> [<value> [<value> [<value>]]]} (\defaultparam{\cs{empty}})
+\item[\param{thicklens}:] \paramvalue{<boolean>}(\defaultparam{false})
+\end{description}
+
+\medskip
+
+\begin{LTXexample}[width=5.5cm]
+\begin{pspicture}(5,6)\psgrid
+ % concave lenses
+ \pnode(0,5){A}\pnode(5,5){B}
+ \psline[style=OptBeam](A)(B)
+ \lens[position=0.2](A)(B){L}
+ \lens[lensradius=-1,position=0.5](A)(B){L}
+ \lens[lens=-1.5 1,position=0.7](A)(B){L}
+ % convex lenses
+ \pnode(0,3){A}\pnode(5,3){B}
+ \psline[style=OptBeam](A)(B)
+ \lens[position=0.2,lens=1 -1](A)(B){L}
+ \lens[lens=0 -1](A)(B){L}
+ \lens[lens=1 0,position=0.7](A)(B){L}
+ % thick lenses
+ \pnode(0,1){A}\pnode(5,1){B}
+ \psline[style=OptBeam](A)(B)
+ \lens[position=0.3,lens=-1.5 1 1 0.5,thicklens](A)(B){thicklens}
+ \lens[lens=0 -1, position=0.7, fillstyle=solid, fillcolor=blue!30!white](A)(B){lens}
+\end{pspicture}
+\end{LTXexample}
+
+\medskip
+
+The shape of a lens is defined by its two surface radii. A negative
+radius gives a concave, a positive radius a convex and a radius of
+\texttt{0} a plain surface. The parameters \parameter{lensradiusleft}
+and \parameter{lensradiusright} allow to define independent values for both
+surfaces. \parameter{lensradius} sets both curvatures to the same
+value. Usually only \parameter{lensheight} and the two radii are used to
+construct the lens. The thickness (or width) is determined
+automatically. Manually controlling the thickness of the lens can be
+achived by setting \parameter{thicklens}
+to \parameter{true}. Then \parameter{lenswidth} is used as width of the lens at
+its waist. Finally, the parameter \parameter{lens} allows the definition of
+all relevant lens parameters at once. It consists of one up to four
+space-separated numbers. The first one gives the left radius. If no
+further value is set, the right radius will be set to the same value and
+all other parameters are left unchanged. Using two numbers defines two
+different radii. The third optional value defines
+the \parameter{lensheight} and the fourth one the \parameter{lenswidth}
+
+\textbf{Compatibility:} The whole implementation of the lens was
+changed in version 1.2. It allows a much more flexible definition of different lens
+types. However, I could not get full compatibility with the older way to
+define lens using only \parameter{lensheight} and \parameter{lenswidth}. To use
+this old behaviour, you have to set the \parameter{lenstype} explicitly, but
+then you have no access to the new features! All users are encouraged to
+adapt their code to use the new parameters, as the old code will be
+removed in future versions.
+
+\medskip
+\subsection{Optical plate}
+
+\begin{description}
+\item[\param{plateheight}:] \paramvalue{<value>} (\defaultparam{1})
+\item[\param{platelinewidth}:] \paramvalue{<value>} (\defaultparam{2\cs{pslinewidth}})
+\end{description}
+
+\medskip
+
+\begin{LTXexample}[width=3.5cm]
+\begin{pspicture}(3,2)\psgrid
+ \pnode(0,1.2){A}
+ \pnode(3,1.2){B}
+ \psline[style=OptBeam](A)(B)
+ \optplate(A)(B){filter}
+\end{pspicture}
+\end{LTXexample}
+
+\medskip
+
+\subsection{Retardation plate}
+
+\begin{description}
+\item[\param{plateheight}:] \paramvalue{<value>} (\defaultparam{1})
+\item[\param{platewidth}:] \paramvalue{<value>} (\defaultparam{0.1})
+\end{description}
+
+\medskip
+
+\begin{LTXexample}[width=3.5cm]
+\begin{pspicture}(3,2)\psgrid
+ \pnode(0,1.2){A}
+ \pnode(3,1.2){B}
+ \psline[style=OptBeam](A)(B)
+ \optretplate(A)(B){$\nicefrac{\lambda}{2}$}
+\end{pspicture}
+\end{LTXexample}
+
+\medskip
+
+\subsection{Pinhole}
+
+\begin{description}
+\item[\param{outerheight}:] \paramvalue{<value>} (\defaultparam{1})
+\item[\param{innerheight}:] \paramvalue{<value>} (\defaultparam{0.1})
+\item[\param{phlinewidth}:] \paramvalue{<value>} (\defaultparam{2\cs{pslinewidth}})
+\end{description}
+
+\medskip
+
+\begin{LTXexample}[width=3.5cm]
+\begin{pspicture}(3,2)\psgrid
+ \pnode(0,1.2){A}
+ \pnode(3,1.2){B}
+ \psline[style=OptBeam](A)(B)
+ \pinhole(A)(B){PH}
+\end{pspicture}
+\end{LTXexample}
+
+\medskip
+
+\subsection{Crystal}\label{sec:crystal}
+
+\begin{description}
+\item[\param{crystalwidth}:] \paramvalue{<value>} (\defaultparam{2})
+\item[\param{crystalheight}:] \paramvalue{<value>} (\defaultparam{0.8})
+\item[\param{caxislength}:] \paramvalue{<value>} (\defaultparam{0.6})
+\item[\param{caxisinv}:] \paramvalue{<boolean>} (\defaultparam{false})
+\item[\param{voltage}:] \paramvalue{<boolean>} (\defaultparam{false})
+\item[\param{lamp}:] \paramvalue{<boolean>} (\defaultparam{false})
+\item[\param{lampscale}:] \paramvalue{<value>} (\defaultparam{0.3})
+\end{description}
+
+\medskip
+
+\begin{LTXexample}[width=3.5cm]
+\begin{pspicture}(3,2)\psgrid
+ \pnode(0,1.2){A}
+ \pnode(3,1.2){B}
+ \crystal[crystalwidth=1.5, crystalheight=0.6, fillstyle=solid, fillcolor=yellow!90!black, labelangle=-45, labeloffset=1.2, voltage, lamp](A)(B){SBN:Ce}
+ \psline[style=OptBeam](A)(B)
+\end{pspicture}
+\end{LTXexample}
+
+\medskip
+
+\subsection{Box}
+
+\begin{description}
+\item[\param{optboxheight}:] \paramvalue{<value>} (\defaultparam{0.5})
+\item[\param{optboxwidth}:] \paramvalue{<value>} (\defaultparam{1})
+\item[\param{endbox}:] \paramvalue{<boolean>} (\defaultparam{false})
+\end{description}
+
+\medskip
+
+\begin{LTXexample}[width=3.5cm]
+\begin{pspicture}(3,2)\psgrid
+ \pnode(0,0){A}
+ \pnode(3,2){B}
+ \psline[style=OptBeam](A)(B)
+ \optbox(A)(B){box}
+\end{pspicture}
+\end{LTXexample}
+
+\bigskip
+
+\begin{LTXexample}[width=3.5cm]
+\begin{pspicture}(3,2)\psgrid
+ \pnode(0,0){A}
+ \pnode(1.7,1){B}
+ \psline[style=OptBeam](A)(B)
+ \optbox[endbox](A)(B){box}
+\end{pspicture}
+\end{LTXexample}
+
+\bigskip
+
+\begin{LTXexample}[width=3.5cm]
+\begin{pspicture}(3,2)\psgrid
+ \pnode(0,0){A}
+ \pnode(1.7,1){B}
+ \psline[style=OptBeam](A)(B)
+ \optbox[endbox,labelref=relative,labeloffset=0](A)(B){box}
+\end{pspicture}
+\end{LTXexample}
+
+\medskip
+
+\subsection{Detector}
+
+\begin{description}
+\item[\param{detsize}:] \paramvalue{<value>} (\defaultparam{0.5})
+\end{description}
+
+\medskip
+
+\begin{LTXexample}[width=3.5cm]
+\begin{pspicture}(3,2)\psgrid
+ \pnode(0,0){A}
+ \pnode(1.7,1){B}
+ \psline[style=OptBeam](A)(B)
+ \detector(A)(B){detector}
+\end{pspicture}
+\end{LTXexample}
+
+\medskip
+
+\subsection{Polarization}
+
+\begin{description}
+\item[\param{poltype}:] \paramvalue{parallel|perp|misc|lcirc|rcirc} (\defaultparam{parallel})
+\item[\param{polsize}:] \paramvalue{<value>} (\defaultparam{0.6})
+\item[\param{pollinewidth}:] \paramvalue{<value>} (\defaultparam{0.7\cs{pslinewidth}})
+\end{description}
+
+\medskip
+
+\begin{LTXexample}[width=3.4cm]
+\begin{pspicture}(3,5)\psgrid
+ \pnode(0,0.5){A1}\pnode(3,0.5){B1}\pnode(0,1.5){A2}
+ \pnode(3,1.5){B2}\pnode(0,2.5){A3}\pnode(3,2.5){B3}
+ \pnode(0,3.5){A4}\pnode(3,3.5){B4}\pnode(0,4.5){A5}
+ \pnode(3,4.5){B5}\psset{style=OptBeam}
+ \multido{\i=1+1}{5}{\psline(A\i)(B\i)}
+ \psset{linecolor=black}
+ \polarization[poltype=misc,position=0.2](A5)(B5)
+ \polarization[poltype=perp,position=0.35](A4)(B4)
+ \polarization[poltype=parallel,position=0.5](A3)(B3)
+ \polarization[poltype=rcirc,position=0.65](A2)(B2)
+ \polarization[poltype=lcirc,position=0.8](A1)(B1)
+\end{pspicture}
+\end{LTXexample}
+
+\medskip
+
+\subsection{Mirror}\label{sec:mirror}
+
+\begin{description}
+\item[\param{mirrorwidth}:] \paramvalue{<value>} (\defaultparam{1})
+\item[\param{mirrorradius}:] \paramvalue{<value>} (\defaultparam{0})
+\item[\param{mirrorlinewidth}:] \paramvalue{<value>} (\defaultparam{2\cs{pslinewidth}})
+\item[\param{mirrortype}:] \paramvalue{normal|piezo|extended} (\defaultparam{normal})
+\item[\param{mirrordepth}:] \paramvalue{<value>} (\defaultparam{0.08})
+\item[\param{variable}:] \paramvalue{<value>} (\defaultparam{false})
+\end{description}
+
+The parameter \texttt{mirrorradius} defines the curvature of the mirror. A
+value of \texttt{0} is for a plain mirror, a negative radius is for a
+concave mirror and a positive radius gives you a convex mirror. 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(1.8,2.2){G}
+ \pnode(0,3){B}
+ \psline[style=OptBeam](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(1.8,2.2){G}
+ \pnode(0,3){B}
+ \psline[style=OptBeam](A)(G)(B)
+ \mirror[variable](A)(G)(B){M$_\mathrm{var}$}
+\end{pspicture}
+\end{LTXexample}
+
+\bigskip
+
+\begin{LTXexample}[width=3.5cm]
+\begin{pspicture}(3,3)\psgrid
+ \pnode(0,0){A}
+ \pnode(1.8,2.2){G}
+ \pnode(0,3){B}
+ \psline[style=OptBeam](A)(G)(B)
+ \mirror[mirrortype=piezo,labelangle=-90](A)(G)(B){piezo}
+\end{pspicture}
+\end{LTXexample}
+
+\bigskip
+
+\begin{LTXexample}[width=3.5cm]
+\begin{pspicture}(3,3)\psgrid
+ \pnode(0,0){A}
+ \pnode(1.8,2.2){G}
+ \pnode(0,3){B}
+ \psline[style=OptBeam](A)(G)(B)
+ \mirror[mirrortype=extended](A)(G)(B){M$_\mathrm{ext}$}
+\end{pspicture}
+\end{LTXexample}
+
+\begin{LTXexample}[width=3.5cm]
+\begin{pspicture}(3,3)\psgrid
+ \pnode(0,0){A}\pnode(0.7,2){G1}
+ \pnode(1.5,1){G2}\pnode(2,3){B}
+ \psset{labeloffset=0.5}
+ \psline[style=OptBeam](A)(G1)(G2)(B)
+ \mirror[mirrortype=extended, mirrorradius=1](A)(G1)(G2){M$_v$}
+ \mirror[mirrorradius=-1](G1)(G2)(B){M$_x$}
+\end{pspicture}
+\end{LTXexample}
+
+\medskip
+
+\subsection{Beamsplitter}
+
+\begin{description}
+\item[\param{bssize}:] \paramvalue{<value>} (\defaultparam{0.8})
+\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[style=OptBeam](A)(G)(B)
+ \beamsplitter(A)(G)(B){BS}
+\end{pspicture}
+\end{LTXexample}
+
+\medskip
+
+
+\subsection{Optical grid}
+
+\begin{description}
+\item[\param{optgridcount}:] \paramvalue{<integer>} (\defaultparam{10})
+\item[\param{optgridwidth}:] \paramvalue{<value>} (\defaultparam{1})
+\item[\param{optgridheight}:] \paramvalue{<value>} (\defaultparam{0.1})
+\item[\param{optgriddepth}:] \paramvalue{<value>} (\defaultparam{0.05})
+\item[\param{optgridtype}:] \paramvalue{blazed|binary} (\defaultparam{blazed})
+\item[\param{optgridlinewidth}:] \paramvalue{<value>} (\defaultparam{0.7\cs{pslinewidth}})
+\item[\param{reverse}:] \paramvalue{<boolean>} (\defaultparam{false})
+\end{description}
+
+\medskip
+
+\begin{LTXexample}[width=3.5cm]
+\begin{pspicture}(3,3)\psgrid
+ \pnode(0,3){A}
+ \pnode(1.8,2.2){G}
+ \pnode(0,0){B}
+ \psline[style=OptBeam](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,3){A}
+ \pnode(1.8,2.2){G}
+ \pnode(0,0){B}
+ \psline[style=OptBeam](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,3){A}
+ \pnode(1.8,2.2){G}
+ \pnode(0,0){B}
+ \psline[style=OptBeam](A)(G)(B)
+ \optgrid[optgridcount=6,%
+ optgriddepth=0.2,%
+ optgridheight=0.3](A)(G)(B){grid}
+\end{pspicture}
+\end{LTXexample}
+
+\bigskip
+
+\begin{LTXexample}[width=3.5cm]
+\begin{pspicture}(3,3)\psgrid
+ \pnode(0,3){A}
+ \pnode(1.8,2.2){G}
+ \pnode(0,0){B}
+ \psline[style=OptBeam](A)(G)(B)
+ \optgrid[optgridtype=binary](A)(G)(B){grid}
+\end{pspicture}
+\end{LTXexample}
+
+\medskip
+
+\subsection{Custom components}\label{sec:custom}
+The macros \cs{optdipole} and \cs{opttripole} allow using everything as
+optical component. If you want to use a certain component several times,
+you should define it as a new component. For details see
+sec.~\ref{sec:newobj}.
+
+\begin{LTXexample}[width=3.5cm]
+\begin{pspicture}(3,3)\psgrid
+ \pnode(0,2){A}
+ \pnode(3,1){B}
+ \optdipole[labeloffset=1](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}:] \paramvalue{<value>} (\defaultparam{0})
+\item[\param{optional}:] \paramvalue{<boolean>} (\defaultparam{false})
+\item[\param{position}:] \paramvalue{<value>} (\defaultparam{\cs{empty}})
+\item[\param{abspos}:] \paramvalue{<value>} (\defaultparam{\cs{empty}})
+\item[\param{showoptdots}:] \paramvalue{<boolean>} (\defaultparam{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 points for the
+label.
+
+\medskip
+
+\begin{LTXexample}[width=3.5cm]
+\begin{pspicture}(3,2)\psgrid
+ \pnode(0,1.2){A}
+ \pnode(3,1.2){B}
+ \psline[style=OptBeam](A)(B)
+ \optbox[angle=10](A)(B){box}
+\end{pspicture}
+\end{LTXexample}
+
+\bigskip
+
+\begin{LTXexample}[width=3.5cm]
+\begin{pspicture}(3,2)\psgrid
+ \pnode(0,1.2){A}
+ \pnode(3,1.2){B}
+ \psline[style=OptBeam](A)(B)
+ \lens[optional](A)(B){L}
+\end{pspicture}
+\end{LTXexample}
+
+\bigskip
+
+\begin{LTXexample}[width=3.5cm]
+\begin{pspicture}(3,2)\psgrid
+ \pnode(0,1.2){A}
+ \pnode(3,1.2){B}
+ \psline[style=OptBeam](A)(B)
+ \lens[position=0.8](A)(B){L}
+\end{pspicture}
+\end{LTXexample}
+
+\bigskip
+
+\begin{LTXexample}[width=3.5cm]
+\begin{pspicture}(3,2)\psgrid
+ \pnode(0,1.2){A}
+ \pnode(3,1.2){B}
+ \psline[style=OptBeam](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[style=OptBeam](A)(G)(B)
+ \mirror[showoptdots](A)(G)(B){mirror}
+\end{pspicture}
+\end{LTXexample}
+
+\medskip
+
+\subsection{Labels}\label{sec:labels}
+
+\begin{description}
+\item[\param{labeloffset}:] \paramvalue{<value>} (\defaultparam{1})
+\item[\param{labelangle}:] \paramvalue{<value>} (\defaultparam{0})
+\item[\param{labelstyle}:] \paramvalue{<macro>} (\defaultparam{\cs{small}})
+\item[\param{labelalign}:] \paramvalue{<\cs{rput} ref string>} (\defaultparam{c})
+\item[\param{labelref}:] \paramvalue{relative|relgrav|global} (\defaultparam{relgrav})
+\end{description}
+
+\parameter{labeloffset} specifies the offset from the center of the component,
+\parameter{labelstyle} defines the textstyle that is used to typeset the
+label and \parameter{labelalign} corresponds to the refpoint of
+\cs{rput}. The parameter \parameter{labelref} sets the reference
+coordinate system for the \parameter{labelangle} and the orientation of
+the label text. The detailed behaviour is best illustrated looking at
+the following three examples.
+
+\medskip
+
+\begin{LTXexample}[width=5cm]
+\begin{pspicture}(-2,-2)(2.5,2)
+ \multido{\i=0+72}{5}{%
+ \optbox[endbox,
+ labelref=relative,
+ labeloffset=0,
+ optboxwidth=1](0,0)(1;\i){\i}
+ }
+\end{pspicture}
+\end{LTXexample}
+
+\bigskip
+
+\begin{LTXexample}[width=5cm]
+\begin{pspicture}(-2,-2)(2.5,2)
+ \multido{\i=0+72}{5}{%
+ \optbox[endbox,
+ labelref=relgrav,
+ optboxwidth=1](0,0)(1;\i){\i}
+ }
+\end{pspicture}
+\end{LTXexample}
+
+\bigskip
+
+\begin{LTXexample}[width=5cm]
+\begin{pspicture}(-2,-2)(2.5,2)
+ \multido{\i=0+72}{5}{%
+ \optbox[endbox,
+ labelref=global,
+ optboxwidth=1](0,0)(1;\i){\i}
+ }
+\end{pspicture}
+\end{LTXexample}
+
+\section{Defining new components}
+
+\subsection{Customized versions of existing macros}
+
+The easiest way to define your own components is to use the
+\cs{newpsobject} macro. With this you can define a new component using
+predefined objects with a set of options. These options serve only as
+default values and can be overridden. The following examples defines a
+new object \cs{sbn} for the special crystal used in
+Sec.~\ref{sec:crystal}.
+
+\medskip
+
+\begin{LTXexample}[width=3.5cm]
+\newpsobject{sbn}{crystal}{crystalwidth=1.5, crystalheight=0.6, voltage, lamp, labelangle=45, labeloffset=1.2, fillstyle=solid, fillcolor=yellow!90!black}
+\begin{pspicture}(3,2)\psgrid
+ \sbn(0,1)(3,1){SBN:Ce}
+ \psline[style=OptBeam](0,1)(3,1)
+\end{pspicture}
+\end{LTXexample}
+
+\medskip
+
+If you need more than one type of lenses in your setup it is very cumbersome to specify all parameters every time.
+
+\medskip
+
+\begin{LTXexample}[width=5.5cm]
+\newpsobject{MOLensIn}{lens}{lens=0.5 0.5 0.5}
+\newpsobject{MOLensOut}{lens}{lens=1.5 1.5 1.5}
+\begin{pspicture}(5,2)\psgrid
+ \pnode(0,1){A}\pnode(5,1){B}
+ \MOLensIn[abspos=0.5](A)(B){}
+ \MOLensOut[abspos=1](A)(B){}
+ \MOLensOut[abspos=4](A)(B){}
+ \MOLensIn[abspos=4.5](A)(B){}
+ \psline[style=OptBeam](A)(B)
+\end{pspicture}
+\end{LTXexample}
+\medskip
+
+\subsection{Defining new objects}\label{sec:newobj}
+
+Since version 1.2 \texttt{pst-optexp} provides some high-level macros to
+allow very convenient definition of completely new components. The macro
+\cs{newOptexpDipole} generates all organizing code for the new
+component. All you have to do is to define a new macro
+\cs{mycomponent@iii} which contains all drawing code. Analogously
+\cs{newOptexpDipoleNolabel} defines a new object which takes no label
+(like \cs{polarization}) and \cs{newOptexpTripole} defines a new
+reflective component.
+
+The syntax of the macros is
+\begin{lstlisting}
+\newOptexpDipole[fixed options]{name}{default options}
+\newOptexpDipoleNolabel[fixed options]{name}{default options}
+\newOptexpTripole[fixed options]{name}{default options}
+\end{lstlisting}
+The \texttt{default options} are simply a list of PSTricks parameters which are taken as
+defaults for the new component. The optional argument allows setting of parameters which
+cannot be overridden later.
+
+This is illustrate a bit more in the next code snippet, which also shows
+how the coordinate system is handled withing the \cs{mycomponent@iii}
+macro.
+
+\medskip
+
+\begin{LTXexample}[width=4.5cm]
+\newOptexpTripole{mygrid}{subgriddiv=5, griddots=0, subgridwidth=\pslinewidth, gridwidth=2\pslinewidth}
+\makeatletter
+\def\mygrid@iii{% put here all drawing code
+ \psgrid(-1,0)(1,1)
+}%
+\makeatother
+\begin{pspicture}(4,4)\psgrid
+ \pnode(0,1){A}\pnode(2,2){G}\pnode(3,0){B}
+ \mygrid[gridcolor=red,labeloffset=1.5](A)(G)(B){myGrid}
+ \psline[style=OptBeam](A)(G)(B)
+\end{pspicture}
+\end{LTXexample}
+\medskip
+
+The default position of the label reference point is (0,0). If you want
+to change this, you have to define a new pnode named
+\texttt{tempNode@Label} in the \cs{mycomponent@iii} macro.
+
+If you create a new component, please send it to me then I can
+incorporate this in a new released version.
+
+\newpage
+
+\section{Examples}
+\psset{unit=1.2cm}
+\begin{LTXexample}[pos=t,vsep=8mm]
+\begin{pspicture}(0,0.2)(12,1.8)
+\pnode(0,1.2){Start}\pnode(11,1.2){CCD}
+\psline[linewidth=2\pslinewidth,style=OptBeam](Start)(CCD)
+\polarization[poltype=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, platelinewidth=3\pslinewidth](Start)(CCD){SLM}
+\optplate[position=0.63](Start)(CCD){PF}
+\polarization[position=0.66](Start)(CCD)
+\lens[position=0.7](Start)(CCD){$L_3$}
+\optbox[endbox,labeloffset=0](Start)(CCD){CCD}
+\end{pspicture}
+\end{LTXexample}
+
+\vspace{\fill}
+
+\begin{LTXexample}[pos=t,vsep=8mm]
+\begin{pspicture}(-4,-1)(3,3)
+ \psset{labeloffset=0.5}
+ \pnode(-2,0){LaserOut}
+ \pnode(0,0){Grid}
+ \pnode(4;45){Out}
+ \pnode(2.5;67.5){Mvar}
+ \psline[linewidth=2\pslinewidth,
+ linecolor=red!90!black](LaserOut)(Grid)(Out)\psline(Grid)(Mvar)
+ \optbox[endbox, optboxwidth=2, labeloffset=0](Grid)(LaserOut){diodelaser}
+ \optretplate[position=0.3, labeloffset=0.8](LaserOut)(Grid){$\nicefrac{\lambda}{4}$}
+ \optgrid(LaserOut)(Grid)(Out){grid}
+ \mirror[variable](Grid)(Mvar)(Grid){M$_\mathrm{var}$}
+\end{pspicture}
+\end{LTXexample}
+
+\begin{LTXexample}[pos=t,vsep=3mm]
+\begin{pspicture}(0,-0.4)(9,6)
+ \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[style=OptBeam,linewidth=2\pslinewidth]%
+ (Laser)(PBS2)(piezo)(BSBwd)(M4f1)(M4f2)(M4f3)(BS4f)(CCD)
+ \psline[style=OptBeam,linewidth=2\pslinewidth](PBS)(BSFwd)(BS4f)
+ \psset{mirrorwidth=0.6, plateheight=0.7, outerheight=0.7, labeloffset=0.7, labelstyle=\scriptsize, lensheight=0.8, lenswidth=0.2, bssize=0.5}
+ \optbox[endbox,optboxwidth=1.5, optboxheight=0.7,labeloffset=0]%
+ (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=180](Laser)(PBS){PH}
+ \lens[position=0.5](Laser)(PBS){L}
+ \optretplate[position=0.8](Laser)(PBS){$\nicefrac{\lambda}{2}$}
+ \beamsplitter(Laser)(PBS)(BSFwd){PBS}
+ \optretplate[position=0.4](PBS)(BSFwd){$\nicefrac{\lambda}{2}$}
+ \polarization(PBS)(BSFwd)\polarization(PBS2)(BSBwd)
+ \lens[position=0.8](PBS)(BSFwd){L}
+ \optretplate(PBS)(PBS2){$\nicefrac{\lambda}{2}$}
+ \beamsplitter(PBS)(PBS2)(piezo){PBS}
+ \optretplate[abspos=0.5](PBS2)(piezo){$\nicefrac{\lambda}{4}$}
+ \mirror[mirrortype=piezo,labelangle=90](PBS2)(piezo)(PBS2){PZ}
+ \lens[position=0.8,labelangle=180](PBS2)(BSBwd){L}
+ \beamsplitter(PBS)(BSFwd)(BSBwd){BS}
+ \beamsplitter[labelangle=-90](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(BSBwd)(M4f1)(M4f2){M}\mirror(M4f1)(M4f2)(M4f3){M}
+ \lens[labelangle=180](M4f2)(M4f3){L}\mirror(M4f2)(M4f3)(BS4f){M}
+ \beamsplitter(M4f3)(BS4f)(CCD){BS}\optbox[endbox,labeloffset=0](BS4f)(CCD){CCD}
+ \lens[abspos=0.7](BS4f)(BSFwd){L}\lens[abspos=0.7](BSBwd)(M4f1){L}
+ \psline[style=OptBeam, linewidth=2\pslinewidth](BSFwd)(BSBwd)
+\end{pspicture}
+\end{LTXexample}
+
+\section{Todo}
+
+The next thing I will add are components with multiple internal
+reflections, as right-angle, penta and dove prisms. The code is almost
+ready, I just need to think a bit more about the best way to provide
+access to the nodes that are newly defined within the components.
+
+Fiber optical components are also in preparation.
+
+Drawing of extended beams with focusing and so on could be integrated to
+some extent in future versions. But as the topic is rather difficult if
+you want to do it properly (components should be placed above the beam,
+but the new nodes are available only when the component is drawn) it
+could take very long until this feature will be implemented.
+
+\section{Acknowledgements}
+
+I thank all the people of the PSTricks mailinglist for the continuous help, especially Herbert Voß.
+
+\end{document}