From 43bfc0c09d30517099eaf942663010527478a0fc Mon Sep 17 00:00:00 2001 From: Karl Berry Date: Sat, 19 Oct 2019 21:17:35 +0000 Subject: curve2e (19oct19) git-svn-id: svn://tug.org/texlive/trunk@52448 c570f23f-e606-0410-a88d-b1316a301751 --- Master/texmf-dist/doc/latex/curve2e/README.txt | 2 +- Master/texmf-dist/doc/latex/curve2e/curve2e.pdf | Bin 513014 -> 670168 bytes Master/texmf-dist/source/latex/curve2e/curve2e.dtx | 319 ++++++++++++++------- Master/texmf-dist/tex/latex/curve2e/curve2e.sty | 34 ++- 4 files changed, 240 insertions(+), 115 deletions(-) (limited to 'Master') diff --git a/Master/texmf-dist/doc/latex/curve2e/README.txt b/Master/texmf-dist/doc/latex/curve2e/README.txt index 63631d80e63..d7d991872d5 100644 --- a/Master/texmf-dist/doc/latex/curve2e/README.txt +++ b/Master/texmf-dist/doc/latex/curve2e/README.txt @@ -10,7 +10,7 @@ %% License information appended %% File README.txt for package curve2e - [2019-03-29 v.2.0.1 Extension package for pict2e] + [2019-10-17 v.2.0.3 Extension package for pict2e] diff --git a/Master/texmf-dist/doc/latex/curve2e/curve2e.pdf b/Master/texmf-dist/doc/latex/curve2e/curve2e.pdf index 519ee316798..59094e6a2da 100644 Binary files a/Master/texmf-dist/doc/latex/curve2e/curve2e.pdf and b/Master/texmf-dist/doc/latex/curve2e/curve2e.pdf differ diff --git a/Master/texmf-dist/source/latex/curve2e/curve2e.dtx b/Master/texmf-dist/source/latex/curve2e/curve2e.dtx index 902cd4e1a6c..015b659d79c 100644 --- a/Master/texmf-dist/source/latex/curve2e/curve2e.dtx +++ b/Master/texmf-dist/source/latex/curve2e/curve2e.dtx @@ -47,7 +47,7 @@ README.txt and manifest.txt. %<+package>\ProvidesPackage{curve2e}% %<+readme>File README.txt for package curve2e %<*package|readme> - [2019-03-29 v.2.0.1 Extension package for pict2e] + [2019-10-17 v.2.0.3 Extension package for pict2e] % %<*driver> \documentclass{ltxdoc}\errorcontextlines=9 @@ -56,7 +56,7 @@ README.txt and manifest.txt. \usepackage{lmodern,textcomp} \usepackage{mflogo} \usepackage{multicol,amsmath,fancyvrb,trace} -\usepackage{curve2e} +\usepackage{xcolor,curve2e} \GetFileInfo{curve2e.dtx} \title{The extension package \textsf{curve2e}} \author{Claudio Beccari\thanks{E-mail: \texttt{claudio dot beccari at gmai dot com}}} @@ -93,7 +93,7 @@ README.txt and manifest.txt. \linespread{#1}\fontsize{#2}{#2}\selectfont} -\begin{document}%\OnlyDescription +\begin{document} \maketitle \columnseprule=0.4pt \begin{multicols}{2} @@ -104,7 +104,7 @@ README.txt and manifest.txt. % % \fi % -% \CheckSum{5560} +% \CheckSum{5571} % \begin{abstract} % This file documents the |curve2e| extension package to the |pict2e| % bundle implementation that has been described by Lamport @@ -321,9 +321,9 @@ README.txt and manifest.txt. % |\curveto|, |\closepath|, |\fillpath|, and |\strokepath|; of course these % macros can be used by the end user, and sometimes they perform better % than the macros defined in this package, because the user has a better -% control on the position of the Bézier control points, while here the -% control points are sort of rigid. It would be very useful to resort to -% the |hobby| package, but its macros are conforming with those of the +% control on the position of the Bézier splines control points, while here +% the control points are sort of rigid. It would be very useful to resort +% to the |hobby| package, but its macros are conforming with those of the % |tikz| and |pgf| packages, not with |curve2e|; an interface should be % created in order to deal with the |hobby| package, but this has not been % done yet. @@ -367,13 +367,13 @@ README.txt and manifest.txt. % This package \texttt{curve2e} extends the power of \texttt{pict2e} with % the following modifications and the following new commands. % \begin{enumerate} -% \item This package |curve2e| calls directly the \LaTeX\ packages |color| -% and |pict2e| to which it passes any possible option that the latter can -% receive; actually the only options that make sense are those concerning -% the arrow tips, either \LaTeX\ or PostScript styled, because it is -% assumed that if you use this package you are not interested in using the -% original \LaTeX\ commands. See the |pict2e| documentation in order to see -% the correct options |pict2e| can receive. +% \item This package |curve2e| calls directly the \LaTeX\ packages +% |color| and |pict2e| to which it passes any possible option that the +% latter can receive; actually the only options that make sense are +% those concerning the arrow tips, either \LaTeX\ or PostScript styled, +% because it is assumed that if you use this package you are not +% interested in using the original \LaTeX\ commands. See the |pict2e| +% documentation in order to see the correct options |pict2e| can receive. %^^A % \item The user is offered new commands in order to control the line % terminators and the line joins; specifically: @@ -1184,8 +1184,9 @@ README.txt and manifest.txt. % is emphasised because it actually is an approximation with four % quarter-circle cubic splines that, in spite of being drawn with third % degree parametric polynomials, approximate very well a real circle; on -% the opposite the quadratic spline circle is clearly a poor approximation -% even if the maximum radial error amounts just to about 6\% of the radius. +% the opposite the quadratic spline circle is clearly a poor +% approximation even if the maximum radial error amounts just to about +% 6\% of the radius. % %\begin{figure}[p] %\begin{minipage}{\linewidth} @@ -1238,7 +1239,9 @@ README.txt and manifest.txt. %\end{picture} %\end{minipage} % -%\caption{\rule{0pt}{4ex}Several graphs drawn with quadratic Bézier splines. On the right a quadratic spline circle is compared with a cubic line circle.} +%\caption{\rule{0pt}{4ex}Several graphs drawn with quadratic Bézier +% splines. On the right a quadratic spline circle is compared with a +% cubic line circle.} %\label{fig:quadratic-arcs} %\end{figure} % @@ -1248,7 +1251,61 @@ README.txt and manifest.txt. % therefore it is not actually identical to the previous version, % although the latter one performed correctly for everything else except % for color-filled quadratic paths. -% +% ^^A +% \item The new version of |\mulpiput| is backwards compatibile with +% the original version contained in the \LaTeX\ kernel. The new part +% consists into the handling of the coordinate increments from one +% position to the next for the \meta{object} to include in the drawing. +% On page~\pageref{pag:multiput} we show the code for the figure shown +% there. The red grid is nothing new, except that id demonstrate the the +% traditional |\multiput| used in tis code, shown in a previous example, +% produces exactly the same result. But the for “graphs” on the grid, +% display an alignment of black dots along the diagonal of the grid +% (again traditional |\multiput| rendered with the new version); +% a number of blue dots along a parabola; another number of magenta +% dots alined along a half sine wave; a number of little green squares +% aligned along a $-15~\circ$ line starting from the center of the grid. +% +%\noindent +%\begin{minipage}{0.45\linewidth} +%\begin{Verbatim}[fontsize=\setfontsize{8.25}] +%\unitlength=0.01\linewidth +%\begin{picture}(100,100) +%\put(0,0){\GraphGrid(100,100)} +%\multiput(0,0)(10,10){11}{\circle*{2}} +%\color{blue!70!white} +%\multiput(0,0)(10,0){11}{% +% \circle*{2}}% +% [\edef\X{\fpeval{\X+10}}% +% \edef\Y{\fpeval{((\X/10)**2)}}] +%\color{magenta} +%\multiput(0,0)(10,1){11}{% +%\circle*{2}}% +% [\edef\X{\fpeval{\X+10}}% +% \edef\Y{\fpeval{sind(\X*1.8)*100}}] +%\color{green!60!black} +%\multiput(50,50)(-15:5){11}}{% +%\polygon*(-1,-1)(1,-1)(1,1)(-1,1)} +%\end{picture} +%\end{Verbatim} +%\end{minipage} +%\hfill +%\begin{minipage}{0.45\linewidth} +%\unitlength=0.01\linewidth +%\begin{picture}(100,100) +%\put(0,0){\GraphGrid(100,100)} +%\multiput(0,0)(10,10){11}{\circle*{2}} +%\color{blue!70!white} +%\multiput(0,0)(10,0){11}{\circle*{2}}% +%[\edef\X{\fpeval{\X+10}}\edef\Y{\fpeval{((\X/10)**2)}}] +%\color{magenta} +%\multiput(0,0)(10,1){11}{\circle*{2}}% +%[\edef\X{\fpeval{\X+10}}\edef\Y{\fpeval{sind(\X*1.8)*100}}] +%\color{green!60!black} +%\multiput(50,50)(-15:5){11}{\polygon*(-1,-1)(1,-1)(1,1)(-1,1)} +%\end{picture}\label{pag:multiput} +%\end{minipage} +% % \end{enumerate} % % @@ -1260,8 +1317,8 @@ README.txt and manifest.txt. % was first released in 1994; in the |latexnews| news-letter of December % 2003; the first implementation was announced; the first version of this % package was issued in 2006. It was time to have a better drawing -% environment; this package is a simple attempt to follow the initial path -% while extending the drawing facilities; but Till Tantau's |pgf| +% environment; this package is a simple attempt to follow the initial +% path while extending the drawing facilities; but Till Tantau's |pgf| % package has gone much farther. % %^^A%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% @@ -1434,7 +1491,8 @@ README.txt and manifest.txt. \@wholewidth#1\@halfwidth.5\@wholewidth\ignorespaces}% \newcommand\defaultlinethickness[1]{\defaultlinewidth=#1\relax \def\thicklines{\linethickness{\defaultlinewidth}}% -\def\thinlines{\linethickness{.5\defaultlinewidth}}\thinlines \ignorespaces}% +\def\thinlines{\linethickness{.5\defaultlinewidth}}\thinlines + \ignorespaces}% % \end{macrocode} % The |\ignorespaces| at the end of these macros is for avoiding spurious % spaces to get into the picture that is being drawn, because @@ -1562,8 +1620,9 @@ README.txt and manifest.txt. % always referred to the origin of the coordinate axes; the end point $P_2$ % coordinates with the first macro type are referred to the origin of the % axes, while with the second macro type they are referred to $P_1$; both -% macro types have their usefulness and figures~\ref{fig:dashedlines} -% and~\ref{fig:dottedlines} show how to use these macros. +% macro types have their usefulness and figures~\ref{fig:dashedlines} on +% page~\pageref{fig:dashedlines} and~\ref{fig:dottedlines} on +% page~\pageref{fig:dottedlines} show how to use these macros. % % We distinguish these macros with an asterisk; the unstarred version is % the first macro type, while the starred one refers to the second macro @@ -1580,31 +1639,31 @@ README.txt and manifest.txt. % above distance by this number. % % Another vector $P_2-P_1$ is created by dividing it by this number; -% then, when dashes are involved, it is multiplied by two in order to have -% the increment from one dash to the next; finally the number of patterns -% is obtained by integer division of this number by 2 and increasing it -% by~1. +% then, when dashes are involved, it is multiplied by two in order to +% have the increment from one dash to the next; finally the number of +% patterns is obtained by integer division of this number by 2 and +% increasing it by~1. % A simple |\multiput| completes the job, but in order to use the various % vectors and numbers within a group and to throw the result outside the % group while restoring all the intermediate counters and registers, a % service macro is created with an expanded definition and then this % service macro is executed. -% Figure~\ref{fig:dashedlines} shows the effect of the slight changing -% of the dash length in order to maintain approximately the same dash-space -% pattern along the line, irrespective of the line length. -% The syntac is the following: +% Figure~\ref{fig:dashedlines} on page~\pageref{fig:dashedlines} shows +% the effect of the slight changing of the dash length in order to +% maintain approximately the same dash-space pattern along the line, +% irrespective of the line length. The syntax is the following: % \begin{flushleft} % \cs{Dashline}\meta{\texttt{*}}\parg{first point}\parg{second point}\marg{dash length} % \end{flushleft} % where \meta{first point} contains the coordinates of the starting point % and \meta{second point} those of the ending point; of course the -% \meta{dash length}, which equals the dash gap, is mandatory. The asterisk -% plays a specific role; in facts, if coordinates are specified in polar -% form, without the optional asterisk the dashed line is misplaced, while -% if the asterisk is specified, the whole object is pout in the proper -% position. On the opposite, if the coordinates are in cartesian form the -% \meta{first point} coordinates play the role they are supposed to do even -% without the asterisk. +% \meta{dash length}, which equals the dash gap, is mandatory. The +% asterisk plays a specific role; in facts, if coordinates are specified +% in polar form, without the optional asterisk the dashed line is +% misplaced, while if the asterisk is specified, the whole object is put +% in the proper position. On the opposite, if the coordinates are in +% cartesian form the \meta{first point} coordinates play the role they +% are supposed to do even without the asterisk. % \begin{macrocode} \ifx\Dashline\undefined \def\Dashline{\@ifstar{\Dashline@@}{\Dashline@}} @@ -1670,11 +1729,13 @@ README.txt and manifest.txt. % % Notice that vectors as complex numbers in their cartesian and polar forms % always represent a point position referred to the origin of the axes; -% this is why in figures~\ref{fig:dashedlines} and~\ref{fig:dottedlines} -% the dashed and dotted line that depart from the lower right corner of -% the graph grid, and that use polar coordinates, have to be put at the -% proper position with the starred version of the commands that take care -% of the relative specification made with the polar coordinates. +% this is why in figures~\ref{fig:dashedlines} on +% page~\pageref {fig:dashedlines} and~\ref{fig:dottedlines} on +% page~\pageref{fig:dottedlines} the dashed and dotted line that depart +% from the lower right corner of the graph grid, and that use polar +% coordinates, have to be put at the proper position with the starred +% version of the commands that take care of the relative specification +% made with the polar coordinates. % %^^A%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % \subsection{Coordinate handling} @@ -1699,11 +1760,11 @@ README.txt and manifest.txt. \AtBeginDocument{\@ifpackageloaded{eso-pic}{% \renewcommand\LenToUnit[1]{\strip@pt\dimexpr#1*\p@/\unitlength}}{}}% % \end{macrocode} -% The above redefinition is delayed at |\AtBeginDocument| in order to have -% the possibility to check the the |eso-pic| package had actually been -% loaded. Nevertheless the code is defined here just because the origina -%l |eso-pic| macro was interfering with the algorithms of coordinate -% handling. +% The above redefinition is delayed at |\AtBeginDocument| in order to +% have the possibility to check the the |eso-pic| package had actually +% been loaded. Nevertheless the code is defined here just because the +% original |eso-pic| macro was interfering with the algorithms of +% coordinate handling. % % But let us come to the real subject of this section. We define a % |\GettCoord| macro that passes control to the service macro with the @@ -1718,9 +1779,9 @@ README.txt and manifest.txt. % \end{macrocode} % The macro that detects the form of the coordinates is |\isnot@polar|; % it examines the parameter syntax in order to see if it contains a -% colon; if it does, the coordinates are in polar form, otherwise they are -% in cartesian form. this macro uses delimited arguments, therefore low -% level definition syntax must be used. +% colon; if it does, the coordinates are in polar form, otherwise they +% are in cartesian form. this macro uses delimited arguments, therefore +% low level definition syntax must be used. % \begin{macrocode} \def\isnot@polar#1:#2!!{\def\@tempOne{#2}\ifx\@tempOne\empty \expandafter\@firstoftwo\else @@ -1731,20 +1792,70 @@ README.txt and manifest.txt. \def\SplitPolar@@(#1:#2)#3#4{\DirFromAngle#1to\@DirA \ScaleVect\@DirA by#2to\@DirA \expandafter\SplitNod@@\expandafter(\@DirA)#3#4} - +% \end{macrocoe} +% In order to accept polar coordinates with |\put| and |\multiput| +% we resort to using |\GetCoord|; therefore the redefinition of +% |\put| is very simple because it suffices to save the original +% meaning of that macro and redefine the new one in terms of the +% old one. +% \begin{macrocode} \let\originalput\put \def\put(#1){\bgroup\GetCoord(#1)\@tX\@tY \edef\x{\noexpand\egroup\noexpand\originalput(\@tX,\@tY)}\x} - -\let\originalmultiput\multiput -\let\original@multiput\@multiput - -\long\def\@multiput(#1)#2#3{\bgroup\GetCoord(#1)\@mptX\@mptY -\edef\x{\noexpand\egroup\noexpand\original@multiput(\@mptX,\@mptY)}% -\x{#2}{#3}\ignorespaces} - -\gdef\multiput(#1)#2{\bgroup\GetCoord(#1)\@mptX\@mptY -\edef\x{\noexpand\egroup\noexpand\originalmultiput(\@mptX,\@mptY)}\x(}%) +% \end{macrocode} +% For |\multiput| it is mor complicated, because the increments from one +% position to the next cannot be done efficiently because the increments +% in the original definition are executed within boxes, therefore any +% macro instruction inside these boxes is lost. It is a good occasion to +% modify the |\multiput| definition by means of the advanced macro +% definitions provided by package |xparse|; we can add also some error +% messages for avoiding doing anything when son mandatory parameters are +% missing ore are empty, or do not contain anything different from an +% ordered pair or a polar form. We ad also an optional argument to +% handle the increments outside the boxes. +% The new macro has the following syntax:\\[2ex] +% \mbox{\cs{multiput}\texttt{(\meta{initial})}\texttt{(\meta{increment})}\marg{number}\marg{objext}\oarg{handler}}\\[2ex] +% where \meta{initial} contains the cartesian or polar coordinates +% of the initial point; \meta{increment} contains the cartesian or +% polar increment for the coordinates to be used from the second +% argument to the last; \meta{number} il the total number of points +% to be drawn; \meta{object} is the object to be put in position at +% each cycle repetition; the optional \meta{handler} may be used to +% control the current values of the horizontal and vertical increments. +% The new definition contains two |\put| commands where the second is +% nested within a while loop which in turn is within the argument of +% the first |\put| command. Basically it is the same idea that the +% original macros, but now the increment are computed within the While +% loop, bit outside the argument of the inner |\put| command. If the +% optional \meta{handler} is specified the increments are computed +% from the macros specified by the user. +% +% The two increments components inside the optional argument may be set +% by means of mathematical expressions operated upon by the |\fpeval| +% function given by the |\xfp| package already loaded by |curve2e|. Of +% course it the user responsibility to pay attention to the scales of +% the two axes and to write meaningful expressions; the figure and code +% shown in the first part of this documentation show some examples: +% see page~\pageref{pag:multiput}. +% \begin{macrocode} +\RenewDocumentCommand{\multiput}{ d() d() m m o }{% +\IfNoValueTF{#1}{\PackageError{curve2e}{% + \string\multiput\space initial point coordinates missing}% + {Nothing done}}% + {\IfNoValueTF{#2}{\PackageError{curve2e}{% + \string\multiput\space Increment components missing}% + {Nothing done}% + }% + {\GetCoord(#2)\dX\dY + \put(#1){\def\X{0}\def\Y{0}\@multicnt=#3\relax + \@whilenum \@multicnt > \z@\do{% + \put(\X,\Y){#4}\IfValueTF{#5}{#5}{% + \edef\X{\fpeval{\X+\dX}}\edef\Y{\fpeval{\Y+\dY}}}% + \advance\@multicnt\m@ne + }% + }} + }% +} % \end{macrocode} %^^A%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % \subsection{Vectors} @@ -1895,7 +2006,7 @@ README.txt and manifest.txt. % the macro draws only the arrow tip; this may work with macro |\vector|, % certainly not with |\Vector| and |\VECTOR|. This might be useful for % adding an arrow tip to a circular arc. See examples in -% figure~\ref{fig:vectors}. +% figure~\ref{fig:vectors} on page~\pageref{fig:vectors}. % % %^^A%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% @@ -2003,7 +2114,8 @@ README.txt and manifest.txt. \ignorespaces}} % \end{macrocode} % Now, for example, a filled polygon can be drawn using polar coordinates -% for its vertices; see figure~\ref{fig:filled-polygon} +% for its vertices; see figure~\ref{fig:filled-polygon} on +% page~\pageref{fig:filled-polygon}. % % Remember; the polygon polar coordinates are relative to the origin of % the local axes; therefore in order to position a polygon in a different @@ -2068,11 +2180,11 @@ README.txt and manifest.txt. % words the L3 library for floating point calculations accepts such % expressions as \texttt{123.456}, \texttt{0.12345e3}, and % \texttt{12345e-3}, and any other equivalent expression. If the first -% number is integer, it assumes that the decimal separator is to the right -% of the rightmost digits of the digit string. +% number is integer, it assumes that the decimal separator is to the +% right of the rightmost digits of the digit string. % -% Floating pint calculations may be done through the |\fpeval| L3 function -% with a very simple syntax: +% Floating pint calculations may be done through the |\fpeval| L3 +% function with a very simple syntax: % \begin{flushleft} % \cs{fpeval}\marg{mathematical expression} % \end{flushleft} @@ -2260,7 +2372,8 @@ README.txt and manifest.txt. % \end{macrocode} % % It is worth examining the following table, where the angles of nine -% vectors $45^circ$ degrees from one another are computed from this macro. +% vectors $45^\circ$ degrees apart from one another are computed from +% this macro. % \begin{center} % \begin{tabular}{l*9r} % Vector &0,0 &1,0 &1,1 & 0,1 & -1,1& -1,0&-1,-1&0,-1&1,-1\\ @@ -2639,7 +2752,8 @@ README.txt and manifest.txt. % control points lay on the perpendicular to the vectors that join the arc % center to the starting and end points respectively. % -% With reference to figure~\ref{fig:arcspline}, the points $P_1$ and $P_2$ +% With reference to figure~\ref{fig:arcspline} on +% page~\pageref{fig:arcspline}, the points $P_1$ and $P_2$ % are the arc end-points; $C_1$ and $C_2$ are the Bézier-spline % control-points; $P$ is the arc mid-point, that should be distant from % the center of the arc the same as $P_1$ and $P_2$. @@ -3095,16 +3209,17 @@ README.txt and manifest.txt. % \end{macrocode} % -% An example of use is shown in figure~\ref{fig:Cbezier}; notice that the -% tangents at the end points are the same for the black curve drawn with -% |\CurveBetween| and the five red curves drawn with |\CbezierBetween|; the -% five red curves differ only for the distance of their control point $C_0$ -% from the starting point; the differences are remarkable and the topmost -% curve even presents a slight inflection close to the end point. These -% effects cannot be obtained with the ``smarter'' macro |\CurveBetween|. -% But certainly this simpler macro is more difficult to use because the -% distances of the control points are difficult to estimate and require a -% number of cut-and-try experiments. +% An example of use is shown in figure~\ref{fig:Cbezier} on +% page~\pageref{fig:Cbezier}; notice that the tangents at the end points +% are the same for the black curve drawn with |\CurveBetween| and the five +% red curves drawn with |\CbezierBetween|; the five red curves differ only +% for the distance of their control point $C_0$ from the starting point; +% the differences are remarkable and the topmost curve even presents a +% slight inflection close to the end point. These effects cannot be +% obtained with the ``smarter'' macro |\CurveBetween|. But certainly this +% simpler macro is more difficult to use because the distances of the +% control points are difficult to estimate and require a number of +% cut-and-try experiments. % % % The ``smarter'' curve macro comes next; it is supposed to determine the @@ -3164,7 +3279,7 @@ README.txt and manifest.txt. \def\strip@semicolon#1;{\def\@tempB{#1}} % \end{macrocode} % By changing the tension values we can achieve different results: see -% figure~\ref{fig:tensions}. +% figure~\ref{fig:tensions} on page~\pageref{fig:tensions}. % % We use the formula we got for arcs~\eqref{equ:corda}, where the half % chord is indicated with $s$, and we derive the necessary distances: @@ -3328,19 +3443,19 @@ README.txt and manifest.txt. % to use the general internal cubic Bézier splines in a more comfortable % way. % -% As it can be seen in figure~\ref{fig:sinewave} the two diagrams should -% approximately represent a sine wave. With Bézier curves, that resort on -% polynomials, it is impossible to represent a transcendental function, but -% it is only possible to approximate it. It is evident that the -% approximation obtained with full control on the control points requires -% less arcs and it is more accurate than the approximation obtained with -% the recursive |\Curve| macro; this macro requires almost two times as -% many pieces of information in order to minimise the effects of the lack -% of control on the control points, and even with this added information -% the macro approaches the sine wave with less accuracy. At the same time -% for many applications the |\Curve| recursive macro proves to be much -% easier to use than with single arcs drawn with the |\CbezierBetween| -% macro. +% As it can be seen in figure~\ref{fig:sinewave} on +% page~\pageref{fig:sinewave} the two diagrams should approximately +% represent a sine wave. With Bézier curves, that resort on polynomials, +% it is impossible to represent a transcendental function, but it is only +% possible to approximate it. It is evident that the approximation obtained +% with full control on the control points requires less arcs and it is more +% accurate than the approximation obtained with the recursive |\Curve| +% macro; this macro requires almost two times as many pieces of information +% in order to minimise the effects of the lack of control on the control +% points, and even with this added information the macro approaches the +% sine wave with less accuracy. At the same time for many applications the +% |\Curve| recursive macro proves to be much easier to use than with single +% arcs drawn with the |\CbezierBetween| macro. % %^^A%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % \subsection{Quadratic splines} @@ -3562,13 +3677,14 @@ README.txt and manifest.txt. % specified position' \cs{Zbox} puts a symbol in math mode a little % displaced in the proper direction relative to a specified position. % They are just handy to label certain objects in a \texttt{picture} -% diagram, but they are not part of the \texttt{curve2e} package.}. -% created with the code shown within figure~\ref{fig:quadratic-arcs}. +% diagram, but they are not part of the \texttt{curve2e} package.} on +% page~\pageref{fig:quadratic-arcs} created with the code shown in the +% same page. % % Notice also that the inflexed line is made with two arcs that meet at % the inflection point; the same is true for the line that resembles % a sine wave. The cusps of the inner border of the green area are -% obtained with the usual optional argument already used also with the +% obtained with the usual optional star already used also with the % |\Curve| recursive macro. % % The ``circle'' inside the square frame is visibly different from a real @@ -3577,10 +3693,11 @@ README.txt and manifest.txt. % obtained with a single parabola is definitely a poor approximation of a % real quarter circle; possibly by splitting each quarter circle in three % or four partial arcs the approximation of a real quarter circle would be -% much better. On the right of figure~\ref{fig:quadratic-arcs} it is -% possible to compare a “circle” obtained with quadratic arcs with the the -% internal circle obtained with cubic arcs; the difference is easily seen -% even without using measuring instruments. +% much better. On the right of figure~\ref{fig:quadratic-arcs} on +% page~\pageref{fig:quadratic-arcs} it is possible to compare a “circle” +% obtained with quadratic arcs with the the internal circle obtained with +% cubic arcs; the difference is easily seen even without using measuring +% instruments. % % With quadratic arcs we decided to avoid defining specific macros similar % to |\CurveBetween| and |\CbezierBetween|; the first macro would not save diff --git a/Master/texmf-dist/tex/latex/curve2e/curve2e.sty b/Master/texmf-dist/tex/latex/curve2e/curve2e.sty index 3edfbecf539..052cc398b0f 100644 --- a/Master/texmf-dist/tex/latex/curve2e/curve2e.sty +++ b/Master/texmf-dist/tex/latex/curve2e/curve2e.sty @@ -11,7 +11,7 @@ %% \NeedsTeXFormat{LaTeX2e}[2016/01/01] \ProvidesPackage{curve2e}% - [2019-03-29 v.2.0.1 Extension package for pict2e] + [2019-10-17 v.2.0.3 Extension package for pict2e] @@ -48,7 +48,8 @@ \@wholewidth#1\@halfwidth.5\@wholewidth\ignorespaces}% \newcommand\defaultlinethickness[1]{\defaultlinewidth=#1\relax \def\thicklines{\linethickness{\defaultlinewidth}}% -\def\thinlines{\linethickness{.5\defaultlinewidth}}\thinlines \ignorespaces}% +\def\thinlines{\linethickness{.5\defaultlinewidth}}\thinlines + \ignorespaces}% \def\LIne(#1){{\GetCoord(#1)\@tX\@tY \moveto(0,0) \pIIe@lineto{\@tX\unitlength}{\@tY\unitlength}\strokepath}\ignorespaces @@ -129,20 +130,27 @@ \def\SplitPolar@@(#1:#2)#3#4{\DirFromAngle#1to\@DirA \ScaleVect\@DirA by#2to\@DirA \expandafter\SplitNod@@\expandafter(\@DirA)#3#4} - \let\originalput\put \def\put(#1){\bgroup\GetCoord(#1)\@tX\@tY \edef\x{\noexpand\egroup\noexpand\originalput(\@tX,\@tY)}\x} - -\let\originalmultiput\multiput -\let\original@multiput\@multiput - -\long\def\@multiput(#1)#2#3{\bgroup\GetCoord(#1)\@mptX\@mptY -\edef\x{\noexpand\egroup\noexpand\original@multiput(\@mptX,\@mptY)}% -\x{#2}{#3}\ignorespaces} - -\gdef\multiput(#1)#2{\bgroup\GetCoord(#1)\@mptX\@mptY -\edef\x{\noexpand\egroup\noexpand\originalmultiput(\@mptX,\@mptY)}\x(}%) +\RenewDocumentCommand{\multiput}{ d() d() m m o }{% +\IfNoValueTF{#1}{\PackageError{curve2e}{% + \string\multiput\space initial point coordinates missing}% + {Nothing done}}% + {\IfNoValueTF{#2}{\PackageError{curve2e}{% + \string\multiput\space Increment components missing}% + {Nothing done}% + }% + {\GetCoord(#2)\dX\dY + \put(#1){\def\X{0}\def\Y{0}\@multicnt=#3\relax + \@whilenum \@multicnt > \z@\do{% + \put(\X,\Y){#4}\IfValueTF{#5}{#5}{% + \edef\X{\fpeval{\X+\dX}}\edef\Y{\fpeval{\Y+\dY}}}% + \advance\@multicnt\m@ne + }% + }} + }% +} \def\vector(#1)#2{% \begingroup \GetCoord(#1)\d@mX\d@mY -- cgit v1.2.3