From 8520e46c50136c5a6160de5f7b8c7fb574821288 Mon Sep 17 00:00:00 2001 From: Karl Berry Date: Sat, 18 Apr 2020 20:56:01 +0000 Subject: pst-eucl (18apr20) git-svn-id: svn://tug.org/texlive/trunk@54785 c570f23f-e606-0410-a88d-b1316a301751 --- Master/texmf-dist/doc/generic/pst-eucl/Changes | 4 +- .../doc/generic/pst-eucl/pst-eucl-doc.pdf | Bin 1714126 -> 1780362 bytes .../doc/generic/pst-eucl/pst-eucl-doc.tex | 107 ++++++++++++++++----- .../texmf-dist/tex/generic/pst-eucl/pst-eucl.tex | 63 ++++++++++-- 4 files changed, 139 insertions(+), 35 deletions(-) (limited to 'Master/texmf-dist') diff --git a/Master/texmf-dist/doc/generic/pst-eucl/Changes b/Master/texmf-dist/doc/generic/pst-eucl/Changes index 09287f4f165..ca8cfb86a08 100644 --- a/Master/texmf-dist/doc/generic/pst-eucl/Changes +++ b/Master/texmf-dist/doc/generic/pst-eucl/Changes @@ -6,8 +6,10 @@ pst-eucl.pro -------- pst-eucl.tex -------- +1.72 2020/04/18 - revert the change of \pstTriangle in v1.69, we should use \pst@object to clear \pst@par. + - add macro to draw the Lemonie Point of the given triangle, \pstTriangleLC. 1.71 2020/02/26 - add macro to wrap the native macro \pspolygon just group the parameters as local, \pstPolygon. - - update macro \pstCircleOA and \pstCircleAB to clear \pst@par like as \pst@object clear it. This change update the issue that some rendering options used at last will be taken, e.g. if you call \pspolygon with fillcolor, and then call \pstCircleOA, the circle will be filled with same color. + - revert the change of \pstCircleOA and \pstCircleAB in v1.66, we should use \pst@object to clear \pst@par. - add macro to draw the nine point circle and its center, \pstTriangleNC. - add macro to draw the general ellipse by its focus and one node on it, \pstGeneralEllipseFFN. - add macro to draw the general hyperbola by its focus and one node on it, \pstGeneralHyperbolaFFN. diff --git a/Master/texmf-dist/doc/generic/pst-eucl/pst-eucl-doc.pdf b/Master/texmf-dist/doc/generic/pst-eucl/pst-eucl-doc.pdf index 14c1e0c0463..22c5429a617 100644 Binary files a/Master/texmf-dist/doc/generic/pst-eucl/pst-eucl-doc.pdf and b/Master/texmf-dist/doc/generic/pst-eucl/pst-eucl-doc.pdf differ diff --git a/Master/texmf-dist/doc/generic/pst-eucl/pst-eucl-doc.tex b/Master/texmf-dist/doc/generic/pst-eucl/pst-eucl-doc.tex index c3b6bed35c5..164e8a6ad3d 100644 --- a/Master/texmf-dist/doc/generic/pst-eucl/pst-eucl-doc.tex +++ b/Master/texmf-dist/doc/generic/pst-eucl/pst-eucl-doc.tex @@ -9,7 +9,6 @@ \usepackage[mathscr]{eucal} \def\eV{e.\kern-1pt{}V\kern-1pt} - \lstset{pos=l,wide=false,basicstyle=\footnotesize\ttfamily,explpreset={language=[PSTricks]{TeX}}} % \def\Argsans#1{$\langle$#1$\rangle$} @@ -488,16 +487,22 @@ For example: \pstTriangleOC[PosAngle=90,PointSymbol=*,PointName=X]{A}{B}{C}[X] \end{lstlisting} -The macros \Lcs{pstTriangleGC}, \Lcs{pstTriangleHC} and \Lcs{pstTriangleEC} are used to draw the barycenter $G$, the orthocentre $H$ and the escenter $E$ of the triangle $ABC$. +The macros \Lcs{pstTriangleGC}, \Lcs{pstTriangleHC}, \Lcs{pstTriangleEC}, \Lcs{pstTriangleNC}, \Lcs{pstTriangleLC} +are used to draw the barycenter $G$, the orthocentre $H$, the escenter $E$, the nine points circle center +and the Lemonie point (or symmedian point) of the triangle $ABC$. \begin{BDef} \Lcs{pstTriangleGC}\OptArgs\Largb{A}\Largb{B}\Largb{C}\Largb{G}\OptArg{$M_1$}\OptArg{$M_2$}\\ \Lcs{pstTriangleHC}\OptArgs\Largb{A}\Largb{B}\Largb{C}\Largb{H}\OptArg{$H_1$}\OptArg{$H_2$}\\ -\Lcs{pstTriangleEC}\OptArgs\Largb{A}\Largb{B}\Largb{C}\Largb{E}\OptArg{$T_1$} +\Lcs{pstTriangleEC}\OptArgs\Largb{A}\Largb{B}\Largb{C}\Largb{E}\OptArg{$T_1$}\\ +\Lcs{pstTriangleNC}\OptArgs\Largb{A}\Largb{B}\Largb{C}\Largb{N}\OptArg{$M_1$}\OptArg{$M_2$}\OptArg{$M_3$}\\ +\Lcs{pstTriangleLC}\OptArgs\Largb{A}\Largb{B}\Largb{C}\Largb{L}\OptArg{$S_1$}\OptArg{$S_2$}\OptArg{$S_3$} \end{BDef} -You can use the options of node like as \verb|PointName=...|, \verb|PosAngle=...|, \verb|PointSymbol=...| to control the output nodes $G,H,E$. But if you give the optional output parameters $M_1,M_2$, or $H_1,H_2$ or $T_1$, then you should pass the option value in list like as \verb|PointName={...}|, \verb|PosAngle={...}|, \verb|PointSymbol={...}|. -For example, +You can use the options of node like as \verb|PointName=...|, \verb|PosAngle=...|, \verb|PointSymbol=...| +to control the output nodes $G,H,E$. But if you give the optional output parameters $M_1,M_2$, or $H_1,H_2$ +or $T_1$, then you should pass the option value in list like as \verb|PointName={...}|, +\verb|PosAngle={...}|, \verb|PointSymbol={...}|. For example, \begin{LTXexample}[width=6cm,pos=l] \begin{pspicture}[showgrid=true](-3,-3)(3,2) @@ -505,11 +510,13 @@ For example, \pstGeonode[PosAngle=90](0,1){A} \pstGeonode[PosAngle=-90](-1,-0.6){B} \pstGeonode[PosAngle=-90](1.5,-0.6){C} -\pstTriangleGC[PointSymbol={*,none,*},PosAngle={150,-80,30}]{A}{B}{C}{G}[M_1][M_2] -\pstTriangleHC[PointSymbol={*,*,none},PosAngle={-30,-100,30}]{A}{B}{C}{H}[H_1][H_2] -\pstTriangleEC[PointSymbol={*,none},PosAngle={90,30}]{A}{B}{C}{E_1}[T_1] +\pstTriangleGC[PointSymbol={*,none,*},PosAngle={-30,-80,30},PointNameSep=0.22cm]{A}{B}{C}{G}[M_1][M_2] +\pstTriangleHC[PointSymbol={*,*,none},PosAngle={160,-120,30},PointNameSep=0.22cm]{A}{B}{C}{H}[H_1][H_2] +\pstTriangleEC[PointSymbol={*,*},PosAngle={90,-40}]{A}{B}{C}{E_1}[T_1] \pstTriangleEC[PointSymbol=*,PosAngle=0]{B}{C}{A}{E_2} \pstTriangleEC[PointSymbol=*,PosAngle=180]{C}{A}{B}{E_3} +\pstTriangleNC[PointSymbol=*,PosAngle=40,linestyle=dashed,linecolor=cyan!60]{A}{B}{C}{N} +\pstTriangleLC[PointSymbol=*,PosAngle=200,linecolor=green!80,PointNameSep=0.22cm]{A}{B}{C}{L} \pstLineAB{A}{B}\pstLineAB{B}{C}\pstLineAB{C}{A} \pstCircleOA[linestyle=dashed,linecolor=gray!40]{E_1}{T_1}[30][150] \pstLineAB[linestyle=dashed,linecolor=blue!40]{A}{M_1} @@ -533,8 +540,9 @@ right angle: \begin{sloppypar} -Valid optional arguments are \Lkeyword{RightAngleType}, \Lkeyword{RightAngleSize}, - \Lkeyword{RightAngleSize}, and \Lkeyword{RightAngleDotDistance} +The valid optional arguments controlling this command, excepting the ones which +controlled the line, are \Lkeyword{RightAngleType}, \Lkeyword{RightAngleSize}, +\Lkeyword{RightAngleSize}, and \Lkeyword{RightAngleDotDistance}. \end{sloppypar} The symbol is controlled by the parameter \Lkeyword{RightAngleType} @@ -546,18 +554,12 @@ The symbol is controlled by the parameter \Lkeyword{RightAngleType} \item \Lkeyval{suisseromand} : swiss romand symbol (given P. Schnewlin). \end{compactitem} -\begin{sloppypar} -The only parameters controlling this command, excepting the ones which -controlled the line, is \Lkeyword{RightAngleSize} which defines the size -of the symbol \DefaultVal{0.28 unit} and \Lkeyword{RightAngleDotDistance}. For a -right angle style \Lkeyval{german} or \Lkeyval{swissromand} the distance of the dot +The optional argument \Lkeyword{RightAngleSize} defines the size of the symbol \DefaultVal{0.28 unit}. + +For a right angle style \Lkeyval{german} or \Lkeyval{swissromand} the distance of the dot is preset to 0.5 (\Lkeyval{german}) or 0.45 (\Lkeyval{swissromand}), relative to the radius. -It can be controlled by the optional argument \Lkeyword{RightAngleDotDistance} which is +However, it can be controlled by the optional argument \Lkeyword{RightAngleDotDistance} which is preset to 1. A greater value moves the dot away from the reference point. -\end{sloppypar} - - - For other angles, there is the command: @@ -568,8 +570,7 @@ For other angles, there is the command: \begin{sloppypar} Valid optional arguments are \Lkeyword{MarkAngleRadius}, \Lkeyword{LabelAngleOffset}, - \Lkeyword{MarkAngleType} and - \Lkeyword{Mark} +\Lkeyword{MarkAngleType} and \Lkeyword{Mark}. % The \Lkeyword{label} can be any valid \TeX\ box, it is put at \Lkeyword{LabelSep} \DefaultVal{1 unit} of the node in the direction of the bisector of the angle @@ -1172,13 +1173,13 @@ Another example is for \Lcs{pstDistMul}, the old code like as \begin{lstlisting} \pstCircleOA[DistCoef=1 3 div,Radius=\pstDistAB{A}{B}]{O}{} \pstCircleOA[DistCoef=1 3 div,Radius=\pstDistAB{A}{B}]{A}{B}{O}{}{I}{J} -\pstInterCC[DistCoef=1 3 div,RadiusA=\pstDistAB{A}{B},DistCoef=none,RadiusA=\pstDistAB{C}{D}]{O1}{}{O2}{}{I}{J} +\pstInterCC[DistCoef=1 3 div,RadiusA=\pstDistAB{A}{B},DistCoef=none,RadiusB=\pstDistAB{C}{D}]{O1}{}{O2}{}{I}{J} \end{lstlisting} could be simplified to \begin{lstlisting} \pstCircleOA[Radius=\pstDistMul{A}{B}{1 3 div}]{O}{} \pstInterLC[Radius=\pstDistMul{A}{B}{1 3 div}]{A}{B}{O}{}{I}{J} -\pstInterCC[RadiusA=\pstDistMul{A}{B}{1 3 div},RadiusA=\pstDistAB{C}{D}]{O1}{}{O2}{}{I}{J} +\pstInterCC[RadiusA=\pstDistMul{A}{B}{1 3 div},RadiusB=\pstDistAB{C}{D}]{O1}{}{O2}{}{I}{J} \end{lstlisting} \vspace{10pt}\noindent{}{\Large{\textbf{Important}}}! @@ -1366,7 +1367,7 @@ so you can't omit the parameter $A$. The direction to find node $X$ is anti-clockwise by default. The parameter \Lkeyword{CurvAbsNeg}\DefaultVal{false} can change this behavior. -At last, the chord length $L$ chouldn't large than the diameter of the circle, +At last, the chord length $L$ shouldn't large than the diameter of the circle, else we will put the node $X$ at origin. \begin{LTXexample}[width=6cm,pos=l] @@ -2003,6 +2004,34 @@ when you pass it to \Lcs{pstGeneralEllipse}, PostScript will lookup the value of \vspace{10pt} +The Macro \Lcs{pstGeneralEllipseFFN} is used to define a General Ellipse by the given focus nodes $F_1$, $F_2$, and one node $N$ on it. +It just calculate the center $O$, major radius $a$, minor radius $b$ and the rotation angle $\theta$ of the major axis, +then you can pass them into macro \Lcs{pstGeneralEllipse} to draw this ellipse. + +\begin{BDef} +\Lcs{pstGeneralEllipseFFN}\OptArgs\Largb{$F_1$}\Largb{$F_2$}\Largb{O}\Largb{Rab}\Largb{$\theta$} +\end{BDef} + +The output parameter \texttt{O}, the output parameter \texttt{Rab} and the output parameter \texttt{$\theta$} +are same with \Lcs{pstGeneralEllipseFle}. + +\begin{LTXexample}[width=6cm,pos=l] +\begin{pspicture}[showgrid=true](0,0)(4,4) +\psset{dotscale=0.5}\psset{PointSymbol=*}\footnotesize +\pstGeonode[PosAngle=-90](1,1){F_1} +\pstGeonode[PosAngle=-90](3,3){F_2} +\pstGeonode[PosAngle=-90](1,3){F_3} +\pstGeonode[PosAngle=-90](3,1){F_4} +\pstGeonode[PosAngle=90](2,3){N} +\pstGeneralEllipseFFN[linecolor=red!30,CodeFig=true]{F_1}{F_2}{N}{O}{R1}{angle1} +\pstGeneralEllipse[linecolor=red!30](O)(R1)[angle1] +\pstGeneralEllipseFFN[linecolor=blue!30,CodeFig=true]{F_3}{F_4}{N}{O}{R2}{angle2} +\pstGeneralEllipse[linecolor=blue!30](O)(R2)[angle2] +\end{pspicture} +\end{LTXexample} + +\vspace{10pt} + The Macro \Lcs{pstGeneralEllipseCoef} is used to define a General Ellipse by the quadratic curve equation $ax^2+bxy+cy^2+dx+ey+f=0$, it just calculate the center $O$, major radius $a$, minor radius $b$ and the rotation angle $\theta$ of the major axis, then you can pass them into macro \Lcs{pstGeneralEllipse} to draw this ellipse. @@ -3443,6 +3472,34 @@ when you pass it to \Lcs{pstGeneralHyperbola}, PostScript will lookup the value \vspace{10pt} +The Macro \Lcs{pstGeneralHyperbolaFFN} is used to define a General Hyperbola by the given focus nodes $F_1$, $F_2$, and one node $N$ on it. +It just calculate the center $O$, major radius $a$, minor radius $b$ and the rotation angle $\theta$ of the major axis, +then you can pass them into macro \Lcs{pstGeneralHyperbola} to draw this hyperbola. + +\begin{BDef} +\Lcs{pstGeneralHyperbolaFFN}\OptArgs\Largb{$F_1$}\Largb{$F_2$}\Largb{O}\Largb{Rab}\Largb{$\theta$} +\end{BDef} + +The output parameter \texttt{O}, the output parameter \texttt{Rab} and the output parameter \texttt{$\theta$} +are same with \Lcs{pstGeneralHyperbolaFle}. + +\begin{LTXexample}[width=6cm,pos=l] +\begin{pspicture}[showgrid=true](0,0)(4,4) +\psset{dotscale=0.5}\psset{PointSymbol=*}\footnotesize +\pstGeonode[PosAngle=-90](1,1){F_1} +\pstGeonode[PosAngle=-90](3,3){F_2} +\pstGeonode[PosAngle=-90](1,3){F_3} +\pstGeonode[PosAngle=-90](3,1){F_4} +\pstGeonode[PosAngle=90](2,3){N} +\pstGeneralHyperbolaFFN[linecolor=red!30,CodeFig=true]{F_1}{F_2}{N}{O}{R1}{angle1} +\pstGeneralHyperbola[linecolor=red!30](O)(R1)[angle1][65] +\pstGeneralHyperbolaFFN[linecolor=blue!30,CodeFig=true]{F_3}{F_4}{N}{O}{R2}{angle2} +\pstGeneralHyperbola[linecolor=blue!30](O)(R2)[angle2][65] +\end{pspicture} +\end{LTXexample} + +\vspace{10pt} + The Macro \Lcs{pstGeneralHyperbolaCoef} is used to define a General Hyperbola by the quadratic curve equation $ax^2+bxy+cy^2+dx+ey+f=0$, it just calculate the center $O$, real radius $a$ and imaginary radius $b$ and the rotation angle $\theta$ of the real axis, then you can pass them into macro \Lcs{pstGeneralHyperbola} to draw this hyperbola. diff --git a/Master/texmf-dist/tex/generic/pst-eucl/pst-eucl.tex b/Master/texmf-dist/tex/generic/pst-eucl/pst-eucl.tex index c5e67dae20e..3a881739bb2 100644 --- a/Master/texmf-dist/tex/generic/pst-eucl/pst-eucl.tex +++ b/Master/texmf-dist/tex/generic/pst-eucl/pst-eucl.tex @@ -20,8 +20,8 @@ \csname PSTEuclideLoaded\endcsname \let\PSTEuclideLoaded\endinput % -\def\fileversion{1.71} -\def\filedate{2020/02/26} +\def\fileversion{1.72} +\def\filedate{2020/04/18} %% \message{`PST-Euclide v\fileversion, \filedate\space (dr,hv)}% %% prologue for postcript @@ -560,12 +560,8 @@ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %% #2 #4 #6 -> coordinates for nodes %% #3 #5 #7 -> nodes name -\def\pstTriangle{\@ifnextchar[\Pst@Triangle{\Pst@Triangle[]}} -\def\Pst@Triangle[#1]{% - \begingroup - \psset{#1}% - \@ifnextchar(\pstTriangle@ii{\pstTriangle@ii(0,0)}% -} +\def\pstTriangle{\pst@object{pstTriangle}}% +\def\pstTriangle@i{\@ifnextchar(\pstTriangle@ii{\pstTriangle@ii(0,0)}}% \def\pstTriangle@ii(#1)#2(#3)#4(#5)#6{% \pst@killglue %%begin modif alaindelplanque 11/2003 @@ -628,7 +624,7 @@ \Pst@Geonode@i[](#5){#6}%%NEW DR 15112001 \pst@TraceTriangle{#2}{#4}{#6}% \egroup -\endgroup}% +}% % \def\pst@TraceTriangle#1#2#3{\pspolygon(#1)(#2)(#3)}% % @@ -2361,6 +2357,55 @@ \endgroup }% % +%% \pstTriangleLC[Options]{A}{B}{C}{L}[S1][S2][S3] +%% Draw the Lemonie of triangle ABC +%% Parameters: +%% #1 -> options +%% #2 -> [input] the node A +%% #3 -> [input] the node B +%% #4 -> [input] the node C +%% #5 -> [output] the output Lemoine Point L +%% #6 -> [output] the optional output point on BC +%% #7 -> [output] the optional output point on CA +%% #8 -> [output] the optional output point on AB +\def\pstTriangleLC{\@ifnextchar[\Pst@TriangleLC{\Pst@TriangleLC[]}} +\def\Pst@TriangleLC[#1]#2#3#4#5{% + \begingroup + \@InitListMng % + \psset{#1}% + \def\pst@triangle@node@A{#2} + \def\pst@triangle@node@B{#3} + \def\pst@triangle@node@C{#4} + \def\pst@triangle@node@L{#5} + \@ifnextchar[\Pst@TriangleLC@i{\Pst@TriangleLC@j[BC_L][CA_L][AB_L]}} +\def\Pst@TriangleLC@i[#1][#2][#3]{% + \pstMiddleAB[PointName=none,PointSymbol=none]{\pst@triangle@node@B}{\pst@triangle@node@C}{BC_M} + \pstMiddleAB[PointName=none,PointSymbol=none]{\pst@triangle@node@C}{\pst@triangle@node@A}{CA_M} + \pstBisectorAOB[PointName=none,PointSymbol=none]{\pst@triangle@node@B}{\pst@triangle@node@A}{\pst@triangle@node@C}{A_T}{A_S} + \pstBisectorAOB[PointName=none,PointSymbol=none]{\pst@triangle@node@C}{\pst@triangle@node@B}{\pst@triangle@node@A}{B_T}{B_S} + \pstOrtSym[PointName=none,PointSymbol=none]{\pst@triangle@node@A}{A_T}{BC_M}[BC_LL] + \pstOrtSym[PointName=none,PointSymbol=none]{\pst@triangle@node@B}{B_T}{CA_M}[CA_LL] + \pstInterLL[PointName=none,PointSymbol=none]{\pst@triangle@node@A}{BC_LL}{\pst@triangle@node@B}{CA_LL}{\pst@triangle@node@L} + \pstInterLL[PointName=none,PointSymbol=none]{\pst@triangle@node@A}{\pst@triangle@node@L}{\pst@triangle@node@B}{\pst@triangle@node@C}{#1} + \pstInterLL[PointName=none,PointSymbol=none]{\pst@triangle@node@B}{\pst@triangle@node@L}{\pst@triangle@node@C}{\pst@triangle@node@A}{#2} + \pstInterLL[PointName=none,PointSymbol=none]{\pst@triangle@node@C}{\pst@triangle@node@L}{\pst@triangle@node@A}{\pst@triangle@node@B}{#3} + \Pst@ManageParamList{\pst@triangle@node@L}% + \Pst@ManageParamList{#1}% + \Pst@ManageParamList{#2}% + \Pst@ManageParamList{#3}% + \endgroup +}% +\def\Pst@TriangleLC@j[#1][#2][#3]{% + \pstMiddleAB[PointName=none,PointSymbol=none]{\pst@triangle@node@B}{\pst@triangle@node@C}{BC_M} + \pstMiddleAB[PointName=none,PointSymbol=none]{\pst@triangle@node@C}{\pst@triangle@node@A}{CA_M} + \pstBisectorAOB[PointName=none,PointSymbol=none]{\pst@triangle@node@B}{\pst@triangle@node@A}{\pst@triangle@node@C}{A_T}{A_S} + \pstBisectorAOB[PointName=none,PointSymbol=none]{\pst@triangle@node@C}{\pst@triangle@node@B}{\pst@triangle@node@A}{B_T}{B_S} + \pstOrtSym[PointName=none,PointSymbol=none]{\pst@triangle@node@A}{A_T}{BC_M}[BC_LL] + \pstOrtSym[PointName=none,PointSymbol=none]{\pst@triangle@node@B}{B_T}{CA_M}[CA_LL] + \pstInterLL{\pst@triangle@node@A}{BC_LL}{\pst@triangle@node@B}{CA_LL}{\pst@triangle@node@L} + \endgroup +}% +% %% Distance between two points \def\pstDist#1#2{% tx@EcldDict begin /N@#1 GetNode /N@#2 GetNode ABDist end -- cgit v1.2.3