summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/tex/latex/lpic/lpic.sty
diff options
context:
space:
mode:
authorKarl Berry <karl@freefriends.org>2010-12-23 23:36:00 +0000
committerKarl Berry <karl@freefriends.org>2010-12-23 23:36:00 +0000
commitf3ca29a36043f523ad16099e3466bd3710ec5e3d (patch)
treee17c8291895d92acb91bca32b647ab1e7b2a90b8 /Master/texmf-dist/tex/latex/lpic/lpic.sty
parent1b316273c7c37f4c051ace6bc04cd8bfe55809e7 (diff)
lpic 0.8 (23dec10)
git-svn-id: svn://tug.org/texlive/trunk@20843 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/tex/latex/lpic/lpic.sty')
-rw-r--r--Master/texmf-dist/tex/latex/lpic/lpic.sty724
1 files changed, 724 insertions, 0 deletions
diff --git a/Master/texmf-dist/tex/latex/lpic/lpic.sty b/Master/texmf-dist/tex/latex/lpic/lpic.sty
new file mode 100644
index 00000000000..923f44e8e97
--- /dev/null
+++ b/Master/texmf-dist/tex/latex/lpic/lpic.sty
@@ -0,0 +1,724 @@
+%% lpic.sty
+%% Copyright 2010 R. Matveyev
+%
+% This work may be distributed and/or modified under the
+% conditions of the LaTeX Project Public License, either version 1.3
+% of this license or (at your option) any later version.
+% The latest version of this license is in
+% http://www.latex-project.org/lppl.txt
+% and version 1.3 or later is part of all distributions of LaTeX
+% version 2005/12/01 or later.
+%
+% This work has the LPPL maintenance status `maintained'.
+%
+% The Current Maintainer of this work is R. Matveyev.
+%
+% This work consists of the files:
+% lpic.sty instructions.tex
+% instructions.pdf instructions-differential.eps
+% instructions-differential.pdf README
+
+% lpic.sty V0.8, 23.12.2010
+%
+
+\ProvidesPackage{lpic}
+ [2010/12/23, version 0.8]
+
+\NeedsTeXFormat{LaTeX2e}
+\RequirePackage{epsfig}
+\RequirePackage{rotating}
+\RequirePackage{calc}
+\RequirePackage{ifthen}
+\RequirePackage{color}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% debugging stuff
+%
+
+\newcommand{\lp@skipthis}[1]{\relax}
+\newcommand{\lp@msg}[1]{\message{^^J! lpic message: #1^^J}}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% Counters, lengths, boxes
+%
+
+% Adjustable parameters
+\newlength{\lpunitlength}\setlength{\lpunitlength}{1mm}
+
+\newlength{\lpmarginright}\setlength{\lpmarginright}{0mm}
+\newlength{\lpmarginleft}\setlength{\lpmarginleft}{0mm}
+\newlength{\lpmargintop}\setlength{\lpmargintop}{0mm}
+\newlength{\lpmarginbottom}\setlength{\lpmarginbottom}{0mm}
+
+\newlength{\lpbgboxsep}\setlength{\lpbgboxsep}{\fboxsep}
+
+\newlength{\lpgridthickness}\setlength{\lpgridthickness}{0.01mm}
+\newlength{\lpframethickness}\setlength{\lpframethickness}{0.7mm}
+\newlength{\lplblframethickness}\setlength{\lplblframethickness}{0.01mm}
+\newlength{\lpfigframethickness}\setlength{\lpfigframethickness}{0.2mm}
+
+\newcounter{lpgridstep}\setcounter{lpgridstep}{5}
+\newcounter{lpcoordstep}\setcounter{lpcoordstep}{10}
+
+% Internal parameters
+\newlength{\lp@marginright}
+\newlength{\lp@marginleft}
+\newlength{\lp@margintop}
+\newlength{\lp@marginbottom}
+\newlength{\lp@xsizeorig}
+\newlength{\lp@ysizeorig}
+\newlength{\lp@xtotalsizeorig}
+\newlength{\lp@ytotalsizeorig}
+\newlength{\lp@gridstep}
+\newlength{\lp@coordstep}
+\newlength{\lp@coordx}
+\newlength{\lp@coordy}
+
+\newcounter{lp@xtotalsize}
+\newcounter{lp@ytotalsize}
+\newcounter{lp@xorigin}
+\newcounter{lp@yorigin}
+\newcounter{lp@coordx}
+\newcounter{lp@coordy}
+
+\newsavebox{\lp@pictbox} %box to save (ps or pdf)-figure
+
+% Temp stuff
+\newlength{\lp@tmpa}
+\newlength{\lp@tmpb}
+\newlength{\lp@tmpc}
+\newlength{\lp@tmpd}
+\newlength{\lp@tmpx}
+\newlength{\lp@tmpy}
+\newlength{\lp@tmpdx}
+\newlength{\lp@tmpdy}
+
+\newcounter{lp@tmpa}
+\newcounter{lp@tmpb}
+\newcounter{lp@tmpc}
+\newcounter{lp@tmpd}
+\newcounter{lp@tmpe}
+\newcounter{lp@tmpf}
+\newcounter{lp@tmpx}
+\newcounter{lp@tmpy}
+\newcounter{lp@tmpdx}
+\newcounter{lp@tmpdy}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% Procedure to check whether argument is a number or length
+% we need a way to check whether given argument is a number or
+% length \lp@ifnumber{arg}{true cmds}{false cmds}
+
+\def\lp@substring#1 in #2;%
+ {%
+ \def\lp@check##1#1##2ENDOFTHEARGS%
+ {\edef\lp@foundsubstring{\lp@foundsubstring##2}}%
+ \expandafter\lp@check#2#1ENDOFTHEARGS%
+ }
+
+\def\lp@ifsubstring#1 in #2;#3#4%
+ {%
+ \edef\lp@foundsubstring{}%
+ \lp@substring #1 in #2;%
+ \ifthenelse{\equal{x}{x\lp@foundsubstring}}{#4}{#3}%
+ }
+
+\newcommand{\lp@ifnumber}[3]%
+ {%
+ \edef\lp@foundsubstring{}%
+ \lp@substring pt in #1;%
+ \lp@substring pc in #1;%
+ \lp@substring in in #1;%
+ \lp@substring bp in #1;%
+ \lp@substring cm in #1;%
+ \lp@substring mm in #1;%
+ \lp@substring dd in #1;%
+ \lp@substring cc in #1;%
+ \lp@substring sp in #1;%
+ \lp@substring em in #1;%
+ \lp@substring ex in #1;%
+ \ifthenelse{\equal{\lp@foundsubstring}{}}{#2}{#3}%
+ }
+
+%
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% Save scaled picture in \lp@pictbox, calculate its sizes, calculate
+% sizes and the origin of the whole picture box and define procedure
+% for calculating coordinates
+% \lp@dimens defines \lp@xtotalsize!, \lp@ytotalsize!, \lp@xorig!,
+% \lp@yorig!, \lp@xcoord{original_length_in_\lp@units},
+% \lp@ycoord{original_length_in_\lp@units}
+%
+
+\newcommand{\lp@dimens}
+{%
+ % Save unscaled pict and calculate sizes
+ \sbox{\lp@pictbox}{\epsfig{figure=\lp@epsfile}}%
+ \settowidth{\lp@xsizeorig}{\usebox{\lp@pictbox}}% Original x-size
+ \settoheight{\lp@ysizeorig}{\usebox{\lp@pictbox}}% Original y-size
+ %
+ % Are we given absolute dimensions or scale coefficients?
+ \ifthenelse{\equal{\lp@xscale}{}}%
+ % x scale is not given
+ {%
+ %\lp@msg{x=\lp@xscale, y=\lp@yscale}
+ \ifthenelse{\equal{\lp@yscale}{}}
+ % x - no, y - no
+ {%
+ \edef\lp@xnum{1cm}\edef\lp@xdenom{1cm}%
+ \edef\lp@ynum{1cm}\edef\lp@ydenom{1cm}%
+ }%
+ % x - no, y - yes
+ {%
+ \lp@ifnumber{\lp@yscale}
+ {%
+ \edef\lp@ynum{\lp@yscale cm}\edef\lp@ydenom{1cm}%
+ \edef\lp@xnum{\lp@yscale cm}\edef\lp@xdenom{1cm}%
+ }%
+ {%
+ \edef\lp@ynum{\lp@yscale}\def\lp@ydenom{\lp@ysizeorig}%
+ \edef\lp@xnum{\lp@yscale}\def\lp@xdenom{\lp@ysizeorig}%
+ }%
+ }%
+ }%
+ % x is given
+ {%
+ \ifthenelse{\equal{\lp@yscale}{}}
+ % x - yes, y - no
+ {%
+ \lp@ifnumber{\lp@xscale}
+ {%
+ \edef\lp@ynum{\lp@xscale cm}\edef\lp@ydenom{1cm}%
+ \edef\lp@xnum{\lp@xscale cm}\edef\lp@xdenom{1cm}%
+ }%
+ {%
+ \edef\lp@ynum{\lp@xscale}\def\lp@ydenom{\lp@xsizeorig}%
+ \edef\lp@xnum{\lp@xscale}\def\lp@xdenom{\lp@xsizeorig}%
+ }%
+ }%
+ % x - yes, y - yes
+ {%
+ \lp@ifnumber{\lp@xscale}
+ {%
+ \edef\lp@xnum{\lp@xscale cm}\edef\lp@xdenom{1cm}%
+ }
+ {%
+ \edef\lp@xnum{\lp@xscale}\def\lp@xdenom{\lp@xsizeorig}%
+ }
+ \lp@ifnumber{\lp@yscale}
+ {%
+ \edef\lp@ynum{\lp@yscale cm}\edef\lp@ydenom{1cm}%
+ }
+ {%
+ \edef\lp@ynum{\lp@yscale}\def\lp@ydenom{\lp@ysizeorig}%
+ }%
+
+ }%
+ }%
+ %\lp@msg{xscale=\lp@xnum/\lp@xdenom, yscale=\lp@ynum/\lp@ydenom}
+ \setlength{\lp@tmpx}{\lp@xsizeorig * \ratio{\lp@xnum}{\lp@xdenom}}% x-size in the doc
+ \setlength{\lp@tmpy}{\lp@ysizeorig * \ratio{\lp@ynum}{\lp@ydenom}}% y-size in the doc
+ % Save scaled picture
+ \sbox{\lp@pictbox}%
+ {\epsfig{figure=\lp@epsfile, width=\lp@tmpx, height=\lp@tmpy}}%
+ % Calculate sizes and coordinates of the origin of the whole pict
+ \setlength{\lp@tmpa}{\lp@tmpx + \lpmarginleft + \lpmarginright}%
+ \setcounter{lp@xtotalsize}{\lp@tmpa / \unitlength}%
+ \def\lp@xtotalsize{\value{lp@xtotalsize}}%
+ \setlength{\lp@tmpa}{\lp@tmpy + \lpmargintop + \lpmarginbottom}%
+ \setcounter{lp@ytotalsize}{\lp@tmpa / \unitlength}%
+ \def\lp@ytotalsize{\value{lp@ytotalsize}}%
+ \setcounter{lp@xorigin}{-\lpmarginleft / \unitlength}%
+ \def\lp@xorigin{\value{lp@xorigin}}%
+ \setcounter{lp@yorigin}{-\lpmarginbottom / \unitlength}%
+ \def\lp@yorigin{\value{lp@yorigin}}%
+ % Redefine margins in units of the original
+ \setlength{\lp@marginleft}{\lpmarginleft / \ratio{\lp@xnum}{\lp@xdenom}}%
+ \setlength{\lp@marginright}{\lpmarginright / \ratio{\lp@xnum}{\lp@xdenom}}%
+ \setlength{\lp@margintop}{\lpmargintop / \ratio{\lp@ynum}{\lp@ydenom}}%
+ \setlength{\lp@marginbottom}{\lpmarginbottom / \ratio{\lp@ynum}{\lp@ydenom}}%
+ \setlength{\lp@xtotalsizeorig}%
+ {\lp@xsizeorig + \lp@marginleft + \lp@marginright}%
+ \setlength{\lp@ytotalsizeorig}%
+ {\lp@ysizeorig + \lp@margintop + \lp@marginbottom}%
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% Define \lp@put(x,y)[position]{object}
+% \lp@multiput(x,y)(deltax,deltay)[position]{count}{object}
+% where (x,y)(deltax,deltay) are lengths in the original unscaled eps
+% picture.
+%
+\def\lp@put(#1,#2)[#3]#4%
+{{%
+ \setlength{\lp@tmpx}{( #1 ) * \ratio{\lp@xnum}{\lp@xdenom}}%
+ \setlength{\lp@tmpy}{( #2 ) * \ratio{\lp@ynum}{\lp@ydenom}}%
+ \setcounter{lp@tmpx}{\lp@tmpx / \unitlength}%
+ \setcounter{lp@tmpy}{\lp@tmpy / \unitlength}%
+ \put(\value{lp@tmpx},\value{lp@tmpy})%
+ {\makebox(0,0)[#3]{#4}}%
+}}
+
+\def\lp@multiput(#1,#2)(#3,#4)(#5)[#6]#7%
+{{%
+ \setlength{\lp@tmpx}{( #1 ) * \ratio{\lp@xnum}{\lp@xdenom}}%
+ \setlength{\lp@tmpy}{( #2 ) * \ratio{\lp@ynum}{\lp@ydenom}}%
+ \setcounter{lp@tmpx}{\lp@tmpx / \unitlength}%
+ \setcounter{lp@tmpy}{\lp@tmpy / \unitlength}%
+ \setlength{\lp@tmpdx}{( #3 ) * \ratio{\lp@xnum}{\lp@xdenom}}%
+ \setlength{\lp@tmpdy}{( #4 ) * \ratio{\lp@ynum}{\lp@ydenom}}%
+ \setcounter{lp@tmpdx}{\lp@tmpdx / \unitlength}%
+ \setcounter{lp@tmpdy}{\lp@tmpdy / \unitlength}%
+ \multiput(\value{lp@tmpx},\value{lp@tmpy})%
+ (\value{lp@tmpdx},\value{lp@tmpdy})%
+ {#5}%
+ {\makebox(0,0)[#6]{#7}}%
+}}
+
+\def\lp@hline#1%
+{{%
+ \setlength{\lp@tmpa}{#1}%
+ \setlength{\lp@tmpa}{\lp@tmpa * \ratio{\lp@xnum}{\lp@xdenom}}%
+ \setcounter{lp@tmpa}{\lp@tmpa / \unitlength}%
+ \line(1,0){\value{lp@tmpa}}%
+}}
+
+\def\lp@vline#1%
+{{%
+ \setlength{\lp@tmpa}{#1}%
+ \setlength{\lp@tmpa}{\lp@tmpa * \ratio{\lp@ynum}{\lp@ydenom}}%
+ \setcounter{lp@tmpa}{\lp@tmpa / \unitlength}%
+ \line(0,1){\value{lp@tmpa}}%
+}}
+
+% \lp@put.....
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Drawing commands
+%
+
+% \lp@pictframecmd draws a frame around all of the picture including
+% margins. \lpframethickness -- thickness of the lines
+\newcommand{\lp@pictframecmd}
+{\begingroup%
+ \linethickness{\lpframethickness}%
+ \lp@put(-\lp@marginleft,-\lp@marginbottom)[l]
+ {\lp@hline{\lp@xsizeorig+\lp@marginleft+\lp@marginright}}%
+ \lp@put(-\lp@marginleft,-\lp@marginbottom)[b]
+ {\lp@vline{\lp@ysizeorig+\lp@margintop+\lp@marginbottom}}%
+ \lp@put(\lp@xsizeorig+\lp@marginright,\lp@ysizeorig+\lp@margintop)[r]
+ {\lp@hline{\lp@xsizeorig+\lp@marginleft+\lp@marginright}}%
+ \lp@put(\lp@xsizeorig+\lp@marginright,\lp@ysizeorig+\lp@margintop)[t]
+ {\lp@vline{\lp@ysizeorig+\lp@margintop+\lp@marginbottom}}%
+\endgroup}
+
+% \lp@gridcmd draws a grid with the step \value{lpgridstep} x
+% \lpunitlength wrt original and lines \lpgridthickness thick
+\newcommand{\lp@gridcmd}
+{%
+\begingroup%
+ \linethickness{\lpgridthickness} %
+ \setlength{\lp@gridstep}{\lpunitlength * \value{lpgridstep}}%
+ \setcounter{lp@tmpa}{\lp@marginleft / \lp@gridstep}%
+ \setlength{\lp@tmpa}{-\lp@gridstep * \value{lp@tmpa}}%
+ \setcounter{lp@tmpb}
+ {(\lp@xsizeorig-\lp@tmpa+\lp@marginright ) / %
+ \lp@gridstep + 1}%
+ \lp@multiput(\lp@tmpa,-\lp@marginbottom)%
+ (\lp@gridstep,0mm)%
+ (\value{lp@tmpb})%
+ [b]%
+ {\lp@vline{\lp@ysizeorig+\lp@margintop+\lp@marginbottom}}%
+ \setcounter{lp@tmpa}{\lp@marginbottom / \lp@gridstep}%
+ \setlength{\lp@tmpa}{-\lp@gridstep * \value{lp@tmpa}}%
+ \setcounter{lp@tmpb}
+ {(\lp@ysizeorig-\lp@tmpa+\lp@margintop ) / %
+ \lp@gridstep + 1}%
+ \lp@multiput(-\lp@marginleft,\lp@tmpa)%
+ (0mm,\lp@gridstep)%
+ (\value{lp@tmpb})%
+ [l]%
+ {\lp@hline{\lp@xsizeorig+\lp@marginleft+\lp@marginright}}%
+\endgroup%
+}
+
+% \lp@coordscmd draws coordinates on all four sides of the picture
+% with the step \lpunitlength * \value{lpcoordstep}
+\newcommand{\lp@coordscmd}
+{\begingroup%
+ \setlength{\lp@coordstep}{\lpunitlength * \value{lpcoordstep}}%
+ \setcounter{lp@tmpa}{\lp@marginleft / \lp@coordstep}
+ \setlength{\lp@tmpa}{-\lp@coordstep * \value{lp@tmpa}}
+ \setcounter{lp@tmpb}
+ {(\lp@xsizeorig-\lp@tmpa+\lp@marginright) / \lp@coordstep+1}
+ \setcounter{lp@tmpc}{\lp@tmpa / \lpunitlength}
+ \lp@multiput(\lp@tmpa,-\lp@marginbottom-\lpframethickness-0.1mm)%
+ (\lp@coordstep,0mm)%
+ (\value{lp@tmpb})%
+ [t]%
+ {%
+ {\tiny\bf\arabic{lp@tmpc}}%
+ \addtocounter{lp@tmpc}{\value{lpcoordstep}}%
+ }%
+ \setcounter{lp@tmpc}{\lp@tmpa / \lpunitlength}
+ \lp@multiput(\lp@tmpa,\lp@ysizeorig+\lp@margintop+\lpframethickness)%
+ (\lp@coordstep,0mm)%
+ (\value{lp@tmpb})%
+ [b]%
+ {%
+ {\tiny\bf\arabic{lp@tmpc}}%
+ \addtocounter{lp@tmpc}{\value{lpcoordstep}}%
+ }%
+ \setcounter{lp@tmpa}{\lp@marginbottom / \lp@coordstep}
+ \setlength{\lp@tmpa}{-\lp@coordstep * \value{lp@tmpa}}
+ \setcounter{lp@tmpb}
+ {(\lp@ysizeorig-\lp@tmpa+\lp@margintop)/\lp@coordstep+1}
+ \setcounter{lp@tmpc}{\lp@tmpa / \lpunitlength}
+ \lp@multiput(-\lp@marginleft-\lpframethickness,\lp@tmpa)%
+ (0mm,\lp@coordstep)%
+ (\value{lp@tmpb})%
+ [r]%
+ {%
+ {\tiny\bf\arabic{lp@tmpc}}%
+ \addtocounter{lp@tmpc}{\value{lpcoordstep}}%
+ }%
+ \setcounter{lp@tmpc}{\lp@tmpa / \lpunitlength}
+ \lp@multiput(\lp@xsizeorig+\lp@marginright+\lpframethickness,\lp@tmpa)%
+ (0mm,\lp@coordstep)%
+ (\value{lp@tmpb})%
+ [l]%
+ {%
+ {\tiny\bf\arabic{lp@tmpc}}%
+ \addtocounter{lp@tmpc}{\value{lpcoordstep}}%
+ }%
+\endgroup}
+
+
+% \lp@lblframecmd draws a frame around each label \lplblframethickness
+% thick
+\newcommand{\lp@lblframecmd}[1]
+{\begingroup%
+ \setlength{\linethickness}{\lplblframethickness}%
+ \frame{#1}%
+\endgroup}
+
+% \lp@figframecmd draws a frame around eps figure \lpfigframethickness
+% thick
+\newcommand{\lp@figframecmd}[1]
+{\begingroup%
+ \setlength{\linethickness}{\lpfigframethickness}%
+ \frame{#1}%
+\endgroup}
+
+%
+\newcommand{\lp@putepsfigurecmd}
+{%
+ \put(0,0){\makebox(0,0)[bl]{\lp@figframe{\usebox{\lp@pictbox}}}}
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% options
+
+% Print nothing but the picture and labels
+\def\lpopt@clean
+{%
+ \let\lp@lblframe=\relax%
+ \let\lp@figframe=\relax%
+ \let\lp@pictframe=\relax%
+ \let\lp@coords=\relax%
+ \let\lp@grid=\relax%
+ \let\lbl=\lbl@cmd%
+ \let\lp@putepsfigure=\lp@putepsfigurecmd%
+}
+
+% Set margins
+\def\lpopt@l#1%
+{%
+ \ifthenelse{\not\equal{#1}{}}
+ {\setlength{\lpmarginleft}{#1}}
+ {}%
+}
+\def\lpopt@r#1%
+{%
+ \ifthenelse{\not\equal{#1}{}}
+ {\setlength{\lpmarginright}{#1}}
+ {}%
+}
+\def\lpopt@t#1%
+{%
+ \ifthenelse{\not\equal{#1}{}}
+ {\setlength{\lpmargintop}{#1}}
+ {}%
+}
+\def\lpopt@b#1%
+{%
+ \ifthenelse{\not\equal{#1}{}}
+ {\setlength{\lpmarginbottom}{#1}}
+ {}%
+}
+
+% Print frame around whole picture margins included
+\def\lpopt@frame#1%
+{%
+ \ifthenelse{\not\equal{#1}{}}
+ {\setlength{\lpframethickness}{#1}}{}%
+\let\lp@pictframe=\lp@pictframecmd%
+}
+
+% Print frame around eps figure
+\def\lpopt@figframe#1%
+{%
+ \ifthenelse{\not\equal{#1}{}}
+ {\setlength{\lpfigframethickness}{#1}}{}%
+ \let\lp@figframe=\lp@figframecmd%
+}
+
+% Draw frames around labels
+\def\lpopt@frames#1%
+{%
+ \ifthenelse{\not\equal{#1}{}}
+ {\setlength{\lplblframethickness}{#1}}{}%
+ \let\lp@lblframe=\lp@lblframecmd%
+}
+
+% Write coordinates on all four sides of the picture
+% argument=step
+\def\lpopt@coords#1%
+{%
+ \ifthenelse{\not\equal{#1}{}}
+ {\setcounter{lpcoordstep}{#1}}{}%
+ \let\lp@coords=\lp@coordscmd%
+}
+
+% Draw a grid, argument=step
+\def\lpopt@grid#1%
+{%
+ \ifthenelse{\not\equal{#1}{}}
+ {\setcounter{lpgridstep}{#1}}{}%
+ \let\lp@grid=\lp@gridcmd%
+}
+
+% Ignore all the labels
+\def\lpopt@nolbl{\renewcommand{\lbl}[2][]{\relax}}
+
+% Don't insert epsfigure
+\def\lpopt@nofigure{\let\lp@putepsfigure=\relax}
+
+% Draw what is usually convenient for adjusting the labels
+\def\lpopt@draft
+{%
+\lpopt@figframe{}\relax%
+\lpopt@frame{}\relax%
+\lpopt@coords{}\relax%
+\lpopt@grid{}\relax%
+\lpopt@frames{}\relax%
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Option processing commands
+%
+%
+
+% Should be called \exec@option{name(arg)} or
+% \exec@option{name}. It executes \name and passes
+% arg if present as an argument.
+% That is \name should have at most one argument.
+
+\def\exec@optionmisc#1(#2)#3ENDOFTHEARGS%
+{%
+ \csname#1\endcsname{#2}\relax%
+}
+\newcommand{\exec@option}[1]
+{%
+ \exec@optionmisc#1()ENDOFTHEARGS%
+}
+
+
+% Called with a coma-separated list of options, and then executes
+% each ``name'' prefixed with the value of \option@prefix. It passes
+% this command the argument if present. Each option is either
+% ``name'' or ``name(arg)''. ``arg'' should not contain comas or
+% should be enclosed in {}.
+\def\process@optionsmisc#1,#2ENDOFTHEARGS%
+{%
+ %\lp@msg{1=#1, 2=#2}
+ \ifthenelse{\not\equal{#1}{}}%
+ {%
+ \exec@option{\option@prefix#1}%
+ \process@optionsmisc#2ENDOFTHEARGS%
+ }%
+ {}%
+}
+\newcommand\process@options[1]
+{%
+ \process@optionsmisc#1,,ENDOFTHEARGS%
+}
+
+
+% Next command process ``filename'' argument.
+% Defines \lp@epsfile, \lp@xscale, \lp@yscale
+% Syntaxis is one of the following
+% \lp@getscaleandfile{FILE}
+% \lp@getscaleandfile{FILE()}
+% \lp@getscaleandfile{FILE(,)}
+% \lp@getscaleandfile{FILE(x)}
+% \lp@getscaleandfile{FILE(x,)}
+% \lp@getscaleandfile{FILE(,y)}
+% \lp@getscaleandfile{FILE(x,y)}
+
+\def\lp@getname#1(#2ENDOFTHEARGS{\edef\lp@epsfile{#1}\edef\lp@string{#2}}
+\def\lp@getscales#1)#2ENDOFTHEARGS{\edef\lp@string{#1}}
+\def\lp@getxscale#1,#2ENDOFTHEARGS{\edef\lp@xscale{#1}\edef\lp@string{#2}}
+\def\lp@getyscale#1,#2ENDOFTHEARGS{\edef\lp@yscale{#1}\edef\lp@string{#2}}
+
+\def\lp@getscaleandfile#1%
+{%
+ \edef\lp@epsfile{}%
+ \edef\lp@xscale{}%
+ \edef\lp@yscale{}%
+ \edef\lp@string{#1}%
+ \expandafter\lp@getname\lp@string(ENDOFTHEARGS%
+ \expandafter\lp@getscales\lp@string)ENDOFTHEARGS%
+ \expandafter\lp@getxscale\lp@string,ENDOFTHEARGS%
+ \expandafter\lp@getyscale\lp@string,ENDOFTHEARGS%
+ %\lp@msg{file=\lp@epsfile, x=\lp@xscale, y=\lp@yscale}%
+}
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% \begin{lpic}[coma separated options]{filename[(xscale[,yscale])]},
+% \lbl[position]{xcoord,ycoord;object}
+% ....
+% \end{lpic}
+% Where options are clean, draft, grid, frame, frames, coords, nolbl
+% Position is at most two of the following t,b,l,r
+\newenvironment{lpic}[2][clean]
+{\begingroup%
+ %Process options
+ \edef\option@prefix{lpopt@}%
+ \setlength{\unitlength}{1sp}%
+ \lpopt@clean%
+ \process@options{#1}%
+ % read scale and filename from the second argument
+ \expandafter\lp@getscaleandfile{#2}%
+ % Calculate parameters
+ \lp@dimens%
+ % Start picture environment
+ \begin{picture}(\lp@xtotalsize,\lp@ytotalsize)
+ (\lp@xorigin,\lp@yorigin)%
+ %insert picture. We do it before any LaTeX, so that white bg rectangles are on top
+ \lp@putepsfigure%
+}
+{%
+ %draw a frame around the whole picture
+ \lp@pictframe
+ % draw grid
+ \lp@grid
+ % draw coordinates
+ \lp@coords
+ \end{picture}%
+\endgroup}
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% \lbl[position]{<xcoord>,<ycoord>[,angle];object}
+%
+
+% read coordinates and the angle from the argument of \lbl
+\def\lp@getxya#1,#2,#3,#4ENDOFTHEARGS%
+{%
+ \setlength{\lp@tmpx}{\lpunitlength * \real{#1} * \ratio{\lp@xnum}{\lp@xdenom}}%
+ \setcounter{lp@tmpx}{\lp@tmpx / \unitlength}%
+ \setlength{\lp@tmpy}{\lpunitlength * \real{#2} * \ratio{\lp@ynum}{\lp@ydenom}}%
+ \setcounter{lp@tmpy}{\lp@tmpy / \unitlength}%
+ \def\lp@angle{#3}%
+}
+
+% disassemble the arg of \lbl
+\def\lp@getdata#1;#2#3ENDOFTHEARGS%
+{%
+ \lp@getxya#1,,,ENDOFTHEARGS%
+ \def\lp@lbldata{#2#3}%
+}
+
+\newcommand{\lp@getcoords}[1]
+{%
+ \lp@getdata#1ENDOFTHEARGS%
+}
+
+%\setlength{\lpbgboxsep}{10mm}
+
+\newcommand{\lbl@cmd}[2][]
+{\begingroup%
+ % Set the defaults
+ \def\lp@lblbox{\makebox(0,0)[#1]} %
+ \def\lp@bgbox{\relax} % No background
+ \setcounter{lp@tmpdx}{0} % No shifting
+ \setcounter{lp@tmpdy}{0}
+ % Dissasemble the second argument
+ \lp@getcoords{#2}%
+ % Let's see whether angle is supplied
+ \ifthenelse{\equal{\lp@angle}{}}
+ {\let\lp@rotatelbl=\relax}
+ {\def\lp@rotatelbl{\turnbox{\lp@angle}}}%
+ % What options are given?
+ % ``W'' put white background with margins
+ \lp@ifsubstring W in #1;%
+ {%
+ \setlength{\lp@tmpa}{0.152mm}
+ \setcounter{lp@tmpdx}{( \lpbgboxsep + \lp@tmpa ) / \unitlength}%
+ \setcounter{lp@tmpdy}{( \lpbgboxsep + \lp@tmpa ) / \unitlength}%
+ \def\lp@bgbox##1{%
+ \begingroup%
+ \setlength{\fboxsep}{\lpbgboxsep}%
+ \colorbox{white}{##1}
+ \endgroup%
+ }%
+ }%
+ {}%
+ % ``w'' put white background without margins
+ \lp@ifsubstring w in #1;%
+ {%
+ \def\lp@bgbox##1{%
+ \begingroup%
+ \setlength{\fboxsep}{0mm}%
+ \colorbox{white}{##1}%
+ \endgroup%
+ }%
+ }%
+ {}%
+ % Positioning
+ \lp@ifsubstring t in #1;{\addtocounter{lp@tmpy}{\value{lp@tmpdy}}}{}%
+ \lp@ifsubstring b in #1;{\addtocounter{lp@tmpy}{-\value{lp@tmpdy}}}{}%
+ \lp@ifsubstring l in #1;{\addtocounter{lp@tmpx}{-\value{lp@tmpdx}}}{}%
+ \lp@ifsubstring r in #1;{\addtocounter{lp@tmpx}{\value{lp@tmpdx}}}{}%
+ % Put the material
+ \put(\value{lp@tmpx},\value{lp@tmpy})%
+ {\lp@rotatelbl{\lp@lblbox{\lp@bgbox{\lp@lblframe{\lp@lbldata}}}}}%
+\endgroup}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% PS definitions for the white bg
+%\special{! TeXDict
+% begin
+% /whitebgbox{% Needs : x0 y0 x1 y1.
+% newpath 2 copy moveto 3 copy pop exch lineto 4 copy pop pop
+% lineto 4 copy exch pop exch pop lineto closepath 1 setgray fill} bind def
+% end
+%}