From f3ca29a36043f523ad16099e3466bd3710ec5e3d Mon Sep 17 00:00:00 2001 From: Karl Berry Date: Thu, 23 Dec 2010 23:36:00 +0000 Subject: lpic 0.8 (23dec10) git-svn-id: svn://tug.org/texlive/trunk@20843 c570f23f-e606-0410-a88d-b1316a301751 --- Master/texmf-dist/tex/latex/lpic/lpic.sty | 724 ++++++++++++++++++++++++++++++ 1 file changed, 724 insertions(+) create mode 100644 Master/texmf-dist/tex/latex/lpic/lpic.sty (limited to 'Master/texmf-dist/tex/latex/lpic/lpic.sty') 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]{,[,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 +%} -- cgit v1.2.3