diff options
author | Norbert Preining <norbert@preining.info> | 2020-04-19 03:02:39 +0000 |
---|---|---|
committer | Norbert Preining <norbert@preining.info> | 2020-04-19 03:02:39 +0000 |
commit | 0e85a1501dd8b23f1debab0ed20d89b11146ad34 (patch) | |
tree | befb60d0cd0ba576dabe5d042857558605b21c27 /graphics/pstricks | |
parent | 1f544532dd3dd7f9b52644c6ca83b4db44d34051 (diff) |
CTAN sync 202004190302
Diffstat (limited to 'graphics/pstricks')
-rw-r--r-- | graphics/pstricks/contrib/pst-eucl/Changes | 4 | ||||
-rw-r--r-- | graphics/pstricks/contrib/pst-eucl/doc/pst-eucl-doc.pdf | bin | 1714126 -> 1780362 bytes | |||
-rw-r--r-- | graphics/pstricks/contrib/pst-eucl/doc/pst-eucl-doc.tex | 107 | ||||
-rw-r--r-- | graphics/pstricks/contrib/pst-eucl/tex/pst-eucl.tex | 63 |
4 files changed, 139 insertions, 35 deletions
diff --git a/graphics/pstricks/contrib/pst-eucl/Changes b/graphics/pstricks/contrib/pst-eucl/Changes index 09287f4f16..ca8cfb86a0 100644 --- a/graphics/pstricks/contrib/pst-eucl/Changes +++ b/graphics/pstricks/contrib/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/graphics/pstricks/contrib/pst-eucl/doc/pst-eucl-doc.pdf b/graphics/pstricks/contrib/pst-eucl/doc/pst-eucl-doc.pdf Binary files differindex 14c1e0c046..22c5429a61 100644 --- a/graphics/pstricks/contrib/pst-eucl/doc/pst-eucl-doc.pdf +++ b/graphics/pstricks/contrib/pst-eucl/doc/pst-eucl-doc.pdf diff --git a/graphics/pstricks/contrib/pst-eucl/doc/pst-eucl-doc.tex b/graphics/pstricks/contrib/pst-eucl/doc/pst-eucl-doc.tex index c3b6bed35c..164e8a6ad3 100644 --- a/graphics/pstricks/contrib/pst-eucl/doc/pst-eucl-doc.tex +++ b/graphics/pstricks/contrib/pst-eucl/doc/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/graphics/pstricks/contrib/pst-eucl/tex/pst-eucl.tex b/graphics/pstricks/contrib/pst-eucl/tex/pst-eucl.tex index c5e67dae20..3a881739bb 100644 --- a/graphics/pstricks/contrib/pst-eucl/tex/pst-eucl.tex +++ b/graphics/pstricks/contrib/pst-eucl/tex/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 |