From e0c6872cf40896c7be36b11dcc744620f10adf1d Mon Sep 17 00:00:00 2001 From: Norbert Preining Date: Mon, 2 Sep 2019 13:46:59 +0900 Subject: Initial commit --- macros/latex/contrib/lpic/README | 26 + .../contrib/lpic/instructions-differential.eps | 382 +++++++++++ .../contrib/lpic/instructions-differential.pdf | Bin 0 -> 7804 bytes macros/latex/contrib/lpic/instructions.pdf | Bin 0 -> 99926 bytes macros/latex/contrib/lpic/instructions.tex | 326 ++++++++++ macros/latex/contrib/lpic/lpic.sty | 724 +++++++++++++++++++++ 6 files changed, 1458 insertions(+) create mode 100644 macros/latex/contrib/lpic/README create mode 100644 macros/latex/contrib/lpic/instructions-differential.eps create mode 100644 macros/latex/contrib/lpic/instructions-differential.pdf create mode 100644 macros/latex/contrib/lpic/instructions.pdf create mode 100644 macros/latex/contrib/lpic/instructions.tex create mode 100644 macros/latex/contrib/lpic/lpic.sty (limited to 'macros/latex/contrib/lpic') diff --git a/macros/latex/contrib/lpic/README b/macros/latex/contrib/lpic/README new file mode 100644 index 0000000000..eb14d555dc --- /dev/null +++ b/macros/latex/contrib/lpic/README @@ -0,0 +1,26 @@ +This README for lpic package + + +The package lpic defines convenient interface to put any +LaTeX material on top of included graphics. +LaTeX material could also be rotated and typeset on top of a white +box overshadowing graphics. Coordinates of LaTeX boxes are +given relative to the original, unscaled graphics, when graphics is +rescaled, LaTeX annotations stay at their right places (unless you +do something extreme). In a draft mode it allows to draw a coordinate +grid over the picture for easy adjustment of positions of the annotations. + +Author: Rostislav Matveyev + +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. + +Files: lpic.sty instructions.tex instructions.pdf instructions-differential.eps + instructions-differential.pdf README \ No newline at end of file diff --git a/macros/latex/contrib/lpic/instructions-differential.eps b/macros/latex/contrib/lpic/instructions-differential.eps new file mode 100644 index 0000000000..24271b083d --- /dev/null +++ b/macros/latex/contrib/lpic/instructions-differential.eps @@ -0,0 +1,382 @@ +%!PS-Adobe-2.0 EPSF-2.0 +%%Title: differential.eps +%%Creator: fig2dev Version 3.2 Patchlevel 3c +%%CreationDate: Thu Dec 21 16:43:54 2006 +%%For: matveyev@misun113 (Dr. Slava Matveyev) +%%BoundingBox: 0 0 371 342 +%%Magnification: 1.0000 +%%EndComments +/$F2psDict 200 dict def +$F2psDict begin +$F2psDict /mtrx matrix put +/col-1 {0 setgray} bind def +/col0 {0.000 0.000 0.000 srgb} bind def +/col1 {0.000 0.000 1.000 srgb} bind def +/col2 {0.000 1.000 0.000 srgb} bind def +/col3 {0.000 1.000 1.000 srgb} bind def +/col4 {1.000 0.000 0.000 srgb} bind def +/col5 {1.000 0.000 1.000 srgb} bind def +/col6 {1.000 1.000 0.000 srgb} bind def +/col7 {1.000 1.000 1.000 srgb} bind def +/col8 {0.000 0.000 0.560 srgb} bind def +/col9 {0.000 0.000 0.690 srgb} bind def +/col10 {0.000 0.000 0.820 srgb} bind def +/col11 {0.530 0.810 1.000 srgb} bind def +/col12 {0.000 0.560 0.000 srgb} bind def +/col13 {0.000 0.690 0.000 srgb} bind def +/col14 {0.000 0.820 0.000 srgb} bind def +/col15 {0.000 0.560 0.560 srgb} bind def +/col16 {0.000 0.690 0.690 srgb} bind def +/col17 {0.000 0.820 0.820 srgb} bind def +/col18 {0.560 0.000 0.000 srgb} bind def +/col19 {0.690 0.000 0.000 srgb} bind def +/col20 {0.820 0.000 0.000 srgb} bind def +/col21 {0.560 0.000 0.560 srgb} bind def +/col22 {0.690 0.000 0.690 srgb} bind def +/col23 {0.820 0.000 0.820 srgb} bind def +/col24 {0.500 0.190 0.000 srgb} bind def +/col25 {0.630 0.250 0.000 srgb} bind def +/col26 {0.750 0.380 0.000 srgb} bind def +/col27 {1.000 0.500 0.500 srgb} bind def +/col28 {1.000 0.630 0.630 srgb} bind def +/col29 {1.000 0.750 0.750 srgb} bind def +/col30 {1.000 0.880 0.880 srgb} bind def +/col31 {1.000 0.840 0.000 srgb} bind def + +end +save +newpath 0 342 moveto 0 0 lineto 371 0 lineto 371 342 lineto closepath clip newpath +-27.0 341.0 translate +1 -1 scale + +/cp {closepath} bind def +/ef {eofill} bind def +/gr {grestore} bind def +/gs {gsave} bind def +/sa {save} bind def +/rs {restore} bind def +/l {lineto} bind def +/m {moveto} bind def +/rm {rmoveto} bind def +/n {newpath} bind def +/s {stroke} bind def +/sh {show} bind def +/slc {setlinecap} bind def +/slj {setlinejoin} bind def +/slw {setlinewidth} bind def +/srgb {setrgbcolor} bind def +/rot {rotate} bind def +/sc {scale} bind def +/sd {setdash} bind def +/ff {findfont} bind def +/sf {setfont} bind def +/scf {scalefont} bind def +/sw {stringwidth} bind def +/tr {translate} bind def +/tnt {dup dup currentrgbcolor + 4 -2 roll dup 1 exch sub 3 -1 roll mul add + 4 -2 roll dup 1 exch sub 3 -1 roll mul add + 4 -2 roll dup 1 exch sub 3 -1 roll mul add srgb} + bind def +/shd {dup dup currentrgbcolor 4 -2 roll mul 4 -2 roll mul + 4 -2 roll mul srgb} bind def + /DrawEllipse { + /endangle exch def + /startangle exch def + /yrad exch def + /xrad exch def + /y exch def + /x exch def + /savematrix mtrx currentmatrix def + x y tr xrad yrad sc 0 0 1 startangle endangle arc + closepath + savematrix setmatrix + } def + +/$F2psBegin {$F2psDict begin /$F2psEnteredState save def} def +/$F2psEnd {$F2psEnteredState restore end} def + +$F2psBegin +%%Page: 1 1 +10 setmiterlimit + 0.06299 0.06299 sc +% +% Fig objects follow +% +7.500 slw + [60] 0 sd +% Ellipse +n 4950 450 45 45 0 360 DrawEllipse gs col7 0.00 shd ef gr gs col0 s gr + [] 0 sd + [60] 0 sd +% Ellipse +n 990 450 45 45 0 360 DrawEllipse gs col7 0.00 shd ef gr gs col0 s gr + [] 0 sd + [60] 0 sd +% Ellipse +n 1215 1485 45 45 0 360 DrawEllipse gs col7 0.00 shd ef gr gs col0 s gr + [] 0 sd + [60] 0 sd +% Ellipse +n 4950 5059 45 45 0 360 DrawEllipse gs col7 0.00 shd ef gr gs col0 s gr + [] 0 sd +% Polyline +gs clippath +2205 1500 m 2295 1500 l 2295 1387 l 2250 1477 l 2205 1387 l cp +2295 435 m 2205 435 l 2205 548 l 2250 458 l 2295 548 l cp +eoclip +n 2250 450 m + 2250 1485 l gs col0 s gr gr + +% arrowhead +n 2295 548 m 2250 458 l 2205 548 l 2250 578 l 2295 548 l + cp gs col7 1.00 shd ef gr col0 s +% arrowhead +n 2205 1387 m 2250 1477 l 2295 1387 l 2250 1357 l 2205 1387 l + cp gs col7 1.00 shd ef gr col0 s +% Polyline +2 slj +gs clippath +926 -21 m 867 -8 l 900 139 l 904 16 l 959 126 l cp +eoclip +n 900 5400 m 900 5399 l 901 5396 l 902 5390 l 904 5382 l 907 5369 l + 911 5352 l 916 5331 l 922 5304 l 929 5272 l 938 5234 l + 948 5192 l 959 5143 l 971 5090 l 983 5032 l 997 4970 l + 1012 4904 l 1027 4835 l 1043 4762 l 1059 4688 l 1075 4612 l + 1091 4535 l 1108 4457 l 1124 4379 l 1140 4301 l 1155 4223 l + 1171 4147 l 1185 4072 l 1199 3998 l 1213 3926 l 1226 3855 l + 1238 3786 l 1250 3719 l 1261 3654 l 1271 3590 l 1281 3528 l + 1290 3468 l 1298 3410 l 1306 3353 l 1313 3298 l 1319 3244 l + 1325 3191 l 1330 3139 l 1334 3088 l 1338 3038 l 1341 2988 l + 1344 2940 l 1346 2891 l 1348 2843 l 1349 2795 l 1350 2748 l + 1350 2700 l 1350 2652 l 1349 2605 l 1348 2557 l 1346 2509 l + 1344 2460 l 1341 2412 l 1338 2362 l 1334 2312 l 1330 2261 l + 1325 2209 l 1319 2156 l 1313 2102 l 1306 2047 l 1298 1990 l + 1290 1932 l 1281 1872 l 1271 1810 l 1261 1746 l 1250 1681 l + 1238 1614 l 1226 1545 l 1213 1474 l 1199 1402 l 1185 1328 l + 1171 1253 l 1155 1177 l 1140 1099 l 1124 1021 l 1108 943 l + 1091 865 l 1075 788 l 1059 712 l 1043 638 l 1027 565 l + 1012 496 l 997 430 l 983 368 l 971 310 l 959 257 l + 948 208 l 938 166 l 929 128 l 922 96 l 916 69 l + 911 48 l 907 31 l 904 18 l + 900 0 l gs col0 s gr gr + +% arrowhead +0 slj +n 959 126 m 904 16 l 900 139 l 959 126 l cp gs 0.00 setgray ef gr col0 s +% Polyline +2 slj +30.000 slw +n 1575 3825 m 1577 3825 l 1582 3824 l 1590 3823 l 1604 3821 l 1623 3818 l + 1648 3815 l 1678 3810 l 1714 3805 l 1756 3799 l 1802 3793 l + 1851 3785 l 1903 3778 l 1957 3770 l 2012 3762 l 2066 3754 l + 2120 3746 l 2172 3738 l 2223 3730 l 2272 3723 l 2319 3716 l + 2363 3709 l 2405 3702 l 2444 3696 l 2481 3690 l 2516 3684 l + 2550 3678 l 2581 3673 l 2611 3667 l 2639 3662 l 2666 3657 l + 2692 3651 l 2717 3646 l 2742 3641 l 2773 3634 l 2803 3628 l + 2832 3620 l 2861 3613 l 2889 3606 l 2918 3598 l 2945 3589 l + 2973 3581 l 3000 3572 l 3027 3562 l 3054 3552 l 3080 3542 l + 3106 3531 l 3132 3520 l 3157 3508 l 3182 3496 l 3206 3483 l + 3230 3471 l 3253 3457 l 3276 3444 l 3299 3430 l 3321 3416 l + 3343 3401 l 3365 3386 l 3387 3371 l 3409 3355 l 3429 3340 l + 3449 3325 l 3469 3309 l 3490 3293 l 3512 3276 l 3534 3258 l + 3556 3239 l 3579 3219 l 3603 3198 l 3627 3177 l 3651 3155 l + 3676 3132 l 3700 3108 l 3725 3084 l 3750 3059 l 3775 3034 l + 3800 3008 l 3824 2982 l 3848 2955 l 3872 2929 l 3895 2902 l + 3918 2875 l 3939 2848 l 3961 2822 l 3981 2795 l 4001 2768 l + 4020 2742 l 4039 2715 l 4057 2688 l 4075 2661 l 4091 2636 l + 4106 2610 l 4122 2583 l 4137 2556 l 4152 2528 l 4167 2500 l + 4181 2471 l 4196 2442 l 4210 2411 l 4224 2381 l 4238 2349 l + 4252 2317 l 4266 2285 l 4279 2252 l 4292 2219 l 4305 2186 l + 4317 2153 l 4329 2119 l 4340 2086 l 4352 2053 l 4362 2021 l + 4373 1988 l 4383 1956 l 4392 1925 l 4402 1894 l 4410 1863 l + 4419 1833 l 4427 1804 l 4435 1775 l 4442 1746 l 4449 1718 l + 4456 1690 l 4464 1660 l 4471 1631 l 4478 1601 l 4485 1571 l + 4492 1540 l 4499 1510 l 4506 1479 l 4514 1447 l 4521 1416 l + 4529 1384 l 4536 1352 l 4544 1320 l 4553 1287 l 4561 1255 l + 4569 1223 l 4578 1191 l 4587 1159 l 4596 1127 l 4605 1097 l + 4615 1066 l 4624 1036 l 4634 1007 l 4644 979 l 4655 951 l + 4665 923 l 4676 897 l 4687 871 l 4699 845 l 4711 820 l + 4723 795 l 4736 770 l 4749 746 l 4763 721 l 4779 696 l + 4795 671 l 4812 645 l 4830 619 l 4850 591 l 4871 562 l + 4894 533 l 4918 501 l 4944 469 l 4972 435 l 5001 400 l + 5031 364 l 5062 327 l 5094 290 l 5125 254 l 5156 219 l + 5185 185 l 5213 154 l 5237 127 l 5258 103 l 5276 83 l + 5289 68 l 5299 57 l 5305 50 l 5308 47 l + 5310 45 l gs col0 s gr +% Polyline +7.500 slw +gs clippath +6307 5342 m 6321 5284 l 6173 5250 l 6284 5306 l 6160 5308 l cp +eoclip +n 450 5400 m 452 5400 l 457 5399 l 465 5398 l 479 5396 l 497 5394 l + 522 5391 l 552 5387 l 587 5383 l 627 5378 l 670 5372 l + 717 5366 l 765 5360 l 815 5354 l 865 5347 l 914 5341 l + 963 5335 l 1009 5329 l 1055 5323 l 1098 5318 l 1139 5312 l + 1178 5307 l 1216 5302 l 1251 5298 l 1285 5293 l 1317 5289 l + 1349 5285 l 1379 5281 l 1408 5277 l 1437 5273 l 1465 5269 l + 1493 5265 l 1520 5261 l 1548 5257 l 1575 5253 l 1603 5249 l + 1632 5245 l 1660 5241 l 1689 5237 l 1719 5232 l 1749 5228 l + 1780 5223 l 1811 5219 l 1843 5214 l 1876 5209 l 1909 5204 l + 1942 5199 l 1976 5193 l 2011 5188 l 2045 5183 l 2080 5177 l + 2116 5171 l 2151 5166 l 2187 5160 l 2223 5154 l 2259 5148 l + 2296 5143 l 2332 5137 l 2369 5131 l 2406 5125 l 2443 5119 l + 2480 5113 l 2519 5106 l 2558 5100 l 2589 5095 l 2622 5089 l + 2655 5084 l 2689 5079 l 2724 5073 l 2759 5067 l 2796 5062 l + 2834 5056 l 2873 5050 l 2912 5044 l 2953 5038 l 2995 5032 l + 3037 5026 l 3081 5020 l 3125 5014 l 3170 5009 l 3216 5003 l + 3262 4998 l 3310 4992 l 3357 4987 l 3405 4982 l 3453 4977 l + 3502 4973 l 3550 4969 l 3599 4965 l 3647 4961 l 3695 4958 l + 3744 4955 l 3792 4953 l 3839 4950 l 3886 4949 l 3933 4947 l + 3980 4946 l 4026 4945 l 4072 4945 l 4118 4945 l 4163 4946 l + 4208 4947 l 4253 4948 l 4298 4950 l 4338 4952 l 4379 4955 l + 4421 4957 l 4462 4961 l 4504 4965 l 4547 4969 l 4590 4974 l + 4635 4979 l 4680 4985 l 4727 4991 l 4775 4998 l 4825 5006 l + 4877 5014 l 4930 5023 l 4985 5033 l 5042 5043 l 5101 5054 l + 5161 5066 l 5224 5078 l 5288 5091 l 5354 5104 l 5421 5118 l + 5490 5132 l 5558 5146 l 5627 5161 l 5695 5175 l 5763 5190 l + 5828 5204 l 5892 5218 l 5952 5231 l 6008 5244 l 6061 5256 l + 6108 5266 l 6150 5276 l 6187 5284 l 6218 5291 l 6243 5297 l + 6263 5301 l 6278 5305 l + 6300 5310 l gs col0 s gr gr + +% arrowhead +0 slj +n 6160 5308 m 6284 5306 l 6173 5250 l 6160 5308 l cp gs 0.00 setgray ef gr col0 s +% Polyline +2 slj +gs clippath +3120 4095 m 3120 4005 l 2974 4005 l 3094 4050 l 2974 4095 l cp +eoclip +n 1575 4500 m 1577 4500 l 1583 4500 l 1592 4500 l 1607 4500 l 1628 4500 l + 1655 4500 l 1687 4500 l 1725 4500 l 1767 4500 l 1812 4500 l + 1859 4500 l 1908 4500 l 1956 4500 l 2004 4500 l 2051 4500 l + 2095 4500 l 2138 4500 l 2178 4500 l 2216 4500 l 2251 4500 l + 2284 4500 l 2315 4500 l 2343 4500 l 2370 4500 l 2395 4500 l + 2419 4500 l 2441 4500 l 2462 4500 l 2483 4500 l 2509 4500 l + 2534 4500 l 2559 4500 l 2582 4500 l 2604 4499 l 2625 4498 l + 2645 4497 l 2664 4496 l 2681 4494 l 2697 4492 l 2712 4490 l + 2725 4487 l 2736 4483 l 2746 4479 l 2754 4474 l 2760 4469 l + 2765 4463 l 2768 4457 l 2770 4450 l 2771 4442 l 2770 4434 l + 2768 4425 l 2763 4413 l 2757 4400 l 2749 4385 l 2740 4369 l + 2729 4352 l 2717 4334 l 2704 4315 l 2691 4295 l 2676 4275 l + 2662 4255 l 2648 4235 l 2635 4216 l 2623 4198 l 2611 4181 l + 2601 4165 l 2593 4150 l 2585 4137 l 2580 4125 l 2577 4116 l + 2575 4108 l 2574 4100 l 2574 4093 l 2575 4087 l 2578 4081 l + 2581 4076 l 2586 4071 l 2592 4067 l 2598 4063 l 2606 4060 l + 2615 4058 l 2624 4056 l 2634 4054 l 2645 4053 l 2656 4052 l + 2668 4051 l 2680 4050 l 2692 4050 l 2704 4050 l 2717 4050 l + 2730 4050 l 2746 4050 l 2763 4050 l 2782 4050 l 2802 4050 l + 2823 4050 l 2847 4050 l 2874 4050 l 2903 4050 l 2934 4050 l + 2966 4050 l 2998 4050 l 3029 4050 l 3056 4050 l 3077 4050 l + + 3105 4050 l gs col5 s gr gr + +% arrowhead +0 slj +n 2974 4095 m 3094 4050 l 2974 4005 l 2974 4095 l cp gs col7 1.00 shd ef gr col5 s +% Polyline +n 1350 4725 m + 1350 90 l gs col3 s gr +% Polyline +n 900 4950 m + 6300 4950 l gs col3 s gr +% Polyline +30.000 slw +n 5190 1141 m + 2883 4358 l gs col5 s gr +% Polyline +7.500 slw +gs clippath +4083 660 m 4023 660 l 4023 811 l 4053 691 l 4083 811 l cp +eoclip +n 4053 3832 m + 4053 675 l gs col3 s gr gr + +% arrowhead +n 4083 811 m 4053 691 l 4023 811 l 4083 811 l cp gs col3 1.00 shd ef gr col3 s +% Polyline +gs clippath +6045 2730 m 6045 2670 l 5894 2670 l 6014 2700 l 5894 2730 l cp +eoclip +n 2475 2700 m + 6030 2700 l gs col3 s gr gr + +% arrowhead +n 5894 2730 m 6014 2700 l 5894 2670 l 5894 2730 l cp gs col3 1.00 shd ef gr col3 s +% Polyline +30.000 slw +gs clippath +4965 5085 m 4965 4815 l 4544 4815 l 4904 4950 l 4544 5085 l cp +eoclip +n 4050 4950 m + 4950 4950 l gs col3 s gr gr + +% arrowhead +n 4544 5085 m 4904 4950 l 4544 4815 l col3 s +% Polyline +gs clippath +4965 2835 m 4965 2565 l 4544 2565 l 4904 2700 l 4544 2835 l cp +eoclip +n 4050 2700 m + 4950 2700 l gs col3 s gr gr + +% arrowhead +n 4544 2835 m 4904 2700 l 4544 2565 l col3 s +% Polyline +gs clippath +4185 1470 m 3915 1470 l 3915 1891 l 4050 1531 l 4185 1891 l cp +eoclip +n 4050 2700 m + 4050 1485 l gs col3 s gr gr + +% arrowhead +n 4185 1891 m 4050 1531 l 3915 1891 l col3 s +% Polyline +gs clippath +1485 1470 m 1215 1470 l 1215 1891 l 1350 1531 l 1485 1891 l cp +eoclip +n 1350 2700 m + 1350 1485 l gs col3 s gr gr + +% arrowhead +n 1485 1891 m 1350 1531 l 1215 1891 l col3 s +% Polyline +7.500 slw + [60] 0 sd +n 4950 4950 m + 4950 1485 l gs col3 s gr [] 0 sd +% Polyline + [60] 0 sd +n 4950 1485 m + 1350 1485 l gs col3 s gr [] 0 sd +% Polyline + [60] 0 sd +n 4950 1485 m + 4950 450 l gs col0 s gr [] 0 sd +% Polyline + [60] 0 sd +n 4950 450 m + 990 450 l gs col0 s gr [] 0 sd + [60] 0 sd +% Ellipse +n 4950 1485 45 45 0 360 DrawEllipse gs col3 1.00 shd ef gr gs col0 s gr + [] 0 sd + [60] 0 sd +% Ellipse +n 4050 4950 45 45 0 360 DrawEllipse gs col7 0.00 shd ef gr gs col0 s gr + [] 0 sd + [60] 0 sd +% Ellipse +n 1350 2700 45 45 0 360 DrawEllipse gs col7 0.00 shd ef gr gs col0 s gr + [] 0 sd +% Polyline + [15 15] 15 sd +n 1350 1485 m + 1215 1485 l gs col3 1.00 shd ef gr gs col0 s gr [] 0 sd +% Polyline + [15 15] 15 sd +n 4950 4950 m + 4950 5085 l gs col3 1.00 shd ef gr gs col0 s gr [] 0 sd +$F2psEnd +rs diff --git a/macros/latex/contrib/lpic/instructions-differential.pdf b/macros/latex/contrib/lpic/instructions-differential.pdf new file mode 100644 index 0000000000..3f2cbfb6c2 Binary files /dev/null and b/macros/latex/contrib/lpic/instructions-differential.pdf differ diff --git a/macros/latex/contrib/lpic/instructions.pdf b/macros/latex/contrib/lpic/instructions.pdf new file mode 100644 index 0000000000..bcd9971690 Binary files /dev/null and b/macros/latex/contrib/lpic/instructions.pdf differ diff --git a/macros/latex/contrib/lpic/instructions.tex b/macros/latex/contrib/lpic/instructions.tex new file mode 100644 index 0000000000..4aec016772 --- /dev/null +++ b/macros/latex/contrib/lpic/instructions.tex @@ -0,0 +1,326 @@ +%% 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 + + +\documentclass[10pt]{amsart} +\usepackage{lpic} +\setlength{\topmargin}{0mm} +\setlength{\textheight}{210mm} +\def\cmd#1{\texttt{$\backslash$#1}} +\let\tex=\TeX +\let\latex=\LaTeX +\def\pdflatex{pdf\LaTeX} +\title{Package \texttt{lpic.sty}. \latex{} over included graphics.} +\author{R. Matveyev} + + + +\begin{document} +\maketitle + +The package \textbf{\texttt{lpic}} defines convenient interface to put any +\latex{} material on top of included graphics. +\latex{} material could also be rotated and typeset on top of a white +box overshadowing graphics. Since coordinates of \latex{} boxes are +given relative to the original, unscaled graphics, when graphics is +rescaled, \latex{} annotations stay at their right places (unless you +do something extreme). In a draft mode it allows to draw a coordinate +grid over the picture for easy adjustment of positions of the annotations. + +\section{Usage} + +Package defines an environment \texttt{lpic} and \cmd{lbl}. +The environment \vspace{2mm}\par\noindent +\cmd{begin}\{\texttt{lpic}\}[{\sc OPTIONS}] + \{$<${\sc filename}$>${\sc DIMENSIONS}\} + \begin{quote} + \cmd{lbl}[{\sc POSITION}] + \{{\sc x-coord,y-coord[,angle];\latex{} material}\}\\ + \vdots + \end{quote} + \cmd{end}\{\texttt{lpic}\} \vspace{2mm}\par\noindent +produces a \tex\ box with included graphics and the \latex{} material on +top of it. + +\begin{itemize} +\item[$<${\sc filename}$>$] is a name of external + graphics in \texttt{PS, EPS} or \texttt{PDF} format. There is no need + to give the extension of the file, appropriate format will be + chosen, depending whether \latex{} or \pdflatex is run on the + document. Convention is the same as for \texttt{epsfig} package. + \vspace{2mm} +\item[{\sc DIMENSIONS}] is one of the following: + \begin{enumerate} + \item empty string + \item \texttt{() } + \item \texttt{(,) } + \item \texttt{(X) } + \item \texttt{(X,) } + \item \texttt{(,Y) } + \item \texttt{(X,Y) } + \end{enumerate} + where each \texttt{X} and \texttt{Y} is either a positive decimal (with + decimal point, not coma!) or length (currently only numerical + constant lengths work). Decimal number is interpreted as a scale + coefficient and length is interpreted as the desired horisontal or + vertical dimension of the figure. + + If neither \texttt{X} nor \texttt{Y} are supplied (cases 1, 2, 3), then + the original unscaled picture is included. If only one of \texttt{X} and + \texttt{Y} is given (cases 4, 5, 6), then picture is scaled + homotetically. If both are present (case 7), then graphics is + scaled vertically and horisontally, according to given parameters.\\ + For example: \\ + \cmd{begin}\{\texttt{lpic}\}\{\texttt{tessalation}\} -- means include + graphics in the file \texttt{tessalation} at the original size.\\ + \cmd{begin}\{\texttt{lpic}\}\{\texttt{tessalation(0.5)}\} -- means + include graphics at the half the original size.\\ + \cmd{begin}\{\texttt{lpic}\}\{\texttt{tessalation(0.5,3)}\} -- means + include graphics shrinking twice in the horisontal direction and + stretching 3 times in the vertical direction.\\ + \cmd{begin}\{\texttt{lpic}\}\{\texttt{tessalation(,10cm)}\} -- include + graphics homotetically scaled, so that height is equal to 10cm.\\ + \cmd{begin}\{\texttt{lpic}\}\{\texttt{tessalation(150mm)}\} -- include + graphics homotetically scaled, so that width is equal to 150mm.\\ + \cmd{begin}\{\texttt{lpic}\}\{\texttt{tessalation(150mm,0.7)}\} -- + include graphics scaled, so that width is equal to 150mm and + height is 0.7 of the original. + + \vspace{2mm} + \item[\sc OPTIONS] is a coma separated list of options (no spaces). + Option are processed + sequentially, thus options to the right override preceding ones. + Parameter in \texttt{()} is optional, if omitted then some default + value is taken. + + Options are: + \item[\texttt{l(length)}] -- the size of the left margin beyond + bounding box of graphics (default + 0mm). Negative values are also acceptable. + \item[\texttt{r(length)}] - right margin + \item[\texttt{t(lenght)}] - top margin + \item[\texttt{b(length)}] -- bottom margin + \item[\texttt{grid(step)}] -- Draw a grid over the picture of + step \texttt{step*}\cmd{lpunitlength} and + thickness \cmd{lpgridthickness}. Parameter + \texttt{step} must be an integer and defaults to 5. + \item[\texttt{coords(step)}] -- write coordinates with the step + \texttt{step*}\cmd{lpunitlength}. Parameter step + must be an integer and defaults to 10. + \item[\texttt{frames(length)}] -- draw boxes of thickness {\tt + length} over \latex{} material. Default value is + 0.01mm + \item[\texttt{frame(length)}] -- draw a box around the whole + thing (margins included). \texttt{length} is the + thickness of the lines. Default value is + 0.7mm. + \item[\texttt{figframe(length)}] -- draw a box around the + included graphics. \texttt{length} is the + thickness of the lines. Default value is + 0.2mm. + \item[\texttt{draft}] -- draw whatever is convenient for + adjusting the positions of \latex{} + material. That includes grid, coordinates, all + types of frames. + \item[\texttt{clean}] -- remove all auxiliary stuff. + \item[\texttt{nolbl}] -- don't typeset any \latex{} material. + \item[\texttt{nofigure}] -- don't include the graphics, just an + empty box of appropriate size + +\end{itemize} + \vspace{2mm}\par\noindent + Inside of \texttt{lpic} environment one can issue \cmd{lbl} command + with the following syntax:\vspace{2mm}\par + \texttt{\cmd{lbl}[{\sc OPTIONS}]% + \{{\sc COORDINATES; any \latex{} material}\}} + \vspace{2mm}\par\noindent + \latex{} material is put in a box, rotated if necessary and printed + in appropriate place. White rectangular background, which overshadows part of graphics could also be created. + +\begin{itemize} +\item[\sc COORDINATES] are either pair or a triple of decimals. The + first two numbers are coordinates of the point, where \latex{} material + should be placed and the third is an angle of rotation applied to + the box containing the material. Coordinates are measured in the + coordinate system in the original, unscaled picture, with the unit + equal to \cmd{lpunitlength} (default 1mm). So, if the picture is + scaled, all the boxes containing \latex{} will hopefully stay at their + appropriate places. +\item[\sc OPTIONS] is optional and consists of at most three letters, + one from the set {\tt\{t,b\}}, one from {\tt\{r,l\}} and one from {\tt\{w,W\}} + in any + order. \texttt{[t$|$b,l$|$r]} options give a reference point in a box containing \latex{} + text. Coordinates refer to this reference point. Rotation is also + centered at this point. Thus, there are total 9 possibilities + referring to 9 evenly spaced points in the rectangle. + If one of \texttt{[w$|$W]} is given then \latex is put on top of white box. + The size of the box is equal to the size of the box containing the material in case of \texttt{w} + and margins \cmd{lpbgsep}-wide are added in case of \texttt{W}. + Note that \texttt{xdvi} apparently renders postscript after dvi, so any postscript covers dvi material. + Thus, if you use background, you will not be able to see your \latex{} in \texttt{xdvi}. + but once postscript file is created, \latex{} will show. +\end{itemize} + + +\section{ADJUSTABLE PARAMETERS} + + \begin{itemize} + \item[\cmd{lpunitlength}] (1mm) Units in the unscaled coordinate + system. + \item[\cmd{lpmarginright}] (0mm) + \item[\cmd{lpmarginleft}] (0mm) + \item[\cmd{lpmargintop}] (0mm) + \item[\cmd{lpmarginbottom}] (0mm) Default sizes of margins. + \item[\cmd{lpbgsep}] (\cmd{fboxsep}) Margins for the white background. + \item[\cmd{lpgridthickness}] (0.01mm) Thickness of the grid lines. + \item[\cmd{lpframethickness}] (0.7mm) Thickness of the frame around + the whole box. + \item[\cmd{lplblframethickness}] (0.01mm) Thickness of the frame + around labels. + \item[\cmd{lpfigframethickness}] (0.2mm) Thickness of the frame + around included graphics. + \item[\tt lpgridstep] (5) Counter containing the step to draw grid lines + \item[\tt lpcoordstep] (10) Counter containing the step to draw coordinates + \end{itemize} + +\newpage +\section{Example} +\def\T{\operatorname{\mathrm T}} +\def\d{\operatorname{\mathrm d}} +\def\o{\ensuremath{\text{\tiny$\operatorname{\mathcal O}$}}} +\def\R{\mathbb R} + +Provided the file \texttt{instructions-differential.eps} or \texttt{instructions-differential.pdf} +contains the graphics one can include it in the document, drawing a +grid and putting \latex{} on top of it. + +\begin{verbatim} +\begin{lpic}[l(10mm),r(5mm),t(5mm),b(10mm),draft]{instructions-differential(0.7,0.6)} +\lbl[t]{80,9;$x_0$} +\lbl[b]{87,11;$\delta x$} +\lbl[t]{101,7,-7;$x_0+\delta x$} +\lbl[b]{120,11;$\T_{x_0}X$} +\lbl[t]{88,59;$\delta x$} +\lbl[b]{120,61;$\T_{x_0}X$} +\lbl[tl]{120,3,-10;$X=\R$} +\lbl[r]{79,74;$\d f(\delta x)$} +\lbl[r]{79,102;$\T_{f(x_0)}Y$} +\lbl[lb]{21,115;$\T_{f(x_0)}Y$} +\lbl[l]{22,74;$\d f(\delta x)$} +\lbl[r]{16,88;$f(x_0)+\d f(\delta x)$} +\lbl[r]{19,60;$f(x_0)$} +\lbl[r]{11,110;$f(x_0+\delta x)$} +\lbl[l]{42,99;$\o(\delta x)$} +\lbl[b]{10,121;$Y=\R$} +\lbl[br]{47,21;Graph of $\d f$} +\lbl[bl]{26,36,13;Graph of $y=f(x)$} +\end{lpic} +\end{verbatim} + +\vspace{5mm} + +\begin{lpic}[l(10mm),r(5mm),t(5mm),b(10mm),draft]{instructions-differential(0.7,0.6)} +\lbl[t]{80,9;$x_0$} +\lbl[b]{87,11;$\delta x$} +\lbl[t]{101,7,-7;$x_0+\delta x$} +\lbl[b]{120,11;$\T_{x_0}X$} +\lbl[t]{88,59;$\delta x$} +\lbl[b]{120,61;$\T_{x_0}X$} +\lbl[tl]{120,3,-10;$X=\R$} +\lbl[r]{79,74;$\d f(\delta x)$} +\lbl[r]{79,102;$\T_{f(x_0)}Y$} +\lbl[lb]{21,115;$\T_{f(x_0)}Y$} +\lbl[l]{22,74;$\d f(\delta x)$} +\lbl[r]{16,88;$f(x_0)+\d f(\delta x)$} +\lbl[r]{19,60;$f(x_0)$} +\lbl[r]{11,110;$f(x_0+\delta x)$} +\lbl[l]{42,99;$\o(\delta x)$} +\lbl[b]{10,121;$Y=\R$} +\lbl[br]{47,21;Graph of $\d f$} +\lbl[bl]{26,36,13;Graph of $y=f(x)$} +\end{lpic} + +\vspace{5mm} +When all label on the picture are adjusted one can get a ``clean'' +picture by either removing \texttt{draft} option or adding \texttt{clean}. + +\begin{verbatim} +\begin{lpic}[l(10mm),r(5mm),t(5mm),b(10mm),draft,clean]{instructions-differential(0.7,0.6)} +... +\end{lpic} +\end{verbatim} + +\begin{lpic}[l(10mm),r(5mm),t(5mm),b(10mm),draft,clean]{instructions-differential(0.7,0.6)} +\lbl[t]{80,9;$x_0$} +\lbl[b]{87,11;$\delta x$} +\lbl[t]{101,7,-7;$x_0+\delta x$} +\lbl[b]{120,11;$\T_{x_0}X$} +\lbl[t]{88,59;$\delta x$} +\lbl[b]{120,61;$\T_{x_0}X$} +\lbl[tl]{120,3,-10;$X=\R$} +\lbl[r]{79,74;$\d f(\delta x)$} +\lbl[r]{79,102;$\T_{f(x_0)}Y$} +\lbl[lb]{21,115;$\T_{f(x_0)}Y$} +\lbl[l]{22,74;$\d f(\delta x)$} +\lbl[r]{16,88;$f(x_0)+\d f(\delta x)$} +\lbl[r]{19,60;$f(x_0)$} +\lbl[r]{11,110;$f(x_0+\delta x)$} +\lbl[l]{42,99;$\o(\delta x)$} +\lbl[b]{10,121;$Y=\R$} +\lbl[br]{47,21;Graph of $\d f$} +\lbl[bl]{26,36,13;Graph of $y=f(x)$} +\end{lpic} + +Now if the picture is rescaled, \latex{} boxes also shift to +appropriate positions. However, the angles are the visible angles in +the final output and +sometimes they have to be adjusted after rescaling of the included graphics. +\begin{verbatim} +\begin{lpic}[l(10mm),r(5mm),t(5mm),b(10mm),draft,clean]{instructions-differential(0.8,0.4)} +... +\end{lpic} +\end{verbatim} + +\begin{lpic}[l(10mm),r(5mm),t(5mm),b(10mm),draft,clean]{instructions-differential(0.8,0.4)} +\lbl[t]{80,9;$x_0$} +\lbl[b]{87,11;$\delta x$} +\lbl[t]{101,7,-7;$x_0+\delta x$} +\lbl[b]{120,11;$\T_{x_0}X$} +\lbl[t]{88,59;$\delta x$} +\lbl[b]{120,61;$\T_{x_0}X$} +\lbl[tl]{120,3,-10;$X=\R$} +\lbl[r]{79,74;$\d f(\delta x)$} +\lbl[r]{79,102;$\T_{f(x_0)}Y$} +\lbl[lb]{21,115;$\T_{f(x_0)}Y$} +\lbl[l]{22,74;$\d f(\delta x)$} +\lbl[r]{16,88;$f(x_0)+\d f(\delta x)$} +\lbl[r]{19,60;$f(x_0)$} +\lbl[r]{11,110;$f(x_0+\delta x)$} +\lbl[l]{42,99;$\o(\delta x)$} +\lbl[b]{10,121;$Y=\R$} +\lbl[br]{47,21;Graph of $\d f$} +\lbl[bl]{26,36,13;Graph of $y=f(x)$} +\end{lpic} + + +\vspace{5mm} + +\end{document} + + diff --git a/macros/latex/contrib/lpic/lpic.sty b/macros/latex/contrib/lpic/lpic.sty new file mode 100644 index 0000000000..923f44e8e9 --- /dev/null +++ b/macros/latex/contrib/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