diff options
author | Karl Berry <karl@freefriends.org> | 2011-09-04 16:35:48 +0000 |
---|---|---|
committer | Karl Berry <karl@freefriends.org> | 2011-09-04 16:35:48 +0000 |
commit | 60b4ec6f2bf1ba57aa206b2ac46c454d75f3bf93 (patch) | |
tree | cbf61d6f8bd4a2c6ff62d5e7940e22c352757cfa /Master/texmf-dist/doc/latex/lapdf/lapdf.tex | |
parent | d422465c9efb44dd32ba6a50f6ef9879bce018be (diff) |
lapdf is back (2sep11)
git-svn-id: svn://tug.org/texlive/trunk@23806 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/doc/latex/lapdf/lapdf.tex')
-rw-r--r-- | Master/texmf-dist/doc/latex/lapdf/lapdf.tex | 325 |
1 files changed, 325 insertions, 0 deletions
diff --git a/Master/texmf-dist/doc/latex/lapdf/lapdf.tex b/Master/texmf-dist/doc/latex/lapdf/lapdf.tex new file mode 100644 index 00000000000..057ccc2c1da --- /dev/null +++ b/Master/texmf-dist/doc/latex/lapdf/lapdf.tex @@ -0,0 +1,325 @@ +\documentclass[a4paper,11pt]{article} +\usepackage[color]{lapdf} +\usepackage{shortvrb} +\textheight24.62cm +\textwidth15.92cm +\oddsidemargin0cm +\topmargin-1cm +\parindent0cm +\parskip0cm +\unitlength1cm +\pagestyle{headings} + +\MakeShortVerb{\|} + +\newdimen\a +\newdimen\x +\newdimen\y +\Defnum(\n,0) + +\title{\Huge{\bf\Lapdf} \\ \vspace{0.5cm} + \Large Drawing in \TeX{} with PDF commands \\ \vspace{0.5cm} + \normalsize Integral/Rational Bezier Curves \\ + Many Useful Drawing Primitives \\ + A Rich Set Of Math Functions \\ + Function, Parametric \& Polar Plots and Grids \\ \vspace{0.8cm} + \begin{lapdf}(6,6.3)(-3,-3.3) + \Whilenum{\n<360}{% + \Nextcol(0,23) \Rad(\n,\a) + \Cos(\Np\a,\x) \Add(\x,\x) + \Sin(\Np\a,\y) \Add(\y,\y) + \Circle(64)(\Np\x,\Np\y,1.5) \Stroke + \Add(\n,15)} + \end{lapdf}} +\author{Detlef Reimers, detlefreimers@gmx.de} +\date{\today} + +% --------------------------------------------------------------------------- +\begin{document} +\maketitle + +\begin{abstract} +This package started as a project for drawing arbitrary bezier curves. +It implements the integral and rational bezier curves of degree one up +to seven. Using quadratic rational bezier curves makes it possible to +exactly draw arbitrary conics. Also implemented are most elementary math +functions as power series and two loop commands for programming constructs. + +This basic functionality gives the ability to draw many geometric +shapes like arbitray circles, rotated ellipses, rectangles and polygons. +The package also implements function, parametric and polar plotting +routines together with the possibility to draw special grids. + +You are invited to extend this package to your own needs. This is not +very complicated, because you can use all of the math capabilities in +your \TeX{} documents directly and so, you can program your drawings +(see example above). The package also defines a rainbow color palette +and you can step through the colors. + +This package needs the standard \LaTeX{} |calc| package for multiplication +and division of dimensions. No other packages are needed. Most of the drawing +primitives rely on the graphic capabilities of PDF, which is mostly like +PostScript without programming. With the help of the \pdfTeX{} engine this +programming possibility is back at the users hand. Now you can write your +PDF-graphics directly in your \pdfTeX{} source file. + +The author hopes that \Lapdf{} may be useful and helps, to produce beautiful +and sophisticated drawings. I will be thankful for contructive criticism and +help from the users to further improve this package. +\end{abstract} + +\tableofcontents +\parskip0.2cm + +\section{Introduction} + +\subsection{What is it for?} + +\Lapdf{} is intended as a practical extension to the standard \LaTeX{} +|picture| environment. It gives the user the ability to quickly +draw many useful geometric shapes like arbitrary lines, circles, +rotated ellipses, arcs, vectors, rectangles, triangles and equilateral +polygons. + +You can also draw bezier curves of degree one to seven. You may +choose the integral bezier form or the more general rational form. +The letter one enables you to exactly draw all kind of conic curves +like parabolas, hyperbolas, ellipses and circles. There is no need to +approximate them with quadratic or cubic bezier curves. + +This package also implements a rich set of basic math functions like: |Sin|, +|Cos|, |Tan|, |Asin|, |Acos|, |Atan|, |Sinh|, |Cosh|, |Tanh|, |Asinh|, |Acosh|, +|Atanh|, |Exp|, |Pow|, |Ln|, |Log|, |Sqrt|, |Hypot|, |Len|. They can be used in +your documents to program special plot functions or in loop constructs in +connection with drawing functions. Al these functions are based on the ability +to do floating point multiplication and division with dimension values and +with dimension registers. These calculations are provided by the help of the +|calc| package, which belongs to the standard \LaTeX{} tools. + +\subsection{How does it work?} + +\TeX{} and also \LaTeX{} were made to typeset arbirary complicated and +structured text documents, with the special ability to integrate math formulas +into the document. |Donald Knuth|, the inventor of this marvellous +typesetting machine, only provided a small peephole to implement +inline graphics in \TeX{} documents. The basic shape of these drawing +capabilities is the |dot|. If you want to draw a line with pure \TeX{} +commands, you have to draw lots of evenly spaced dots. This uses much of +\TeX{} memory and it takes a lot of time to place them. |Leslie Lamport|, +the inventor of the \LaTeX{} macro package, used this technique together with +some specially designed graphic fonts for his implementation of the |picture| +environment, which allows to produce simple to moderate comlicated graphics +from inside the \LaTeX{} document. This approach is nice for simple +drawings, but you are limited to only a small set of line or vector slopes, +you only can draw circles of limited radii and so on. This is the price for +general portability, because the line and circle fonts are limited to special +drawing primitives. + +Other new drawing packages avoid these limitations by using the |Postscript| +programming language for calculations and drawing. With the help of |DVIPS| +you can produce arbitrary sophisticated drawings to be integrated into you +\LaTeX{} file. But you are limited to output devices which can handle postscript. + +So, there were other approaches to implement more general drawing capabilities. +The first one uses so called |Tpic| specials. |Tpic| is a simple graphic +language from Unix systems, which was used together with |Groff| to produce +documents with inline graphics. Another approach was done by +|Eberhard Matthes| in his |EmTeX| distribution. He implemented a small but +powerful set of graphic primitives into his DVI drivers, which could set +points, draw arbitrary lines and set the linewidth. + +\Lapdf{} evolved out of my former |Ladraw| style, which had very similar +capabilities, but no way to fill or clip graphics. \Lapdf{} uses the |PDF| +capabilities directly, so it does not rely on other packages or tools with the +exception of the |calc| style to perform floating point arithmetic in \TeX{}. + +The ability to draw arbitrary lines frees us from the use of single dots as +basic drawing primitve. We don't need to calculate the number of dots to draw +a smooth bezier curve, because we use straight line segments to draw them. This +way, we never have white spaces in curve shapes, but we have to take care to use +enough line segments to produce a smooth curve. + +The Bezier curve drawing is invoked by two general calling routines |Curve| +for integral curves and |Rcurve| for rational curves. As an example, the +command: +\begin{verbatim} + \Curve(64)(0,0)(3,6)(6,-7)(9,0) +\end{verbatim} +will draw an integral cubic bezier curve (4 points), consisting of 64 line segments +and the command: +\begin{verbatim} + \Rcurve(96)(0,0,1)(5,8,2)(10,0,1) +\end{verbatim} +will draw a rational quadratic bezier curve (3 points) with the weights (will be +explained later) $w_0=1$, $w_1=2$ and $w_2=1$, consisting of 96 line segments. + +This package uses round brackets around command parameters with the only +exception of the |Text| command, where the last argument (the actual text) +cannot be bracketed with round brackets. This convention makes some functions +a little more static, but you don't have to remember complicated calling +syntaxes. My first decision was to make this style very easy to use. All +\Lapdf{} commands begin with a capital letter to distinguish them from other, +equally spelled \TeX{} commands. I hope that the names of the graphic macros +helps guessing what they do. The standiest one seems to be |concat|, which +is a native |PDF| matrix calculation commands, the others tell the user +what they mean. + +\subsection{How to use it?} + +Here are some simple examples that will show you the basic usage of the +\Lapdf{} package. First, we want to draw an ellipse at (1,2), rotated by an +angle of $30\deg$ with diameters $a=3cm$ and $b=2cm$ with red color and linewidth +of $0.3pt$. We also want to draw two axes with tick marks. The center point will +be marked and also the two main axes of the ellipse will be drawn dashed. +\vspace{0.1cm} + +\begin{minipage}[c][7cm]{8cm} +\small{ +\begin{verbatim} + \documentclass{article} + \usepackage[color]{Lapdf} + \unitlength1cm + \begin{document} + \begin{lapdf}(6,6)(-2,-1) + \Lingrid(10)(1,3)(-2,4)(-1,5) + \Red + \Ellipse(50)(1,2)(3,2,30) \Stroke + \Blue + \Dash(3) + \Line(-2,0.5)(4,3.5) \Stroke + \Line(-0.5,5)(2.5,-1) \Stroke + \Dash(0) + \Point(1)(1,2) + \Text(1.1,2.2,cb){C} + \end{lapdf} + \end{document} +\end{verbatim} +} +\end{minipage} +\begin{minipage}[c][7cm]{7cm} +\begin{lapdf}(6,6.3)(-2,-1) + \Lingrid(10)(1,3)(-2,4)(-1,5) + \Red + \Ellipse(50)(1,2)(3,2,30) \Stroke + \Blue + \Dash(3) + \Line(-2,0.5)(4,3.5) \Stroke + \Line(-0.5,5)(2.5,-1) \Stroke + \Dash(0) + \Point(1)(1,2) + \Text(1.1,2.2,cb){C} +\end{lapdf} +\end{minipage} +\vspace{0.1cm} + +From this example you can see how the package is invoked in the preamble +of the document. If you only want to draw in black and white, you would +use the option |black| instead of |color| or simply no option. This means that +all color commands will be silently ignored. The ellipse is drawn with 50 +line segments in it's first part and with $2\cdot 50=100$ segments in +the second part. |Line| draws a line (solid or dashed) between two points. The +|Point| command draws a circle filled with a shade of gray (black..white). +|Puttext| puts the bracketed text at a specific point with optional position +parameters (here centered and bottom). + +Our next example shows how to plot the function $f(x)=2\sin x$ from $x=-4$ +to $x=4$. We also want to write the term into the picture. We have to +supply the function definition in |Fx|. +\vspace{0.1cm} + +\begin{minipage}[c][5.7cm]{7.3cm} +\small{ +\begin{verbatim} + \documentclass{article} + \usepackage[color]{Lapdf} + \unitlength1cm + \begin{document} + \begin{lapdf}(8,4)(-7,-2) + \Lingrid(10)(1,3)(-4,4)(-2,2) + \Red + \def\Fx(#1,#2){\Sin(#1,#2) #2=2#2} + \Fplot(50)(-4,4) \Stroke + \Text(-2,1.2,cb){$y=2\sin x$} + \end{lapdf} + \end{document} +\end{verbatim} +} +\end{minipage} +\begin{minipage}[c][5.7cm]{8.5cm} +\begin{lapdf}(8,4)(-4,-2) + \Lingrid(10)(1,3)(-4,4)(-2,2) + \Red + \def\Fx(#1,#2){\Sin(#1,#2) #2=2#2} + \Fplot(50)(-4,4) \Stroke + \Text(-2,1.2,cb){$y=2\sin x$} +\end{lapdf} +\end{minipage} +\vspace{0.1cm} + +The function definition has two parameters. The first is the +$x$-value and the second is the register for the function value +$f(x)$. The |Sin| function also takes two parameters, the +same way as |Fx| does. So, $\sin x$ is in register |\#2|. +At last we have to multiply this value with 2 to get $2\sin x$. +The function is plotted with 50 line segments. The last introductory +example will draw several bezier curves (integral and rational) and +axes without a grid. All curves are drawn in different colors. +\vspace{0.1cm} + +\begin{minipage}[c][7.8cm]{9cm} +\small{ +\begin{verbatim} + \documentclass{article} + \usepackage[color]{Lapdf} + \unitlength1cm + \begin{document} + \begin{lapdf}(6,6)(0,0) + \Lingrid(10)(0,2)(0,6)(0,6) + \Stepcol(0,23,4) + \Curve(32)(0,0)(6,6) \Stroke + \Stepcol(0,23,4) + \Curve(64)(0,0)(3,6)(6,0) \Stroke + \Stepcol(0,23,4) + \Curve(64)(0,3)(2,6)(4,0)(6,3) \Stroke + \Stepcol(0,23,4) + \Rcurve(64)(0,0,1)(3,6,5)(6,0,1) \Stroke + \Stepcol(0,23,4) + \Rcurve(64)(0,3,1)(2,6,10)(4,0,10)(6,3,1) + \Stroke + \end{lapdf} + \end{document} +\end{verbatim} +} +\end{minipage} +\begin{minipage}[c][7.8cm]{6.5cm} +\begin{lapdf}(6,6)(0,0) + \Lingrid(10)(0,2)(0,6)(0,6) + \Stepcol(0,23,4) + \Curve(64)(0,0)(6,6) \Stroke + \Stepcol(0,23,4) + \Curve(64)(0,0)(3,6)(6,0) \Stroke + \Stepcol(0,23,4) + \Curve(64)(0,3)(2,6)(4,0)(6,3) \Stroke + \Stepcol(0,23,4) + \Rcurve(64)(0,0,1)(3,6,5)(6,0,1) \Stroke + \Stepcol(0,23,4) + \Rcurve(64)(0,3,1)(2,6,10)(4,0,10)(6,3,1) + \Stroke +\end{lapdf} +\end{minipage} +\vspace{0.1cm} + +The grid is disabled with the first 0 value in |Lingrid|. The next +value 2 only shows ticks mark without text. The first three curves are +integral bezier curves with degree 1, 2 and 3. The next two are +rational bezier curves with degree 2 and 3. All curves are drawn with +64 line segments. The rational form needs a so called |weight| parameter. +Usually, the first and the last values are set to 1, the other may have +arbitrary values. If $w>1$, the curve is pulled into the direction of +the bezier point, otherwise it is pushed away from this point. This allows +much more control over the shape of the bezier curve, compared to the +integral form. The |Stepcol| command cycles between color 0 and color +23 in step of length 4. Please look at the file |colors.tex| to see a +whole color circle with all possible 96 colors. + +\end{document} |