summaryrefslogtreecommitdiff
path: root/graphics
diff options
context:
space:
mode:
Diffstat (limited to 'graphics')
-rw-r--r--graphics/pgf/contrib/circuitikz/doc/changelog.tex34
-rw-r--r--graphics/pgf/contrib/circuitikz/doc/circuitikz-context.pdfbin13867 -> 13875 bytes
-rw-r--r--graphics/pgf/contrib/circuitikz/doc/circuitikzmanual.pdfbin2431321 -> 2451275 bytes
-rw-r--r--graphics/pgf/contrib/circuitikz/doc/circuitikzmanual.tex182
-rw-r--r--graphics/pgf/contrib/circuitikz/tex/circuitikz.sty4
-rw-r--r--graphics/pgf/contrib/circuitikz/tex/pgfcirc.defines.tex254
-rw-r--r--graphics/pgf/contrib/circuitikz/tex/pgfcircbipoles.tex78
-rw-r--r--graphics/pgf/contrib/circuitikz/tex/pgfcircpath.tex6
-rw-r--r--graphics/pgf/contrib/circuitikz/tex/t-circuitikz.tex4
-rw-r--r--graphics/pgf/contrib/lie-hasse/README4
-rw-r--r--graphics/pgf/contrib/lie-hasse/lie-hasse.pdfbin573306 -> 631928 bytes
-rw-r--r--graphics/pgf/contrib/lie-hasse/lie-hasse.sty976
-rw-r--r--graphics/pgf/contrib/lie-hasse/lie-hasse.tex123
-rw-r--r--graphics/pgf/contrib/pgf-periodictable/README6
-rw-r--r--graphics/pgf/contrib/pgf-periodictable/manualfiles/pgf-PeriodicTableManual_name.tex2
-rw-r--r--graphics/pgf/contrib/pgf-periodictable/manualfiles/pgfPTmanual.macros.tex44
-rw-r--r--graphics/pgf/contrib/pgf-periodictable/pgf-PeriodicTable.sty7
-rw-r--r--graphics/pgf/contrib/pgf-periodictable/pgf-PeriodicTableManual.pdfbin7570685 -> 7558326 bytes
-rw-r--r--graphics/pgf/contrib/pgf-periodictable/pgfPT.drawing.keys.tex2
-rw-r--r--graphics/pgf/contrib/pgf-periodictable/pgfPT.names.tex18
-rw-r--r--graphics/pgf/contrib/pgfplotsthemebeamer/DEPENDS.txt3
-rw-r--r--graphics/pgf/contrib/pgfplotsthemebeamer/README.md39
-rw-r--r--graphics/pgf/contrib/pgfplotsthemebeamer/pgfplotsthemebeamer-doc-settings.sty200
-rw-r--r--graphics/pgf/contrib/pgfplotsthemebeamer/pgfplotsthemebeamer-doc.pdfbin0 -> 150527 bytes
-rw-r--r--graphics/pgf/contrib/pgfplotsthemebeamer/pgfplotsthemebeamer-doc.tex119
-rw-r--r--graphics/pgf/contrib/pgfplotsthemebeamer/pgfplotsthemebeamer.sty37
-rw-r--r--graphics/pgf/contrib/polyomino/README.md25
-rw-r--r--graphics/pgf/contrib/polyomino/polyomino.pdfbin0 -> 109235 bytes
-rw-r--r--graphics/pgf/contrib/polyomino/polyomino.sty286
-rw-r--r--graphics/pgf/contrib/polyomino/polyomino.tex278
-rw-r--r--graphics/pgf/contrib/tkz-grapheur/doc/tkz-grapheur-doc-en.pdfbin746493 -> 1222359 bytes
-rw-r--r--graphics/pgf/contrib/tkz-grapheur/doc/tkz-grapheur-doc-en.tex84
-rw-r--r--graphics/pgf/contrib/tkz-grapheur/doc/tkz-grapheur-doc-fr.pdfbin804095 -> 1309490 bytes
-rw-r--r--graphics/pgf/contrib/tkz-grapheur/doc/tkz-grapheur-doc-fr.tex146
-rw-r--r--graphics/pgf/contrib/tkz-grapheur/tex/tkz-grapheur.sty179
-rw-r--r--graphics/pgf/contrib/wheelchart/README.md6
-rw-r--r--graphics/pgf/contrib/wheelchart/wheelchart.pdfbin1198147 -> 1198402 bytes
-rw-r--r--graphics/pgf/contrib/wheelchart/wheelchart.sty330
-rw-r--r--graphics/pgf/contrib/wheelchart/wheelchart.tex21
-rw-r--r--graphics/pstricks/base/Changes4
-rw-r--r--graphics/pstricks/base/doc/pst-news24.pdfbin98554 -> 99744 bytes
-rw-r--r--graphics/pstricks/base/doc/pst-news24.tex6
-rw-r--r--graphics/pstricks/base/doc/pstricks-bug.tex6
-rw-r--r--graphics/pstricks/base/generic/pstricks.tex27
-rw-r--r--graphics/pstricks/contrib/pst-diffraction/Changes3
-rw-r--r--graphics/pstricks/contrib/pst-diffraction/README27
-rw-r--r--graphics/pstricks/contrib/pst-diffraction/doc/pst-diffraction-doc.bib157
-rw-r--r--graphics/pstricks/contrib/pst-diffraction/doc/pst-diffraction-doc.pdfbin22756751 -> 23064303 bytes
-rw-r--r--graphics/pstricks/contrib/pst-diffraction/doc/pst-diffraction-doc.tex83
-rw-r--r--graphics/pstricks/contrib/pst-diffraction/tex/pst-diffraction.tex23
-rw-r--r--graphics/pstricks/contrib/pst-node/Changes3
-rw-r--r--graphics/pstricks/contrib/pst-node/README2
-rw-r--r--graphics/pstricks/contrib/pst-node/doc/pst-node-doc.pdfbin527479 -> 585632 bytes
-rw-r--r--graphics/pstricks/contrib/pst-node/doc/pst-node-doc.tex26
-rw-r--r--graphics/pstricks/contrib/pst-node/dvips/pst-node.pro6
-rw-r--r--graphics/pstricks/contrib/pst-node/latex/pst-node.sty11
-rw-r--r--graphics/pstricks/contrib/pst-node/tex/pst-node.tex56
-rw-r--r--graphics/tpic2pdftex/Makefile.in101
-rw-r--r--graphics/tpic2pdftex/aclocal.m4415
-rwxr-xr-xgraphics/tpic2pdftex/configure.texk335
60 files changed, 3447 insertions, 1341 deletions
diff --git a/graphics/pgf/contrib/circuitikz/doc/changelog.tex b/graphics/pgf/contrib/circuitikz/doc/changelog.tex
index 0806a20b78..19a5cd01f3 100644
--- a/graphics/pgf/contrib/circuitikz/doc/changelog.tex
+++ b/graphics/pgf/contrib/circuitikz/doc/changelog.tex
@@ -5,6 +5,38 @@ full list of changes.
\begin{itemize}
\item
+ Version 1.7.0 (2024-08-03)
+
+ There are no big changes here, but the change to the resistor code
+ (maybe one of the most used by the package) well deserves a minor
+ version bump. A couple of new components, and several minor fixes.
+
+ \begin{itemize}
+ \tightlist
+ \item
+ New component: new kind of current tap (suggested by
+ \href{https://github.com/circuitikz/circuitikz/issues/807}{EEpchi
+ and Dr4UX on GitHub})
+ \item
+ New arrow tip \texttt{Jack\ Tap} to help drawing jack connectors
+ (suggested by
+ \href{https://github.com/circuitikz/circuitikz/issues/806}{Anisio
+ Rogerio Braga})
+ \item
+ Change the drawing of the thermocouple (suggested by
+ \href{https://github.com/circuitikz/circuitikz/issues/811}{Dr4UX on
+ GitHub})
+ \item
+ Change and enhancement to the drawing of the American resistors
+ (triggered by
+ \href{https://github.com/circuitikz/circuitikz/issues/814}{Dr4UX on
+ GitHub}), fixing a long-standing small asymmetry that nobody noticed
+ \item
+ Minor adjustment for joins in \texttt{viscoe} component
+ \item
+ Minor additions (\texttt{rectjoinfill}) and fixes in documentation
+ \end{itemize}
+\item
Version 1.6.9 (2024-05-25)
Several new components and a bug fix for a nasty long-standing bug
@@ -495,7 +527,7 @@ full list of changes.
Robustify some shapes: do not let arrows option pass to the inner
drawing (see
\href{https://tex.stackexchange.com/a/632084/38080}{here} and
- \href{https://matrix.to/\#/!NuxCISwYQJuyWwNsEI:matrix.org/$vQO6luq1F66LJ79dERmaqKI46qMBcjStqYCPi725uZE?via=matrix.org&via=2krueger.de&via=im.f3l.de}{here})
+ \href{https://matrix.to/\#/!NuxCISwYQJuyWwNsEI:matrix.org/$vQO6luq1F66LJ79dERmaqKI46qMBcjStqYCPi725uZE?via=matrix.org\&via=2krueger.de\&via=im.f3l.de}{here})
\item
Add warning about global draw options in the manual
\item
diff --git a/graphics/pgf/contrib/circuitikz/doc/circuitikz-context.pdf b/graphics/pgf/contrib/circuitikz/doc/circuitikz-context.pdf
index cc6865c72f..032692e01f 100644
--- a/graphics/pgf/contrib/circuitikz/doc/circuitikz-context.pdf
+++ b/graphics/pgf/contrib/circuitikz/doc/circuitikz-context.pdf
Binary files differ
diff --git a/graphics/pgf/contrib/circuitikz/doc/circuitikzmanual.pdf b/graphics/pgf/contrib/circuitikz/doc/circuitikzmanual.pdf
index 9f3d2b57e0..023c265d6e 100644
--- a/graphics/pgf/contrib/circuitikz/doc/circuitikzmanual.pdf
+++ b/graphics/pgf/contrib/circuitikz/doc/circuitikzmanual.pdf
Binary files differ
diff --git a/graphics/pgf/contrib/circuitikz/doc/circuitikzmanual.tex b/graphics/pgf/contrib/circuitikz/doc/circuitikzmanual.tex
index ac116af09e..e0fa8032b1 100644
--- a/graphics/pgf/contrib/circuitikz/doc/circuitikzmanual.tex
+++ b/graphics/pgf/contrib/circuitikz/doc/circuitikzmanual.tex
@@ -2200,6 +2200,83 @@ For the \texttt{photoresistor} and the two ``flavors'' of the light-dependent re
\end{tikzpicture}
\end{LTXexample}
+\begingroup % protect changes to resistors
+\newcommand\showjoin[1]{%
+\begin{tikzpicture}[scale=4, transform shape]
+ \clip (0.2,-0.05) rectangle (0.6,0.3);
+ \draw[ultra thick] (0,0) to[R, resistors/thickness=#1] ++(2,0);
+\end{tikzpicture}%
+}
+\newcommand{\splat}{\begin{center}\ttfamily\scriptsize\begin{tabular}{cccc}
+ \showjoin{1}&\showjoin{2}&\showjoin{3}&\showjoin{4}\\
+ thickness=1 & thickness=2 & thickness=3 & thickness=4 \\
+ \end{tabular}\end{center}%
+}
+\newcommand{\rdivider}[1]{\begin{tikzpicture}
+ \ctikzset{resistors/thickness=#1}
+ \draw (0,0) node[ground]{} to[V] ++(0,2) to[R] ++(2,0)
+ to[R] ++(0,-2) to[short,-*] (0,0);
+\end{tikzpicture}\qquad}
+\newcommand{\divsplat}[1]{#1\par
+ \begin{center}
+ \rdivider{1}\rdivider{2}\rdivider{3}\rdivider{4}
+\end{center}}
+
+\paragraph{Details of American (``zig-zag'') resistors.\label{sec:zigzag-details}} American (zig-zag) resistors have a little joining problem\footnote{Noticed by \href{https://github.com/circuitikz/circuitikz/issues/811}{user Dr4UX on GitHub} and later \href{https://github.com/circuitikz/circuitikz/discussions/814}{discussed here}.} with the leading wires if the thickness is greater than two. In the following drawing you can see the problem when the thickness grows from 1 to 4.
+
+\splat
+
+Since \texttt{v1.7.0}, one possibility to correct the problem is to change the type of joining of the zig-zag line, using the key \texttt{resistors/zigzag join}, which is a command that by default is void. For example, the following effect is obtained by using
+
+\begin{lstlisting}[numbers=none]
+\ctikzset{resistors/zigzag hook/.code={\pgfsetroundcap}}
+\end{lstlisting}
+{\ctikzset{resistors/zigzag hook/.code={\pgfsetroundcap}}
+\splat}
+
+or you can even go full rounded
+
+\begin{lstlisting}[numbers=none]
+\ctikzset{resistors/zigzag hook/.code={\pgfsetroundcap\pgfsetroundjoin}}
+\end{lstlisting}
+{\ctikzset{resistors/zigzag hook/.code={\pgfsetroundcap\pgfsetroundjoin}}
+\splat}
+
+Another possibility is to add a little horizontal ``stub'' to the shape, with the key \texttt{resistors/zigzag stub} (default \texttt{0}), which will add a first part which is a continuation of the wire:
+\begin{lstlisting}[numbers=none]
+\ctikzset{resistors/zigzag stub=0.05}% this is relative to the resistor's length
+\end{lstlisting}
+{\ctikzset{resistors/zigzag stub=0.05}
+\splat}
+
+\dots or you can just combine all of them as you prefer. With the standard join/cap options, the look of the resistors for thickness from 1 to 4 is shown here:
+
+\ctikzset{american}
+\divsplat{Standard drawing of American resistors}
+\divsplat{With a 5\% stub: \ctikzset{resistors/zigzag stub=0.05}}
+\divsplat{With a 20\% stub: \ctikzset{resistors/zigzag stub=0.2}}
+
+
+\bigskip
+Finally, here is the detailed shape with thickness 2 (red=0, blue=0.05, green=0.2), magnified six times:
+
+\vspace*{2cm}% this vspace fences are needed because the transform canvas wreak havoc with the bbox
+\begin{tikzpicture}[transform canvas={scale=6}]
+ \ctikzset{resistors/zigzag stub=0}
+ \draw[red] (0,0.2) to [resistor, resistors/thickness=4] ++(2,0);
+ \ctikzset{resistors/zigzag stub=0.05}
+ \draw[blue] (0,0.1) to [resistor, resistors/thickness=4] ++(2,0);
+ \ctikzset{resistors/zigzag stub=0.2}
+ \draw[green] (0,0) to [resistor, resistors/thickness=4] ++(2,0);
+ % \draw [very thin](1,0.5) -- (1,-0.5);
+ % \draw [very thin](0,0) -- ++(2,0);
+ % \draw [very thin](0,0.1) -- ++(2,0);
+ % \draw [very thin](0,0.2) -- ++(2,0);
+\end{tikzpicture}
+\vspace*{2cm}
+
+\endgroup % changes to resistors stops here
+
\subsection{Capacitors and inductors: dynamical bipoles}
@@ -2852,9 +2929,9 @@ Notice that the size of the double-circle sources (and of the triple-circle one)
\end{LTXexample}
\paragraph{Waveform symbols.}
-Internal symbols of sinusoidal, triangular and square sources are drawn with the same line thickness as the component by default. You can modify this by setting the key \texttt{sources/symbols/thickness} for independent sources and the corresponding \texttt{csource/...} for dependent ones. The value used here is relative to the component (i.e. the circle) value.
+Internal symbols of sinusoidal, triangular and square sources are drawn with the same line thickness as the component by default. You can modify this by setting the key \texttt{sources/symbol/thickness} for independent sources and the corresponding \texttt{csource/...} for dependent ones. The value used here is relative to the component (i.e. the circle) value.
-Normally the symbol is oriented in the same direction as the line, and rotate rigidly with the component; you can change this orientation using the key \texttt{sources/symbols/rotate} or \texttt{csource/...}. The default value is \texttt{90} which correspond to the ``line'' direction (remember, path components are defined as horizontal ones).
+Normally the symbol is oriented in the same direction as the line, and rotate rigidly with the component; you can change this orientation using the key \texttt{sources/symbol/rotate} or \texttt{csource/...}. The default value is \texttt{90} which correspond to the ``line'' direction (remember, path components are defined as horizontal ones).
If instead of an angle value you use \texttt{auto}, the symbol will be rotated so that the waveform is always vertical, similar to what happens in instruments:
\begin{LTXexample}[varwidth=true]
@@ -3019,12 +3096,44 @@ Sometimes it is better to use a shape for instruments which is very different fr
\footnotetext{Suggested by \texttt{@nobrl} on GitHub}
\circuitdescbip{iloop}{Current loop (symbolic)}{}(left/135/0.2, right/45/0.2, center/-90/0.3, i/30/0.4)
\circuitdescbip{iloop2}{Current loop (real)}{}(left/135/0.2, right/-45/0.2, center/-90/0.3, i+/135/0.4, i-/45/0.4)
+ \circuitdescbip{currtap}{Current tap (probe)\footnotemark}{}(tap/-90/0.2)
+ \footnotetext{Suggested by \href{https://github.com/circuitikz/circuitikz/issues/807}{user EEpchi on GitHub}.}
\end{groupdesc}
\subsubsection{Instruments customizations}\label{sec:tweak-instruments}
You can change the scale of all the instruments (including the current loops) by setting the key \texttt{instruments/scale} to something different from the default \texttt{1.0}.
+\paragraph{Current probes.}
+You can change the inner dot in several way, by changing the following keys under the \verb!\ctikzset! key \texttt{bipoles/currtap}:
+\begin{center}
+ \begin{tabular}{>{\ttfamily}l>{\ttfamily}lp{0.7\linewidth}}
+ \toprule
+ parameter & default & description \\
+ \midrule
+ thickness & default & Set the thickness of the line (\texttt{default}: do not change the class thickness) \\
+ color & default & stroke color: \texttt{default} is the same as the component \\
+ dash & default & dash pattern: none means solid line, default means keep the global pattern\footnotemark \\
+ fill & default & fill the inner dot; \texttt{default} means use the wire color, \texttt{none} do not fill, other keys must be a valid color \\
+ dot size& 0.5 & relative size of the inner dot \\
+ \bottomrule
+ \end{tabular}
+ \footnotetext{Follows the syntax of the pattern sequence \texttt{\textbackslash pgfsetdash} --- see \TikZ{} manual for details; phase is always zero. Basically you pass pairs of dash-length -- blank-length dimensions, see the examples.}
+\end{center}
+
+\begin{LTXexample}[varwidth=true, basicstyle=\small\ttfamily]
+\begin{circuitikz}
+ \draw (0,2) to[currtap, bipoles/currtap/fill=none, *-]
+ ++(2,0) to[currtap, bipoles/currtap/.cd,
+ fill=yellow, color=red, thickness=3,
+ dash={{1.14pt}{2pt}}] ++(2,0);
+ \draw (0,0) to[currtap=I, *-, name=ct] ++(2,0)
+ to[currtap, -*, name=ct2,
+ bipoles/currtap/dot size=0.3] ++(2,0);
+ \draw (ct.tap) -- ++(0,-1) (ct2.tap) -- ++(0,-1);
+\end{circuitikz}
+\end{LTXexample}
+
\paragraph{Oscilloscope waveform.} You can change the waveform shown in the oscilloscope ``screen''\footnote{Suggested by \href{https://tex.stackexchange.com/q/595062/38080}{Mario Tafur on TeX.SX}}. To change it, you just set the key \texttt{bipoles/oscope/waveform} to one of the available shape. You have available the shapes in the following list (the default is \texttt{ramps}):
\begin{LTXexample}[pos=t, basicstyle=\small\ttfamily]
@@ -3478,9 +3587,9 @@ While the horizontal line will be drawn with the current path values, you can ch
\end{circuitikz}
\end{LTXexample}
-\subsection{Arrows}\label{sec:arrows}
+\subsection{Arrows (fake and real)}\label{sec:arrows}
-These are pseudo-arrows used in lot of places in the packages (for transistors, flows, currents, and so on). The first three arrows are magnified by a factor~3 in the boxes below; for the \texttt{trarrow}, the anchor \texttt{tip} is exactly on the tip and \texttt{btip} is slightly receded.
+The main arrow shapes in \Circuitikz{} are really shapes, used as pseudo-arrows in lot of places in the packages (for transistors, flows, currents, and so on). The first three arrows are magnified by a factor~3 in the boxes below; for the \texttt{trarrow}, the anchor \texttt{tip} is exactly on the tip and \texttt{btip} is slightly receded.
\begin{groupdesc}
\circuitdesc[3]{currarrow}{Arrow for current and voltage}{}(center/0/0.2)
@@ -3540,6 +3649,30 @@ The arrows are the ones set with the keys \texttt{tunable start arrow} and \text
Notice also the need to force a transparency group if you want a semitransparent arrow.
+\subsubsection{Arrow tips}\label{sec:arrow-tips}
+
+In addition to the pseudo-arrows, \Circuitikz{} also adds a couple of ``real'' arrow tips.
+The package automatically loads the \texttt{arrows.meta} \TikZ{} library but \emph{not} the deprecated \texttt{arrows} library; in the first versions of the package it used quite a lot the \texttt{latex'} tip, which is not available anymore. To maintain the backward compatibility, the `latexslim` tip has been added, and used by default in several components. This is an old-style arrow tip, with no customization possible.
+
+The other tip is \texttt{Jack Tap}\footnote{Added after a suggestion from \href{https://github.com/circuitikz/circuitikz/issues/806}{Anisio Rogerio Braga} on GitHub}, which is mainly used to build jack connectors (see section~\ref{sec:jacks}). This is a new-style arrow tip, and accepts the parameter \texttt{length} (default \texttt{0.3 cm}), \texttt{width} (default \texttt{0.15 cm}), and the boolean \texttt{swap}.
+
+
+\begin{LTXexample}[varwidth=true]
+\begin{circuitikz}
+ \draw (0,.25) (0,0) edge[-latexslim] ++(1,0)
+ ++(0, -0.5) edge[-{Jack Tap[swap]}] ++(1,0)
+ ++(0, -0.5) edge[-Jack Tap] ++(1,0)
+ ++(0, -0.5) edge[-{Jack Tap[fill=cyan]}] ++(1,0)
+ ++(0, -0.5) edge[-{Jack Tap[width=.3cm,fill]}]++(1,0)
+ ++(0, -0.5) edge[-{Jack Tap[width=.3cm,line join=round,
+ line cap=round]}, thick] ++(1,0)
+ ++(0, -0.5) edge[^-^f] ++(1,0)
+ ++(0, -0.5) edge[vf-v] ++(1,0);
+\end{circuitikz}
+\end{LTXexample}
+You can also have a filled version, by adding the key \texttt{fill} (without arguments\footnote{This usage of the \texttt{fill} key in arrow tips will be added to \TikZ{} in version \texttt{3.1.11}, see \href{https://github.com/pgf-tikz/pgf/pull/1352}{this PR by Henri Menke}; \Circuitikz{} will add it to older versions.}) or \texttt{fill=color} if you want a color different from the stroke ones, and they accept the \texttt{line join} and \texttt{line cap} as most of the standard \TikZ{} arrows.
+As you can see, the normal and swapped \texttt{Jack Tap} tips have the shorthands \texttt{v} and \verb|^| (and \texttt{vf} and \verb|^f| for their filled counterparts). Notice that the tips are automatically reversed when they are at the \emph{start} of the path.
+
\subsection{Terminal shapes}\label{sec:terminals}
These are the so-called ``bipole nodes'' shapes, or poles (see section~\ref{sec:bipole-nodes}). These nodes are always filled; the ``open'' versions (starting with an \texttt{o}) are by default filled with the color specified by the key \texttt{open nodes fill} (by default \texttt{white}), but you can override locally it with the \texttt{fill} parameter.
@@ -3553,6 +3686,12 @@ These are the so-called ``bipole nodes'' shapes, or poles (see section~\ref{sec:
\circuitdesc{osquarepole}{Open square-shape terminal}{}
\end{groupdesc}
+This is not a pole, but it's used to "fill" nasty corners (look closer, and see ~\ref{sec:line-joins}).
+
+\begin{groupdesc}
+ \circuitdesc{rectjoinfill}{Filling square with line width size}{}
+\end{groupdesc}
+
Since version 0.9.0, ``bipole nodes'' shapes have all the standard geographical anchors, so you can do things like these:
\begin{LTXexample}[varwidth=true]
@@ -3672,6 +3811,33 @@ You can use the \texttt{plug center} anchor to add the IEC ``multiplier'':
\end{circuitikz}
\end{LTXexample}
+\subsubsection{Jack connectors}\label{sec:jacks}
+
+There are \emph{lots} of different jack connectors symbols --- see the \href{https://github.com/circuitikz/circuitikz/issues/806}{discussion here} for examples. So instead of creating a monster component, it has been decided to add elements to simplify the drawing of such connectors. The first (and for now only) such element is the \texttt{Jack Tap} arrow tip (see section~\ref{sec:arrow-tips}) with its shorthands \texttt{v} and \verb|^|.
+
+For example, and audio jack can be drawn like this:
+
+\begin{LTXexample}[pos=t, varwidth=true]
+% drawing based on one by Anisio Rogerio Braga
+% https://github.com/circuitikz/circuitikz/issues/806
+\newcommand\dx{1.5}\newcommand\dy{1}
+\begin{circuitikz}
+ \draw[-v] (0,\dy/3*4) to[short, o-] ++(\dx,0);
+ \draw[-Triangle] (0,\dy) node[ocirc]{} -| ++(\dx/3,\dy/3);
+ \draw[-Triangle] (0,\dy/3*2) node[ocirc]{} -| ++(\dx/3,-\dy/3);
+ \draw[-^] (0,\dy/3) to[short, o-] ++(2*\dx/3,0);
+ \draw (0,0.0) to[short, o-] ++(1.75*\dx,0) rectangle ++(0.2,4*\dy/3);
+\end{circuitikz}\qquad\qquad
+%---% audio jack with an inserted plug
+\begin{circuitikz}
+ \draw[-v] (0,\dy/3*4) to[short, o-] ++(\dx,0.2);
+ \draw[-Triangle] (0,\dy) node[ocirc]{} -| ++(\dx/3,\dy/3);
+ \draw[-Triangle] (0,\dy/3*2) node[ocirc]{} -| ++(\dx/3,-\dy/3);
+ \draw[-^] (0,\dy/3) to[short, o-] ++(2*\dx/3,-0.2);
+ \draw (0,0.0) to[short, o-] ++(1.75*\dx,0) rectangle ++(0.2,4*\dy/3);
+\end{circuitikz}
+\end{LTXexample}
+
\subsection{Block diagram components}
\noindent Contributed by Stefan Erhardt.
@@ -6596,7 +6762,7 @@ with the parameter \texttt{number inputs} :
\end{circuitikz}
\end{LTXexample}
-You can suppress the drawing of the logic ports input leads by using the boolean key \texttt{logic ports draw input leads} (default \texttt{true}) or, locally, with the style \texttt{no inputs leads} (that can be reverted with \texttt{input leads}), like in the following example. The anchors do not change and you have to take responsibility to make the connection to the ``border''-anchors.
+You can suppress the drawing of the logic ports input leads by using the boolean key \texttt{logic ports draw input leads} (default \texttt{true}) or, locally, with the style \texttt{no input leads} (that can be reverted with \texttt{input leads}), like in the following example. The anchors do not change and you have to take responsibility to make the connection to the ``border''-anchors.
\begin{LTXexample}[varwidth=true]
\begin{circuitikz}
@@ -7436,9 +7602,9 @@ External pins' length is controlled by the key \texttt{multipoles/external pins
like in chips. In addition, like in logic ports, you can suppress the
drawing of the leads by using the boolean key
\texttt{logic ports draw input leads} (default \texttt{true}) or, locally,
-with the style \texttt{no inputs leads} (that can be reverted with
+with the style \texttt{no input leads} (that can be reverted with
\texttt{input leads}).
-The main difference between setting \texttt{external pins width} to \texttt{0} or using \texttt{no inputs lead} is that in the first case the normal pin anchors and the border anchors will coincide, and in the second case they will not move and stay where they should have been if the leads were drawn.
+The main difference between setting \texttt{external pins width} to \texttt{0} or using \texttt{no input lead} is that in the first case the normal pin anchors and the border anchors will coincide, and in the second case they will not move and stay where they should have been if the leads were drawn.
You can draw only selected pins and leave out the rest by setting the keys
\texttt{multipoles/draw only \emph{side} pins} and the corresponding style
@@ -7840,7 +8006,7 @@ You can, if you want, avoid printing the numbers of the pin with \texttt{hide nu
\end{LTXexample}
-Also, you can suppress the drawing of the pins, by using the style \texttt{no inputs leads} (that can be reverted with \texttt{input leads}). The main difference between setting \texttt{external pins width} to \texttt{0} or using \texttt{no inputs lead} is that in the first case the normal pin anchors and the border anchors will coincide, and in the second case they will not move and stay where they should have been if the leads were drawn.
+Also, you can suppress the drawing of the pins, by using the style \texttt{no input leads} (that can be reverted with \texttt{input leads}). The main difference between setting \texttt{external pins width} to \texttt{0} or using \texttt{no input lead} is that in the first case the normal pin anchors and the border anchors will coincide, and in the second case they will not move and stay where they should have been if the leads were drawn.
For special use you can suppress the orientation mark with the key \texttt{no topmark} (default \texttt{topmark}).
diff --git a/graphics/pgf/contrib/circuitikz/tex/circuitikz.sty b/graphics/pgf/contrib/circuitikz/tex/circuitikz.sty
index afa91d4b2b..4f5ce00a0f 100644
--- a/graphics/pgf/contrib/circuitikz/tex/circuitikz.sty
+++ b/graphics/pgf/contrib/circuitikz/tex/circuitikz.sty
@@ -16,8 +16,8 @@
\providecommand\DeclareRelease[3]{}
\providecommand\DeclareCurrentRelease[2]{}
-\def\pgfcircversion{1.6.9}
-\def\pgfcircversiondate{2024/05/25}
+\def\pgfcircversion{1.7.0}
+\def\pgfcircversiondate{2024/08/03}
\DeclareRelease{0.4}{2012/12/20}{circuitikz-0.4-body.tex}
\DeclareRelease{v0.4}{2012/12/20}{circuitikz-0.4-body.tex}
diff --git a/graphics/pgf/contrib/circuitikz/tex/pgfcirc.defines.tex b/graphics/pgf/contrib/circuitikz/tex/pgfcirc.defines.tex
index 943745bf7a..cca735bf1e 100644
--- a/graphics/pgf/contrib/circuitikz/tex/pgfcirc.defines.tex
+++ b/graphics/pgf/contrib/circuitikz/tex/pgfcirc.defines.tex
@@ -266,6 +266,58 @@
%
%>>>
+%% check loaded TikZ/pgf version %<<<`
+%
+% parse the release date, thanks to Skillmon
+% https://github.com/pgf-tikz/pgf/issues/1348#issuecomment-2231681032
+% date can be yyyy-mm-dd or (older TikZ) yyyy/mm/dd
+\begingroup
+ \pgfutil@protected\def\parsedate#1%
+ {%
+ \afterassignment\parsedate@month
+ \pgf@circ@count@a=#1\relax
+ }
+ \pgfutil@protected\def\parsedate@month#1%
+ {%
+ \afterassignment\parsedate@day
+ \pgf@circ@count@b=%
+ }
+ \pgfutil@protected\def\parsedate@day#1%
+ {%
+ \afterassignment\parsedate@cleanup
+ \pgf@circ@count@c=%
+ }
+ \def\parsedate@cleanup#1\relax{}%
+ \parsedate{\pgfrevisiondate}%
+ \xdef\ctikz@@pgfyear{\the\pgf@circ@count@a}%
+ \xdef\ctikz@@pgfmonth{\the\pgf@circ@count@b}%
+ \xdef\ctikz@@pgfday{\the\pgf@circ@count@c}%
+\endgroup
+% The following code thanks to Skillmon:
+% https://tex.stackexchange.com/a/722570/38080
+% modified by romano to check the date
+\def\ctikz@@ifpgfafter@auxi#1#2%
+ {%
+ \ifnum#1
+ \ctikz@@ifpgfafter@auxii{#2}%
+ \fi
+ }
+\def\ctikz@@ifpgfafter@auxii#1\fi#2\ctikz@@ifpgfafter#3{\fi#1}
+\def\ctikz@@ifpgfafter#1-#2-#3#%
+ {%
+ \ctikz@@ifpgfafter@auxi{\ctikz@@pgfyear>#1}\pgfutil@firstoftwo
+ \ctikz@@ifpgfafter@auxi{\ctikz@@pgfyear<#1}\pgfutil@secondoftwo
+ \ctikz@@ifpgfafter@auxi{\ctikz@@pgfmonth>#2}\pgfutil@firstoftwo
+ \ctikz@@ifpgfafter@auxi{\ctikz@@pgfmonth<#2}\pgfutil@secondoftwo
+ \ctikz@@ifpgfafter@auxi{\ctikz@@pgfday<#3}\pgfutil@secondoftwo
+ \pgfutil@gobble\ctikz@@ifpgfafter\pgfutil@firstoftwo
+ }
+%
+% usage \ctikz@@ifpgfafter 2023-01-16{true}{false}
+% ^^^ no spaces here, braces needed.
+%
+%>>>
+
%% arrow tips macros and utilities %<<<1
% the default arrow is latexslim, which has been ported over old arrows library (deprecated)
@@ -298,9 +350,70 @@
\pgfpathclose
\pgfusepathqfill
}
-
\pgfarrowsdeclarereversed{latexslim reversed}{latexslim reversed}{latexslim}{latexslim}
-
+%% Jack Tap, see
+%% https://github.com/circuitikz/circuitikz/issues/806
+\pgfdeclarearrow{name=Jack Tap,
+ parameters = {%
+ \the\pgfarrowlength,%
+ \the\pgfarrowwidth,%
+ \ifpgfarrowswap s\fi%
+ \ifpgfarrowopen o\fi%
+ \ifpgfarrowroundjoin j\fi
+ \ifpgfarrowroundcap c\fi%
+ },
+ setup code = {
+ \pgfarrowssettipend{.5\pgfarrowlength}
+ \pgfarrowssetlineend{-.6\pgfarrowlength}
+ \pgfarrowssetvisualbackend{-.6\pgfarrowlength}
+ \pgfarrowssetbackend{-.6\pgfarrowlength}
+ % hull
+ \pgfarrowshullpoint{.5\pgfarrowlength}{0pt}
+ \pgfarrowshullpoint{0pt}{\pgfarrowwidth}
+ \pgfarrowshullpoint{-.6\pgfarrowlength}{0pt}
+ % Saves: Only the length:
+ \pgfarrowssavethe\pgfarrowlength
+ \pgfarrowssavethe\pgfarrowwidth
+ },
+ drawing code = {
+ \pgfsetdash{}{+0pt}
+ \pgfarrowlinewidth=\pgflinewidth
+ \ifpgfarrowroundjoin\pgfsetroundjoin\else\pgfsetmiterjoin\fi
+ \ifpgfarrowroundcap\pgfsetroundcap\else\pgfsetbuttcap\fi
+ \pgfpathmoveto{\pgfqpoint{-.6\pgfarrowlength}{0pt}}
+ \pgfpathlineto{\pgfqpoint{-.5\pgfarrowlength}{0pt}}
+ \pgfpathlineto{\pgfqpoint{0pt}{\pgfarrowwidth}}
+ \pgfpathlineto{\pgfqpoint{.5\pgfarrowlength}{0pt}}
+ \ifpgfarrowopen
+ \pgfusepathqstroke
+ \else
+ \pgfpathclose
+ \ifdim\pgfarrowlinewidth>0pt\pgfusepathqfillstroke\else\pgfusepathqfill\fi
+ \fi
+ },
+ defaults = {length = 0.3cm, width=0.15cm, open},
+ % cache=false, % breaks everything
+}
+% the new "fill without arg" will be in TikZ 3.1.11. Apply it here if we have an
+% older version
+\ctikz@@ifpgfafter 2023-01-16{\relax}{%
+ % thanks @muzimuzhi https://github.com/pgf-tikz/pgf/issues/1348#issuecomment-2229075269
+ % undo the fill/.value required key
+ \expandafter\let\csname pgfk@/pgf/arrow keys/fill/.@def\endcsname\@undefined
+ \pgfkeys{/pgf/arrow keys/fill/.code={%
+ \def\pgf@temp{#1}%
+ \ifx\pgf@temp\pgf@nonetext%
+ \pgfarrowsaddtooptions{\pgfarrowopentrue}%
+ \else\ifx\pgf@temp\pgfkeysnovalue@text%
+ \pgfarrowsaddtooptions{\pgfarrowopenfalse}%
+ \else
+ \pgfarrowsaddtooptions{\pgfarrowopenfalse\def\pgf@arrows@fill@color{#1}}%
+ \fi\fi
+ }}%
+}
+\tikzset{v/.tip={Jack Tap[swap]}, ^/.tip={Jack Tap},
+ vf/.tip={Jack Tap[swap,fill]}, ^f/.tip={Jack Tap[fill]}}
+%
% select the arrows using available defaults.
\def\pgfcirc@arrow@default{default}
% choose the arrows to use. Use #2 and #3 if the key is equal to "default"
@@ -466,7 +579,30 @@
\fi
\fi
}
-
+% similar o the above, use the fill parameter to set fill or draw
+% for a subset of the shape
+\def\pgf@circ@subset@fill@or@draw#1{%
+ % You *must* be sure that this is called inside a \pgfscope!
+ \edef\@@none{none}\edef\@@default{default}
+ \edef\@@tmp{\ctikzvalof{#1/fill}}
+ \ifx\@@tmp\@@none
+ \pgfusepath{draw}
+ \else
+ \ifx\@@tmp\@@default\else
+ \pgfsetfillcolor{\@@tmp}
+ \fi
+ \pgfusepath{draw, fill}
+ \fi
+}
+% ...and for the thickness
+\def\pgf@circ@subset@thickness#1{%
+ % You *must* be sure that this is called inside a \pgfscope!
+ \edef\@@default{default}
+ \edef\@@tmp{\ctikzvalof{#1/thickness}}
+ \ifx\@@tmp\@@default\else
+ \pgfsetlinewidth{\@@tmp\pgflinewidth}%
+ \fi
+}
% set the text color (via \color) if the color is not default or none
% needed in some strange case (like bodydiode' dots)
\def\pgf@circ@maybe@color#1{%
@@ -557,6 +693,7 @@
% #7 - macros drawing the bipole
%
\long\def\pgfcircdeclarebipolescaled#1#2#3#4#5#6#7{
+ % \typeout{Declaring bipole:\space #4,}
\pgfdeclareshape{#4shape}{
\savedmacro{\ctikzclass}{\edef\ctikzclass{#1}}
\saveddimen{\scaledRlen}{\pgfmathsetlength{\pgf@x}{\ctikzvalof{\ctikzclass/scale}\pgf@circ@Rlen}}
@@ -602,97 +739,33 @@
\pgf@y=.5\pgf@y
}
\anchor{center}{\pgfpointorigin}
- \anchor{n}{
- \northeast
- \pgf@x=0cm
- }
- \anchor{north east}{
- \northeast
- }
- \anchor{north west}{
- \northeast
- \pgf@x=-\pgf@x
- }
- \anchor{ne}{
- \northeast
- }
- \anchor{nw}{
- \northeast
- \pgf@x=-\pgf@x
- }
- \anchor{e}{
- \northeast
- \pgf@y=0cm
- }
- \anchor{s}{
- \southwest
- \pgf@x=0cm
- }
- \anchor{south east}{
- \southwest
- \pgf@x=-\pgf@x
- }
- \anchor{south west}{
- \southwest
- }
- \anchor{se}{
- \southwest
- \pgf@x=-\pgf@x
- }
- \anchor{sw}{
- \southwest
- }
- \anchor{w}{
- \southwest
- \pgf@y=0cm
- }
- \anchor{north}{
- \northeast
- \pgf@x=0cm
- }
- \anchor{east}{
- \northeast
- \pgf@y=0cm
- }
- \anchor{south}{
- \southwest
- \pgf@x=0cm
- }
- \anchor{west}{
- \southwest
- \pgf@y=0cm
- }
- \anchor{right}{
- \northeast
- \pgf@y=0cm
- }
- \anchor{above}{
- \northeast
- \pgf@x=0cm
- }
- \anchor{left}{
- \southwest
- \pgf@y=0cm
- }
- \anchor{below}{
- \southwest
- \pgf@x=0cm
- }
- \anchor{a}{
- \northeast
- \pgf@y=0cm
- }
- \anchor{b}{
- \southwest
- \pgf@y=0cm
- }
+ \anchor{n}{\northeast\pgf@x=0cm }
+ \anchor{north east}{\northeast}
+ \anchor{north west}{\northeast\pgf@x=-\pgf@x}
+ \anchor{ne}{\northeast}
+ \anchor{nw}{\northeast\pgf@x=-\pgf@x}
+ \anchor{e}{\northeast\pgf@y=0cm }
+ \anchor{s}{\southwest\pgf@x=0cm }
+ \anchor{south east}{\southwest\pgf@x=-\pgf@x}
+ \anchor{south west}{\southwest}
+ \anchor{se}{\southwest\pgf@x=-\pgf@x}
+ \anchor{sw}{\southwest}
+ \anchor{w}{\southwest\pgf@y=0cm }
+ \anchor{north}{\northeast\pgf@x=0cm }
+ \anchor{east}{\northeast\pgf@y=0cm }
+ \anchor{south}{\southwest\pgf@x=0cm }
+ \anchor{west}{\southwest\pgf@y=0cm }
+ \anchor{right}{\northeast\pgf@y=0cm }
+ \anchor{above}{\northeast\pgf@x=0cm }
+ \anchor{left}{\southwest\pgf@y=0cm }
+ \anchor{below}{\southwest\pgf@x=0cm }
+ \anchor{a}{\northeast\pgf@y=0cm }
+ \anchor{b}{\southwest\pgf@y=0cm }
\savedanchor{\textanchor}{%
\pgf@y=\ht\pgfnodeparttextbox
\pgf@x=-.5\wd\pgfnodeparttextbox
}
- \anchor{text}{
- \textanchor
- }
+ \anchor{text}{ \textanchor }
\anchorborder{%
\ifpgf@circuit@bipole@inverted
\pgf@circ@res@left=-\pgf@x
@@ -711,7 +784,6 @@
#2%
\pgf@circ@draw@component{
\pgf@circ@setcolor
-
\northeast
\pgf@circ@res@up = \pgf@y
\pgf@circ@res@zero = 0cm
diff --git a/graphics/pgf/contrib/circuitikz/tex/pgfcircbipoles.tex b/graphics/pgf/contrib/circuitikz/tex/pgfcircbipoles.tex
index 626ed28812..b30e741458 100644
--- a/graphics/pgf/contrib/circuitikz/tex/pgfcircbipoles.tex
+++ b/graphics/pgf/contrib/circuitikz/tex/pgfcircbipoles.tex
@@ -632,13 +632,21 @@
\pgfusepath{draw}
\endpgfscope
}%
-
%% Zig-zag resistors
+% see https://github.com/circuitikz/circuitikz/discussions/814
+\ctikzset{resistors/zigzag stub/.initial=0}
+\ctikzset{resistors/zigzag hook/.code={}}
\def\pgf@circ@zigzag#1{%
+ \pgf@circ@res@temp=\ctikzvalof{resistors/zigzag stub}\pgf@circ@res@step
+ \advance \pgf@circ@res@step by -2\pgf@circ@res@temp
\divide \pgf@circ@res@step by \numexpr4*\zigs\relax
\pgfpathmoveto{\pgfpoint{\pgf@circ@res@left-\pgfhorizontaltransformationadjustment*0.5*\pgflinewidth}{\pgf@circ@res@zero}}
+ \ifdim\pgf@circ@res@temp>0pt
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@left+\pgf@circ@res@temp -\pgfhorizontaltransformationadjustment*0.5*\pgflinewidth}{\pgf@circ@res@zero}}
+ \fi
\pgf@circ@res@other = \pgf@circ@res@left
+ \advance\pgf@circ@res@other by \pgf@circ@res@temp
\pgf@circ@count@a=\zigs\relax
% first half zig
\advance\pgf@circ@res@other by \pgf@circ@res@step
@@ -655,11 +663,14 @@
\advance\pgf@circ@res@other by 2\pgf@circ@res@step
\pgfpathlineto{\pgfpoint{\pgf@circ@res@other}{#1\pgf@circ@res@down}}
\advance\pgf@circ@res@other by \pgf@circ@res@step
- \pgfpathlineto{\pgfpoint{\pgf@circ@res@other}{\pgf@circ@res@zero}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@other+\pgfhorizontaltransformationadjustment*0.5*\pgflinewidth}{\pgf@circ@res@zero}}
+ \ifdim\pgf@circ@res@temp>0pt
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@other+\pgf@circ@res@temp+\pgfhorizontaltransformationadjustment*0.5*\pgflinewidth}{\pgf@circ@res@zero}}
+ \fi
\pgfsetbeveljoin
+ \pgfkeys{/tikz/circuitikz/resistors/zigzag hook}
\pgfusepath{draw}
}
-
%% Resistor
\pgfcircdeclarebipolescaled{resistors}
{
@@ -672,7 +683,7 @@
{
\pgf@circ@setlinewidth{bipoles}{\pgfstartlinewidth}
\pgftransformationadjustments
- \pgfmathsetlength{\pgf@circ@res@step}{\ctikzvalof{bipoles/resistor/width}*\scaledRlen+\pgfhorizontaltransformationadjustment*0.5*\pgflinewidth}
+ \pgfmathsetlength{\pgf@circ@res@step}{\ctikzvalof{bipoles/resistor/width}*\scaledRlen}
\pgf@circ@zigzag{1}
}
@@ -692,7 +703,7 @@
{
\pgf@circ@setlinewidth{bipoles}{\pgfstartlinewidth}
\pgftransformationadjustments
- \pgfmathsetlength{\pgf@circ@res@step}{\ctikzvalof{bipoles/vresistor/width}*\scaledRlen+\pgfhorizontaltransformationadjustment*0.5*\pgflinewidth}
+ \pgfmathsetlength{\pgf@circ@res@step}{\ctikzvalof{bipoles/vresistor/width}*\scaledRlen}
\pgf@circ@zigzag{.5}
\pgfscope
@@ -731,7 +742,7 @@
{
\pgf@circ@setlinewidth{bipoles}{\pgfstartlinewidth}
\pgftransformationadjustments
- \pgfmathsetlength{\pgf@circ@res@step}{\ctikzvalof{bipoles/potentiometer/width}*\scaledRlen+\pgfhorizontaltransformationadjustment*0.5*\pgflinewidth}
+ \pgfmathsetlength{\pgf@circ@res@step}{\ctikzvalof{bipoles/potentiometer/width}*\scaledRlen}
\pgf@circ@zigzag{1}
\pgfscope
@@ -761,7 +772,7 @@
{%
\pgf@circ@setlinewidth{bipoles}{\pgfstartlinewidth}
\pgftransformationadjustments
- \pgfmathsetlength{\pgf@circ@res@step}{\ctikzvalof{bipoles/resistivesens/width}*\scaledRlen+\pgfhorizontaltransformationadjustment*0.5*\pgflinewidth}
+ \pgfmathsetlength{\pgf@circ@res@step}{\ctikzvalof{bipoles/resistivesens/width}*\scaledRlen}
\pgf@circ@zigzag{.5}
\pgfscope
@@ -810,7 +821,7 @@
\pgfpathmoveto{\pgfpoint{\pgf@circ@res@right/\@@intscale+\pgfhorizontaltransformationadjustment*0.5*\pgflinewidth}{+0pt}}
\pgfpathlineto{\pgfpoint{\pgf@circ@res@right+\pgfhorizontaltransformationadjustment*0.5*\pgflinewidth}{+0pt}}
\pgftransformationadjustments
- \pgfmathsetlength{\pgf@circ@res@step}{\ctikzvalof{bipoles/ldresistor/width}*\scaledRlen+\pgfhorizontaltransformationadjustment*0.5*\pgflinewidth}
+ \pgfmathsetlength{\pgf@circ@res@step}{\ctikzvalof{bipoles/ldresistor/width}*\scaledRlen}
\pgf@circ@zigzag{\@@hscale}
}%
@@ -6031,6 +6042,13 @@
\ctikzset{bipoles/qpprobe/voltage/additional shift/.initial=.5}
\ctikzset{bipoles/iloop/width/.initial=.40}
\ctikzset{bipoles/iloop/height/.initial=.60}
+% currtap see https://github.com/circuitikz/circuitikz/issues/807
+\ctikzset{bipoles/currtap/height/.initial=0.4}
+\ctikzset{bipoles/currtap/dot size/.initial=0.5}
+\ctikzset{bipoles/currtap/fill/.initial=default}
+\ctikzset{bipoles/currtap/dash/.initial=none}
+\ctikzset{bipoles/currtap/color/.initial=default}
+\ctikzset{bipoles/currtap/thickness/.initial=default}
\ctikzset{bipoles/oscope/height/.initial=.60}
\ctikzset{bipoles/oscope/width/.initial=.60}
@@ -6607,6 +6625,28 @@
\pgfusepath{draw}
\endpgfscope
}
+%% currtap
+\pgfcircdeclarebipolescaled{instruments}
+{
+ \savedmacro{\@@dotsize}{\def\@@dotsize{\ctikzvalof{bipoles/currtap/dot size}}}
+ \anchor{tap}{\northeast\pgf@x=0pt\pgf@y=\@@dotsize\pgf@y\pgf@y=-\pgf@y}
+}
+{\ctikzvalof{bipoles/currtap/height}}
+{currtap}
+{\ctikzvalof{bipoles/currtap/height}}
+{\ctikzvalof{bipoles/currtap/height}}
+{
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{0pt}}
+ \pgfpathlineto{\pgfpoint{0.95\pgf@circ@res@left}{0pt}}
+ \pgfpatharc{180}{0}{0.95\pgf@circ@res@right}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{0pt}}
+ \pgfusepath{draw}
+ \pgf@circ@subset@color@dash{bipoles/currtap}
+ \pgf@circ@subset@thickness{bipoles/currtap}
+ \pgfusepath{draw}
+ \pgfpathcircle{\pgfpoint{0pt}{0pt}}{\@@dotsize*\pgf@circ@res@up}
+ \pgf@circ@subset@fill@or@draw{bipoles/currtap}
+}
% %>>>
% Path definitions for Instruments%<<<
@@ -6619,8 +6659,8 @@
\pgfcirc@activate@bipole@simple{l}{rmeterwa}
\pgfcirc@activate@bipole@simple{l}{smeter}
\pgfcirc@activate@bipole@simple{l}{iloop}
-% \pgfcirc@activate@bipole@simple{l}{iloop2} that was wrong
\pgfcirc@activate@bipole{l}{ilooptwo}{iloop2}{iloop2}
+\pgfcirc@activate@bipole@simple{l}{currtap}
\pgfcirc@activate@bipole@simple{l}{qvprobe}
\pgfcirc@activate@bipole@simple{l}{qiprobe}
\pgfcirc@activate@bipole@simple{l}{qpprobe}
@@ -6774,16 +6814,22 @@
% spring into the damper
\pgfscope
- \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@zero}}
+ \pgfscope
+ \pgftransformationadjustments
\pgf@circ@setlinewidth{bipoles}{\pgfstartlinewidth}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left-\pgfhorizontaltransformationadjustment*0.5*\pgflinewidth}{\pgf@circ@res@zero}}
+ \pgfpathlineto{\pgfpoint{.95\pgf@circ@res@left}{\pgf@circ@res@zero}}
\pgfsetcornersarced{\pgfpoint{.25\pgf@circ@res@up}{.25\pgf@circ@res@up}}
\pgfpathlineto{\pgfpoint{.75\pgf@circ@res@left}{.75\pgf@circ@res@up}}
\pgfpathlineto{\pgfpoint{.5\pgf@circ@res@left}{-.75\pgf@circ@res@up}}
\pgfpathlineto{\pgfpoint{.25\pgf@circ@res@left}{.75\pgf@circ@res@up}}
\pgfpathlineto{\pgfpoint{0pt}{-.75\pgf@circ@res@up}}
\pgfpathlineto{\pgfpoint{\ctikzvalof{bipoles/damper/length}\pgf@circ@res@right}{.75\pgf@circ@res@up}}
+ \pgfsetbuttcap
+ \pgfsetbeveljoin
\pgfusepath{stroke}
\endpgfscope
+ \endpgfscope
% damper box
\pgf@circ@setlinewidth{bipoles}{\pgfstartlinewidth}
\pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@down}}
@@ -7171,18 +7217,18 @@
{\ctikzvalof{bipoles/thermocouple/height}}
{\ctikzvalof{bipoles/thermocouple/width}}
{
+ \pgfsetrectcap
\pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{0}}
\pgfpathlineto{\pgfpoint{\pgf@circ@res@left}{.5\pgf@circ@res@down}}
- \pgfusepath{draw}
- \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{.5\pgf@circ@res@down}}
- \pgf@circ@setlinewidth{bipoles}{\pgfstartlinewidth}
\pgfpathlineto{\pgfpoint{0}{\pgf@circ@res@down}}
- \pgfusepath{draw}
- \pgfsetlinewidth{\pgfstartlinewidth}
- \pgfpathmoveto{\pgfpoint{0}{\pgf@circ@res@down}}
\pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{.5\pgf@circ@res@down}}
\pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{0}}
\pgfusepath{draw}
+ \pgf@circ@setlinewidth{bipoles}{\pgfstartlinewidth}
+ \pgfsetroundcap
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{.5\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{0}{\pgf@circ@res@down}}
+ \pgfusepath{draw}
}
%% fuse
\pgfcircdeclarebipolescaled{misc}
diff --git a/graphics/pgf/contrib/circuitikz/tex/pgfcircpath.tex b/graphics/pgf/contrib/circuitikz/tex/pgfcircpath.tex
index e3665b8862..cb95f54ef3 100644
--- a/graphics/pgf/contrib/circuitikz/tex/pgfcircpath.tex
+++ b/graphics/pgf/contrib/circuitikz/tex/pgfcircpath.tex
@@ -231,13 +231,15 @@
\compattikzset{#2/.style={\comnpatname #1, #3={##1}}}%
}
% create a bipole
-\def\pgfcirc@activate@bipole#1#2#3#4{% path name, base node name, style name
+\def\pgfcirc@activate@bipole#1#2#3#4{% type of label, path name, base node name, style name
+ % \typeout{Activate bipole:\space #4,}
\expandafter\def\csname pgf@circ@#2@path\endcsname##1{\pgf@circ@bipole@path{#3}{##1}}%
\pgfcirc@path@to@style{#1}{#2}{#4}{}% no options here, let's see
}
\def\pgfcirc@activate@bipole@simple#1#2{\pgfcirc@activate@bipole{#1}{#2}{#2}{#2}}
% create a bipole with options
-\def\pgfcirc@activate@bipole@opt#1#2#3#4#5{% path name, base node name, style name
+\def\pgfcirc@activate@bipole@opt#1#2#3#4#5{% type of label, path name, base node name, style name, options
+ % \typeout{Activate bipole:\space #4,}
\expandafter\def\csname pgf@circ@#2@path\endcsname##1{\pgf@circ@bipole@path{#3}{##1}}%
\pgfcirc@path@to@style{#1}{#2}{#4}{#5}% no options here, let's see
}
diff --git a/graphics/pgf/contrib/circuitikz/tex/t-circuitikz.tex b/graphics/pgf/contrib/circuitikz/tex/t-circuitikz.tex
index 4e4861071f..f85b8ab58b 100644
--- a/graphics/pgf/contrib/circuitikz/tex/t-circuitikz.tex
+++ b/graphics/pgf/contrib/circuitikz/tex/t-circuitikz.tex
@@ -16,8 +16,8 @@
\startmodule[circuitikz]
\usemodule[tikz]
-\def\pgfcircversion{1.6.9}
-\def\pgfcircversiondate{2024/05/25}
+\def\pgfcircversion{1.7.0}
+\def\pgfcircversiondate{2024/08/03}
\writestatus{loading}{\pgfcircversiondate{} The CircuiTikz circuit drawing package version \pgfcircversion}
diff --git a/graphics/pgf/contrib/lie-hasse/README b/graphics/pgf/contrib/lie-hasse/README
index e63a82cc60..1bd63c4cba 100644
--- a/graphics/pgf/contrib/lie-hasse/README
+++ b/graphics/pgf/contrib/lie-hasse/README
@@ -2,9 +2,9 @@ ___________________________________
Lie Hasse
- v1.0
+ v1.01
- 3 February 2020
+ 9 July 2024
___________________________________
Authors : Ben McKay
diff --git a/graphics/pgf/contrib/lie-hasse/lie-hasse.pdf b/graphics/pgf/contrib/lie-hasse/lie-hasse.pdf
index 5be5791e7f..ed444cc7d1 100644
--- a/graphics/pgf/contrib/lie-hasse/lie-hasse.pdf
+++ b/graphics/pgf/contrib/lie-hasse/lie-hasse.pdf
Binary files differ
diff --git a/graphics/pgf/contrib/lie-hasse/lie-hasse.sty b/graphics/pgf/contrib/lie-hasse/lie-hasse.sty
index d1050d8839..6d727c841c 100644
--- a/graphics/pgf/contrib/lie-hasse/lie-hasse.sty
+++ b/graphics/pgf/contrib/lie-hasse/lie-hasse.sty
@@ -1,24 +1,20 @@
-% The Lie Hasse package.
+% The Lie Hasse package.
+% Version 1.01
%
-% Version 1.0
%
+% This package draws Hasse diagrams of root system posets of simple
+% Lie algebraS, in LaTeX documents, using the TikZ package.
%
-% This package draws Hasse diagrams of root system posets of simple
-% Lie algebraS, in LaTeX documents, using the TikZ package.
+% Benjamin McKay
+% b.mckay@ucc.ie
%
-% Benjamin McKay
-% b.mckay@ucc.ie
-%
-% Released under the LaTeX Project Public License v1.3c or later, see
+% Released under the LaTeX Project Public License v1.3c or later, see
% http://www.latex-project.org/lppl.txt
-%
-%
-%
-%
\NeedsTeXFormat{LaTeX2e}[1994/06/01]
-\ProvidesPackage{lie-hasse}[2020/02/02 Lie Hasse]
+\ProvidesPackage{lie-hasse}[2024/07/09 Lie Hasse]
\RequirePackage[rgb]{xcolor}
\RequirePackage{dynkin-diagrams}
+\RequirePackage[outline]{contour}
\usetikzlibrary{
positioning,
fadings,
@@ -26,7 +22,7 @@
%%%
%%% Application programming interface:
%%%
-
+\NewDocumentCommand\edgeQuote{m}{\contour{white}{\(#1\)}}
\newif\iflie@hasse@threeD
\lie@hasse@threeDtrue
\xdef\lie@hasse@three@D@shift{.3}%
@@ -40,14 +36,27 @@
\lie@hasse@show@heightfalse
\newif\iflie@hasse@attach@dynkin@diagram
\lie@hasse@attach@dynkin@diagramfalse
-
+\newif\iflie@hasse@show@levi
+\lie@hasse@show@levitrue
+\newif\iflie@hasse@show@unipotent@radical
+\lie@hasse@show@unipotent@radicaltrue
\pgfkeys{
/Lie Hasse diagram/.is family,
/Lie Hasse diagram,
- attach Dynkin diagram/.is if = lie@hasse@attach@dynkin@diagram,
+ attach Dynkin diagram/.is if
+ = lie@hasse@attach@dynkin@diagram,
attach Dynkin diagram/.default = false,
- edge/.style={ultra thick},
- edge quotes/.style={/Dynkin diagram/text style,auto,inner sep=2pt},
+ edge/.style = {
+ ultra thick
+ },
+ edge length/.estore in
+ = \lie@hasse@edge@length,
+ edge length = 1cm,
+ edge quotes/.style={
+ /Dynkin diagram/text style,
+ auto,
+ inner sep=2pt
+ },
compact edge/.style={},
noncompact edge/.style={opacity=0},
compact root/.code={\dynkinDrawSolidRootMark{#1}},
@@ -67,7 +76,13 @@
show widths/.default = false,
show height/.is if = lie@hasse@show@height,
show height/.default = false,
- z shift/.estore in = \lie@hasse@three@D@shift,
+ show Levi/.is if = lie@hasse@show@levi,
+ show Levi/.default = true,
+ show unipotent radical/.is if
+ = lie@hasse@show@unipotent@radical,
+ show unipotent radical/.default = true,
+ z shift/.estore in
+ = \lie@hasse@three@D@shift,
z shift/.default = .3,
top/.style={black!20,opacity=.4},
left/.style={black!20,opacity=.9},
@@ -90,13 +105,17 @@
\dynkin@integer@rank%
}%
{%
- % Turn Satake codes into Dynkin diagram expressions in \dynkin@string.
+ % Turn Satake codes into Dynkin diagram
+ % expressions in \dynkin@string.
\dynkin@grok@Satake@codes%
}%
- % Expand out any digits in \dynkin@string into multiples of the various root marks.
+ % Expand out any digits in \dynkin@string
+ % into multiples of the various root marks.
\expand@Dynkin@Roots@Digits%
- % Assign to \dynkin@roots the input string \dynkin@string with all . symbols removed,
- % so we only get the symbols representing the marks for the various roots.
+ % Assign to \dynkin@roots the input string
+ % \dynkin@string with all . symbols removed,
+ % so we only get the symbols representing
+ % the marks for the various roots.
\StrDel{\dynkin@string}{.}[\temp]%
\xdef\dynkin@roots{\temp}%
\StrLen{\dynkin@roots}[\temp]%
@@ -115,58 +134,33 @@
{%
\pgfkeys{/Lie Hasse diagram/for all roots={#1}{#2}}%
}%
+\newif\iflie@hasse@B
+\newcount\dynkin@rank@plus@one%
\NewDocumentCommand\hasse{O{}mm}%
{%
\ifdefined\filldraw%
- \IfStrEq{#1}{}%
- {%
+ \ifx#1\empty\relax%
\studyHasseDiagramOfRootSystem{#2}{#3}%
- }%
- {%
+ \else%
\studyHasseDiagramOfRootSystem[#1]{#2}{#3}%
- }%
+ \fi%
\label@item@count 0\relax%
\expandafter\forcsvlist%
- \expandafter\add@label%
+ \expandafter\lie@hasse@add@label%
\expandafter{\dynkin@label@list}%
\ifnum\dynkin@rank=1%
\dynkin{A}{1}%
\else%
+ \global\dynkin@rank@plus@one\the\dynkin@rank\relax%
+ \global\advance\dynkin@rank@plus@one by 1\relax%
\add@compact@simple@roots@to@compact@roots{}%
\IfStrEqCase{#2}%
{%%
{A}{\hasse@A}%
- {B}{\hasse@BC}%
- {C}{\hasse@BC*}%
+ {B}{\global\lie@hasse@Btrue\hasse@BC}%
+ {C}{\global\lie@hasse@Bfalse\hasse@BC}%
{D}{\hasse@D}%
- {E}%
- {%
- \ifnum\dynkin@rank=6%
- \hasse@E@six%
- \else%
- \ifnum\dynkin@rank=7%
- \hasse@E@seven%
- \else%
- \ifnum\dynkin@rank=8%
- \hasse@E@eight%
- \else
- \ifnum\dynkin@rank>8%
- \ClassError%
- {Lie Hasse}%
- {Rank of E series Hasse diagram: #3{}%
- exceeds 8; not defined yet}%
- {}%
- \fi%
- \ifnum\dynkin@rank<6%
- \ClassError%
- {Lie Hasse}%
- {Rank of E series Hasse diagram: #3{} less than 6}%
- {}%
- \fi%
- \fi%
- \fi%
- \fi%
- }%
+ {E}{\hasse@E@series}%
{F}%
{%
\ifnum\dynkin@rank=4%
@@ -194,10 +188,11 @@
{Lie Hasse}%
{Lie algebra series #2{} not A,B,C,D,E,F or G}%
{}]%
+ \forAllPositiveRoots{\draw@lie@hasse@root}%
\draw@simple@root@labels%
\fi%
\lie@hasse@write@widths{}%
- \forAllPositiveRootsInHasseDiagram{\doRootThing}%
+ \forAllPositiveRoots{\doRootThing}%
\iflie@hasse@attach@dynkin@diagram%
\attachDynkin%
\fi%
@@ -205,13 +200,42 @@
\begin{tikzpicture}\hasse[#1]{#2}{#3}\end{tikzpicture}%
\fi%
}%
+\NewDocumentCommand\hasse@E@series{}%
+{%
+ \ifnum\dynkin@rank=6%
+ \hasse@E@six%
+ \else%
+ \ifnum\dynkin@rank=7%
+ \hasse@E@seven%
+ \else%
+ \ifnum\dynkin@rank=8%
+ \hasse@E@eight%
+ \else%
+ \ifnum\dynkin@rank>8%
+ \ClassError%
+ {Lie Hasse}%
+ {Rank of E series Hasse diagram: \the\dynkin@rank{}%
+ exceeds 8; not defined yet}%
+ {}%
+ \fi%
+ \ifnum\dynkin@rank<6%
+ \ClassError%
+ {Lie Hasse}%
+ {Rank of E series Hasse diagram: \the\dynkin@rank{}%
+ less than 6; not define yet}%
+ {}%
+ \fi%
+ \fi%
+ \fi%
+ \fi%
+}%
\NewDocumentCommand\drawRootAsDynkinSum{mm}%
{%
\rootSum{#1}{#2}{\rs}%
\node at (#1;#2)
{%
\dynkin[%
- labels=\rs,%
+ expand labels=\rs,%
/Lie Hasse diagram/embedded Dynkin diagram]%
{\dynkin@series}{\the\dynkin@rank}%
};%
@@ -239,25 +263,38 @@
}%
\fi%
}%
-
-\NewDocumentCommand\backwardsGtwo{}%
+\NewDocumentCommand\hasseAttachGtwo{}%
{%
- \dynkin[label,backwards,x shift in edge lengths=-1]{G}{\dynkin@roots}%
+ \dynkin[vertical shift=0,%
+ edge length=\lie@hasse@edge@length,%
+% label,%
+% backwards,%
+% x shift in edge lengths=-1
+]{G}{\dynkin@roots}%
}%
-
\newcount\lie@hasse@E@shift%
\NewDocumentCommand\attachDynkin{}%
{%
\IfStrEqCase{\dynkin@series}{%
- {A}{\dynkin{A}{\dynkin@roots}}%
- {B}{\dynkin{B}{\dynkin@roots}}%
- {C}{\dynkin{C}{\dynkin@roots}}%
- {D}{\dynkin[y shift in edge lengths=-1.5,label]%
- {D}{\dynkin@roots}}%
+ {A}{\dynkin[vertical shift=0,%
+ edge length=\lie@hasse@edge@length]%
+ {A}{\dynkin@roots}}%
+ {B}{\dynkin[vertical shift=0,%
+ edge length=\lie@hasse@edge@length]%
+ {B}{\dynkin@roots}}%
+ {C}{\dynkin[vertical shift=0,%
+ edge length=\lie@hasse@edge@length]%
+ {C}{\dynkin@roots}}%
+ {D}{\dynkin[vertical shift=0,%
+ edge length=\lie@hasse@edge@length,%
+ y shift in edge lengths=-1.5,label]%
+ {D}{\dynkin@roots}}%
{E}%
{%%
\ifnum\dynkin@rank=6%
\dynkin[%
+ vertical shift=0,%
+ edge length=\lie@hasse@edge@length,%
upsidedown,%
labels*={1,...,6},%
y shift in edge lengths=.5]%
@@ -266,6 +303,8 @@
\lie@hasse@E@shift\the\dynkin@rank\relax%
\advance\lie@hasse@E@shift by -2\relax%
\dynkin[%
+ vertical shift=0,%
+ edge length=\lie@hasse@edge@length,%
backwards,%
upsidedown,%
label,%
@@ -274,16 +313,17 @@
{E}{\dynkin@roots}%
\fi%
}%%
- {F}{\dynkin{F}{\dynkin@roots}}%
- {G}{\backwardsGtwo{}}%
+ {F}{\dynkin[vertical shift=0,%
+ edge length=\lie@hasse@edge@length]%
+ {F}{\dynkin@roots}}%
+ {G}{\hasseAttachGtwo}%
}%
[\ClassError%
{Lie Hasse}%
- {Lie algebra series \dynkin@series{} not A,B,C,D,E,F or G when attaching Dynkin diagram}%
+ {Lie algebra series \dynkin@series{} %
+ not A,B,C,D,E,F or G when attaching Dynkin diagram}%
{}]%
}%
-
-
\newif\iflie@hasse@multiple@diagrams
\newcommand\doHasseDiagram[1]%%
{%
@@ -291,8 +331,7 @@
\ %
\fi%
\begin{tikzpicture}%
- [show background rectangle,%
- baseline=(current bounding box.east)]]%
+ [show background rectangle,baseline=(current bounding box.east)]%
\hasse#1%
\iflie@hasse@show@height%
\rootSystemHeight{\lie@hasse@height}%
@@ -327,33 +366,25 @@
}%
\begin{center}%
\expandafter\forscsvlist%
- \expandafter\doHasseDiagram%
- \expandafter{#1}%
+ \expandafter\doHasseDiagram\expandafter{#1}%
\end{center}%
}%
-
-
%%%
%%% Package internals:
%%%
-
-
\pgfdeclarelayer{Dynkin middle}
\pgfdeclarelayer{Dynkin above}
\pgfsetlayers{background,Dynkin behind,Dynkin middle,Dynkin above,main}
-
-
\newcommand*\label@list@at[1]{\csname FOOBAR-#1\endcsname}
\newcommand*\defn@label@list@entry[1]{\expandafter\def\csname FOOBAR-#1\endcsname}
\def\add@to@label@list#1#2{\global\defn@label@list@entry{#1}{#2}}%
\newcount\label@item@count%
\label@item@count 0\relax%
-\newcommand\add@label[1]%
+\newcommand\lie@hasse@add@label[1]%
{%
- \advance\label@item@count by 1\relax%
+ \global\advance\label@item@count by 1\relax%
\global\add@to@label@list{\the\label@item@count}{#1}%
}%
-
\xdef\lie@hasse@compact@roots{}%
\NewDocumentCommand\if@compact@root{mmm}%
{%
@@ -369,9 +400,8 @@
\dynkinOrder{\dynkin@series}{\the\dynkin@rank}.Carter::#1->\dynkin@ordering.%
{\current@simple@root}%
\StrChar{\dynkin@roots}{\current@simple@root}[\lie@hasse@root@marker]%
-\IfStrEq{*}{\lie@hasse@root@marker}{#2}{#3}%
+\IfStrEq{x}{\lie@hasse@root@marker}{#3}{#2}%
}%
-
\NewDocumentCommand\add@compact@root{m}%
{%
\if@compact@root{#1}%
@@ -382,53 +412,65 @@
\xdef\lie@hasse@compact@roots{\temp@lie@hasse@compact@roots{ }(#1)}%
}%
}%
-
\newcount\lie@hasse@sr%
-\newcount\drpo%
\NewDocumentCommand\add@compact@simple@roots@to@compact@roots{}%
{%
-\lie@hasse@sr 1\relax%
-\drpo\the\dynkin@rank\relax%
-\advance\drpo by 1\relax%
-\loop%
- \if@compact@simple@root{\the\lie@hasse@sr}%
- {%%
- \add@compact@root{1;\the\lie@hasse@sr}%
- }%%
- {%%
- }%%
- \advance\lie@hasse@sr by 1\relax%
-\ifnum\lie@hasse@sr<\the\drpo%
-\repeat%
+ \lie@hasse@sr 1\relax%
+ \loop%
+ \if@compact@simple@root{\the\lie@hasse@sr}%
+ {%%
+ \add@compact@root{1;\the\lie@hasse@sr}%
+ }%%
+ {%%
+ }%%
+ \advance\lie@hasse@sr by 1\relax%
+ \ifnum\lie@hasse@sr<\the\dynkin@rank@plus@one%
+ \repeat%
}%
-
-\newcount\drmo%
\newcount\lie@hasse@root@count%
\newcount\lie@hasse@root@count@b%
\newcount\max@lie@hasse@root@count%
\newcount\lie@hasse@reorder
-
\NewDocumentCommand\lie@hasse@fix@order{mm}%
{%
\dynkinOrder{\dynkin@series}{\dynkin@rank}.Carter::{#1}->\dynkin@ordering.{#2}%
}%
-
\NewDocumentCommand\draw@one@simple@root@label{mm}%
%% \draw@one@simple@root@label{r}{s}, draw at Carter number r
%% the root with text s.
{%
- \node[below,%
- label=%
- {%
- [below,%
- lie@hasse@color,%
- /Lie Hasse diagram/edge quotes]%
- \(\pgfkeys{/Dynkin diagram/label macro=#2}\)%
- }%
- ]%
- at%
- (1;#1)%
- {};%
+ \if@compact@simple@root{#1}%
+ {%
+ \iflie@hasse@show@levi%
+ \global\lie@hasse@ok@roottrue%
+ \else%
+ \global\lie@hasse@ok@rootfalse%
+ \fi%
+ }%
+ {%
+ \iflie@hasse@show@unipotent@radical%
+ \global\lie@hasse@ok@roottrue%
+ \else%
+ \global\lie@hasse@ok@rootfalse%
+ \fi%
+ }%
+ \iflie@hasse@ok@root%
+ \node[%
+ below,%
+ label=%
+ {%
+ [%
+ below,%
+ lie@hasse@color,%
+ /Lie Hasse diagram/edge quotes%
+ ]%
+ \(\pgfkeys{/Dynkin diagram/label macro={\edgeQuote{#2}}}\)%
+ }%
+ ]%
+ at%
+ (1;#1)%
+ {};%
+ \fi%
}%
\NewDocumentCommand\draw@simple@root@labels{}%
{%
@@ -471,27 +513,56 @@
\pgfmathsetmacro{\lie@hasse@huenum}{#1/\the\dynkin@rank}%
\global\definecolor{lie@hasse@color}{hsb}{\lie@hasse@huenum,1,.6}%
}%
-\NewDocumentCommand\draw@lie@hasse@root{m}%
+\NewDocumentCommand\draw@lie@hasse@root{mm}%
{%
-\if@compact@root{#1}%
-{%%
-\pgfkeys{/Lie Hasse diagram/compact root=#1}%
-}%%
-{%%
-\pgfkeys{/Lie Hasse diagram/noncompact root=#1}%
-}%%
+ \if@compact@root{#1;#2}%
+ {%%
+ \iflie@hasse@show@levi%
+ \pgfkeys{/Lie Hasse diagram/compact root={#1;#2}}%
+ \fi%
+ }%%
+ {%%
+ \iflie@hasse@show@unipotent@radical%
+ \pgfkeys{/Lie Hasse diagram/noncompact root={#1;#2}}%
+ \fi%
+ }%%
}%
-\xdef\lie@hasse@grade@a{}
-\xdef\lie@hasse@grade@b{}
-\xdef\lie@hasse@index@a{}
-\xdef\lie@hasse@index@b{}
\newcount\root@gpo%
\xdef\label@text{}%
+\newif\iflie@hasse@is@levi
+\newif\iflie@hasse@ok@root
\NewDocumentCommand\draw@lie@hasse@edge{O{}mmmm}%
%[edge label options]{from grade}{from index}{to index}{simple root}
{%
\root@gpo #2\relax%
\advance\root@gpo by 1\relax%
+ \if@compact@root{#2;#3}%
+ {%
+ \if@compact@simple@root{#5}%
+ {%
+ \global\lie@hasse@is@levitrue%
+ \add@compact@root{\the\root@gpo;#4}%
+ }%
+ {%
+ \global\lie@hasse@is@levifalse%
+ }%
+ }%
+ {%
+ \global\lie@hasse@is@levifalse%
+ }%
+ \iflie@hasse@is@levi%
+ \iflie@hasse@show@levi%
+ \global\lie@hasse@ok@roottrue%
+ \else%
+ \global\lie@hasse@ok@rootfalse%
+ \fi%
+ \else%
+ \iflie@hasse@show@unipotent@radical%
+ \global\lie@hasse@ok@roottrue%
+ \else%
+ \global\lie@hasse@ok@rootfalse%
+ \fi%
+ \fi%
\set@lie@hasse@color{#5}%
\lie@hasse@fix@order{#5}{\lie@hasse@root@count@b}%
\IfStrEq{\dynkin@label@list}{}%
@@ -505,31 +576,33 @@
}%
}%
\if@compact@simple@root{#5}%
- {%%% Compact
- \draw[%
- lie@hasse@color,%
- /Lie Hasse diagram/edge,%
- /Lie Hasse diagram/compact edge]%
- (#2;#3) --%
- node[lie@hasse@color,/Lie Hasse diagram/edge quotes,#1]%
- {\(\pgfkeys{/Dynkin diagram/label macro=\label@text}\)}%
- (\the\root@gpo;#4);%
- \IfSubStr{\lie@hasse@compact@roots}{#2;#3}%
- {%% adding to a compact
- \add@compact@root{\the\root@gpo;#4}%
- }%%
- {%%
- }%%
+ {%%% Compact simple root, i.e. edge
+ \iflie@hasse@ok@root%
+ \draw[%
+ lie@hasse@color,%
+ /Lie Hasse diagram/edge,%
+ /Lie Hasse diagram/compact edge]%
+ (#2;#3)--%
+ node[lie@hasse@color,/Lie Hasse diagram/edge quotes,#1]%
+ {\(\pgfkeys{/Dynkin diagram/label macro={\edgeQuote{\label@text}}}\)}%
+ (\the\root@gpo;#4);%
+ \fi%
+ \iflie@hasse@is@levi%
+ \fi%
}%%%
{%%% Noncompact
- \draw[%
- lie@hasse@color,%
- /Lie Hasse diagram/edge,%
- /Lie Hasse diagram/noncompact edge]%
- (#2;#3) --%
+ \iflie@hasse@ok@root%
+ \draw
+ [%
+ lie@hasse@color,%
+ /Lie Hasse diagram/edge,%
+ /Lie Hasse diagram/noncompact edge%
+ ]%
+ (#2;#3)--%
node[lie@hasse@color,/Lie Hasse diagram/edge quotes,#1]%
- {\(\pgfkeys{/Dynkin diagram/label macro=\label@text}\)}%
+ {\(\pgfkeys{/Dynkin diagram/label macro={\edgeQuote{\label@text}}}\)}%
(\the\root@gpo;#4);%
+ \fi%
}%%%
}%
\newcount\A@series@grade%
@@ -555,8 +628,8 @@
\coordinate
(\the\A@series@grade;\the\A@series@j)
at
- ({.5*\the\A@series@x*\dynkin@edge@length},
- {.25*\the\A@series@y*\dynkin@edge@length})
+ ({.5*\the\A@series@x*\lie@hasse@edge@length},
+ {.25*\the\A@series@y*\lie@hasse@edge@length})
{};%
\advance\A@series@j by 1\relax%
\advance\A@series@x by 2\relax%
@@ -569,59 +642,35 @@
\ifnum\A@series@grade<\the\max@A@series@grade%
\repeat%
}%
-\newcount\A@series@grade%
-\newcount\max@A@series@grade%
-\NewDocumentCommand\draw@A@roots{}%
-{%
- \A@series@grade 1\relax%
- \max@A@series@grade \the\dynkin@rank\relax%
- \advance\max@A@series@grade by 1\relax%
- \loop%
- \max@A@series@j\the\dynkin@rank\relax%
- \advance\max@A@series@j by -\the\A@series@grade\relax%
- \advance\max@A@series@j by 2\relax%
- \A@series@j 1\relax%
- {%
- \loop%
- \draw@lie@hasse@root%
- {\the\A@series@grade;\the\A@series@j}%
- \advance\A@series@j by 1\relax%
- \ifnum\A@series@j<\the\max@A@series@j%
- \repeat%
- }%
- \advance\A@series@grade by 1\relax%
- \ifnum\A@series@grade<\the\max@A@series@grade%
- \repeat%
-}%
\newcount\maxA@i%
\newcount\maxA@j%
\newcount\A@lbl%
-\newcount\A@i%
-\newcount\A@j%
-\newcount\A@ipo%
+\newcount\lie@hasse@i%
+\newcount\lie@hasse@j%
+\newcount\lie@hasse@ipo%
\newcount\A@rj%
\newcount\A@rjmo%
\NewDocumentCommand\draw@A@edges{}%
{%
\maxA@i\the\dynkin@rank\relax%
- \A@i 1\relax%
+ \lie@hasse@i 1\relax%
\loop%
\maxA@j \the\dynkin@rank\relax%
- \advance\maxA@j by -\the\A@i\relax%
+ \advance\maxA@j by -\the\lie@hasse@i\relax%
\advance\maxA@j by 1\relax%
\ifnum\maxA@j>-1%
- \A@j 1\relax%
+ \lie@hasse@j 1\relax%
{%
\loop%
- \A@lbl\the\A@i\relax%
- \advance\A@lbl by \the\A@j\relax%
- \A@ipo \A@i\relax%
- \advance\A@ipo by 1\relax%
+ \A@lbl\the\lie@hasse@i\relax%
+ \advance\A@lbl by \the\lie@hasse@j\relax%
+ \lie@hasse@ipo \lie@hasse@i\relax%
+ \advance\lie@hasse@ipo by 1\relax%
\draw@lie@hasse@edge[left]%
- {\the\A@i}{\the\A@j}%
- {\the\A@j}{\the\A@lbl}%
+ {\the\lie@hasse@i}{\the\lie@hasse@j}%
+ {\the\lie@hasse@j}{\the\A@lbl}%
\A@rj\the\maxA@j\relax%
- \advance\A@rj by -\the\A@j\relax%
+ \advance\A@rj by -\the\lie@hasse@j\relax%
\advance\A@rj by 1\relax%
\A@rjmo\the\A@rj\relax%
\advance\A@rjmo by -1\relax%
@@ -629,15 +678,15 @@
\advance\A@lbl by \the\dynkin@rank%
\advance\A@lbl by 1%
\draw@lie@hasse@edge[right]%
- {\the\A@i}{\the\A@rj}%
+ {\the\lie@hasse@i}{\the\A@rj}%
{\the\A@rjmo}{\the\A@lbl}%
- \advance\A@j by 1\relax%
- \ifnum\A@j<\the\maxA@j%
+ \advance\lie@hasse@j by 1\relax%
+ \ifnum\lie@hasse@j<\the\maxA@j%
\repeat%
}%
\fi%
- \advance\A@i by 1\relax%
- \ifnum\A@i<\the\maxA@i%
+ \advance\lie@hasse@i by 1\relax%
+ \ifnum\lie@hasse@i<\the\maxA@i%
\repeat%
}%
%% \hasse@A@width@at@grade{g}{\w} sets the counter \w to
@@ -653,7 +702,6 @@
{%
\place@A@roots%
\draw@A@edges%
- \draw@A@roots%
}%
%% \hasse@BC@width@at@grade{g}{\w} sets the counter \w to
%% the value of the width (number of roots) at grade g of
@@ -666,138 +714,116 @@
\global\advance#2 by 1\relax%
\global\divide#2 by 2\relax%
}%
-\newcount\tdrmt%
-\newcount\tdrmo%
+\newcount\twice@dynkin@rank@minus@one%
\newcount\max@BC@r%
\newcount\BC@r%
\newcount\BC@series@x%
\newcount\BC@series@y%
\NewDocumentCommand\place@BC@roots{}%
{%
-\drmo \the\dynkin@rank\relax%
-\advance\drmo by -1\relax%
-\tdrmt \the\drmo\relax%
-\advance\tdrmt by \the\drmo\relax%
-\tdrmo \the\tdrmt\relax%
-\advance\tdrmo 1\relax%
-\max@BC@r \the\dynkin@rank\relax%
-\advance\max@BC@r by 1\relax%
-\BC@r 1\relax%
-\loop%
- \BC@series@x \the\BC@r\relax%
- \advance\BC@series@x by -1\relax%
- \advance\BC@series@x by \the\BC@series@x\relax%
- \BC@series@y 1\relax%
- {%%
+ \twice@dynkin@rank@minus@one \the\dynkin@rank\relax%
+ \advance\twice@dynkin@rank@minus@one by \the\dynkin@rank\relax%
+ \advance\twice@dynkin@rank@minus@one by -1\relax%
+ \max@BC@r \the\dynkin@rank\relax%
+ \advance\max@BC@r by 1\relax%
+ \BC@r 1\relax%
\loop%
- \coordinate
- (\the\BC@series@y;\the\BC@r)
- at
- ({.5*\the\BC@series@x*\dynkin@edge@length},
- {.5*(\the\BC@series@y-1)*\dynkin@edge@length})
- {};%
- \advance\BC@series@y by 1\relax%
- \advance\BC@series@x by 1\relax%
- \ifnum\BC@series@x<\the\tdrmo\repeat%
- }%%
- \advance\BC@r by 1\relax%
- \ifnum\BC@r<\the\max@BC@r%
-\repeat%
+ \BC@series@x \the\BC@r\relax%
+ \advance\BC@series@x by -1\relax%
+ \advance\BC@series@x by \the\BC@series@x\relax%
+ \BC@series@y 1\relax%
+ {%%
+ \loop%
+ \coordinate
+ (\the\BC@series@y;\the\BC@r)
+ at
+ ({.5*\the\BC@series@x*\lie@hasse@edge@length},
+ {.5*(\the\BC@series@y-1)*\lie@hasse@edge@length})
+ {};%
+ \advance\BC@series@y by 1\relax%
+ \advance\BC@series@x by 1\relax%
+ \ifnum\BC@series@x<\the\twice@dynkin@rank@minus@one\repeat%
+ }%%
+ \advance\BC@r by 1\relax%
+ \ifnum\BC@r<\the\max@BC@r%
+ \repeat%
+}%
+\newcount\BC@height%
+\newcount\BC@g%
+\NewDocumentCommand\draw@BC@edges{}%
+{%
+ \rootSystemHeight{\BC@height}%
+ \ifnum\BC@height>1%
+ \BC@g 1\relax%
+ \loop%
+ \draw@BC@edges@at@grade{\the\BC@g}%
+ \global\advance\BC@g by 1\relax%
+ \ifnum\BC@g<\BC@height%
+ \repeat%
+ \fi%
}%
-\newcount\max@BC@i%
\newcount\BC@i%
-\newcount\BC@series@x%
-\newcount\BC@series@y%
+\newcount\BC@width%
+\newcount\BC@width@plus@one%
+\NewDocumentCommand\draw@BC@edges@at@grade{m}%
+{%
+ \rootSystemWidthAtGrade{#1}{\BC@width}%
+ \BC@width@plus@one \BC@width\relax%
+ \advance \BC@width@plus@one by 1\relax%
+ \BC@i 1\relax%
+ {%
+ \loop%
+ \draw@BC@edges@at@root{#1}{\the\BC@i}%
+ \global\advance\BC@i by 1\relax%
+ \ifnum\BC@i<\BC@width@plus@one\repeat%
+ }%
+}%
+\newcount\BC@height%
\newcount\BC@ii%
-\newcount\BC@series@yy%
-\newcount\BC@series@yy%
-\newcount\lbl%
+\newif\ifBC@draw%
+\newcount\lie@hasse@lbl%
\newcount\temp@lbl%
-\NewDocumentCommand\draw@BC@edges{s}%
-{%
-\tdrmo \the\dynkin@rank\relax%
-\advance\tdrmo by \the\dynkin@rank\relax%
-\advance\tdrmo by -1\relax%
-\max@BC@i \the\dynkin@rank\relax%
-\advance\max@BC@i by 1\relax%
-\BC@i 1\relax%
-\loop%
- \BC@series@x \the\BC@i\relax%
- \advance\BC@series@x by \the\BC@i\relax%
- \advance\BC@series@x by -2\relax%
- \BC@series@y 1\relax%
- {%%
- \loop%
- \ifnum\BC@i>1%
- % draw an edge upward to the left
- \BC@ii \the\BC@i\relax%
- \advance\BC@ii by -1\relax%
- \BC@series@yy \the\BC@series@y\relax%
- \advance\BC@series@yy by 1\relax%
- \draw@lie@hasse@edge[right]%
- {\the\BC@series@y}{\the\BC@i}%
- {\the\BC@ii}%
- {\the\BC@ii}%
+\NewDocumentCommand\draw@BC@edges@at@root{mm}%
+{%
+ \ifnum#2>1%
+ % draw an edge upward to the left
+ \BC@ii #2\relax%
+ \advance\BC@ii by -1\relax%
+ \draw@lie@hasse@edge[right]%
+ {#1}{#2}%
+ {\the\BC@ii}
+ {\the\BC@ii}%
+ \fi%
+ \BC@drawtrue%
+ \ifodd#1
+ \ifnum#2=\the\BC@width%
+ \global\BC@drawfalse%
\fi%
- \ifnum\BC@series@y>1%
- % draw an edge downward to the left
- \BC@series@yy \the\BC@series@y\relax%
- \advance\BC@series@yy by -1\relax%
- \lbl \the\BC@i\relax%
- \advance\lbl by \the\BC@series@y\relax%
- \advance\lbl by -1\relax%
- \ifnum\dynkin@rank<\the\lbl%
- \temp@lbl \the\lbl\relax%
- \lbl \the\dynkin@rank\relax%
- \advance\lbl by \the\dynkin@rank%
- \advance\lbl by -\the\temp@lbl%
+ \fi%
+ \ifBC@draw%
+ % draw an edge upward to the right
+ \lie@hasse@lbl #2\relax%
+ \advance\lie@hasse@lbl by #1\relax%
+ \ifnum\dynkin@rank<\the\lie@hasse@lbl%
+ \temp@lbl \the\lie@hasse@lbl\relax%
+ \lie@hasse@lbl \the\dynkin@rank\relax%
+ \advance\lie@hasse@lbl by \the\dynkin@rank%
+ \advance\lie@hasse@lbl by -\the\temp@lbl%
%% For the B series:
- \IfBooleanF{#1}{\global\advance\lbl by 1\relax}%
- \draw@lie@hasse@edge[left]%
- {\the\BC@series@yy}{\the\BC@i}%
- {\the\BC@i}%
- {\the\lbl}%
- \else%
- \draw@lie@hasse@edge[left]%
- {\the\BC@series@yy}{\the\BC@i}%
- {\the\BC@i}%
- {\the\lbl}%
+ \iflie@hasse@B%
+ \global\advance\lie@hasse@lbl by 1\relax%
\fi%
+ \draw@lie@hasse@edge[left]%
+ {#1}{#2}%
+ {#2}%
+ {\the\lie@hasse@lbl}%
+ \else%
+ \draw@lie@hasse@edge[left]%
+ {#1}{#2}%
+ {#2}%
+ {\the\lie@hasse@lbl}%
\fi%
- \advance\BC@series@y by 1\relax%
- \advance\BC@series@x by 1\relax%
- \ifnum\BC@series@x<\the\tdrmo\repeat%
- }%%
- \advance\BC@i by 1\relax%
- \ifnum\BC@i<\the\max@BC@i%
-\repeat%
-}%
-\newcount\tdrpt%
-\newcount\BC@r%
-\newcount\BC@series@y%
-\newcount\maxy%
-\NewDocumentCommand\draw@BC@roots{}%
-{%
-\tdrpt \the\dynkin@rank\relax%
-\advance\tdrpt by \the\dynkin@rank\relax%
-\advance\tdrpt by 2\relax%
-\max@BC@r \the\dynkin@rank\relax%
-\advance\max@BC@r by 1\relax%
-\BC@r 1\relax%
-\loop%
- \BC@series@y 1\relax%
- \maxy \tdrpt\relax%
- \advance\maxy -\the\BC@r\relax%
- \advance\maxy -\the\BC@r\relax%
- {%%
- \loop%
- \draw@lie@hasse@root{\the\BC@series@y;\the\BC@r}%
- \advance\BC@series@y by 1\relax%
- \ifnum\BC@series@y<\the\maxy\repeat%
- }%%
- \advance\BC@r by 1\relax%
- \ifnum\BC@r<\the\max@BC@r%
-\repeat%
+ \fi%
}%
\NewDocumentCommand\hasse@BC{s}% star for C:
{%
@@ -809,7 +835,6 @@
{%
\draw@BC@edges%
}%
- \draw@BC@roots%
}%
\NewDocumentCommand\hasse@D{}%
{%
@@ -818,51 +843,45 @@
\iflie@hasse@threeD%
\draw@D@hasse@three@D%
\fi%
- \draw@D@roots%
}%
-\newcount\drmt%
\NewDocumentCommand\draw@D@hasse@three@D{}%
{%
- \drmo \the\dynkin@rank\relax%
- \advance\drmo by -1\relax%
- \drmt \the\dynkin@rank\relax%
- \advance\drmt by -2\relax%
\begin{pgfonlayer}{Dynkin middle}%
\fill[/Lie Hasse diagram/left]
- (\the\drmt;1) --
- (\the\drmo;1) --
+ (\the\dynkin@rank@minus@two;1) --
+ (\the\dynkin@rank@minus@one;1) --
(\the\dynkin@rank;1) --
- (\the\drmo;2) --
+ (\the\dynkin@rank@minus@one;2) --
cycle;%
\fill[/Lie Hasse diagram/top]
- (\the\drmt;1) --
- (1;\the\drmt) --
- (2;\the\drmo) --
- (\the\drmo;2) --
+ (\the\dynkin@rank@minus@two;1) --
+ (1;\the\dynkin@rank@minus@two) --
+ (2;\the\dynkin@rank@minus@one) --
+ (\the\dynkin@rank@minus@one;2) --
cycle;%
\fill[/Lie Hasse diagram/top]
- (\the\drmo;2) --
+ (\the\dynkin@rank@minus@one;2) --
(\the\dynkin@rank;1) --
- (3;\the\drmo) --
- (2;\the\drmo) --
+ (3;\the\dynkin@rank@minus@one) --
+ (2;\the\dynkin@rank@minus@one) --
cycle;%
\fill[/Lie Hasse diagram/top]
- (\the\drmo;1) --
+ (\the\dynkin@rank@minus@one;1) --
(\the\dynkin@rank;1) --
- (3;\the\drmo) --
- (2;\the\drmt) --
+ (3;\the\dynkin@rank@minus@one) --
+ (2;\the\dynkin@rank@minus@two) --
cycle;%
\fill[/Lie Hasse diagram/top]
- (\the\drmt;1) --
- (\the\drmo;1) --
- (2;\the\drmt) --
- (1;\the\drmt) --
+ (\the\dynkin@rank@minus@two;1) --
+ (\the\dynkin@rank@minus@one;1) --
+ (2;\the\dynkin@rank@minus@two) --
+ (1;\the\dynkin@rank@minus@two) --
cycle;%
\fill[/Lie Hasse diagram/left]
- (1;\the\drmt) --
- (2;\the\drmt) --
- (3;\the\drmo) --
- (2;\the\drmo) --
+ (1;\the\dynkin@rank@minus@two) --
+ (2;\the\dynkin@rank@minus@two) --
+ (3;\the\dynkin@rank@minus@one) --
+ (2;\the\dynkin@rank@minus@one) --
cycle;%
\end{pgfonlayer}%
}%
@@ -883,9 +902,7 @@
\newcount\D@g%
\newcount\maxD@grd%
\newcount\D@grd%
-\newcount\maxxD%
-\newcount\iD%
-\newcount\xxD%
+\newcount\lie@hasse@D@x%
\newcount\sum@D%
\NewDocumentCommand\place@D@roots{}%
{%
@@ -918,37 +935,34 @@
\repeat%
}%
}%
-\newcount\drpo%
\NewDocumentCommand\place@D@root@at{mm}%
{%
- \xxD #1\relax%
- \advance\xxD by #2\relax%
- \advance\xxD by #2\relax%
- \advance\xxD by -3\relax%
- \drpo \the\dynkin@rank\relax%
- \advance\drpo by 1\relax%
+ \lie@hasse@D@x #1\relax%
+ \advance\lie@hasse@D@x by #2\relax%
+ \advance\lie@hasse@D@x by #2\relax%
+ \advance\lie@hasse@D@x by -3\relax%
\sum@D #1\relax%
\advance\sum@D by #2\relax%
\ifnum\sum@D=\the\dynkin@rank%
\global\def\D@root@x%
- {\the\xxD-\lie@hasse@three@D@shift}%
+ {\the\lie@hasse@D@x-\lie@hasse@three@D@shift}%
\else%
- \ifnum\sum@D=\the\drpo%
+ \ifnum\sum@D=\the\dynkin@rank@plus@one%
\ifnum#1<\the\dynkin@rank%
\global\def\D@root@x%
- {\the\xxD-2+\lie@hasse@three@D@shift}%
+ {\the\lie@hasse@D@x-2+\lie@hasse@three@D@shift}%
\else%
- \global\def\D@root@x{\the\xxD}%
+ \global\def\D@root@x{\the\lie@hasse@D@x}%
\fi%
\else%
\ifnum\sum@D<\the\dynkin@rank%
- \global\def\D@root@x{\the\xxD}%
+ \global\def\D@root@x{\the\lie@hasse@D@x}%
\else%
% if \sum@D exceeds rank+1
\ifnum#1<\the\dynkin@rank%
- \global\def\D@root@x{\the\xxD-2}%
+ \global\def\D@root@x{\the\lie@hasse@D@x-2}%
\else%
- \global\def\D@root@x{\the\xxD}%
+ \global\def\D@root@x{\the\lie@hasse@D@x}%
\fi%
\fi%
\fi%
@@ -956,7 +970,7 @@
\coordinate
(#1;#2)
at
- ({(\D@root@x)*\dynkin@edge@length/2},{(#1-1)*\dynkin@edge@length/2})
+ ({(\D@root@x)*\lie@hasse@edge@length/2},{(#1-1)*\lie@hasse@edge@length/2})
{};%
}%
\NewDocumentCommand\draw@D@edges{}%
@@ -983,7 +997,8 @@
\D@r 1\relax%
{%
\loop%
- \draw@D@edges@at{#1}{\the\D@r}{\the\max@D@roots}%
+%%% \draw@D@edges@at{#1}{\the\D@r}{\the\max@D@roots}%
+ \draw@D@edges@at{#1}{\the\D@r}%
\advance\D@r by 1\relax%
\ifnum\D@r<\the\max@D@roots@plus@one%
\repeat%
@@ -1000,10 +1015,6 @@
\newcount\hasse@D@label%
\NewDocumentCommand\draw@D@edges@at{mm}%
{%
- \drmo\the\dynkin@rank\relax%
- \advance\drmo by -1\relax%
- \drpo \the\dynkin@rank\relax%
- \advance\drpo by 1\relax%
\hasse@D@gpo#1\relax%
\advance\hasse@D@gpo by 1\relax%
\hasse@D@gpi#1\relax%
@@ -1035,7 +1046,7 @@
\xdef\hasse@D@layer{Dynkin above}%
\else%
% below or middle.
- \ifnum\hasse@D@gpi=\the\drpo%
+ \ifnum\hasse@D@gpi=\the\dynkin@rank@plus@one%
\xdef\hasse@D@layer{Dynkin behind}%
\fi%
\fi%
@@ -1045,7 +1056,7 @@
\fi%
\fi%
\ifnum\dynkin@rank>#1%
- \ifnum\hasse@D@gpi<\the\drpo%
+ \ifnum\hasse@D@gpi<\the\dynkin@rank@plus@one%
\else%
\global\advance\hasse@D@label -1\relax%
\fi%
@@ -1069,7 +1080,7 @@
\fi%
\fi%
\ifnum#1=1%
- \ifnum\drmo=#2%
+ \ifnum\dynkin@rank@minus@one=#2%
\global\hasse@Dfalse\relax%
\else%
\xdef\hasse@D@LR{right}%
@@ -1080,13 +1091,13 @@
\ifnum\hasse@D@label>\the\dynkin@rank%
\hasse@D@label -\hasse@D@label\relax%
\advance\hasse@D@label \the\dynkin@rank\relax%
- \advance\hasse@D@label \the\drmo\relax%
+ \advance\hasse@D@label \the\dynkin@rank@minus@one\relax%
\fi%
- \ifnum\drmo<#1%
+ \ifnum\dynkin@rank@minus@one<#1%
\else%
\ifnum#2=1%
\else%
- \ifnum\hasse@D@gpi<\the\drpo%
+ \ifnum\hasse@D@gpi<\the\dynkin@rank@plus@one%
\else%
\advance\hasse@D@label 1\relax%
\fi%
@@ -1099,11 +1110,11 @@
\global\advance\hasse@D@target by 1\relax%
\fi%
\else%
- \ifnum\drmo=#1%
+ \ifnum\dynkin@rank@minus@one=#1%
\global\advance\hasse@D@target by -1\relax%
\fi%
\fi%
- \ifnum\hasse@D@gpi=\the\drpo%
+ \ifnum\hasse@D@gpi=\the\dynkin@rank@plus@one%
\ifnum#2>1%
\xdef\hasse@D@layer{Dynkin behind}%
\xdef\hasse@D@LR{right}%
@@ -1112,7 +1123,7 @@
\ifnum\hasse@D@gpi=\the\dynkin@rank%
\xdef\hasse@D@layer{Dynkin above}%
\else%
- \ifnum\hasse@D@gpi=\the\drmo%
+ \ifnum\hasse@D@gpi=\the\dynkin@rank@minus@one%
\xdef\hasse@D@layer{Dynkin above}%
\else%
\xdef\hasse@D@layer{Dynkin middle}%
@@ -1129,7 +1140,7 @@
\end{pgfonlayer}%
\fi%
% % Draw any other edges.
- \ifnum\hasse@D@gpi=\the\drmo%
+ \ifnum\hasse@D@gpi=\the\dynkin@rank@minus@one%
\hasse@D@target#2\relax%
\advance\hasse@D@target by 1\relax%
\begin{pgfonlayer}{Dynkin behind}
@@ -1142,38 +1153,7 @@
}%
\newcount\maxD@grd%
\newcount\D@grd%
-\newcount\maxxD%
\newcount\sum@D%
-\NewDocumentCommand\draw@D@roots{}%
-{%
- \drmo \the\dynkin@rank\relax%
- \advance\drmo by -1\relax%
- \maxD@grd \the\dynkin@rank\relax%
- \advance\maxD@grd by \the\dynkin@rank\relax%
- \advance\maxD@grd by -2\relax%
- \D@grd 1\relax%
- \loop%
- % Construct the roots at grade \D@grd.
- \draw@D@roots@at@grade{\D@grd}%
- \advance\D@grd by 1\relax%
- \ifnum\D@grd<\the\maxD@grd%
- \repeat%
-}%
-\NewDocumentCommand\draw@D@roots@at@grade{m}%
-{%
- \hasse@D@width@at@grade{#1}{\max@D@roots}%
- \max@D@roots@plus@one \the\max@D@roots\relax%
- \advance\max@D@roots@plus@one 1\relax%
- \D@r 1\relax%
- {%
- \loop%
- \draw@lie@hasse@root{\the\D@grd;\the\D@r}%
- \advance\D@r by 1\relax%
- \ifnum\D@r<\the\max@D@roots@plus@one%
- \repeat%
- }%
-}%
-%}%
\newcount\lie@hasse@grade@no
\newcount\lie@hasse@root@no
\def\lie@hasse@XX{}
@@ -1205,14 +1185,14 @@
\coordinate
(\the\lie@hasse@grade@no;\the\lie@hasse@root@no)
at
- ({\lie@hasse@XX*\dynkin@edge@length/2},
- {(\the\lie@hasse@grade@no-1)*\dynkin@edge@length/2}) {};%
+ ({\lie@hasse@XX*\lie@hasse@edge@length/2},
+ {(\the\lie@hasse@grade@no-1)*\lie@hasse@edge@length/2}) {};%
\global\advance\lie@hasse@root@no by 1%
}%
\NewDocumentCommand\lie@hasse@place@root@list{m}%
{%
\global\lie@hasse@root@no 1\relax%
- \expandafter\forcsvlist\expandafter{\lie@hasse@place@root}{#1}%
+ \expandafter\forcsvlist\expandafter\lie@hasse@place@root{#1}%
\global\advance\lie@hasse@grade@no by 1%
}%
\NewDocumentCommand\lie@hasse@place@roots{m}%
@@ -1224,26 +1204,6 @@
}%
\expandafter\docsvlist\expandafter{#1}%
}%
-\NewDocumentCommand\lie@hasse@draw@root{m}%
-{%
- \draw@lie@hasse@root{\the\lie@hasse@grade@no;\the\lie@hasse@root@no}%
- \global\advance\lie@hasse@root@no by 1%
-}%
-\NewDocumentCommand\lie@hasse@root@draw@list{m}%
-{%
- \global\lie@hasse@root@no 1\relax%
- \expandafter\forcsvlist\expandafter{\lie@hasse@draw@root}{#1}%
- \global\advance\lie@hasse@grade@no by 1%
-}%
-\NewDocumentCommand\lie@hasse@draw@roots{m}%
-{%
- \global\lie@hasse@grade@no 1\relax%
- \renewcommand*{\do}[1]%
- {%
- \lie@hasse@root@draw@list{##1}%
- }%
- \expandafter\docsvlist\expandafter{#1}%
-}%
\newcount\lie@hasse@grade@no@plus@one%
\newcount\lie@hasse@edge@count%
\def\lie@hasse@edge@go{%
@@ -1256,7 +1216,8 @@
{%
\global\advance\lie@hasse@edge@count by 1\relax%
\begin{pgfonlayer}{Dynkin above}%
- \lie@hasse@finish@edge#1!%
+%%? \lie@hasse@finish@edge#1!%
+ \lie@hasse@finish@edge#1\relax%
\end{pgfonlayer}%
}%
\def\lie@hasse@process@edge@behind#1!%
@@ -1289,13 +1250,12 @@
\NewDocumentCommand\lie@hasse@process@edge@lists{m}%
{%
\global\lie@hasse@grade@no 1\relax%
- \expandafter\forcsvlist\expandafter{\lie@hasse@process@edge@list}{#1}%
+ \expandafter\forcsvlist\expandafter\lie@hasse@process@edge@list{#1}%
}%
\NewDocumentCommand\hasse@X{mm}%
{%
\lie@hasse@place@roots{#1}%
\lie@hasse@process@edge@lists{#2}%
- \lie@hasse@draw@roots{#1}%
}%
\NewDocumentCommand\hasse@E@six@width@at@grade{mm}%
{%
@@ -1323,7 +1283,11 @@
#2 1%
\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi%
}%
-% In the following code, edges are described by grade: in grade g, the expression i+r<j. means an edge from g;i to (g+1);j labelled by root r, with a label on the left; use > instead of < to get the right. Use a star in front to get this edge on the higher layer.
+% In the following code, edges are described by grade:
+% in grade g, the expression i+r<j. means an edge from
+% g;i to (g+1);j labelled by root r, with a label on
+% the left; use > instead of < to get the right. Use a
+% star in front to get this edge on the higher layer.
\NewDocumentCommand\hasse@E@six{}%
{%
\hasse@X%
@@ -1353,13 +1317,45 @@
}%%%
\iflie@hasse@threeD%
\begin{pgfonlayer}{Dynkin middle}%
-\fill[/Lie Hasse diagram/top] (2;1) -- (5;3) -- (2;5) -- (1;5) -- (2;4) -- (1;3) -- (2;2) -- (1;2) -- cycle;%
-\fill[/Lie Hasse diagram/top] (2;3) -- (4;1) -- (6;2) -- (4;5) -- cycle;%
-\fill[/Lie Hasse diagram/right] (1;3) -- (2;3) -- (4;5) -- (3;5) -- cycle;%
-\fill[/Lie Hasse diagram/left] (3;1) -- (4;1) -- (2;3) -- (1;3) -- cycle;%
-\fill[/Lie Hasse diagram/left] (4;3) -- (5;1) -- (6;1) -- (5;2) -- cycle;%
-\fill[/Lie Hasse diagram/right] (4;3) -- (5;2) -- (6;3) -- (5;4) -- cycle;%
-\fill[/Lie Hasse diagram/top] (5;2) -- (7;1) -- (9;1) -- (7;3) -- cycle;%
+ \fill[/Lie Hasse diagram/top]
+ (2;1) --
+ (5;3) --
+ (2;5) --
+ (1;5) --
+ (2;4) --
+ (1;3) --
+ (2;2) --
+ (1;2) -- cycle;%
+ \fill[/Lie Hasse diagram/top]
+ (2;3) --
+ (4;1) --
+ (6;2) --
+ (4;5) -- cycle;%
+ \fill[/Lie Hasse diagram/right]
+ (1;3) --
+ (2;3) --
+ (4;5) --
+ (3;5) -- cycle;%
+ \fill[/Lie Hasse diagram/left]
+ (3;1) --
+ (4;1) --
+ (2;3) --
+ (1;3) -- cycle;%
+ \fill[/Lie Hasse diagram/left]
+ (4;3) --
+ (5;1) --
+ (6;1) --
+ (5;2) -- cycle;%
+ \fill[/Lie Hasse diagram/right]
+ (4;3) --
+ (5;2) --
+ (6;3) --
+ (5;4) -- cycle;%
+ \fill[/Lie Hasse diagram/top]
+ (5;2) --
+ (7;1) --
+ (9;1) --
+ (7;3) -- cycle;%
\end{pgfonlayer}%
\fi%
}%
@@ -1399,7 +1395,6 @@
#2 1%
\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi%
}%
-
\NewDocumentCommand\hasse@E@seven{}%
{%
\hasse@X%
@@ -1457,20 +1452,64 @@
}%%%
\iflie@hasse@threeD%
\begin{pgfonlayer}{Dynkin middle}%
-\fill[/Lie Hasse diagram/top] (2;1) -- (6;3) -- (2;6) -- (1;6) -- (2;5) -- (1;4) -- (2;3) -- (1;3) --
- (2;2) -- (1;2) -- cycle;%
-\fill[/Lie Hasse diagram/top] (5;1) -- (7;3) -- (4;6) -- (2;4) -- cycle;%
-\fill[/Lie Hasse diagram/top] (7;1) -- (9;3) -- (7;5) -- (5;4) -- cycle;%
-\fill[/Lie Hasse diagram/top] (9;1) -- (12;1) -- (13;1) -- (14;1) -- (11;3) -- (7;2) -- cycle;%
-\fill[/Lie Hasse diagram/right] (1;4) -- (2;4) -- (4;6) -- (3;6) -- cycle;%
-\fill[/Lie Hasse diagram/left] (4;1) -- (5;1) -- (2;4) -- (1;4) -- cycle;%
-\fill[/Lie Hasse diagram/left] (4;4) -- (6;1) -- (8;1) -- (7;2) -- (6;2) -- (5;4) -- cycle;%
-\fill[/Lie Hasse diagram/right] (4;4) -- (5;4) -- (6;5) -- (5;6) -- cycle;%
-\fill[/Lie Hasse diagram/right] (6;2) -- (7;2) -- (9;4) -- (8;4) -- cycle;%
+ \fill[/Lie Hasse diagram/top]
+ (2;1) --
+ (6;3) --
+ (2;6) --
+ (1;6) --
+ (2;5) --
+ (1;4) --
+ (2;3) --
+ (1;3) --
+ (2;2) --
+ (1;2) -- cycle;%
+ \fill[/Lie Hasse diagram/top]
+ (5;1) --
+ (7;3) --
+ (4;6) --
+ (2;4) -- cycle;%
+ \fill[/Lie Hasse diagram/top]
+ (7;1) --
+ (9;3) --
+ (7;5) --
+ (5;4) -- cycle;%
+ \fill[/Lie Hasse diagram/top]
+ (9;1) --
+ (12;1) --
+ (13;1) --
+ (14;1) --
+ (11;3) --
+ (7;2) -- cycle;%
+ \fill[/Lie Hasse diagram/right]
+ (1;4) --
+ (2;4) --
+ (4;6) --
+ (3;6) -- cycle;%
+ \fill[/Lie Hasse diagram/left]
+ (4;1) --
+ (5;1) --
+ (2;4) --
+ (1;4) -- cycle;%
+ \fill[/Lie Hasse diagram/left]
+ (4;4) --
+ (6;1) --
+ (8;1) --
+ (7;2) --
+ (6;2) --
+ (5;4) -- cycle;%
+ \fill[/Lie Hasse diagram/right]
+ (4;4) --
+ (5;4) --
+ (6;5) --
+ (5;6) -- cycle;%
+ \fill[/Lie Hasse diagram/right]
+ (6;2) --
+ (7;2) --
+ (9;4) --
+ (8;4) -- cycle;%
\end{pgfonlayer}%
\fi%
}%
-
\NewDocumentCommand\hasse@E@eight@width@at@grade{mm}%
{%
\ifnum#1=1%
@@ -1527,7 +1566,6 @@
#2 1%
\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi%
}%
-
\NewDocumentCommand\hasse@E@eight{}%
{%
\hasse@X{%
@@ -1754,11 +1792,11 @@
{{0,2,4,6},{1,3,5},{2,3:1,4},{2:1,3,4:1},{1:1,3:1,5:1},{2:1,4:1},{1:1,3:1},{2:1},{2:2},{2:3},{2:4}}%
{% grades:
{% 1
-1+2<1,*2+3<2,*3+4<3,*2+1>1,*3+2>2,4+3>3},
+1+2<1,*2+3>2,*3+4>3,*2+1<1,*3+2<2,4+3>3},
{% 2
-*1+3<1,*2+4<3,*2+3<2,*2+1<1,3+2>3},
+*1+3<1,*2+4>3,*2+1<1,*2+3>2,3+2>3},
{% 3
-*1+3<1,1+4<2,*2+4<3,*2+1<1,3+1>2,*3+3>3},
+*1+3<1,1+4>2,*2+4>3,*2+1<1,3+1>2,*3+3>3},
{% 4
*1+2<1,*1+4<2,2+3<2,*3+1>2,*3+4>3},
{% 5
@@ -2026,8 +2064,8 @@
}%
\global\root@sum@resetfalse%
}%
-\xdef\my@root@sum{}%
-\xdef\my@fixed@root@sum{}%
+\xdef\lie@hasse@root@sum{}%
+\xdef\lie@hasse@fixed@root@sum{}%
\NewDocumentCommand\rootSum{oommm}%
{%
\IfValueT{#1}%
@@ -2053,15 +2091,15 @@
\fi%
\IfStrEqCase{\dynkin@series}%
{%
- {A}{\hasse@A@root@sum{#3}{#4}{\my@root@sum}}%
- {B}{\hasse@B@root@sum{#3}{#4}{\my@root@sum}}%
- {C}{\hasse@C@root@sum{#3}{#4}{\my@root@sum}}%
- {D}{\hasse@D@root@sum{#3}{#4}{\my@root@sum}}%
- {E}{\xdef\my@root@sum{\exceptional@root@sum{#3;#4}}}%
- {F}{\xdef\my@root@sum{\exceptional@root@sum{#3;#4}}}%
- {G}{\xdef\my@root@sum{\exceptional@root@sum{#3;#4}}}%
+ {A}{\hasse@A@root@sum{#3}{#4}{\lie@hasse@root@sum}}%
+ {B}{\hasse@B@root@sum{#3}{#4}{\lie@hasse@root@sum}}%
+ {C}{\hasse@C@root@sum{#3}{#4}{\lie@hasse@root@sum}}%
+ {D}{\hasse@D@root@sum{#3}{#4}{\lie@hasse@root@sum}}%
+ {E}{\xdef\lie@hasse@root@sum{\exceptional@root@sum{#3;#4}}}%
+ {F}{\xdef\lie@hasse@root@sum{\exceptional@root@sum{#3;#4}}}%
+ {G}{\xdef\lie@hasse@root@sum{\exceptional@root@sum{#3;#4}}}%
}%
- \StrSubstitute{\my@root@sum}{.}{,}[#5]%
+ \StrSubstitute{\lie@hasse@root@sum}{.}{,}[#5]%
}%
%% \rootSystemHeight[G][2]{\h} sets the counter \h to the height of the poset
%% of the root system G2. \rootSystemHeight{\h} uses the current root system.
@@ -2451,7 +2489,7 @@
4;1=3.1,%
5;1=3.2}%
}%
-\NewDocumentCommand\forAllPositiveRootsInHasseDiagram{m}%
+\NewDocumentCommand\forAllPositiveRoots{m}%
{%
\rootSystemHeight{\lie@hasse@height}%
\foreach \root@grady in {1,...,\the\lie@hasse@height}%
diff --git a/graphics/pgf/contrib/lie-hasse/lie-hasse.tex b/graphics/pgf/contrib/lie-hasse/lie-hasse.tex
index 82643fee14..762639c603 100644
--- a/graphics/pgf/contrib/lie-hasse/lie-hasse.tex
+++ b/graphics/pgf/contrib/lie-hasse/lie-hasse.tex
@@ -1,5 +1,5 @@
\documentclass{amsart}
-\title[The Lie Hasse package]{The Lie Hasse package \\ Version 1.0}
+\title[The Lie Hasse package]{The Lie Hasse package \\ Version 1.01}
%% My name:
\makeatletter
\DeclareRobustCommand{\scotsMc}{\scotsMcx{c}}
@@ -19,8 +19,7 @@
\author{\authorsname}
\address{School of Mathematical Sciences, University College Cork, Cork, Ireland}
\email{b.mckay@ucc.ie}
-\date{3 February 2020}
-\usepackage{etex}
+\date{9 July 2024}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenx}
\usepackage{etoolbox}
@@ -87,7 +86,7 @@
root radius=.02cm,
edge length=.5cm,
edge quotes/.style={opacity=0}%
- ]{E}{8}%
+ ]E8%
\end{tikzpicture}%
\end{center}%
\begin{center}
@@ -106,26 +105,26 @@ This package draws the Hasse diagram of the poset of the positive simple roots o
\begin{document}
The Hasse diagram of \(F_4\) is
\begin{center}
-\hasse[edge length=1cm]{F}{4}
+\hasse F4
\end{center}
\end{document}
\end{Verbatim}
\end{tcolorbox}
\par\noindent{}The Hasse diagram of \(F_4\) is
\begin{center}
-\hasse[edge length=1cm]{F}{4}
+\hasse[edge length=1cm]F4
\end{center}
Each edge is labelled with the simple root by which vertices differ.
\begin{tcblisting}{title={Inside a \TikZ statement}}
-\(B_4\) has Dynkin diagram \tikz \dynkin[edge length=.35cm]{B}{4};, Hasse diagram
+\(B_4\) has Dynkin diagram \tikz \dynkin{B}{4};, Hasse diagram
\begin{center}
-\hasse[edge length=1cm]{B}{4}
+\hasse[edge length=1cm]B4
\end{center}
\end{tcblisting}
\begin{tcblisting}{title={Inside a Dynkin diagram environment, diagrams fit together}}
The Hasse diagram of \(B_4\) is
\begin{dynkinDiagram}[vertical shift=0,edge length=1cm]{B}{4}
-\hasse{B}{4}
+\hasse[edge length=1cm]B4
\end{dynkinDiagram}
\end{tcblisting}
We shut off the default vertical shift of the Dynkin diagram, so that it starts at the origin.
@@ -133,35 +132,26 @@ There is an option to \verb!\hasse! for this:
\begin{tcblisting}{title={Attaching the Dynkin diagram}}
The Hasse diagram of \(B_4\) is
\begin{center}
-\hasse[attach Dynkin diagram=true]{B}{4}
+\hasse[attach Dynkin diagram=true]B4
\end{center}
\end{tcblisting}
Unfortunately, attaching a Dynkin diagram looks terrible for \(D\) or \(E\) series, so a Dynkin diagram appears below.
\begin{tcblisting}{title={Attaching the Dynkin diagram}}
The Hasse diagram of \(D_5\) is
\begin{center}
-\hasse[attach Dynkin diagram=true]{D}{5}
+\hasse[attach Dynkin diagram=true]D5
\end{center}
\end{tcblisting}
\begin{tcblisting}{title={Inside a \TikZ environment}}
\begin{tikzpicture}
-\hasse{A}{4}
+\hasse A4
\draw (4;1) circle (5pt);
\draw[red] (2;3) circle (5pt);
\end{tikzpicture}
\end{tcblisting}
In this example, we see that the roots of the Hasse diagram are \TikZ{} nodes labelled \(g;i\) for grade \(g\) (i.e. \(g\) units up the page) and index \(i\) (i.e. \(i^{\text{th}}\) root of grade \(g\) drawn on the page, starting from the left).
-\section{Inherited options}
-The Lie Hasse package inherits options from the Dynkin diagrams package: the edge lengths are set with
-\begin{Verbatim}
-\tikzset{/Dynkin diagram/edge lengths=1.2cm}
-\end{Verbatim}
-and similarly the ordering of roots with
-\begin{Verbatim}
-\tikzset{/Dynkin diagram/ordering=Bourbaki}
-\end{Verbatim}
-
+\newpage
\section{Prettier}
The package includes a more elaborate \verb!\hasseDiagrams! command, taking a list of semicolon separated Dynkin diagram identfiers.
\begin{tcolorbox}[title={With some global options to make prettier diagrams}]
@@ -198,11 +188,20 @@ The package includes a more elaborate \verb!\hasseDiagrams! command, taking a li
\endgroup
Global options:
\begin{verbatim}
- edge/.style={ultra thick},
- edge quotes/.style={/Dynkin diagram/text style,auto,inner sep=2pt},
+\tikzset{/Lie Hasse,
+ edge/.style={ultra thick},
+ edge quotes/.style={
+ /Dynkin diagram/text style,
+ auto,
+ inner sep=2pt},
\end{verbatim}
allow to change the edges, and to change the way that labels are printed, and how close labels are to the edges.
-
+To give even greater control, the user can define a command \verb!\edgeQuote! of one argument, which is applied to the label placed on every edge of the Hasse diagram.
+The default is
+\begin{verbatim}
+\NewDocumentCommand\edgeQuote{m}{\contour{white}{#1}}
+\end{verbatim}
+which ensures that every label, which is black text by default, has a slight white outline to make it easier to read against a coloured background.
\section{Root order}
@@ -222,6 +221,10 @@ We can use this like:
\hasseDiagrams{[ordering=Carter]E6;[ordering=Dynkin]E6}
\hasseDiagrams{[ordering=Kac]E6}
\endgroup
+The Lie Hasse package inherits the ordering of roots from the Dynkin diagrams package, so we can set it with
+\begin{Verbatim}
+\tikzset{/Dynkin diagram/ordering=Bourbaki}
+\end{Verbatim}
\section{Graph height and width}
The \emph{height} of a Hasse diagram is the number of grades.
@@ -238,7 +241,7 @@ to store the height of \(G_2\) in a counter called \verb!\h!, and
\end{Verbatim}
to store the width of \(G_2\) at grade \(3\) in a counter called \verb!\w!.
-Once you use \verb!\dynkin{G}{2}! or \verb!\hasse{G}{2}! or the other commands, like
+Once you use \verb!\dynkin G2! or \verb!\hasse G2! or the other commands, like
\begin{Verbatim}
\rootSystemHeight[G][2]{\h}
\end{Verbatim}
@@ -260,7 +263,8 @@ The \verb!show height! option:
\hasseDiagrams{G2}
\end{Verbatim}
\tikzset{/Lie Hasse diagram,show name=true,show height=true}
-\hasseDiagrams{G2}
+\hasse G2
+
The \verb!show widths! option:
\begin{Verbatim}
\tikzset{/Lie Hasse diagram/show widths=true}
@@ -293,11 +297,11 @@ Here is the Dynkin diagram of \(E_8\), indicating the order of the roots in Cart
Here is the same Dynkin diagram, except showing, at each simple root, the coefficient of that simple root in the highest root.
\begin{Verbatim}
\rootSum[E][8]{29}{1}{\rs}
-\dynkin[labels=\rs,ordering=Carter,edge length=.35cm]{E}{8}
+\dynkin[expand labels=\rs,ordering=Carter,edge length=.35cm]{E}{8}
\end{Verbatim}
\rootSum[E][8]{29}{1}{\rs}
\begin{center}
-\dynkin[labels=\rs,ordering=Carter,edge length=.35cm]{E}{8}
+\dynkin[expand labels=\rs,ordering=Carter,edge length=.35cm]{E}{8}
\end{center}
The option \verb!for all roots! allows execution of code once on every root.
@@ -312,7 +316,7 @@ The option \verb!for all roots! allows execution of code once on every root.
root radius=.05cm
},
for all roots/.code 2 args={\drawRootAsDynkinSum{#1}{#2}}}
-\hasseDiagrams{D5}
+\hasse D5
\end{Verbatim}
\begingroup
\tikzset{/Lie Hasse diagram,
@@ -341,23 +345,23 @@ A simple example:
\end{Verbatim}
\newcommand{\foo}[2]%
{%
- \node[below,scale=.75] at (#1;#2) {\(#1,#2\)};%
+ \node[below,scale=.5] at (#1;#2) {\(#1,#2\)};%
}%
Inside a \TikZ{} or \verb!dynkinDiagram! environment:
\begin{Verbatim}
\tikzset{/Lie Hasse diagram/edge quotes/.style={opacity=0},
/Dynkin diagram/edge length=1.5cm}
\begin{tikzpicture}
- \hasse{D}{6}%
- \forAllPositiveRootsInHasseDiagram{\foo}%
+ \hasse D6%
+ \forAllPositiveRoots{\foo}%
\end{tikzpicture}
\end{Verbatim}
\begingroup
\tikzset{/Lie Hasse diagram/edge quotes/.style={opacity=0},
/Dynkin diagram/edge length=1.5cm}
\begin{tikzpicture}
- \hasse{D}{6}%
- \forAllPositiveRootsInHasseDiagram{\foo}%
+ \hasse D6%
+ \forAllPositiveRoots{\foo}%
\end{tikzpicture}
If you put this into the \verb!for all roots! option, it executes on its own:
@@ -378,19 +382,19 @@ Opposite sides of any square have the same edge label, by commutativity of addit
Hence we don't need to see every edge perfectly.
The three dimensional effect is the default:
\begin{Verbatim}
-\hasse{D}{4}\hasse{E}{6}
+\hasse D4\hasse E6
\end{Verbatim}
\begin{center}
-\hasse{D}{4}\hasse{E}{6}
+\hasse D4\hasse E6
\end{center}
We can turn it off:
\begin{Verbatim}
-\hasse[three D=false]{D}{4}
-\hasse[three D=false]{E}{6}
+\hasse[three D=false] D4
+\hasse[three D=false] E6
\end{Verbatim}
\begin{center}
-\hasse[three D=false]{D}{4}
-\hasse[three D=false]{E}{6}
+\hasse[three D=false] D4
+\hasse[three D=false] E6
\end{center}
or globally with \verb!\tikzset{/Lie Hasse diagram/three D=false}!.
@@ -430,9 +434,9 @@ You can change these:
\section{Label the simple roots}
Ringel \cite{Ringel:2013} labels his edges like
\begin{Verbatim}
-\hasseDiagrams{[labels={f,e,d,c,u,b,a}]E7}
+\hasse[labels={f,e,d,c,u,b,a}]E7
\end{Verbatim}
-\hasseDiagrams{[labels={f,e,d,c,u,b,a}]E7}
+\hasse[labels={f,e,d,c,u,b,a}]E7
\section{Parabolic subgroups}
This package offers nothing over Ringel's original pictures, except that the user can pick some simple roots whose associated edges are drawn differently.
@@ -440,47 +444,48 @@ The chosen simple roots are called \emph{compact}, following terminology from th
We let the reader explore the notation for parabolic subgroups in the Dynkin diagrams package, and use this to declare various roots compact.
\begin{Verbatim}
\tikzset{/Lie Hasse diagram,attach Dynkin diagram=true,three D=false}
-\hasseDiagrams{D{**x*x*x*}}
+\hasse D{**x*x*x*}
\end{Verbatim}
\begingroup
\tikzset{/Lie Hasse diagram,attach Dynkin diagram=true,three D=false}
-\hasseDiagrams{D{**x*x*x*}}
+\hasse D{**x*x*x*}
\endgroup
+
Our motivation comes from trying to identify the invariant vector subbundles of the tangent bundle of a rational homogeneous variety \cite{MathOverflow:123801}.
Such diagrams are often unreadable if we don't turn off the three dimensional graphics.
By default, noncompact root edges are not drawn.
\begingroup
\tikzset{/Lie Hasse diagram,attach Dynkin diagram=true,show name=false,three D=false}
\begin{Verbatim}
-\hasseDiagrams{E{*xx*x*}}
+\hasse E{*xx*x*}
\end{Verbatim}
-\hasseDiagrams{E{*xx*x*}}
+\hasse E{*xx*x*}
\begin{Verbatim}
-\hasseDiagrams{A{x*x*}}
+\hasse A{x*x*}
\end{Verbatim}
-\hasseDiagrams{A{x*x*}}
+\hasse A{x*x*}
\begin{Verbatim}
-\hasseDiagrams{[parabolic=113]B8}
+\hasse[parabolic=113]B8
\end{Verbatim}
-\hasseDiagrams{[parabolic=113]B8}
+\hasse[parabolic=113]B8
\begin{Verbatim}
-\hasseDiagrams{C{**xx*x**}}
+\hasse C{**xx*x**}
\end{Verbatim}
-\hasseDiagrams{C{**xx*x**}}
+\hasse C{**xx*x**}
\newpage
\begin{Verbatim}
-\hasseDiagrams{E{*x*x*x**}}
+\hasse E{*x*x*x**}
\end{Verbatim}
-\hasseDiagrams{E{*x*x*x**}}
+\hasse E{*x*x*x**}
\newpage
\begin{Verbatim}
-\hasseDiagrams{F{**xx}}
+\hasse F{**xx}
\end{Verbatim}
-\hasseDiagrams{F{**xx}}
+\hasse F{**xx}
\begin{Verbatim}
-\hasseDiagrams{G{*x}}
+\hasse G{*x}
\end{Verbatim}
-\hasseDiagrams{G{*x}}
+\hasse G{*x}
\endgroup
\section{Examples}
diff --git a/graphics/pgf/contrib/pgf-periodictable/README b/graphics/pgf/contrib/pgf-periodictable/README
index b1a6ef2279..6cc9e36939 100644
--- a/graphics/pgf/contrib/pgf-periodictable/README
+++ b/graphics/pgf/contrib/pgf-periodictable/README
@@ -1,4 +1,4 @@
-This is pgf-PeriodicTable, version 2.1.1 (2024/07/07).
+This is pgf-PeriodicTable, version 2.1.2 (2024/08/01).
The purpose of this package is to provide the Periodic Table of Elements in
a simple way. It relies on pgf/TikZ to offer a full or partial periodic table with
@@ -22,6 +22,10 @@ ____________________________________________________________
Major changes:
+*** v2.1.2 (01/08/2024) ***
+Fixed incorrect Spanish translations of some element names.
+Minor code improvements to eliminate runtime warnings («LaTeX Font Warning: Font shape `TU/TeXGyreHeros(0)/l/n' undefined» or «Missing character: There is no m (U+006D) in font nullfont!» ... )
+
*** v2.1.1 (07/07/2024) ***
New keys:
- group numbers (to display group numbers in arabic numerals, Roman numerals or both)
diff --git a/graphics/pgf/contrib/pgf-periodictable/manualfiles/pgf-PeriodicTableManual_name.tex b/graphics/pgf/contrib/pgf-periodictable/manualfiles/pgf-PeriodicTableManual_name.tex
index 78f8178826..0fcc955dd2 100644
--- a/graphics/pgf/contrib/pgf-periodictable/manualfiles/pgf-PeriodicTableManual_name.tex
+++ b/graphics/pgf/contrib/pgf-periodictable/manualfiles/pgf-PeriodicTableManual_name.tex
@@ -11,7 +11,7 @@ Sets the color of the element name.
\\ [5pt]\makebox[\linewidth][c]{\scalebox{.6}{\pgfPT[Z list={1,...,36},name color=red]}}%
\\ [0pt]\pgfPTendoption%
% name font
-\pgfPTMoption{4}{name font}{\string\fontseries\{l\}\string\selectfont\string\tiny}{%
+\pgfPTMoption{4}{name font}{\string\tiny}{% \string\fontseries\{l\}\string\selectfont (removed @v2.1.2)
Sets the font of the element name.
}
\\ [5pt]\pgfPTMmacrobox{pgfPT}[Z list={1,...,36},name font=\string\itshape\string\tiny]%
diff --git a/graphics/pgf/contrib/pgf-periodictable/manualfiles/pgfPTmanual.macros.tex b/graphics/pgf/contrib/pgf-periodictable/manualfiles/pgfPTmanual.macros.tex
index ddaee71477..89be925bb6 100644
--- a/graphics/pgf/contrib/pgf-periodictable/manualfiles/pgfPTmanual.macros.tex
+++ b/graphics/pgf/contrib/pgf-periodictable/manualfiles/pgfPTmanual.macros.tex
@@ -1,5 +1,6 @@
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Definitions for pgf-PeriodicTable Manual
+% Hugo Gomes @ 01/08/2024 v2.1.2
% Hugo Gomes @ 07/07/2024 v2.1.1
% Hugo Gomes @ 03/04/2024 v2.1.0a
% Hugo Gomes @ 14/02/2024 v2.1.0
@@ -7,12 +8,13 @@
% Hugo Gomes @ 20/02/2023 v2.0.0
% Hugo Gomes @ 08/11/2022 v1.0.1
% Hugo Gomes @ 10/10/2022 v1.0.0
-\def\pgfPTversion{2.1.1}%
+\def\pgfPTversion{2.1.2}%
\def\pgfPTnewinversion#1{new in v#1}%
\def\pgfPTchangedinversion#1{changed in v#1}%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\usepackage[ansinew]{inputenc}
-\usepackage{verdana}
+\renewcommand{\rmdefault}{ecverdana}
+\renewcommand{\normalfont}{}
%
\addtolength{\textwidth}{3.5cm}
\addtolength{\textheight}{2.5cm}
@@ -22,31 +24,6 @@
\setcounter{secnumdepth}{1}%
\setcounter{tocdepth}{4}
%
-\makeatletter%
-\global\renewcommand\thesection{}%
-\renewcommand\thesubsection{\@arabic\c@subsection}%
-\renewcommand\section{\@startsection{section}{1}{\z@}%
- {-3.5ex \@plus -1ex \@minus -.2ex}%
- {2.3ex \@plus.2ex}%
- {\hskip-1.4395em\normalfont\Large\bfseries}}%
-\renewcommand*\l@section[2]{%
- \ifnum \c@tocdepth >\z@%
- \addpenalty\@secpenalty%
- \addvspace{1.0em \@plus\p@}%
- \setlength\@tempdima{0em}%
- \begingroup%
- \parindent \z@ \rightskip \@pnumwidth%
- \parfillskip -\@pnumwidth%
- \leavevmode \bfseries%
- \advance\leftskip\@tempdima%
- \hskip -\leftskip%
- #1\nobreak\hfil \nobreak\hb@xt@\@pnumwidth{\hss #2}\par%
- \endgroup%
- \fi}%
-\renewcommand*\l@subsection{\@dottedtocline{2}{1.5em}{1.5em}}%
-\renewcommand*\l@subsubsection{\@dottedtocline{3}{3.0em}{2.4em}}%
-\renewcommand*\l@paragraph{\@dottedtocline{4}{4.25em}{1.35em}}%
-\makeatother%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\pgfdeclarelayer{back}%
\pgfsetlayers{back,main}%
@@ -75,21 +52,22 @@ pdfproducer = {pdfeTeX-1.\the\pdftexversion\pdftexrevision},
}%End options on pdf
\usepackage{fancyhdr}
\usepackage{lastpage}
+\mylastpage{-1}%
\renewcommand{\headrulewidth}{0.4pt}%
\renewcommand{\footrulewidth}{0.4pt}%
\addtolength{\headheight}{25pt}%
\fancypagestyle{pgfPTManual}{%
\fancyhf{} % clear all header and footer fields
-\fancyhead[R]{\usefont{T1}{vna}{m}{n}\nouppercase{\leftmark}}%
-\fancyhead[L]{\color{blue!70!black}pgf-PeriodicTable \pgfPTversion}%
-\fancyfoot[R]{\usefont{T1}{vna}{m}{n}\textbf{\thepage\ of \pageref{LastPage}}}%
+\fancyhead[R]{\usefont{T1}{verdana}{m}{n}\nouppercase{\leftmark}}%
+\fancyhead[L]{\usefont{T1}{verdana}{m}{n}\color{blue!70!black}pgf-PeriodicTable \pgfPTversion}%
+\fancyfoot[R]{\usefont{T1}{verdana}{m}{n}\textbf{\thepage\ of \pageref{LastPage}}}%
\fancyfoot[L]{\ }}%
\fancypagestyle{plain}{%
\addtolength{\textwidth}{3.5cm}%
\fancyhf{} % clear all header and footer fields
-\fancyhead[R]{\usefont{T1}{vna}{m}{n}\nouppercase{\leftmark}}%
-\fancyhead[L]{\color{blue!70!black}pgf-PeriodicTable \pgfPTversion}%
-\fancyfoot[R]{\usefont{T1}{vna}{m}{n}\textbf{\thepage\ of \pageref{LastPage}}}%
+\fancyhead[R]{\usefont{T1}{verdana}{m}{n}\nouppercase{\leftmark}}%
+\fancyhead[L]{\usefont{T1}{verdana}{m}{n}\color{blue!70!black}pgf-PeriodicTable \pgfPTversion}%
+\fancyfoot[R]{\usefont{T1}{verdana}{m}{n}\textbf{\thepage\ of \pageref{LastPage}}}%
\fancyfoot[L]{\ }}%
\usepackage{amsfonts}
\usepackage{amssymb}
diff --git a/graphics/pgf/contrib/pgf-periodictable/pgf-PeriodicTable.sty b/graphics/pgf/contrib/pgf-periodictable/pgf-PeriodicTable.sty
index d3e8d4cbe1..e266bf7daf 100644
--- a/graphics/pgf/contrib/pgf-periodictable/pgf-PeriodicTable.sty
+++ b/graphics/pgf/contrib/pgf-periodictable/pgf-PeriodicTable.sty
@@ -1,4 +1,5 @@
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Hugo Gomes @ 01/08/2024 v2.1.2
% Hugo Gomes @ 07/07/2024 v2.1.1
% Hugo Gomes @ 03/04/2024 v2.1.0a
% Hugo Gomes @ 14/02/2024 v2.1.0
@@ -8,7 +9,7 @@
% Hugo Gomes @ 10/10/2022 v1.0.0
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\NeedsTeXFormat{LaTeX2e}%
-\ProvidesPackage{pgf-PeriodicTable}[07/07/2024 pgf-PeriodicTable v2.1.1]%%
+\ProvidesPackage{pgf-PeriodicTable}[01/08/2024 pgf-PeriodicTable v2.1.2]%%
\RequirePackage{tikz}%
\usetikzlibrary{fadings}%
\tikzfading[name=aumentax, left color=transparent!80, right color=transparent!1]%
@@ -3007,7 +3008,9 @@ rectangle
\fi% \pgfPT@element@count=118
\fi\fi% min=1 & max 118
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-\@pgfPT@resetlayers% Restoring pgf layers to those used in the document
+% corrected in v2.1.2: \@pgfPT@resetlayers -> \pgfsetlayers{\@pgfPT@resetlayers}
+% ... Warning: Missing character: There is no m (U+006D) in font nullfont! ...
+\pgfsetlayers{\@pgfPT@resetlayers}% Restoring pgf layers to those used in the document
\fontseries{\seriesdefault}\fontshape{\shapedefault}\fontfamily{\familydefault}\selectfont% Restoring the font settings to normal mode in the document
}% end tikz
}%
diff --git a/graphics/pgf/contrib/pgf-periodictable/pgf-PeriodicTableManual.pdf b/graphics/pgf/contrib/pgf-periodictable/pgf-PeriodicTableManual.pdf
index c588490c48..828189bcc2 100644
--- a/graphics/pgf/contrib/pgf-periodictable/pgf-PeriodicTableManual.pdf
+++ b/graphics/pgf/contrib/pgf-periodictable/pgf-PeriodicTableManual.pdf
Binary files differ
diff --git a/graphics/pgf/contrib/pgf-periodictable/pgfPT.drawing.keys.tex b/graphics/pgf/contrib/pgf-periodictable/pgfPT.drawing.keys.tex
index 8406d1a9a7..140577bcce 100644
--- a/graphics/pgf/contrib/pgf-periodictable/pgfPT.drawing.keys.tex
+++ b/graphics/pgf/contrib/pgf-periodictable/pgfPT.drawing.keys.tex
@@ -376,7 +376,7 @@ name color/.store in=\pgfPTnamecolor,%
name color/.default=black,%
name font/.get=\pgfPTnamefont,%
name font/.store in=\pgfPTnamefont,%
-name font/.default=\fontseries{l}\selectfont\tiny,%
+name font/.default=\tiny,% \fontseries{l}\selectfont (removed @ v2.1.2)
name align/.get=\pgfPTnamealign,% new v1.0.0
name align/.store in=\pgfPTnamealign,% left|center|right
name align/.default=center%
diff --git a/graphics/pgf/contrib/pgf-periodictable/pgfPT.names.tex b/graphics/pgf/contrib/pgf-periodictable/pgfPT.names.tex
index 2c321dcd34..d4135f61b9 100644
--- a/graphics/pgf/contrib/pgf-periodictable/pgfPT.names.tex
+++ b/graphics/pgf/contrib/pgf-periodictable/pgfPT.names.tex
@@ -27,7 +27,7 @@
\def\pgfPT@nomes@iii{l\'{i}tio/pt,lithium/en,lithium/fr,Lithium/de,litio/it,litio/es,l\'{i}tio/br,\pgfPT@user@CSname@Li/user}%
\def\pgfPT@nomes@iv{ber\'{i}lio/pt,beryllium/en,b\'{e}ryllium/fr,Beryllium/de,berillio/it,berilio/es,ber\'{i}lio/br,\pgfPT@user@CSname@Be/user}%
\def\pgfPT@nomes@v{boro/pt,boron/en,bore/fr,Bor/de,boro/it,boro/es,boro/br,\pgfPT@user@CSname@B/user}%
-\def\pgfPT@nomes@vi{carbono/pt,carbon/en,carbone/fr,Kohlenstoff/de,carbonio/it,carb\'{o}n/es,carbono/br,\pgfPT@user@CSname@C/user}%
+\def\pgfPT@nomes@vi{carbono/pt,carbon/en,carbone/fr,Kohlenstoff/de,carbonio/it,carbono/es,carbono/br,\pgfPT@user@CSname@C/user}%
\def\pgfPT@nomes@vii{azoto/pt,nitrogen/en,azote/fr,Stickstoff/de,azoto/it,nitr\'{o}geno/es,nitrog\^{e}nio/br,\pgfPT@user@CSname@N/user}%
\def\pgfPT@nomes@viii{oxig\'{e}nio/pt,oxygen/en,oxyg\`{e}ne/fr,Sauerstoff/de,ossigeno/it,ox\'{i}geno/es,oxig\^{e}nio/br,\pgfPT@user@CSname@O/user}%
\def\pgfPT@nomes@ix{fl\'{u}or/pt,fluorine/en,fluor/fr,Fluor/de,fluoro/it,fl\'{u}or/es,fl\'{u}or/br,\pgfPT@user@CSname@F/user}%
@@ -47,7 +47,7 @@
\def\pgfPT@nomes@xxiii{van\'{a}dio/pt,vanadium/en,vanadium/fr,Vanadium/de,vanadio/it,vanadio/es,van\'{a}dio/br,\pgfPT@user@CSname@V/user}%
\def\pgfPT@nomes@xxiv{cr\'{o}mio/pt,chromium/en,chrome/fr,Chrom/de,cromo/it,cromo/es,cr\^{o}mio/br,\pgfPT@user@CSname@Cr/user}%
\def\pgfPT@nomes@xxv{mangan\'{e}sio/pt,manganese/en,mangan\`{e}se/fr,Mangan/de,manganese/it,manganeso/es,mangan\^{e}s/br,\pgfPT@user@CSname@Mn/user}%
-\def\pgfPT@nomes@xxvi{ferro/pt,iron/en,fer/fr,Eisen/de,ferro/it,planchar/es,ferro/br,\pgfPT@user@CSname@Fe/user}%
+\def\pgfPT@nomes@xxvi{ferro/pt,iron/en,fer/fr,Eisen/de,ferro/it,hierro/es,ferro/br,\pgfPT@user@CSname@Fe/user}%
\def\pgfPT@nomes@xxvii{cobalto/pt,cobalt/en,cobalt/fr,Kobalt/de,cobalto/it,cobalto/es,cobalto/br,\pgfPT@user@CSname@Co/user}%
\def\pgfPT@nomes@xxviii{n\'{i}quel/pt,nickel/en,nickel/fr,Nickel/de,nichel/it,n\'{i}quel/es,n\'{i}quel/br,\pgfPT@user@CSname@Ni/user}%
\def\pgfPT@nomes@xxix{cobre/pt,copper/en,cuivre/fr,Kupfer/de,rame/it,cobre/es,cobre/br,\pgfPT@user@CSname@Cu/user}%
@@ -82,7 +82,7 @@
\def\pgfPT@nomes@lviii{c\'{e}rio/pt,cerium/en,c\'{e}rium/fr,Cer/de,cerio/it,cerio/es,c\'{e}rio/br,\pgfPT@user@CSname@Ce/user}%
\def\pgfPT@nomes@lix{praseod\'{i}mio/pt,praseodymium/en,pras\'{e}odyme/fr,Praseodym/de,praseodimio/it,praseodimio/es,praseod\'{i}mio/br,\pgfPT@user@CSname@Pr/user}%
\def\pgfPT@nomes@lx{neod\'{i}mio/pt,neodymium/en,n\'{e}odyme/fr,Neodym/de,neodimio/it,neodimio/es,neod\'{i}mio/br,\pgfPT@user@CSname@Nd/user}%
-\def\pgfPT@nomes@lxi{prom\'{e}cio/pt,promethium/en,prom\'{e}thium/fr,Promethium/de,prometeo/it,prometeo/es,prom\'{e}cio/br,\pgfPT@user@CSname@Pm/user}%
+\def\pgfPT@nomes@lxi{prom\'{e}cio/pt,promethium/en,prom\'{e}thium/fr,Promethium/de,prometeo/it,prometio/es,prom\'{e}cio/br,\pgfPT@user@CSname@Pm/user}%
\def\pgfPT@nomes@lxii{sam\'{a}rio/pt,samarium/en,samarium/fr,Samarium/de,samario/it,samario/es,sam\'{a}rio/br,\pgfPT@user@CSname@Sm/user}%
\def\pgfPT@nomes@lxiii{eur\'{o}pio/pt,europium/en,europium/fr,Europium/de,europium/it,europio/es,eur\'{o}pio/br,\pgfPT@user@CSname@Eu/user}%
\def\pgfPT@nomes@lxiv{gadol\'{i}nio/pt,gadolinium/en,gadolinium/fr,Gadolinium/de,gadolinio/it,gadolinio/es,gadol\'{i}nio/br,\pgfPT@user@CSname@Gd/user}%
@@ -124,20 +124,20 @@
\def\pgfPT@nomes@c{f\'{e}rmio/pt,fermium/en,fermium/fr,Rermium/de,fermium/it,fermio/es,f\'{e}rmio/br,\pgfPT@user@CSname@Fm/user}%
\def\pgfPT@nomes@ci{mendel\'{e}vio/pt,mendelevium/en,mendelevium/fr,Mendelevium/de,mendelevio/it,mendelevio/es,mendel\'{e}vio/br,\pgfPT@user@CSname@Md/user}%
\def\pgfPT@nomes@cii{nob\'{e}lio/pt,nobelium/en,nobelium/fr,Nobelium/de,nobelium/it,nobelio/es,nob\'{e}lio/br,\pgfPT@user@CSname@No/user}%
-\def\pgfPT@nomes@ciii{laur\^{e}ncio/pt,lawrencium/en,lawrencium/fr,Lawrencium/de,laurenzio/it,lawrencium/es,laur\^{e}ncio/br,\pgfPT@user@CSname@Lr/user}%
+\def\pgfPT@nomes@ciii{laur\^{e}ncio/pt,lawrencium/en,lawrencium/fr,Lawrencium/de,laurenzio/it,lawrencio/es,laur\^{e}ncio/br,\pgfPT@user@CSname@Lr/user}%
\def\pgfPT@nomes@civ{rutherf\'{o}rdio/pt,rutherfordium/en,rutherfordium/fr,Rutherfordium/de,rutherfordium/it,rutherfordio/es,rutherf\'{o}rdio/br,\pgfPT@user@CSname@Rf/user}%
-\def\pgfPT@nomes@cv{d\'{u}bnio/pt,dubnium/en,dubnium/fr,Dubnium/de,dubnio/it,dubnium/es,d\'{u}bnio/br,\pgfPT@user@CSname@Db/user}%
+\def\pgfPT@nomes@cv{d\'{u}bnio/pt,dubnium/en,dubnium/fr,Dubnium/de,dubnio/it,dubnio/es,d\'{u}bnio/br,\pgfPT@user@CSname@Db/user}%
\def\pgfPT@nomes@cvi{seab\'{o}rgio/pt,seaborgium/en,seaborgium/fr,Seaborgium/de,seaborgio/it,seaborgio/es,seab\'{o}rgio/br,\pgfPT@user@CSname@Sg/user}%
-\def\pgfPT@nomes@cvii{b\'{o}rio/pt,bohrium/en,bohrium/fr,Bohrium/de,bohrio/it,bohrium/es,b\'{o}hrio/br,\pgfPT@user@CSname@Bh/user}%
-\def\pgfPT@nomes@cviii{h\'{a}ssio/pt,hassium/en,hassium/fr,Hassium/de,hassio/it,hassium/es,h\'{a}ssio/br,\pgfPT@user@CSname@Hs/user}%
+\def\pgfPT@nomes@cvii{b\'{o}rio/pt,bohrium/en,bohrium/fr,Bohrium/de,bohrio/it,bohrio/es,b\'{o}hrio/br,\pgfPT@user@CSname@Bh/user}%
+\def\pgfPT@nomes@cviii{h\'{a}ssio/pt,hassium/en,hassium/fr,Hassium/de,hassio/it,hasio/es,h\'{a}ssio/br,\pgfPT@user@CSname@Hs/user}%
\def\pgfPT@nomes@cix{meitn\'{e}rio/pt,meitnerium/en,meitnerium/fr,Meitnerium/de,meitnerio/it,meitnerio/es,meitn\'{e}rio/br,\pgfPT@user@CSname@Mt/user}%
-\def\pgfPT@nomes@cx{darmst\'{a}dio/pt,darmstadtium/en,darmstadtium/fr,Darmstadtium/de,darmstadtium/it,darmstadtium/es,darmst\'{a}dtio/br,\pgfPT@user@CSname@Ds/user}%
+\def\pgfPT@nomes@cx{darmst\'{a}dio/pt,darmstadtium/en,darmstadtium/fr,Darmstadtium/de,darmstadtium/it,darmstatio/es,darmst\'{a}dtio/br,\pgfPT@user@CSname@Ds/user}%
\def\pgfPT@nomes@cxi{roentg\'{e}nio/pt,roentgenium/en,roentgenium/fr,R\"{o}ntgenium/de,roentgenio/it,roentgenio/es,roentg\^{e}nio/br,\pgfPT@user@CSname@Rg/user}%
\def\pgfPT@nomes@cxii{copern\'{i}cio/pt,copernicium/en,copernicium/fr,Copernicium/de,copernicium/it,copernicio/es,copern\'{i}cio/br,\pgfPT@user@CSname@Cn/user}%
\def\pgfPT@nomes@cxiii{nip\'{o}nio/pt,nihonium/en,nihonium/fr,Nihonium/de,nihonium/it,nihonio/es,nip\^{o}nio/br,\pgfPT@user@CSname@Nh/user}%
\def\pgfPT@nomes@cxiv{fler\'{o}vio/pt,flerovium/en,flerovium/fr,Flerovium/de,flerovio/it,flerovio/es,fler\'{o}vio/br,\pgfPT@user@CSname@Fl/user}%
\def\pgfPT@nomes@cxv{mosc\'{o}vio/pt,moscovium/en,moscovium/fr,Moscovium/de,moscovium/it,moscovio/es,mosc\'{o}vio/br,\pgfPT@user@CSname@Mc/user}%
-\def\pgfPT@nomes@cxvi{liverm\'{o}rio/pt,livermorium/en,livermorium/fr,Livermorium/de,livermorio/it,livermorium/es,liverm\'{o}rio/br,\pgfPT@user@CSname@Lv/user}%
+\def\pgfPT@nomes@cxvi{liverm\'{o}rio/pt,livermorium/en,livermorium/fr,Livermorium/de,livermorio/it,livermorio/es,liverm\'{o}rio/br,\pgfPT@user@CSname@Lv/user}%
\def\pgfPT@nomes@cxvii{tenesso/pt,tennessine/en,tennessine/fr,Tenness/de,tennessine/it,teneso/es,tenesso/br,\pgfPT@user@CSname@Ts/user}%
\def\pgfPT@nomes@cxviii{ogan\'{e}sson/pt,oganesson/en,oganesson/fr,Oganesson/de,oganesson/it,oganes\'{o}n/es,oganess\^{o}nio/br,\pgfPT@user@CSname@Og/user}%
\endinput%
diff --git a/graphics/pgf/contrib/pgfplotsthemebeamer/DEPENDS.txt b/graphics/pgf/contrib/pgfplotsthemebeamer/DEPENDS.txt
new file mode 100644
index 0000000000..1c4fa2d593
--- /dev/null
+++ b/graphics/pgf/contrib/pgfplotsthemebeamer/DEPENDS.txt
@@ -0,0 +1,3 @@
+hard beamer
+hard tools
+hard pgfplots \ No newline at end of file
diff --git a/graphics/pgf/contrib/pgfplotsthemebeamer/README.md b/graphics/pgf/contrib/pgfplotsthemebeamer/README.md
new file mode 100644
index 0000000000..47c815caaf
--- /dev/null
+++ b/graphics/pgf/contrib/pgfplotsthemebeamer/README.md
@@ -0,0 +1,39 @@
+# pgfplotsthemebeamer
+
+[![License](https://img.shields.io/github/license/samcarter/pgfplotsthemebeamer.svg?color=blue)](http://www.latex-project.org/lppl.txt)
+[![GitHub tag](https://img.shields.io/github/tag/samcarter/pgfplotsthemebeamer.svg?label=current%20version&color=blue)](https://github.com/samcarter/pgfplotsthemebeamer/releases/latest)
+[![CTAN](https://img.shields.io/ctan/v/pgfplotsthemebeamer.svg?color=blue)](https://ctan.org/pkg/pgfplotsthemebeamer)
+
+A package for using colours from the current beamer theme in pgfplots diagrams.
+
+This project is licensed under the LaTeX Project Public License v1.3c or later, see http://www.latex-project.org/lppl.txt .
+
+The project repository, including a bug tracker, can be found at https://github.com/samcarter/pgfplotsthemebeamer/issues .
+
+### Usage
+
+```latex
+\documentclass{beamer}
+
+\usetheme{moloch}% just as an example for a colour theme
+\usepackage{pgfplotsthemebeamer}
+
+\begin{document}
+
+\begin{frame}[plain]
+\centering
+\begin{tikzpicture}
+ \begin{axis}[
+ beamercolors
+ ]
+ \addplot {x}; \addplot {x-1}; \addplot {x-2};
+ \addplot {x-3}; \addplot {x-4}; \addplot {x-5};
+ \addplot {x-6}; \addplot {x-7}; \addplot {x-8};
+ \end{axis}
+\end{tikzpicture}
+\end{frame}
+
+\end{document}
+```
+
+For more details, please consult the [package documentation](https://github.com/samcarter/pgfplotsthemebeamer/blob/main/DOCUMENTATION.pdf).
diff --git a/graphics/pgf/contrib/pgfplotsthemebeamer/pgfplotsthemebeamer-doc-settings.sty b/graphics/pgf/contrib/pgfplotsthemebeamer/pgfplotsthemebeamer-doc-settings.sty
new file mode 100644
index 0000000000..cd57229fcf
--- /dev/null
+++ b/graphics/pgf/contrib/pgfplotsthemebeamer/pgfplotsthemebeamer-doc-settings.sty
@@ -0,0 +1,200 @@
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% Personal helper theme for package documentations
+% Copyright samcarter
+%
+% This file may be distributed and/or modified
+% under the LaTeX Project Public License 1.3c or later
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+% Usage:
+% ln ~/Life/latex/beamertheme-sam/themesam.sty package-doc-settings.sty
+% \usepackage[
+% themecolor=samdblue
+% ]{\jobname-settings}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% Colours
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\RequirePackage{xcolor}
+\definecolor{samyellow}{RGB}{246,193,65}
+\definecolor{samorange}{RGB}{241,147,45}% pgfplotsthemebeamer
+\definecolor{samred}{RGB}{191,26,46}% TikZbricks
+\definecolor{sammagenta}{RGB}{170,42,104}% TikZmarmots
+\definecolor{samviolet}{RGB}{136,46,114}% TikZlings
+\definecolor{samlila}{RGB}{101,67,159}% Rainbow beamer theme
+\definecolor{samdblue}{RGB}{0,51,134}% beamer theme
+\definecolor{samlblue}{RGB}{22,89,155}% TikZducks
+\definecolor{samteal}{RGB}{25,143,157}% Tcolorbox beamer theme
+\definecolor{samlgreen}{RGB}{68,170,153}% Jigsaw
+\definecolor{samdgreen}{RGB}{78,178,125}
+\definecolor{samlgray}{RGB}{160,160,185}
+\definecolor{samdgray}{RGB}{60,60,85}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% Package options
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\RequirePackage{xkeyval}
+\DeclareOptionX{themecolor}[samdblue]{\colorlet{themecolor}{#1}}
+\DeclareOptionX{listingcolor}[samlblue]{\colorlet{listingcolor}{#1}}
+\ExecuteOptionsX{themecolor,listingcolor}
+\ProcessOptionsX
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% Packages
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\@ifclassloaded{beamer}{}{%
+ \RequirePackage[english]{babel}
+ \RequirePackage[paper=a4paper,margin=2.9cm]{geometry}
+ \RequirePackage{scrlayer-scrpage}
+ \let\hrulefillx\hrulefill
+ \RequirePackage[bitstream-charter]{mathdesign}
+ \let\hrulefill\hrulefillx
+ \RequirePackage[hang,flushmargin,bottom]{footmisc}
+ \RequirePackage{footnotehyper}
+ \makesavenoteenv{tcolorbox}
+ \RequirePackage[all]{nowidow}
+ \RequirePackage[colorlinks=true,breaklinks=true,allcolors=themecolor,hyperfootnotes=false]{hyperref}
+}
+\RequirePackage[T1]{fontenc}
+\RequirePackage{xspace}
+\RequirePackage{inconsolata}% mono font with bold, but italic is missing
+% \RequirePackage[scale=0.85]{cascadia-code}
+% \AddToHook{cmd/ttfamily/before}{\fontseries{sl}}
+\RequirePackage{iexec}
+\usepackage{synthslant}% to fake slented comments in inconsolata
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% Listings
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\RequirePackage[
+ cachedir=$TMPDIR/minted/
+]{minted}
+
+% smuggling custom pygmentize style in cache folder
+% (a real pygmentise style would need installtion in some python folder)
+\begin{filecontents*}[noheader,overwrite]{./sam.pygstyle}
+\makeatletter
+\def\PYG@reset{\let\PYG@it=\relax \let\PYG@bf=\relax%
+ \let\PYG@ul=\relax \let\PYG@tc=\relax%
+ \let\PYG@bc=\relax \let\PYG@ff=\relax}
+\def\PYG@tok#1{\csname PYG@tok@#1\endcsname}
+\def\PYG@toks#1+{\ifx\relax#1\empty\else%
+ \PYG@tok{#1}\expandafter\PYG@toks\fi}
+\def\PYG@do#1{\PYG@bc{\PYG@tc{\PYG@ul{%
+ \PYG@it{\PYG@bf{\PYG@ff{#1}}}}}}}
+\def\PYG#1#2{\PYG@reset\PYG@toks#1+\relax+\PYG@do{#2}}
+
+% optional arguments
+\expandafter\def\csname PYG@tok@na\endcsname{\def\PYG@tc##1{\textcolor{black}{##1}}}
+
+% macros
+\expandafter\def\csname PYG@tok@k\endcsname{\def\PYG@tc##1{\textcolor{listingcolor}{\bfseries ##1}}}
+% curly brakets
+\expandafter\def\csname PYG@tok@nb\endcsname{\def\PYG@tc##1{\textcolor{listingcolor}{\bfseries ##1}}}
+
+% comments (italics won't work with the inconsolata font)
+\expandafter\def\csname PYG@tok@c\endcsname{\def\PYG@tc##1{\textcolor{gray}{\textsynthslant{##1}}}}
+
+\def\PYGZbs{\char`\\}
+\def\PYGZus{\char`\_}
+\def\PYGZob{\char`\{}
+\def\PYGZcb{\char`\}}
+\def\PYGZca{\char`\^}
+\def\PYGZam{\char`\&}
+\def\PYGZlt{\char`\<}
+\def\PYGZgt{\char`\>}
+\def\PYGZsh{\char`\#}
+\def\PYGZpc{\char`\%}
+\def\PYGZdl{\char`\$}
+\def\PYGZhy{\char`\-}
+\def\PYGZsq{\char`\'}
+\def\PYGZdq{\char`\"}
+\def\PYGZti{\char`\~}
+% for compatibility with earlier versions
+\def\PYGZat{@}
+\def\PYGZlb{[}
+\def\PYGZrb{]}
+\makeatother
+\end{filecontents*}
+
+\iexec{mkdir -p $TMPDIR/minted && mv sam.pygstyle $TMPDIR/minted/.}
+
+\usemintedstyle{sam}
+\setminted{
+ breaksymbolleft={},
+ tabsize=2,
+ breaklines=true,
+}
+\newminted[samcode]{latex}{}
+\newmintinline[saminline]{latex}{}
+
+% use non-bold and all coloured for inline code in articles
+\ifdefined\insertaspectratio\else
+ \patchcmd{\minted@inputpyg@inline}{\minted@input}{\color{listingcolor}\renewcommand\textcolor[3][]{##3}\renewcommand\bfseries{}\minted@input}{}{}
+\fi
+
+\RequirePackage[most]{tcolorbox}
+\tcbuselibrary{minted}
+\tcbset{%
+ colframe=themecolor,
+ fonttitle=\bfseries,
+ sidebyside,
+ center lower,
+ righthand width=5.7cm,
+ bottom=2pt,
+ top=2pt,
+ left=3pt,
+ right=3pt,
+ sidebyside gap=10pt,
+ lower separated=false,
+ listing engine=minted,
+ minted language=latex,
+ colback=themecolor!10,
+ sharp corners,
+ boxrule=0pt,
+ before title={\strut}
+}
+
+% avoid page breaks right in front of the tcolorbox
+\@ifclassloaded{beamer}{}{
+ \tcbuselibrary{hooks}
+ \tcbset{before pre={\nopagebreak[4]}}
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% document settings
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\@ifclassloaded{scrartcl}{%
+ \KOMAoptions{parskip=half}
+ \addtokomafont{sectioning}{\color{themecolor}}
+ \addtokomafont{date}{\normalsize}
+ \addtokomafont{author}{\normalsize}
+ \setlength{\footnotemargin}{0.7em}
+}{}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% Custom macros
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\providecommand*{\CTAN}{\textsc{CTAN}\xspace}
+\providecommand*{\TikZ}{Ti\emph{k}Z\xspace}
+\providecommand*{\miktex}{MiK\TeX\xspace}
+\providecommand*{\texlive}{\TeX{}Live\xspace}
+\providecommand*{\tikzbrick}{Ti\emph{k}Zbrick\xspace}
+\providecommand*{\tikzducks}{Ti\emph{k}Zducks\xspace}
+\providecommand*{\tikzlings}{Ti\emph{k}Zlings\xspace}
+\providecommand*{\tikzmarmots}{Ti\emph{k}Zmarmots\xspace}
+\providecommand*{\ConTeXt}{C\kern-.0333emon\-\kern-.0667em\TeX\kern-.0333emt} \ No newline at end of file
diff --git a/graphics/pgf/contrib/pgfplotsthemebeamer/pgfplotsthemebeamer-doc.pdf b/graphics/pgf/contrib/pgfplotsthemebeamer/pgfplotsthemebeamer-doc.pdf
new file mode 100644
index 0000000000..a312a05245
--- /dev/null
+++ b/graphics/pgf/contrib/pgfplotsthemebeamer/pgfplotsthemebeamer-doc.pdf
Binary files differ
diff --git a/graphics/pgf/contrib/pgfplotsthemebeamer/pgfplotsthemebeamer-doc.tex b/graphics/pgf/contrib/pgfplotsthemebeamer/pgfplotsthemebeamer-doc.tex
new file mode 100644
index 0000000000..3beb6c99b6
--- /dev/null
+++ b/graphics/pgf/contrib/pgfplotsthemebeamer/pgfplotsthemebeamer-doc.tex
@@ -0,0 +1,119 @@
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% Documentation for the pgfplotsthemebeamer package
+% Using colours from the current beamer theme in pgfplots
+% Maintained by samcarter
+%
+% Project repository and bug tracker:
+% https://github.com/samcarter/pgfplotstheme-beamer
+%
+% Released under the LaTeX Project Public License v1.3c or later
+% See http://www.latex-project.org/lppl.txt
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% !TeX program = txs:///arara
+% arara: latexmk: {
+% arara: --> engine: pdflatex,
+% arara: --> options: [
+% arara: --> '-shell-escape',
+% arara: --> '-synctex=1',
+% arara: --> '-interaction=nonstopmode',
+% arara: --> ]
+% arara: --> }
+\documentclass{scrartcl}
+
+% meta %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\title{The pgfplotsthemebeamer package}
+\subtitle{Using colours from the current beamer theme in pgfplots}
+\author{%
+ \texorpdfstring{
+ \texttt{samcarter}\\
+ \url{https://github.com/samcarter/pgfplotsthemebeamer}\\
+ \url{https://ctan.org/pkg/pgfplotsthemebeamer}
+ }{samcarter}}
+\date{Version v0.2 \textendash{} 2024/08/02}
+
+\usepackage[
+ themecolor=samorange
+]{\jobname-settings}
+
+% customisation %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\newcommand{\prefix}{./include}
+\tcbset{
+ compilable listing/.style={listing file={\prefix/\jobname-listing-\thetcblistingcount.tex}},
+ run pdflatex/.style={run@system@command={cd\space \prefix;\space pdflatex}{\jobname-listing-\thetcblistingcount.tex}},%
+}
+
+\begin{document}
+\maketitle
+
+\section{Introduction}
+\label{intro}
+
+Beamer themes often use carefully composed colour schemes. The \saminline|pgfplotsthemebeamer| package allows to reuse these colours in diagrams created with \saminline|pfgplots|. This ensures a consistent colour scheme throughout the presentation and avoids unsightly colour clashes.
+
+The package is included in \TeX{}Live
+%and MiK\TeX\
+and available from \textsc{CTAN} (\url{https://www.ctan.org/pkg/pgfplotsthemebeamer}).
+The development version of this package is located at \url{https://github.com/samcarter/pgfplotsthemebeamer}. If you have any problems, ideas or other feedback, please make constructive use of the issue tracker.
+
+Copyright \raisebox{0.2em}{\tiny\fontfamily{cmr}\selectfont\textcopyright} \texttt{samcarter}. Permission is granted to copy, distribute and\slash or modify this software under the terms of the LaTeX project public licence, version 1.3c or later \url{http://www.latex-project.org/lppl.txt}.
+
+\section{Usage}
+
+The basic usage is fairly simple. After loading the \saminline|pgfplotsthemebeamer| package, plots can use the \saminline|beamercolor| option to use the colours from the current beamer theme in the diagram:
+\begin{tcolorbox}[title={Usage}]
+\begin{samcode}
+\usepackage{pgfplotsthemebeamer}
+
+\begin{axis}[
+ beamercolors
+]
+...
+\end{axis}
+\end{samcode}
+\end{tcolorbox}
+The graphs will be coloured in the beamer colours \saminline|structure|, \saminline|alerted text| and \saminline|example text|. In most beamer themes, these three colours form an easily distinguishable set of colours.
+
+Users who would like to use the \saminline|beamercolors| scheme for all \saminline|pgfplots| diagrams in the presentation, can load the package with the \saminline|all| option, which will make this colour scheme the default.
+\begin{tcolorbox}[title={Usage}]
+\begin{samcode}
+\usepackage[all]{pgfplotsthemebeamer}
+\end{samcode}
+\end{tcolorbox}
+
+\section{Full example}
+\begin{tcblisting}{
+ listing only,
+ freeze pdf,
+ compilable listing,
+ run pdflatex,
+ title={Basic example},
+ righthand width=0pt
+}
+\documentclass{beamer}
+
+\usetheme{moloch}% just as an example for a colour theme
+\usepackage{pgfplotsthemebeamer}
+
+\begin{document}
+
+\begin{frame}[plain]
+\centering
+\begin{tikzpicture}
+ \begin{axis}[
+ beamercolors
+ ]
+ \addplot {x}; \addplot {x-1}; \addplot {x-2}; \addplot {x-3}; \addplot {x-4}; \addplot {x-5}; \addplot {x-6}; \addplot {x-7}; \addplot {x-8};
+ \end{axis}
+\end{tikzpicture}
+\end{frame}
+
+\end{document}
+\end{tcblisting}
+\vfill
+\centering
+\setlength{\fboxsep}{0pt}%
+\fbox{\includegraphics[width=.75\textwidth]{pgfplotsthemebeamer-doc-listing-1.pdf}}%
+
+\end{document}
diff --git a/graphics/pgf/contrib/pgfplotsthemebeamer/pgfplotsthemebeamer.sty b/graphics/pgf/contrib/pgfplotsthemebeamer/pgfplotsthemebeamer.sty
new file mode 100644
index 0000000000..23006e89c5
--- /dev/null
+++ b/graphics/pgf/contrib/pgfplotsthemebeamer/pgfplotsthemebeamer.sty
@@ -0,0 +1,37 @@
+% !TeX root = ./testing/test.tex
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% The pgfplotsthemebeamer package
+% Using colours from the current beamer theme in pgfplots
+% Maintained by samcarter
+%
+% Project repository and bug tracker:
+% https://github.com/samcarter/pgfplotstheme-beamer
+%
+% Released under the LaTeX Project Public License v1.3c or later
+% See http://www.latex-project.org/lppl.txt
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\ProvidesPackage{pgfplotsthemebeamer}[2024/08/02 version v0.2 PGFplots colours based the colours of the current beamer theme]
+
+% error if used with a class other than beamer
+\IfClassLoadedF{beamer}{%
+ \PackageError{pgfplotsthemebeamer}{This pgfplots theme needs to be used in conjunction with the beamer class}{}
+}
+
+% setting up colours
+\RequirePackage{pgfplots}
+\pgfplotsset{
+ beamercolors/.style={
+ cycle multi list={
+ mark=*\\mark=x\\mark=square*\\mark=o\\mark=+\\mark=square\\\nextlist
+ structure.fg\\alerted text.fg\\example text.fg\\
+ }
+ }
+}
+
+% making beamercolors default if package is loaded with `all` option
+\DeclareOption{all}{
+ \pgfplotsset{beamercolors}
+}
+\ProcessOptions\relax
diff --git a/graphics/pgf/contrib/polyomino/README.md b/graphics/pgf/contrib/polyomino/README.md
new file mode 100644
index 0000000000..7f3c8023ad
--- /dev/null
+++ b/graphics/pgf/contrib/polyomino/README.md
@@ -0,0 +1,25 @@
+# `polyomino`
+
+## Polyominoes using Ti*k*Z and LaTeX3
+
+Version 1.0 (2024/08/01)
+
+This package is based on the package [Ti*k*Z](https://ctan.org/pkg/pgf) and can be used to draw polyominoes. It is possible to define custom styles, pics and grids.
+
+%% README.md
+%% Copyright 2024 Matthias Floré
+%
+% This work may be distributed and/or modified under the
+% conditions of the LaTeX Project Public License, either version 1.3c
+% 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.3c 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 Matthias Floré.
+%
+% This work consists of the files polyomino.pdf, polyomino.sty,
+% polyomino.tex and README.md. \ No newline at end of file
diff --git a/graphics/pgf/contrib/polyomino/polyomino.pdf b/graphics/pgf/contrib/polyomino/polyomino.pdf
new file mode 100644
index 0000000000..597c00c4db
--- /dev/null
+++ b/graphics/pgf/contrib/polyomino/polyomino.pdf
Binary files differ
diff --git a/graphics/pgf/contrib/polyomino/polyomino.sty b/graphics/pgf/contrib/polyomino/polyomino.sty
new file mode 100644
index 0000000000..7a85590118
--- /dev/null
+++ b/graphics/pgf/contrib/polyomino/polyomino.sty
@@ -0,0 +1,286 @@
+%% polyomino.sty
+%% Copyright 2024 Matthias Floré
+%
+% This work may be distributed and/or modified under the
+% conditions of the LaTeX Project Public License, either version 1.3c
+% 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.3c 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 Matthias Floré.
+%
+% This work consists of the files polyomino.pdf, polyomino.sty,
+% polyomino.tex and README.md.
+\NeedsTeXFormat{LaTeX2e}
+\RequirePackage{tikz}
+\ProvidesExplPackage{polyomino}{2024/08/01}{1.0}{Polyominoes using TikZ and LaTeX3}
+
+%%> \subsection{Variables and variants}
+
+\bool_new:N \l__polyomino_grid_bool
+\bool_new:N \l__polyomino_pic_bool
+
+\int_new:N \l__polyomino_col_int
+\int_new:N \l__polyomino_dir_int
+\int_new:N \l__polyomino_max_int
+\int_new:N \l__polyomino_row_int
+\int_new:N \l__polyomino_x_int
+\int_new:N \l__polyomino_y_int
+
+\seq_new:N \l__polyomino_add_seq
+\seq_new:N \l__polyomino_cols_seq
+
+\tl_new:N \l__polyomino_path_tl
+\tl_new:N \l__polyomino_pic_tl
+
+\cs_generate_variant:Nn \tl_map_inline:nn { en }
+
+%%> \subsection{Pgfkeys}
+
+\pgfkeys
+ {
+ / polyomino /. is~family ,
+ / polyomino /. search~also = / polyomino / p_2 ,
+ / polyomino ,
+ at /. initial = { ( 0 , 0 ) } ,
+ empty~cell /. initial = . ,
+ grid /. code = \bool_set:Nn \l__polyomino_grid_bool { \cs:w c_#1_bool \cs_end: } ,
+ grid /. default = true ,
+ grid = false ,
+ grid~style /. style = { grid_style /. style = {#1} } ,
+ grid_style /. style = {} ,
+ row~sep /. initial = { , } ,
+ }
+
+\pgfkeys
+ {%a separate key family so that the second argument of the key p only accepts keys which apply to a separate polyomino
+ / polyomino / p_2 /. is~family ,
+ / polyomino / p_2 ,
+ connected /. code = \bool_set_false:N \l__polyomino_pic_bool ,
+ connected /. value~forbidden ,
+ discrete /. code = \bool_set_true:N \l__polyomino_pic_bool ,
+ discrete /. value~forbidden ,
+ p /. style~2~args = { #1__style /. style = {#2} } ,%2 underscores to avoid the same name as for example the key style_style
+ pic /. code =
+ {
+ \bool_set_true:N \l__polyomino_pic_bool
+ \tl_set:Nn \l__polyomino_pic_tl {#1}
+ } ,
+ style /. style = { style_style /. style = {#1} } ,
+ style_style /. style = {} ,
+ }
+
+%%> \subsection{The command \textbackslash polyomino}
+
+\NewDocumentCommand \polyomino { O {} m }
+ {
+ {%note the double braces {{...}} so that the contents is in a group and in particular, \pgfkeys is applied locally
+ \pgfkeys { / polyomino , #1 }
+ \int_zero:N \l__polyomino_col_int
+ \int_set:Nn \l__polyomino_row_int { 1 }
+ \seq_clear:N \l__polyomino_cols_seq
+ \tl_map_inline:en {#2}
+ %it is convenient that this ignores spaces in #2
+ %e argument specifier for the case that #2 is given by a command or contains a command
+ {
+ \tl_if_eq:neTF {##1} { \pgfkeysvalueof { / polyomino / row~sep } }
+ {
+ \seq_put_right:NV \l__polyomino_cols_seq \l__polyomino_col_int
+ \int_incr:N \l__polyomino_row_int
+ \int_zero:N \l__polyomino_col_int
+ }
+ {
+ \int_incr:N \l__polyomino_col_int
+ \tl_clear_new:c { l__polyomino_\int_use:N \l__polyomino_row_int _\int_use:N \l__polyomino_col_int _tl }
+ \tl_if_eq:neF {##1} { \pgfkeysvalueof { / polyomino / empty~cell } }
+ { \tl_set:cn { l__polyomino_\int_use:N \l__polyomino_row_int _\int_use:N \l__polyomino_col_int _tl } {##1} }
+ \tl_gclear_new:c { g__polyomino_\int_use:N \l__polyomino_row_int _\int_use:N \l__polyomino_col_int _tl }
+ }
+ }
+ \seq_put_right:NV \l__polyomino_cols_seq \l__polyomino_col_int
+ \int_set:Nn \l__polyomino_max_int { \fp_eval:n { max ( \seq_use:Nn \l__polyomino_cols_seq { , } ) } }
+ \seq_map_indexed_inline:Nn \l__polyomino_cols_seq
+ {
+ \tl_clear_new:c { l__polyomino_##1_0_tl }
+ \int_step_inline:nnn { ##2 + 1 } { \l__polyomino_max_int + 1 }
+ { \tl_clear_new:c { l__polyomino_##1_####1_tl } }
+ }
+ \int_step_inline:nnn { 0 } { \l__polyomino_max_int + 1 }
+ {
+ \tl_clear_new:c { l__polyomino_0_##1_tl }
+ \tl_clear_new:c { l__polyomino_\int_eval:n { \l__polyomino_row_int + 1 }_##1_tl }
+ }
+ \pgfkeys
+ {
+ / tikz ,
+ shift /. expanded = { \pgfkeysvalueof { / polyomino / at } } ,
+ shift = { ( 0 , \seq_count:N \l__polyomino_cols_seq ) }
+ }
+ \seq_map_indexed_inline:Nn \l__polyomino_cols_seq
+ {
+ \int_step_inline:nn {##2}
+ {
+ \tl_if_empty:cF { l__polyomino_##1_####1_tl }
+ {
+ {%note the double braces {{...}} so that \pgfkeys is applied locally
+ \pgfkeys { / polyomino / p_2 , \cs:w l__polyomino_##1_####1_tl \cs_end: __style }
+ \bool_if:NTF \l__polyomino_pic_bool
+ { \pic [ / polyomino / p_2 / style_style ] at ( ####1 - 0.5 , 0.5 - ##1 ) { code = { \l__polyomino_pic_tl } } ; }
+ {
+ \seq_clear:N \l__polyomino_add_seq
+ \tl_if_eq:ccF { l__polyomino_##1_####1_tl } { l__polyomino_##1_\int_eval:n { ####1 - 1 }_tl }
+ {
+ \tl_if_empty:cT { g__polyomino_##1_####1_tl }
+ {
+ \int_set:Nn \l__polyomino_dir_int { 1 }
+ \int_set:Nn \l__polyomino_col_int {####1}
+ \int_set:Nn \l__polyomino_row_int {##1}
+ \int_set:Nn \l__polyomino_x_int {####1}
+ \int_set:Nn \l__polyomino_y_int { 1 - ##1 }
+ \tl_build_begin:N \l__polyomino_path_tl
+ \fp_do_until:nn { ####1 - 1 = \l__polyomino_x_int && 1 - ##1 = \l__polyomino_y_int }
+ {
+ %concerning \tl_build_put_right:Ne \l__polyomino_path_tl,
+ %for example (0,0)--(0,1)--(0,2) results in a larger file size than (0,0)--(0,2)
+ \tl_if_eq:ccTF
+ { l__polyomino_##1_####1_tl }
+ {
+ l__polyomino
+ _\int_eval:n
+ { \l__polyomino_row_int + \clist_item:nn { 0 , 1 , 0 , -1 } { \l__polyomino_dir_int } }
+ _\int_eval:n
+ { \l__polyomino_col_int + \clist_item:nn { 1 , 0 , -1 , 0 } { \l__polyomino_dir_int } }
+ _tl
+ }
+ {
+ \tl_if_eq:ccTF
+ { l__polyomino_##1_####1_tl }
+ {
+ l__polyomino
+ _\int_eval:n
+ { \l__polyomino_row_int + \clist_item:nn { -1 , 1 , 1 , -1 } { \l__polyomino_dir_int } }
+ _\int_eval:n
+ { \l__polyomino_col_int + \clist_item:nn { 1 , 1 , -1 , -1 } { \l__polyomino_dir_int } }
+ _tl
+ }
+ {
+ \tl_build_put_right:Ne \l__polyomino_path_tl
+ { -- ( \int_use:N \l__polyomino_x_int , \int_use:N \l__polyomino_y_int ) }
+ \int_add:Nn \l__polyomino_row_int
+ { \clist_item:nn { -1 , 1 , 1 , -1 } { \l__polyomino_dir_int } }
+ \int_add:Nn \l__polyomino_col_int
+ { \clist_item:nn { 1 , 1 , -1 , -1 } { \l__polyomino_dir_int } }
+ \int_compare:nNnTF { \l__polyomino_dir_int } = { 1 }
+ { \int_set:Nn \l__polyomino_dir_int { 4 } }
+ { \int_decr:N \l__polyomino_dir_int }
+ }
+ {
+ \int_add:Nn \l__polyomino_row_int
+ { \clist_item:nn { 0 , 1 , 0 , -1 } { \l__polyomino_dir_int } }
+ \int_add:Nn \l__polyomino_col_int
+ { \clist_item:nn { 1 , 0 , -1 , 0 } { \l__polyomino_dir_int } }
+ }
+ \tl_if_empty:cTF
+ { g__polyomino_\int_use:N \l__polyomino_row_int _\int_use:N \l__polyomino_col_int _tl }
+ {
+ \seq_put_right:Ne \l__polyomino_add_seq
+ { \int_use:N \l__polyomino_row_int _\int_use:N \l__polyomino_col_int }
+ }
+ {
+ \bool_set_true:N \l__polyomino_pic_bool
+ \int_set:Nn \l__polyomino_x_int { ####1 - 1 }
+ \int_set:Nn \l__polyomino_y_int { 1 - ##1 }
+ }
+ }
+ {
+ \tl_build_put_right:Ne \l__polyomino_path_tl
+ { -- ( \int_use:N \l__polyomino_x_int , \int_use:N \l__polyomino_y_int ) }
+ \int_compare:nNnTF { \l__polyomino_dir_int } = { 4 }
+ { \int_set:Nn \l__polyomino_dir_int { 1 } }
+ { \int_incr:N \l__polyomino_dir_int }
+ }
+ \bool_if:NF \l__polyomino_pic_bool
+ {
+ \int_add:Nn \l__polyomino_x_int { \clist_item:nn { 1 , 0 , -1 , 0 } { \l__polyomino_dir_int } }
+ \int_add:Nn \l__polyomino_y_int { \clist_item:nn { 0 , -1 , 0 , 1 } { \l__polyomino_dir_int } }
+ }
+ }
+ \tl_build_end:N \l__polyomino_path_tl
+ \bool_if:NF \l__polyomino_pic_bool
+ { \fill [ / polyomino / p_2 / style_style ] ( ####1 - 1 , 1 - ##1 ) \l__polyomino_path_tl -- cycle ; }
+ }
+ }
+ \tl_gset:cn { g__polyomino_##1_####1_tl } { c }
+ \seq_map_inline:Nn \l__polyomino_add_seq
+ { \tl_gset:cn { g__polyomino_########1_tl } { c } }
+ }
+ }
+ }
+ }
+ }
+ \bool_if:NT \l__polyomino_grid_bool
+ {
+ \int_step_inline:nn { \seq_count:N \l__polyomino_cols_seq - 1 }
+ {
+ \int_zero:N \l__polyomino_col_int
+ \int_zero:N \l__polyomino_x_int
+ \int_set:Nn \l__polyomino_y_int
+ { \int_min:nn { \seq_item:Nn \l__polyomino_cols_seq {##1} } { \seq_item:Nn \l__polyomino_cols_seq { ##1 + 1 } } }
+ \int_while_do:nNnn { \l__polyomino_x_int } < { \l__polyomino_y_int }
+ {
+ \bool_do_while:nn
+ {
+ \tl_if_eq_p:cc
+ { l__polyomino_##1_\int_use:N \l__polyomino_x_int _tl }
+ { l__polyomino_\int_eval:n { ##1 + 1 }_\int_use:N \l__polyomino_x_int _tl }
+ &&
+ ! \tl_if_empty_p:c { g__polyomino_##1_\int_use:N \l__polyomino_x_int _tl }
+ &&
+ \int_compare_p:nNn { \l__polyomino_x_int } < { \l__polyomino_y_int + 1 }
+ }
+ { \int_incr:N \l__polyomino_x_int }
+ \int_compare:nNnT { \l__polyomino_x_int } > { \l__polyomino_col_int + 1 }
+ {
+ \draw [ / polyomino / grid_style ]
+ ( \int_use:N \l__polyomino_col_int , -##1 ) -- ( \int_use:N \l__polyomino_x_int - 1 , -##1 ) ;
+ }
+ \int_set_eq:NN \l__polyomino_col_int \l__polyomino_x_int
+ }
+ }
+ \int_set:Nn \l__polyomino_x_int { \seq_count:N \l__polyomino_cols_seq }
+ \int_step_inline:nn { \l__polyomino_max_int - 1 }
+ {
+ \int_zero:N \l__polyomino_row_int
+ \int_zero:N \l__polyomino_y_int
+ \int_while_do:nNnn { \l__polyomino_y_int } < { \l__polyomino_x_int }
+ {
+ \bool_do_while:nn
+ {
+ \tl_if_eq_p:cc
+ { l__polyomino_\int_use:N \l__polyomino_y_int _##1_tl }
+ { l__polyomino_\int_use:N \l__polyomino_y_int _\int_eval:n { ##1 + 1 }_tl }
+ &&
+ ! \tl_if_empty_p:c { g__polyomino_\int_use:N \l__polyomino_y_int _##1_tl }
+ &&
+ \int_compare_p:nNn { \l__polyomino_y_int } < { \l__polyomino_x_int + 1 }
+ &&
+ \int_compare_p:nNn {##1} < { \seq_item:Nn \l__polyomino_cols_seq { \l__polyomino_y_int } + 0 }
+ }
+ { \int_incr:N \l__polyomino_y_int }
+ \int_compare:nNnT { \l__polyomino_y_int } > { \l__polyomino_row_int + 1 }
+ {
+ \draw [ / polyomino / grid_style ]
+ ( ##1 , -\int_use:N \l__polyomino_row_int ) -- ( ##1 , 1 - \int_use:N \l__polyomino_y_int ) ;
+ }
+ \int_set_eq:NN \l__polyomino_row_int \l__polyomino_y_int
+ }
+ }
+ }
+ }
+ }
+
+\endinput \ No newline at end of file
diff --git a/graphics/pgf/contrib/polyomino/polyomino.tex b/graphics/pgf/contrib/polyomino/polyomino.tex
new file mode 100644
index 0000000000..c512cec895
--- /dev/null
+++ b/graphics/pgf/contrib/polyomino/polyomino.tex
@@ -0,0 +1,278 @@
+%% polyomino.tex
+%% Copyright 2024 Matthias Floré
+%
+% This work may be distributed and/or modified under the
+% conditions of the LaTeX Project Public License, either version 1.3c
+% 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.3c 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 Matthias Floré.
+%
+% This work consists of the files polyomino.pdf, polyomino.sty,
+% polyomino.tex and README.md.
+\documentclass[a4paper,english,dvipsnames]{ltxdoc}
+\usepackage[english]{babel}
+\usepackage{graphicx}
+\usepackage[a4paper,left=2.25cm,right=2.25cm,top=2.5cm,bottom=2.5cm,nohead]{geometry}
+\usepackage{parskip}
+\usepackage{iftex}
+\ifluatex
+\else
+\usepackage[T1]{fontenc}
+\usepackage[utf8]{inputenc}
+\fi
+\usepackage{mathtools}
+\usepackage{amssymb}
+\allowdisplaybreaks
+\usepackage{pdflscape}
+\usepackage{polyomino}
+\input{pgfmanual-en-macros.tex}
+\usepackage{codehigh}
+\usepackage{fancyhdr}
+\pagestyle{fancy}
+\renewcommand{\headrulewidth}{0pt}
+\fancyhead{}
+\ExplSyntaxOn
+\NewExpandableDocumentCommand \repeatnumber {}
+ { \prg_replicate:nn { \thepage } { * } }
+\ExplSyntaxOff
+\fancyfoot[C]{\IfRefUndefinedExpandable{Thesourcecode}{}{\begin{tikzpicture}[scale=0.9]
+\polyomino[
+ grid,
+ p={*}{style={teal,draw=black}}
+]{\repeatnumber}
+\end{tikzpicture}}}
+\usepackage[nottoc]{tocbibind}
+\usepackage{imakeidx}
+\makeindex[program=makeindex,columns=2,intoc=true]
+\indexsetup{othercode={\thispagestyle{fancy}}}
+\AtEndPreamble{\hypersetup{%
+linktoc=all,
+pdfstartview=FitH,
+colorlinks=true,
+linkcolor=Mahogany,
+citecolor=ForestGreen,
+urlcolor=MidnightBlue,
+bookmarksnumbered=true,
+pdftitle={The polyomino package},
+pdfauthor={Matthias Floré},
+pdfsubject={Manual},
+pdfkeywords={polyomino}}}
+\setcounter{tocdepth}{2}
+\setcounter{secnumdepth}{2}
+\title{The \texttt{polyomino} package\\[12pt]\large Polyominoes using \tikzname{} and \LaTeX3}
+\author{Matthias Floré}
+\date{Version 1.0 (2024/08/01)}%\\[12pt]
+\begin{document}
+\maketitle
+\thispagestyle{fancy}
+\begin{abstract}
+\noindent This package is based on the package |tikz| (see \cite{TtTaPGFp}) and can be used to draw polyominoes. It is possible to define custom styles, pics and grids.% This is the manual for version .
+\end{abstract}
+\tableofcontents
+\section{Usage}
+The package |polyomino| can be used by putting the following in the preamble.
+\begin{codeexample}[code only]
+\usepackage{polyomino}
+\end{codeexample}
+The package |polyomino| loads the package |tikz|.
+\section{The command \textbackslash polyomino}
+\begin{command}{\polyomino\opt{\oarg{options}}\marg{polyomino specification}}
+This command can be placed inside a |tikzpicture| environment. The \meta{polyomino specification} is a token list. Spaces in this list are ignored. With the initial settings, a |,| starts a new row. Otherwise each element in this list corresponds to a cell. An element can consist of multiple characters by surrounding it with braces. The \meta{options} can be given with the keys described in Section \ref{Keys}.
+\begin{codeexample}[width=8cm]
+\pgfkeys{
+ /polyomino,
+ p={F}{style={blue,draw=black,ultra thick}},
+ p={I}{style={brown,draw=black,ultra thick}},
+ p={L}{style={cyan,draw=black,ultra thick}},
+ p={N}{style={gray,draw=black,ultra thick}},
+ p={P}{style={lime,draw=black,ultra thick}},
+ p={T}{style={magenta,draw=black,ultra thick}},
+ p={U}{style={olive,draw=black,ultra thick}},
+ p={V}{style={orange,draw=black,ultra thick}},
+ p={W}{style={pink,draw=black,ultra thick}},
+ p={X}{style={purple,draw=black,ultra thick}},
+ p={Y}{style={red,draw=black,ultra thick}},
+ p={Z}{style={teal,draw=black,ultra thick}}
+}
+\begin{tikzpicture}
+\polyomino[
+ grid
+]{
+ UUUVVV,
+ UXUZZV,
+ XXXFZV,
+ IXFFZZ,
+ ILLFFT,
+ ILNTTT,
+ ILNWWT,
+ ILNNWW,
+ PPPNYW,
+ PPYYYY
+}
+\end{tikzpicture}
+\end{codeexample}
+The algorithm constructs the border of each polyomino. It does not consider holes determined by empty cells. Although it does detect a cell inside a polyomino which has a different style. This is illustrated in the example below.
+\begin{codeexample}[width=10cm]
+\begin{tikzpicture}[scale=0.8]
+\polyomino[
+ p={a}{style={gray,draw=black,thick}}
+]{
+ aaaaa,
+ a.a.a,
+ aaaaa
+}
+\polyomino[
+ at={(0,-4)},
+ p={a}{style={gray,draw=black,thick}},
+ p={*}{style={white,draw=black,thick}}
+]{
+ aaaaa,
+ a*a*a,
+ aaaaa
+}
+\end{tikzpicture}
+\end{codeexample}
+\end{command}
+\section{Keys}\label{Keys}
+The keys in this Section can be given as \meta{options} to the command |\polyomino|.
+
+There are two key families: |/polyomino| and |/polyomino/p_2|. The key family |/polyomino| is intended for usage in documents whereas |/polyomino/p_2| is not. In the key family |/polyomino|, also keys from the key family |/polyomino/p_2| will be looked up. The second argument from the key |p| only accepts keys from the key family |/polyomino/p_2|.
+\begin{key}{/polyomino/at=\marg{point} (initially (0,0))}
+This key defines the bottom left coordinate of the polyomino.
+\end{key}
+\begin{key}{/polyomino/p\_2/connected}
+This key sets the |pic| type (which is activated by the key |pic|) to false. This is the initial setting.
+\end{key}
+\begin{key}{/polyomino/p\_2/discrete}
+This key sets the |pic| type (which is activated by the key |pic|) to true.
+\end{key}
+\begin{key}{/polyomino/empty cell=\marg{token list} (initially .)}
+A cell corresponding to the \meta{token list} in the \meta{polyomino specification} will be left empty.
+
+A cell corresponding to the empty token list will always be left empty.
+\end{key}
+\begin{key}{/polyomino/grid=\opt{\meta{boolean}} (default true, initially false)}
+If true then a grid is drawn. The grid does not apply to borders of polyominoes. The style of this grid is determined by the key |grid style|. A grid does not apply to a cell with a |pic|.
+\end{key}
+\begin{stylekey}{/polyomino/grid style=\marg{options} (initially \normalfont empty)}
+This key determines the style of the grid.
+\begin{codeexample}[width=6.5cm]
+\begin{tikzpicture}[rotate=90]
+\polyomino[
+ grid,
+ grid style={gray,dash pattern=on 3mm off 4mm on 3mm off 0mm},
+ p={L}{style={darkgray,draw=black}},
+ p={P}{style={green,draw=black}},
+ p={T}{style={violet,draw=black}},
+ p={V}{style={yellow,draw=black}}
+]{
+ LTVVV,
+ LTTTV,
+ LTPPV,
+ LLPPP
+}
+\end{tikzpicture}
+\end{codeexample}
+\end{stylekey}
+\begin{stylekey}{/polyomino/p\_2/p=\marg{name}\marg{options} (initially \normalfont empty)}
+This key determines the style of the polyomino with \meta{name} in the \meta{polyomino specification}.
+
+The \meta{options} only accept keys from the key family |/polyomino/p_2|.
+
+In the example below, the polyominoes have the same shape but are differentiated by using different names.
+\begin{codeexample}[width=10cm]
+\begin{tikzpicture}
+\pgfkeys{
+ /polyomino,
+ p={a}{},
+ p={b}{},
+ style={fill=none,draw}
+}
+\def\example{
+ aa,
+ ab,
+ ab,
+ bb
+}
+\polyomino{\example}
+\polyomino[
+ at={(2,0)}
+]{\example}
+\end{tikzpicture}
+\end{codeexample}
+\end{stylekey}
+\begin{key}{/polyomino/p\_2/pic=\marg{code}}
+The \meta{code} defines the |pic| which is used for each cell of the polyomino.
+
+A grid does not apply to a cell with a |pic|.
+\begin{codeexample}[width=7cm]
+\begin{tikzpicture}
+\polyomino[
+ empty cell=*,
+ grid,
+ p={a}{style={red,draw=black}},
+ p={b}{style={blue,draw=black}},
+ p={c}{style={orange,draw=black}},
+ p={circle}{pic={\fill[green] (0,0) circle[radius=0.4];}},
+ row sep=;
+]{
+ {} * * b {} c ;
+ a a b b {circle} c ;
+ {circle} a a b c c
+}
+\end{tikzpicture}
+\end{codeexample}
+\begin{codeexample}[width=5cm]
+\begin{tikzpicture}
+\polyomino[
+ p={circle}{
+ pic={\path[pic actions] (0,0) circle[radius=0.45];},
+ style={right color=cyan,left color=red,draw,dashed}
+ },
+ p={L}{
+ pic={
+ \fill[yellow!80!black] (-0.5,-0.5) rectangle +(1,1);
+ \fill[yellow!50,rounded corners] (-0.4,-0.4) rectangle +(0.8,0.8);
+ }
+ },
+ p={square}{
+ pic={\path[pic actions] (-0.45,-0.45) rectangle +(0.9,0.9);},
+ style={fill=magenta,draw,rounded corners}
+ }
+]{
+ L {circle} {square} {square} ,
+ L {circle} {circle} {square} ,
+ L L {circle} {circle}
+}
+\end{tikzpicture}
+\end{codeexample}
+\end{key}
+\begin{key}{/polyomino/row sep=\marg{token list} (initially ,)}
+The \meta{token list} in the \meta{polyomino specification} will start a new row.
+\end{key}
+\begin{stylekey}{/polyomino/p\_2/style=\marg{options} (initially \normalfont empty)}
+This key determines the style of the polyomino.
+\end{stylekey}
+\begin{thebibliography}{9}
+\bibitem{TtTaPGFp}
+Till Tantau,
+\emph{The \tikzname{} and {\upshape\pgfname} Packages},
+Manual for version 3.1.10,
+\url{https://ctan.org/pkg/pgf},
+2023.
+\end{thebibliography}
+\printindex
+\newgeometry{left=2.25cm,right=2.25cm,top=2.25cm,bottom=2.25cm}
+\pagestyle{plain}
+\appendix
+\begin{landscape}
+\section{The source code}\label{Thesourcecode}
+\dochighinput[language=latex/latex3]{polyomino.sty}
+\end{landscape}
+\end{document} \ No newline at end of file
diff --git a/graphics/pgf/contrib/tkz-grapheur/doc/tkz-grapheur-doc-en.pdf b/graphics/pgf/contrib/tkz-grapheur/doc/tkz-grapheur-doc-en.pdf
index 6ef7f59476..029671719e 100644
--- a/graphics/pgf/contrib/tkz-grapheur/doc/tkz-grapheur-doc-en.pdf
+++ b/graphics/pgf/contrib/tkz-grapheur/doc/tkz-grapheur-doc-en.pdf
Binary files differ
diff --git a/graphics/pgf/contrib/tkz-grapheur/doc/tkz-grapheur-doc-en.tex b/graphics/pgf/contrib/tkz-grapheur/doc/tkz-grapheur-doc-en.tex
index 88e9abb16a..d89c17bff4 100644
--- a/graphics/pgf/contrib/tkz-grapheur/doc/tkz-grapheur-doc-en.tex
+++ b/graphics/pgf/contrib/tkz-grapheur/doc/tkz-grapheur-doc-en.tex
@@ -29,8 +29,8 @@
\hypersetup{pdfborder=0 0 0}
\usepackage[margin=2cm]{geometry}
\setlength{\parindent}{0pt}
-\def\TPversion{0.1.5}
-\def\TPdate{22/06/2024}
+\def\TPversion{0.1.6}
+\def\TPdate{13/07/2024}
\usepackage{soul}
\usepackage{codehigh}
\usepackage{tabularray}
@@ -532,7 +532,7 @@ The mandatory arguments correspond to the x-coordinates (in \TikZ\ language) and
\subsection{Draw a line}\label{tracstraight}
-The idea is to propose a command to draw a line, from:
+The idea is to propose a command to draw a line (or an asymptote), from:
\begin{itemize}
\item of two points (or nodes);
@@ -542,6 +542,7 @@ The idea is to propose a command to draw a line, from:
\begin{tcblisting}{listing engine=minted,minted language=latex,colframe=lightgray,colback=lightgray!5,listing only}
%in the GraphiqueTikz environment
\DrawLine[keys]{point or node}{point or node or slope}
+\DrawAsymptote[keys]{x value}
\end{tcblisting}
The optional \MontreCode{[keys]} available are:
@@ -564,6 +565,7 @@ The optional \MontreCode{[keys]} available are:
\DrawLine[Color=red]{(-2,-1)}{(2,4)}
\DrawLine[Color=blue,Start=-5,End=3]{(A)}{(B)}
\DrawLine[Color=olive,Slope]{(C)}{0.25}
+ \DrawAsymptote[Color=brown]{-6}
\end{GraphTikz}
\end{tcblisting}
@@ -1396,7 +1398,7 @@ The last mandatory argument is the work point (abscissa version or node followin
\section{Commands specific to two-variable statistics}
-\subsection{The point cloud}\label{scatter}
+\subsection{The point scatter}\label{scatter}
In addition to commands linked to functions, it is also possible to represent double statistical series.
@@ -1490,7 +1492,7 @@ In partnership with the \MontreCode{xint-regression} package, loaded by the pack
The command, similar to that of defining a curve, is:
\begin{tcblisting}{listing engine=minted,minted language=latex,colframe=lightgray,colback=lightgray!5,listing only}
-\DrawRegression[keys]<no fct>{type}<rounded>{listex}{listey}
+\DrawRegression[keys]<name fct>{type}<rounded>{listex}{listey}
\end{tcblisting}
The \MontreCode{[keys]} available are, classically:
@@ -1651,53 +1653,30 @@ $\begin{cases}
\gamma \approx \RoundNb[0]{\Cgamma}
\end{cases}$.
\end{tcblisting}
-%
-%\newpage
-%
-%\section{Liste des commandes}
-%
-%Les commandes disponibles sont :
-%
-%\NewDocumentCommand\lstcmd{ m m m }{%
-% \item[\texttt{#1}] : \mintinline{latex}|#2|\hfill{}page \pageref{#3}
-%}
-%
-%\begin{description}
-% \lstcmd{environnement~~}{\begin{GraphiqueTikz}...\end{GraphiqueTikz}}{creaenvt}
-% \lstcmd{axes et grilles}{\TracerAxesGrille}{creaaxesgr}
-% \lstcmd{aj val axes X~~}{\RajouterValeursAxeX}{ajoutvals}
-% \lstcmd{aj val axes Y~~}{\RajouterValeursAxeY}{ajoutvals}
-% \lstcmd{def fonction~~~}{\DefineCurve}{deftracfct}
-% \lstcmd{tracé courbe~~~}{\DrawCurve}{deftracfct}
-% \lstcmd{def interpo~~~~}{\DefineCurveInterpo}{deftracinterpo}
-% \lstcmd{tracé interpo~~}{\DrawCurveInterpo}{deftracinterpo}
-% \lstcmd{def spline~~~~~}{\DefineSplineCurve}{deftracfctspline}
-% \lstcmd{tracé spline~~~}{\DrawSplineCurve}{deftracfctspline}
-% \lstcmd{tracé droite~~~}{\TracerDroite}{tracdroite}
-% \lstcmd{def points~~~~~}{\DefinirPts}{defpts}
-% \lstcmd{def image~~~~~~}{\DefinirImage}{defpts}
-% \lstcmd{marq pts~~~~~~~}{\MarquerPts}{markpts}
-% \lstcmd{placer txt~~~~~}{\PlacerTexte}{placetxt}
-% \lstcmd{récup absc~~~~~}{\RecupererAbscisse}{recupcoordo}
-% \lstcmd{récup ordo~~~~~}{\RecupererOrdonnee}{recupcoordo}
-% \lstcmd{récup coordos~~}{\RecupererCoordonnees}{recupcoordo}
-% \lstcmd{images~~~~~~~~~}{\PlacerImages}{images}
-% \lstcmd{antécédents~~~~}{\TrouverAntecedents}{defanteced}
-% \lstcmd{antécédents~~~~}{\PlacerAntecedents}{tracanteced}
-% \lstcmd{intersection~~~}{\TrouverIntersections}{intersect}
-% \lstcmd{maximum~~~~~~~~}{\TrouverMaximum}{maximum}
-% \lstcmd{minimum~~~~~~~~}{\TrouverMinimum}{minimum}
-% \lstcmd{intégrale~~~~~~}{\DrawIntegral}{integr}
-% \lstcmd{tangente~~~~~~~}{\DrawTangente}{tgte}
-% \lstcmd{loi normale~~~~}{\DefinirLoiNormale}{loinormale}
-% \lstcmd{loi normale~~~~}{\TracerLoiNormale}{loinormale}
-% \lstcmd{loi khideux~~~~}{\DefinirLoiKhiDeux}{loikhideux}
-% \lstcmd{loi khideux~~~~}{\TracerLoiKhiDeux}{loikhideux}
-% \lstcmd{stats 2 var~~~~}{\TracerNuage}{nuage}
-% \lstcmd{regressions~~~~}{\TracerAjustement}{regressions}
-% \lstcmd{arrondi~~~~~~~~}{\RoundNb}{numarrond}
-% \lstcmd{nb aléat~~~~~~~}{\ChoisirNbAlea}{nbalea}
-%\end{description}
+
+\subsection{Monte-Carle method}
+
+\begin{tcblisting}{listing engine=minted,minted language=latex,colframe=lightgray,colback=lightgray!5,listing only}
+%in the GraphiqueTikz environment
+\SimulateMonteCarlo[keys]<function>}{number of points}[\nbptsmcok][\nbptsmcko]
+\end{tcblisting}
+
+\begin{tcblisting}{listing engine=minted,minted language=latex,colframe=lightgray,colback=lightgray!5}
+\begin{GraphTikz}%
+ [x=10cm,y=10cm,Xmin=0,Xmax=1,Xgrid=0.1,Xgrids=0.05,
+ Ymin=0,Ymax=1,Ygrid=0.1,Ygrids=0.05]
+ \DrawAxisGrids[Enlarge=2.5mm,Last]{auto}{auto}
+ \DefineCurve[Trace,Color=teal,Step=0.001]<f>{sqrt(1-x^2)}
+ \SimulateMonteCarlo<f>{5000}
+\end{GraphTikz}
+
+There is \textcolor{blue}{\num{\nbptsmcok}} blue points,
+there is \textcolor{red}{\num{\nbptsmcko}} red points.
+
+And $\frac{\num{\nbptsmcok}}{\num{\nbptsmc}}
+\approx \RoundNb[4]{\nbptsmcok/\nbptsmc}$
+et $\frac{\pi}{4} \approx \RoundNb[4]{pi/4}$.
+\end{tcblisting}
\pagebreak
@@ -1705,6 +1684,7 @@ $\begin{cases}
\begin{quote}
\begin{verbatim}
+0.1.6 : Vertical asymptote + [in french doc] commands for integrals
0.1.5 : Initial version [en]
\end{verbatim}
\end{quote}
diff --git a/graphics/pgf/contrib/tkz-grapheur/doc/tkz-grapheur-doc-fr.pdf b/graphics/pgf/contrib/tkz-grapheur/doc/tkz-grapheur-doc-fr.pdf
index c53d69179c..ba330fa444 100644
--- a/graphics/pgf/contrib/tkz-grapheur/doc/tkz-grapheur-doc-fr.pdf
+++ b/graphics/pgf/contrib/tkz-grapheur/doc/tkz-grapheur-doc-fr.pdf
Binary files differ
diff --git a/graphics/pgf/contrib/tkz-grapheur/doc/tkz-grapheur-doc-fr.tex b/graphics/pgf/contrib/tkz-grapheur/doc/tkz-grapheur-doc-fr.tex
index 9ea6b13200..99d8414cd0 100644
--- a/graphics/pgf/contrib/tkz-grapheur/doc/tkz-grapheur-doc-fr.tex
+++ b/graphics/pgf/contrib/tkz-grapheur/doc/tkz-grapheur-doc-fr.tex
@@ -29,8 +29,8 @@
\hypersetup{pdfborder=0 0 0}
\usepackage[margin=2cm]{geometry}
\setlength{\parindent}{0pt}
-\def\TPversion{0.1.5}
-\def\TPdate{22/06/2024}
+\def\TPversion{0.1.6}
+\def\TPdate{13/07/2024}
\usepackage{soul}
\usepackage{codehigh}
\usepackage{tabularray}
@@ -39,7 +39,7 @@
\hl{\vphantom{\texttt{pf}}\texttt{#1}}%
}
\usepackage[french]{babel}
-
+\sisetup{group-minimum-digits=4}
\renewcommand{\footnoterule}{\vfill\kern -3pt \hrule width 0.4\columnwidth \kern 2.6pt}
\begin{document}
@@ -209,7 +209,8 @@ Il sera ensuite possible :
\item de tracer des courbes ;
\item de déterminer graphiquement des images ou des antécédents ;
\item de rajouter des éléments de dérivation (tangentes) ou d'intégration (domaine) ;
- \item de tracer une droite d'ajustement linéaire ou la courbe d'un autre ajustement.
+ \item de tracer une droite d'ajustement linéaire ou la courbe d'un autre ajustement ;
+ \item \dots
\end{itemize}
\subsection{Packages utilisés, et options du package}
@@ -332,10 +333,11 @@ Concernant les styles des \textit{objets}, ils sont donnés ci-dessous.
\tikzset{pflgrilles/.style={very thin,lightgray}}
\tikzset{pflaxes/.style={line width=0.8pt,->,>=latex}}
-%style des points (courbe / nuage /labels)
+%style des points (courbe / nuage /labels /montecarlo)
\tikzset{pflpoint/.style={line width=0.95pt}}
\tikzset{pflpointc/.style={radius=1.75pt}}
\tikzset{pflpointnuage/.style={radius=1.75pt}}
+\tikzset{pflpointmc/.style={radius=0.875pt}}
\tikzset{pflnoeud/.style={}} %pour les inner sep par exemple :-)
%style des courbes
@@ -544,9 +546,12 @@ L'idée est de proposer une commande pour tracer une droite, à partir :
\item d'un point (ou nœud) et de la pente.
\end{itemize}
+Il existe également une commande pour une asymptote verticale.
+
\begin{tcblisting}{listing engine=minted,minted language=latex,colframe=lightgray,colback=lightgray!5,listing only}
%dans l'environnement GraphiqueTikz
\TracerDroite[clés]{point ou nœud}{point ou noeud ou pente}
+\TracerAsymptote[clés]{abscisse}
\end{tcblisting}
Les \MontreCode{[clés]}, optionnelles, disponibles sont :
@@ -569,6 +574,7 @@ Les \MontreCode{[clés]}, optionnelles, disponibles sont :
\TracerDroite[Couleur=red]{(-2,-1)}{(2,4)}
\TracerDroite[Couleur=blue,Debut=-5,Fin=3]{(A)}{(B)}
\TracerDroite[Couleur=olive,Pente]{(C)}{0.25}
+ \TracerAsymptote[Couleur=brown]{-6}
\end{GraphiqueTikz}
\end{tcblisting}
@@ -1415,6 +1421,132 @@ Les \MontreCode{[clés]}, optionnelles, disponibles sont :
\pagebreak
+\section{Commandes spécifiques des méthodes intégrales}
+
+\subsection{Méthodes géométriques}\label{methodesintergrales}
+
+L'idée est de proposer plusieurs méthodes graphiques pour illustrer graphiquement une intégrale, via :
+
+\begin{itemize}
+ \item une méthode des rectangles (Gauche, Droite ou Milieu) ;
+ \item la méthode des trapèzes.
+\end{itemize}
+
+\begin{tcblisting}{listing engine=minted,minted language=latex,colframe=lightgray,colback=lightgray!5,listing only}
+%dans l'environnement GraphiqueTikz
+\RepresenterMethodeIntegrale[clés]<fonction>{a}{b}
+\end{tcblisting}
+
+Les \MontreCode{Clés} disponibles sont :
+
+\begin{itemize}
+ \item \MontreCode{Couleur} : couleur des tracés, \MontreCode{red} par défaut ;
+ \item \MontreCode{NbSubDiv} : nombre de subdivisions, \MontreCode{10} par défaut ;
+ \item \MontreCode{Methode} : méthode géométrique utilisée, parmi parmi \MontreCode{RectanglesGauche / RectanglesDroite / RectanglesMilieu / Trapezes} pour spécifier la méthode utilisée, \MontreCode{RectanglesGauche} par défaut ;
+ \item \MontreCode{Remplir} : booléen, \MontreCode{true} par défaut, pour remplir les éléments graphiques ;
+ \item \MontreCode{CouleurRemplissage} : couleur de remplissage, définie par rapport à la couleur principale par défaut ;
+ \item \MontreCode{Opacite} : opacité, \MontreCode{0.25} par défaut, du remplissage.
+\end{itemize}
+
+\smallskip
+
+Le deuxième argument, optionnel et entre \MontreCode{<...>}, correspond à la fonction \textbf{précédemment définie} !
+
+\smallskip
+
+Les deux derniers arguments, obligatoires, correspondent aux bornes de l'intégrale.
+
+\begin{tcblisting}{listing engine=minted,minted language=latex,colframe=lightgray,colback=lightgray!5}
+\begin{GraphiqueTikz}
+ [x=0.66cm,y=0.033cm,Xmin=0,Xmax=21,Xgrille=2,Xgrilles=1,
+ Ymin=0,Ymax=160,Ygrille=20,Ygrilles=10]
+ \TracerAxesGrilles[Elargir=2.5mm]{auto}{auto}
+ \DefinirCourbe[Couleur=red,Nom=cf,Debut=1,Fin=20,Trace]<f>{80*x*exp(-0.2*x)}
+ \RepresenterMethodeIntegrale[Couleur=teal]<f>{5}{15}
+\end{GraphiqueTikz}
+\end{tcblisting}
+
+\begin{tcblisting}{listing engine=minted,minted language=latex,colframe=lightgray,colback=lightgray!5}
+\begin{GraphiqueTikz}
+ [x=0.66cm,y=0.033cm,Xmin=0,Xmax=21,Xgrille=2,Xgrilles=1,
+ Ymin=0,Ymax=160,Ygrille=20,Ygrilles=10]
+ \TracerAxesGrilles[Elargir=2.5mm]{auto}{auto}
+ \DefinirCourbe[Couleur=red,Nom=cf,Debut=1,Fin=20,Trace]<f>{80*x*exp(-0.2*x)}
+ \RepresenterMethodeIntegrale
+ [Methode=RectanglesDroite,Couleur=orange,NbSubDiv=7]<f>{1}{10}
+\end{GraphiqueTikz}
+\end{tcblisting}
+
+\begin{tcblisting}{listing engine=minted,minted language=latex,colframe=lightgray,colback=lightgray!5}
+\begin{GraphiqueTikz}
+ [x=0.66cm,y=0.033cm,Xmin=0,Xmax=21,Xgrille=2,Xgrilles=1,
+ Ymin=0,Ymax=160,Ygrille=20,Ygrilles=10]
+ \TracerAxesGrilles[Elargir=2.5mm]{auto}{auto}
+ \DefinirCourbe[Couleur=red,Nom=cf,Debut=1,Fin=20,Trace]<f>{80*x*exp(-0.2*x)}
+ \RepresenterMethodeIntegrale
+ [Methode=RectanglesMilieu,Couleur=yellow,NbSubDiv=25]<f>{1}{20}
+\end{GraphiqueTikz}
+\end{tcblisting}
+
+\begin{tcblisting}{listing engine=minted,minted language=latex,colframe=lightgray,colback=lightgray!5}
+\begin{GraphiqueTikz}
+ [x=0.66cm,y=0.033cm,Xmin=0,Xmax=21,Xgrille=2,Xgrilles=1,
+ Ymin=0,Ymax=160,Ygrille=20,Ygrilles=10]
+ \TracerAxesGrilles[Elargir=2.5mm]{auto}{auto}
+ \DefinirCourbe[Couleur=red,Nom=cf,Debut=1,Fin=20,Trace]<f>{80*x*exp(-0.2*x)}
+ \RepresenterMethodeIntegrale
+ [Methode=Trapezes,Couleur=pink,Remplir=false]<f>{1}{20}
+\end{GraphiqueTikz}
+\end{tcblisting}
+
+\subsection{Méthode de Monte-Carlo}\label{montecarlo}
+
+L'idée est de proposer une commande pour simuler un calcul intégral via la méthode de Monte-Carlo.
+
+Le code se charge de simuler les \textit{tirages}, et les résultats peuvent être stockés dans des macros.
+
+\begin{tcblisting}{listing engine=minted,minted language=latex,colframe=lightgray,colback=lightgray!5,listing only}
+%dans l'environnement GraphiqueTikz
+\SimulerMonteCarlo[clés]<fonction>{nb essais}[\nbptsmcok][\nbptsmcko]
+\end{tcblisting}
+
+Les \MontreCode{Clés} disponibles sont :
+
+\begin{itemize}
+ \item \MontreCode{Couleurs} : couleurs des points, \MontreCode{blue/red} par défaut ;
+ \item \MontreCode{BornesX} : bornes \textit{horizontales} pour la simulation, valant \MontreCode{\textbackslash pflxmin,\textbackslash pflxmax} par défaut ;
+ \item \MontreCode{BornesY} : bornes \textit{verticales} pour la simulation, valant \MontreCode{\textbackslash pflymin,\textbackslash pflymax} par défaut.
+\end{itemize}
+
+Le deuxième argument, optionnel et entre \MontreCode{<...>}, est la fonction \textbf{précédemment définie} à utiliser.
+
+\smallskip
+
+Les deux derniers arguments, optionnels et entre \MontreCode{[...]}, sont les macros dans lesquelles sont stockées les résultats de la simulation. Ces macros sont \MontreCode{\textbackslash nbptsmcok} et \MontreCode{\textbackslash nbptsmcko} par défaut.
+
+À noter que la macro \MontreCode{\textbackslash nbptsmc} permet de récupérer le nombre de points utilisés.
+
+\begin{tcblisting}{listing engine=minted,minted language=latex,colframe=lightgray,colback=lightgray!5}
+%avec \sisetup{group-minimum-digits=4} pour le formatage des "milliers"
+
+\begin{GraphiqueTikz}%
+ [x=10cm,y=10cm,Xmin=0,Xmax=1,Xgrille=0.1,Xgrilles=0.05,
+ Ymin=0,Ymax=1,Ygrille=0.1,Ygrilles=0.05]
+ \TracerAxesGrilles[Elargir=2.5mm,Dernier]{auto}{auto}
+ \DefinirCourbe[Trace,Couleur=teal,Pas=0.001]<f>{sqrt(1-x^2)}
+ \SimulerMonteCarlo<f>{5000}
+\end{GraphiqueTikz}
+
+Le nombre de points bleus est de \textcolor{blue}{\num{\nbptsmcok}},
+le nombre de points rouges est de \textcolor{red}{\num{\nbptsmcko}}.
+
+La proportion de points bleus est de $\frac{\num{\nbptsmcok}}{\num{\nbptsmc}}
+\approx \ArrondirNum[4]{\nbptsmcok/\nbptsmc}$
+et $\frac{\pi}{4} \approx \ArrondirNum[4]{pi/4}$.
+\end{tcblisting}
+
+\pagebreak
+
\section{Commandes spécifiques des statistiques à deux variables}
\subsection{Le nuage de points}\label{nuage}
@@ -1767,6 +1899,7 @@ Les commandes disponibles sont :
\lstcmd{def spline~~~~~}{\DefinirCourbeSpline}{deftracfctspline}
\lstcmd{tracé spline~~~}{\TracerCourbeSpline}{deftracfctspline}
\lstcmd{tracé droite~~~}{\TracerDroite}{tracdroite}
+ \lstcmd{asymptote vert~}{\TracerAsymptote}{tracdroite}
\lstcmd{def points~~~~~}{\DefinirPts}{defpts}
\lstcmd{def image~~~~~~}{\DefinirImage}{defpts}
\lstcmd{marq pts~~~~~~~}{\MarquerPts}{markpts}
@@ -1781,6 +1914,8 @@ Les commandes disponibles sont :
\lstcmd{maximum~~~~~~~~}{\TrouverMaximum}{maximum}
\lstcmd{minimum~~~~~~~~}{\TrouverMinimum}{minimum}
\lstcmd{intégrale~~~~~~}{\TracerIntegrale}{integr}
+ \lstcmd{méthodes int~~~}{\RepresenterMethodeIntegrale}{methodesintergrales}
+ \lstcmd{Monte-Carlo~~~~}{\SimulerMonteCarlo}{montecarlo}
\lstcmd{tangente~~~~~~~}{\TracerTangente}{tgte}
\lstcmd{loi normale~~~~}{\DefinirLoiNormale}{loinormale}
\lstcmd{loi normale~~~~}{\TracerLoiNormale}{loinormale}
@@ -1798,6 +1933,7 @@ Les commandes disponibles sont :
\begin{quote}
\begin{verbatim}
+0.1.6 : Asymptote verticale + Méthodes intégrales (géom + Monte Carlo)
0.1.5 : Correction d'un bug sur les rajouts de valeurs + NÅ“ud pour une image + [en] version !
0.1.4 : Placement de texte
0.1.3 : Ajout de régressions avec le package xint-regression
diff --git a/graphics/pgf/contrib/tkz-grapheur/tex/tkz-grapheur.sty b/graphics/pgf/contrib/tkz-grapheur/tex/tkz-grapheur.sty
index 3de4286c8e..ce321f6d4b 100644
--- a/graphics/pgf/contrib/tkz-grapheur/tex/tkz-grapheur.sty
+++ b/graphics/pgf/contrib/tkz-grapheur/tex/tkz-grapheur.sty
@@ -2,9 +2,10 @@
% licence : Released under the LaTeX Project Public License v1.3c or later, see http://www.latex-project.org/lppl.txtf
\NeedsTeXFormat{LaTeX2e}
-\ProvidesPackage{tkz-grapheur}[2024/06/22 0.1.5.Des outils en TikZ pour travailler comme avec un grapheur]
+\ProvidesPackage{tkz-grapheur}[2024/07/13 0.1.6.Des outils en TikZ pour travailler comme avec un grapheur]
%====HISTORIQUE
+% v 0.1.6 Asymptote verticale + Monte Carlo + Méthode intégrales (rectangles, etc)
% v 0.1.5 Correction d'un bug avec les valeurs manuelles + NÅ“ud pour une image + [en] version !
% v 0.1.4 Ajout des placements de textes
% v 0.1.3 Régressions, avec xintreg (désactivable)
@@ -49,7 +50,7 @@
\if@lngenglish
\sisetup{mode=match,propagate-math-font=true,reset-math-version=false,reset-text-family=false,reset-text-series=false,reset-text-shape=false,text-family-to-math=true,text-series-to-math=true}
\else
- \sisetup{locale=FR,output-decimal-marker={,},mode=match,propagate-math-font=true,reset-math-version=false,reset-text-family=false,reset-text-series=false,reset-text-shape=false,text-family-to-math=true,text-series-to-math=true}
+ \sisetup{locale=FR,output-decimal-marker={,},mode=match,propagate-math-font=true,reset-math-version=false,reset-text-family=false,reset-text-series=false,reset-text-shape=false,text-family-to-math=true,text-series-to-math=true,group-minimum-digits=4}
\fi
\fi
@@ -106,6 +107,7 @@
%====STYLES DE BASE
\tikzset{pflnoeud/.style={}}
\tikzset{pflpoint/.style={line width=0.95pt}}
+\tikzset{pflpointmc/.style={radius=0.875pt}}
\tikzset{pflpointc/.style={radius=1.75pt}}
\tikzset{pflpointnuage/.style={radius=1.75pt}}
\tikzset{pflcadre/.style={line width=0.8pt,gray}}
@@ -1012,6 +1014,103 @@
\end{scope}
}
+%====MONTE CARLO
+\defKV[graphiquetikzmontecarlo]{%
+ Couleurs=\def\graphtikzmccols{#1},%
+ BornesX=\def\graphtikzmcxbornes{#1},%
+ BornesY=\def\graphtikzmcybornes{#1}
+}
+
+\setKVdefault[graphiquetikzmontecarlo]{%
+ Couleurs={blue/red},%
+ BornesX={\pflxmin,\pflxmax},%
+ BornesY={\pflymin,\pflymax}
+}
+
+\NewDocumentCommand\SimulerMonteCarlo{ O{} D<>{f} m O{\nbptsmcok} O{\nbptsmcko} }{%
+ \restoreKV[graphiquetikzmontecarlo]%
+ \setKV[graphiquetikzmontecarlo]{#1}%
+ \StrCut{\graphtikzmccols}{/}{\tmpMCcolOK}{\tmpMCcolKO}%
+ \StrCut{\graphtikzmcxbornes}{,}{\tmpMCxmin}{\tmpMCxmax}%
+ \StrCut{\graphtikzmcybornes}{,}{\tmpMCymin}{\tmpMCymax}%
+ \xdef#4{0}%
+ \xdef#5{0}%
+ \xdef\nbptsmc{#3}%
+ \foreach \i in {1,...,#3}{%
+ \xdef\tmpMCrandX{\xintfloateval{random()*((\tmpMCxmax)-(\tmpMCxmin))+(\tmpMCxmin)}}%
+ \xdef\tmpMCrandY{\xintfloateval{random()*((\tmpMCymax)-(\tmpMCymin))+(\tmpMCymin)}}%
+ \xdef\tmpMCrandfX{\xintfloateval{#2(\tmpMCrandX)}}%
+ \xintifboolexpr{ \tmpMCrandfX > \tmpMCrandY }%
+ {%
+ \xdef#4{\xinteval{#4+1}}%
+ \filldraw[\tmpMCcolOK] (\tmpMCrandX,\tmpMCrandY) circle[pflpointmc] ;
+ }%
+ {%
+ \xdef#5{\xinteval{#5+1}}%
+ \filldraw[\tmpMCcolKO] (\tmpMCrandX,\tmpMCrandY) circle[pflpointmc] ;
+ }%
+ }%
+}
+
+%====MÉTHODES INTÉGRALES
+
+\defKV[graphiquetikzintegr]{%
+ Couleur=\def\graphtikzintgrcol{#1},%
+ CouleurRemplissage=\def\graphtikzintgrcolrempl{#1},%
+ NbSubDiv=\def\graphtikzintgrnb{#1},%
+ Methode=\def\graphtikzintgrtype{#1},%
+ Opacite=\def\graphtikzintgropac{#1}
+}
+
+\setKVdefault[graphiquetikzintegr]{%
+ Couleur=red,%
+ NbSubDiv=10,%
+ Methode=RectanglesGauche,%
+ Remplir=true,%
+ CouleurRemplissage={\graphtikzintgrcol!25},%
+ Opacite=0.25
+}
+
+\NewDocumentCommand\RepresenterMethodeIntegrale{ O{} D<>{f} m m }{%opts+nom_fct+a+b
+ \useKVdefault[graphiquetikzintegr]%
+ \setKV[graphiquetikzintegr]{#1}%
+ \ifboolKV[graphiquetikzintegr]{Remplir}%
+ {%
+ \tikzset{pflfigureintegr/.style={pfltrait,\graphtikzintgrcol,fill=\graphtikzintgrcolrempl,fill opacity=\graphtikzintgropac}}%
+ }%
+ {%
+ \tikzset{pflfigureintegr/.style={pfltrait,\graphtikzintgrcol}}%
+ }%
+ \tikzset{figureintegr/.style={pfltrait,\graphtikzintgrcol,fill=\graphtikzintgrcolrempl,fill opacity=\graphtikzintgropac}}%
+ \def\TmpH{(#4-#3)/\graphtikzintgrnb}
+ %rectangles gauches
+ \IfEq{\graphtikzintgrtype}{RectanglesGauche}%
+ {%
+ \foreach \i in {0,...,\inteval{\graphtikzintgrnb-1}}%
+ \draw[pflfigureintegr] ({#3+\i*\TmpH},{0}) rectangle++ ({\TmpH},{\xintfloateval{#2(#3+\i*\TmpH)}}) ;
+ }%
+ {}%
+ \IfEq{\graphtikzintgrtype}{RectanglesDroite}%
+ {%
+ \foreach \i in {0,...,\inteval{\graphtikzintgrnb-1}}%
+ \draw[pflfigureintegr] ({#3+\i*\TmpH},{0}) rectangle++ ({\TmpH},{\xintfloateval{#2(#3+(\i+1)*\TmpH)}}) ;
+ }%
+ {}%
+ \IfEq{\graphtikzintgrtype}{RectanglesMilieu}%
+ {%
+ \foreach \i in {0,...,\inteval{\graphtikzintgrnb-1}}%
+ \draw[pflfigureintegr] ({#3+\i*\TmpH},{0}) rectangle++ ({\TmpH},{\xintfloateval{#2(#3+(\i+0.5)*\TmpH)}}) ;
+ }%
+ {}%
+ \IfEq{\graphtikzintgrtype}{Trapezes}%
+ {%
+ \foreach \i in {0,...,\inteval{\graphtikzintgrnb-1}}%
+ \draw[pflfigureintegr] ({#3+\i*\TmpH},{0}) -- ({#3+\i*\TmpH},{\xintfloateval{#2(#3+\i*\TmpH)}}) -- ({#3+(\i+1)*\TmpH},{\xintfloateval{#2(#3+(\i+1)*\TmpH)}}) -- ({#3+(\i+1)*\TmpH},{0}) -- cycle ;
+ }%
+ {}%
+}
+
+
%====INTÉGRALES
%v2 avec modification de la clé [Type=...] ?
\defKV[GraphiqueTikzIntegr]{%
@@ -1961,6 +2060,16 @@
\end{scope}
}
+%====asymptote
+\NewDocumentCommand\TracerAsymptote{ O{} m D<>{} }{%
+ \restoreKV[GraphiquetikzDroite]%
+ \setKV[GraphiquetikzDroite]{#1}%
+ %tracé
+ \draw[pfltrait,{\useKV[GraphiquetikzDroite]{Couleur}},#3] ({#2},{\pflymin})--({#2},{\pflymax}) ;
+}
+
+
+%====MinMax
\defKV[GraphiqueTikzMinMax]{%
Pas=\def\pflminmaxstep{#1},%
Methode=\def\pflminmaxmethode{#1},%
@@ -2117,6 +2226,7 @@
\tikzset{tkzgrphnode/.style={}}
\tikzset{tkzgrphpoint/.style={line width=0.95pt}}
\tikzset{tkzgrphpointc/.style={radius=1.75pt}}
+\tikzset{tkzgrphpointmc/.style={radius=0.875pt}}
\tikzset{tkzgrphscatter/.style={radius=1.75pt}}
\tikzset{tkzgrphframe/.style={line width=0.8pt,gray}}
\tikzset{tkzgrphcurve/.style={line width=1.05pt}}
@@ -3898,11 +4008,11 @@
}
%====droite
-\defKV[GraphiquetikzDroite]{%
+\defKV[GraphicTikzLine]{%
Name=\def\pfldroitename{#1}
}
-\setKVdefault[GraphiquetikzDroite]{%
+\setKVdefault[GraphicTikzLine]{%
Slope=false,%
Color=black,%
Start={\pflxmin},%
@@ -3911,15 +4021,15 @@
}
\NewDocumentCommand\DrawLine{ O{} m m D<>{} }{%
- \restoreKV[GraphiquetikzDroite]%
- \setKV[GraphiquetikzDroite]{#1}%
+ \restoreKV[GraphicTikzLine]%
+ \setKV[GraphicTikzLine]{#1}%
%1er point
\path #2;%
\pgfgetlastxy{\macrox}{\macroy}%
\xdef\pfldtetikzxA{\xintfloateval{(\ConvertPtToCm{\macrox})/(\pflxunit)}}%
\xdef\pfldtetikzyA{\xintfloateval{(\ConvertPtToCm{\macroy})/(\pflyunit)}}%
%2ème point si besoin
- \ifboolKV[GraphiquetikzDroite]{Slope}%
+ \ifboolKV[GraphicTikzLine]{Slope}%
{%
\xdef\pfldtepente{\xintfloateval{#3}}%
}%
@@ -3936,24 +4046,33 @@
{%
\IfEq{\pfldroitename}{}%
{%
- \draw[tkzgrphline,{\useKV[GraphiquetikzDroite]{Color}},#4] (\pfldtetikzxA,\pflymin) -- (\pfldtetikzxA,\pflymax) ;
+ \draw[tkzgrphline,{\useKV[GraphicTikzLine]{Color}},#4] (\pfldtetikzxA,\pflymin) -- (\pfldtetikzxA,\pflymax) ;
}%
{%
- \draw[tkzgrphline,{\useKV[GraphiquetikzDroite]{Color}},#4,name path global=\pfldroitename] (\pfldtetikzxA,\pflymin) -- (\pfldtetikzxA,\pflymax) ;
+ \draw[tkzgrphline,{\useKV[GraphicTikzLine]{Color}},#4,name path global=\pfldroitename] (\pfldtetikzxA,\pflymin) -- (\pfldtetikzxA,\pflymax) ;
}%
}%
{%
\IfEq{\pfldroitename}{}%
{%
- \draw[tkzgrphline,{\useKV[GraphiquetikzDroite]{Color}},domain={\useKV[GraphiquetikzDroite]{Start}}:{\useKV[GraphiquetikzDroite]{End}},samples=2,#4] plot (\x,{\pfldtepente*(\x-\pfldtetikzxA)+\pfldtetikzyA}) ;
+ \draw[tkzgrphline,{\useKV[GraphicTikzLine]{Color}},domain={\useKV[GraphicTikzLine]{Start}}:{\useKV[GraphicTikzLine]{End}},samples=2,#4] plot (\x,{\pfldtepente*(\x-\pfldtetikzxA)+\pfldtetikzyA}) ;
}%
{%
- \draw[tkzgrphline,{\useKV[GraphiquetikzDroite]{Color}},domain={\useKV[GraphiquetikzDroite]{Start}}:{\useKV[GraphiquetikzDroite]{End}},samples=2,name path global=\pfldroitename,#4] plot (\x,{\pfldtepente*(\x-\pfldtetikzxA)+\pfldtetikzyA}) ;
+ \draw[tkzgrphline,{\useKV[GraphicTikzLine]{Color}},domain={\useKV[GraphicTikzLine]{Start}}:{\useKV[GraphicTikzLine]{End}},samples=2,name path global=\pfldroitename,#4] plot (\x,{\pfldtepente*(\x-\pfldtetikzxA)+\pfldtetikzyA}) ;
}%
}%
\end{scope}
}
+%====asymptote
+\NewDocumentCommand\DrawAsymptote{ O{} m D<>{} }{%
+ \restoreKV[GraphicTikzLine]%
+ \setKV[GraphicTikzLine]{#1}%
+ %tracé
+ \draw[tkzgrphline,{\useKV[GraphicTikzLine]{Color}},#3] ({#2},{\pflymin})--({#2},{\pflymax}) ;
+}
+
+%====minmax
\defKV[GraphicTikzMinMax]{%
Pas=\def\pflminmaxstep{#1},%
Method=\def\pflminmaxmethode{#1},%
@@ -4061,4 +4180,42 @@
\draw #2 node[tkzgrphnode,font=\pflnodefonte,text=\pflnodecol,\pfnodepos] {#3} ;
}
+%====MONTE CARLO
+\defKV[GraphicTikzmontecarlo]{%
+ Colors=\def\graphtikzmccols{#1},%
+ BoundsX=\def\graphtikzmcxbornes{#1},%
+ BoundsY=\def\graphtikzmcybornes{#1}
+}
+
+\setKVdefault[GraphicTikzmontecarlo]{%
+ Colors={blue/red},%
+ BoundsX={\pflxmin,\pflxmax},%
+ BoundsY={\pflymin,\pflymax}
+}
+
+\NewDocumentCommand\SimulateMonteCarlo{ O{} D<>{f} m O{\nbptsmcok} O{\nbptsmcko} }{%
+ \restoreKV[GraphicTikzmontecarlo]%
+ \setKV[GraphicTikzmontecarlo]{#1}%
+ \StrCut{\graphtikzmccols}{/}{\tmpMCcolOK}{\tmpMCcolKO}%
+ \StrCut{\graphtikzmcxbornes}{,}{\tmpMCxmin}{\tmpMCxmax}%
+ \StrCut{\graphtikzmcybornes}{,}{\tmpMCymin}{\tmpMCymax}%
+ \xdef#4{0}%
+ \xdef#5{0}%
+ \xdef\nbptsmc{#3}%
+ \foreach \i in {1,...,#3}{%
+ \xdef\tmpMCrandX{\xintfloateval{random()*((\tmpMCxmax)-(\tmpMCxmin))+(\tmpMCxmin)}}%
+ \xdef\tmpMCrandY{\xintfloateval{random()*((\tmpMCymax)-(\tmpMCymin))+(\tmpMCymin)}}%
+ \xdef\tmpMCrandfX{\xintfloateval{#2(\tmpMCrandX)}}%
+ \xintifboolexpr{ \tmpMCrandfX > \tmpMCrandY }%
+ {%
+ \xdef#4{\xinteval{#4+1}}%
+ \filldraw[\tmpMCcolOK] (\tmpMCrandX,\tmpMCrandY) circle[tkzgrphpointmc] ;
+ }%
+ {%
+ \xdef#5{\xinteval{#5+1}}%
+ \filldraw[\tmpMCcolKO] (\tmpMCrandX,\tmpMCrandY) circle[tkzgrphpointmc] ;
+ }%
+ }%
+}
+
\endinput \ No newline at end of file
diff --git a/graphics/pgf/contrib/wheelchart/README.md b/graphics/pgf/contrib/wheelchart/README.md
index ec414f3440..df9f81a74d 100644
--- a/graphics/pgf/contrib/wheelchart/README.md
+++ b/graphics/pgf/contrib/wheelchart/README.md
@@ -2,9 +2,11 @@
## Diagrams with circular or other shapes using Ti*k*Z and LaTeX3
-Version 3.0 (2024/03/08)
+Version 4.0 (2024/07/28)
-This package is based on the package [Ti*k*Z](https://ctan.org/pkg/pgf) and can be used to draw various kinds of diagrams such as a bar chart, doughnut chart, infographic, pie chart, ring chart, square chart, sunburst chart, waffle chart and wheel chart with Ti*k*Z. It provides several options to customize the diagrams. It is also possible to specify a plot for the shape of the chart. Furthermore a legend can be added and the table of contents can be displayed as one of these diagrams.
+This package is based on the package [Ti*k*Z](https://ctan.org/pkg/pgf) and can be used to draw various kinds of diagrams such as bar charts, doughnut charts, infographics, pie charts, ring charts, square charts, sunburst charts, waffle charts and wheel charts.
+
+It provides several options to customize the diagrams. It is also possible to specify a plot for the shape of the chart. Furthermore a legend can be added and the table of contents can be displayed as one of these diagrams.
%% README.md
%% Copyright 2022-2024 Matthias Floré
diff --git a/graphics/pgf/contrib/wheelchart/wheelchart.pdf b/graphics/pgf/contrib/wheelchart/wheelchart.pdf
index 2cfa0dd1be..808551f33c 100644
--- a/graphics/pgf/contrib/wheelchart/wheelchart.pdf
+++ b/graphics/pgf/contrib/wheelchart/wheelchart.pdf
Binary files differ
diff --git a/graphics/pgf/contrib/wheelchart/wheelchart.sty b/graphics/pgf/contrib/wheelchart/wheelchart.sty
index e2c8543976..21e232b099 100644
--- a/graphics/pgf/contrib/wheelchart/wheelchart.sty
+++ b/graphics/pgf/contrib/wheelchart/wheelchart.sty
@@ -18,7 +18,7 @@
\NeedsTeXFormat{LaTeX2e}
\RequirePackage{tikz}
\usetikzlibrary{calc}
-\ProvidesExplPackage{wheelchart}{2024/03/08}{3.0}{Diagrams with circular or other shapes using TikZ and LaTeX3}
+\ProvidesExplPackage{wheelchart}{2024/07/28}{4.0}{Diagrams with circular or other shapes using TikZ and LaTeX3}
%%> \subsection{Variables}
@@ -59,6 +59,8 @@
\fp_const:Nn \c__wheelchart_arc_data_end_factor_left_fp { 1 }
\fp_const:Nn \c__wheelchart_arc_data_end_factor_right_fp { 0 }
\fp_new:N \l__wheelchart_arc_data_line_sep_factor_fp
+\fp_new:N \l__wheelchart_arc_data_lines_pos_fp
+\fp_new:N \l__wheelchart_arc_data_lines_shift_fp
\fp_new:N \l__wheelchart_arc_data_pos_fp
\fp_new:N \l__wheelchart_arc_data_radius_plot_false_fp
\fp_new:N \l__wheelchart_arc_data_sep_fp
@@ -168,6 +170,9 @@
\int_new:N \l__wheelchart_lines_ext_top_dir_int
\int_new:N \l__wheelchart_max_list_items_int
+\regex_const:Nn \c__wheelchart_braces_regex { \{(.+)\} }
+\regex_const:Nn \c__wheelchart_key_braces_regex { [\w\s]+\{(.+)\} }
+
\seq_new:N \l__wheelchart_arc_data_seq
\seq_new:N \l__wheelchart_discrete_coefficients_first_seq
\seq_new:N \l__wheelchart_discrete_coefficients_second_seq
@@ -180,8 +185,8 @@
{
sign ( \l__wheelchart_arc_data_dir_fp ) *
(
- \cs:w c__wheelchart_arc_data_start_factor_\l__wheelchart_arc_data_align_tl _fp\cs_end:
- + \cs:w c__wheelchart_arc_data_end_factor_\l__wheelchart_arc_data_align_tl _fp\cs_end:
+ \cs:w c__wheelchart_arc_data_start_factor_\l__wheelchart_arc_data_align_tl _fp \cs_end:
+ + \cs:w c__wheelchart_arc_data_end_factor_\l__wheelchart_arc_data_align_tl _fp \cs_end:
)
}
\tl_new:N \l__wheelchart_arc_data_align_tl
@@ -262,7 +267,7 @@
\cs_new_protected:Npn \__wheelchart_caption_and_title:nnnnn #1#2#3#4#5
{
- \__wheelchart_if_text:nn {#1}
+ \__wheelchart_if_text:nnn {#1} { o }
{
\node [ anchor = #2 , align = #3 , / wheelchart / #1_style ]
at ( $ (#4) + ( 0 , { #5 * ( \pgfkeysvalueof { / wheelchart / #1~sep } ) } ) $ )
@@ -282,12 +287,12 @@
{
\fp_eval:n
{
- ( 1 - (#1) ) * \cs:w g__wheelchart_slice_inner_start_angle_\WCcount _fp\cs_end:
- + (#1) * \cs:w g__wheelchart_slice_inner_end_angle_\WCcount _fp\cs_end:
+ ( 1 - (#1) ) * \cs:w g__wheelchart_slice_inner_start_angle_\WCcount _fp \cs_end:
+ + (#1) * \cs:w g__wheelchart_slice_inner_end_angle_\WCcount _fp \cs_end:
+ \l__wheelchart_counter_or_clockwise_fp * (#2)
}
}
- { \fp_eval:n { \cs:w g__wheelchart_inner_radius_\WCcount _fp\cs_end: - (#4) } }
+ { \fp_eval:n { \cs:w g__wheelchart_inner_radius_\WCcount _fp \cs_end: - (#4) } }
)
! { \fp_eval:n {#3} } !
(
@@ -295,12 +300,12 @@
{
\fp_eval:n
{
- ( 1 - (#1) ) * \cs:w g__wheelchart_slice_outer_start_angle_\WCcount _fp\cs_end:
- + (#1) * \cs:w g__wheelchart_slice_outer_end_angle_\WCcount _fp\cs_end:
+ ( 1 - (#1) ) * \cs:w g__wheelchart_slice_outer_start_angle_\WCcount _fp \cs_end:
+ + (#1) * \cs:w g__wheelchart_slice_outer_end_angle_\WCcount _fp \cs_end:
+ \l__wheelchart_counter_or_clockwise_fp * (#2)
}
}
- { \fp_eval:n { \cs:w g__wheelchart_outer_radius_\WCcount _fp\cs_end: + (#4) } }
+ { \fp_eval:n { \cs:w g__wheelchart_outer_radius_\WCcount _fp \cs_end: + (#4) } }
)
$%note the () around the #i's to keep these contents together
}
@@ -374,10 +379,10 @@
\path let
\p { l__wheelchart_def_angle_1 } =
\__wheelchart_point_plot_true:nnnnn { \WCcount } {#1} {#2} { 0 }
- { \fp_eval:n { (#4) + 1 / \cs:w g__wheelchart_samples_\WCcount _fp\cs_end: } } ,
+ { \fp_eval:n { (#4) + 1 / \cs:w g__wheelchart_samples_\WCcount _fp \cs_end: } } ,
\p { l__wheelchart_def_angle_2 } =
\__wheelchart_point_plot_true:nnnnn { \WCcount } {#1} {#2} { 1 }
- { \fp_eval:n { (#4) + 1 / \cs:w g__wheelchart_samples_\WCcount _fp\cs_end: } }
+ { \fp_eval:n { (#4) + 1 / \cs:w g__wheelchart_samples_\WCcount _fp \cs_end: } }
in [ / utils / exec = { \__wheelchart_def_angle_aux: } ]
;
}
@@ -392,10 +397,10 @@
{
( 1 - (#2) ) *
(
- \cs:w g__wheelchart_slice_outer_start_angle_#1_fp\cs_end:
- - \cs:w g__wheelchart_slice_inner_start_angle_#1_fp\cs_end:
+ \cs:w g__wheelchart_slice_outer_start_angle_#1_fp \cs_end:
+ - \cs:w g__wheelchart_slice_inner_start_angle_#1_fp \cs_end:
)
- + (#2) * ( \cs:w g__wheelchart_slice_outer_end_angle_#1_fp\cs_end: - \cs:w g__wheelchart_slice_inner_end_angle_#1_fp\cs_end: )
+ + (#2) * ( \cs:w g__wheelchart_slice_outer_end_angle_#1_fp \cs_end: - \cs:w g__wheelchart_slice_inner_end_angle_#1_fp \cs_end: )
}
\cs_new:Npn \__wheelchart_def_angle_plot_false:nnnnn #1#2#3#4#5
@@ -410,11 +415,11 @@
(
sqrt
(
- ( \cs:w g__wheelchart_outer_radius_#1_fp\cs_end: + \cs:w g__wheelchart_inner_radius_#1_fp\cs_end: ) ^ 2
- - \cs:w g__wheelchart_outer_radius_#1_fp\cs_end: * \cs:w g__wheelchart_inner_radius_#1_fp\cs_end: *
+ ( \cs:w g__wheelchart_outer_radius_#1_fp \cs_end: + \cs:w g__wheelchart_inner_radius_#1_fp \cs_end: ) ^ 2
+ - \cs:w g__wheelchart_outer_radius_#1_fp \cs_end: * \cs:w g__wheelchart_inner_radius_#1_fp \cs_end: *
(
2 + 2 * cosd ( \__wheelchart_def_angle_plot_false_aux_angle:nn {#1} {#2} )
- + \cs:w g__wheelchart_outer_radius_#1_fp\cs_end: * \cs:w g__wheelchart_inner_radius_#1_fp\cs_end:
+ + \cs:w g__wheelchart_outer_radius_#1_fp \cs_end: * \cs:w g__wheelchart_inner_radius_#1_fp \cs_end:
*
(
(
@@ -425,25 +430,25 @@
)
)
)
- + \cs:w g__wheelchart_inner_radius_#1_fp\cs_end: *
+ + \cs:w g__wheelchart_inner_radius_#1_fp \cs_end: *
(
- \cs:w g__wheelchart_inner_radius_#1_fp\cs_end:
- - \cs:w g__wheelchart_outer_radius_#1_fp\cs_end:
+ \cs:w g__wheelchart_inner_radius_#1_fp \cs_end:
+ - \cs:w g__wheelchart_outer_radius_#1_fp \cs_end:
* cosd ( \__wheelchart_def_angle_plot_false_aux_angle:nn {#1} {#2} )
)
/ \__wheelchart_def_radius:nnn {#1} {#4} {#5}
)
- * \cs:w g__wheelchart_outer_radius_#1_fp\cs_end: * sind ( \__wheelchart_def_angle_plot_false_aux_angle:nn {#1} {#2} )
+ * \cs:w g__wheelchart_outer_radius_#1_fp \cs_end: * sind ( \__wheelchart_def_angle_plot_false_aux_angle:nn {#1} {#2} )
/
(
- ( \cs:w g__wheelchart_outer_radius_#1_fp\cs_end: + \cs:w g__wheelchart_inner_radius_#1_fp\cs_end: ) ^ 2
- - 2 * \cs:w g__wheelchart_outer_radius_#1_fp\cs_end: * \cs:w g__wheelchart_inner_radius_#1_fp\cs_end:
+ ( \cs:w g__wheelchart_outer_radius_#1_fp \cs_end: + \cs:w g__wheelchart_inner_radius_#1_fp \cs_end: ) ^ 2
+ - 2 * \cs:w g__wheelchart_outer_radius_#1_fp \cs_end: * \cs:w g__wheelchart_inner_radius_#1_fp \cs_end:
* ( 1 + cosd ( \__wheelchart_def_angle_plot_false_aux_angle:nn {#1} {#2} ) )
)
)
}
- + ( 1 - (#2) ) * ( \cs:w g__wheelchart_slice_inner_start_angle_#1_fp\cs_end: )
- + (#2) * ( \cs:w g__wheelchart_slice_inner_end_angle_#1_fp\cs_end: )
+ + ( 1 - (#2) ) * ( \cs:w g__wheelchart_slice_inner_start_angle_#1_fp \cs_end: )
+ + (#2) * ( \cs:w g__wheelchart_slice_inner_end_angle_#1_fp \cs_end: )
+ \l__wheelchart_counter_or_clockwise_fp * (#3)
}
}
@@ -451,7 +456,7 @@
\cs_new_protected:Npn \__wheelchart_def_coord:nnnn #1#2#3#4
{
\path let \p { l__wheelchart_coord } =
- ( \cs:w __wheelchart_#2_plot:nn\cs_end: {#4} { \fp_use:c { g__wheelchart_#2_radius_\WCcount _fp } } )
+ ( \cs:w __wheelchart_#2_plot:nn \cs_end: {#4} { \fp_use:c { g__wheelchart_#2_radius_\WCcount _fp } } )
in
[
/ utils / exec =
@@ -484,11 +489,11 @@
<
\l__wheelchart_gap_fp
?
- min ( \cs:w g__wheelchart_abs_half_angle_minus_new_angle_\WCcount _fp\cs_end: , \l__wheelchart_gap_max_angle_def_fp )
+ min ( \cs:w g__wheelchart_abs_half_angle_minus_new_angle_\WCcount _fp \cs_end: , \l__wheelchart_gap_max_angle_def_fp )
:
asind ( min ( \l__wheelchart_gap_fp / ( (#2) + 1 - sign (#2) ) , 1 ) ) + \l__wheelchart_gap_polar_fp
- %note the min ( ... , 1 ) such that the asind is always defined
- %also note the + 1 - sign (#2) such that the denominator is also nonzero if #2 = 0
+ %note the min ( ... , 1 ) so that the asind is always defined
+ %also note the + 1 - sign (#2) so that the denominator is also nonzero if #2 = 0
}
}
@@ -516,7 +521,7 @@
:
\g__wheelchart_new_angle_fp - \g__wheelchart_angle_fp
)
- / \cs:w g__wheelchart_samples_1_fp\cs_end:
+ / \cs:w g__wheelchart_samples_1_fp \cs_end:
}
\path let
\p { l__wheelchart_slices_orientation_1 } =
@@ -579,8 +584,8 @@
{
\fp_eval:n
{
- ( 1 - (#2) ) * ( \cs:w g__wheelchart_inner_radius_#1_fp\cs_end: - (#3) )
- + (#2) * ( \cs:w g__wheelchart_outer_radius_#1_fp\cs_end: + (#3) )
+ ( 1 - (#2) ) * ( \cs:w g__wheelchart_inner_radius_#1_fp \cs_end: - (#3) )
+ + (#2) * ( \cs:w g__wheelchart_outer_radius_#1_fp \cs_end: + (#3) )
}
}
@@ -591,26 +596,26 @@
{
\fp_gset:cn { g__wheelchart_slice_#1_#2_angle_\WCcount _fp }
{
- \cs:w g__wheelchart_#3angle_fp\cs_end: +
+ \cs:w g__wheelchart_#3angle_fp \cs_end: +
(
\l__wheelchart_counter_or_clockwise_fp *
- ( (#4) * \cs:w g__wheelchart_#1_gap_\WCcount _fp\cs_end: + \cs:w l__wheelchart_slices_#1_#2_angle_shift_fp\cs_end: )
+ ( (#4) * \cs:w g__wheelchart_#1_gap_\WCcount _fp \cs_end: + \cs:w l__wheelchart_slices_#1_#2_angle_shift_fp \cs_end: )
)
}
}
{
\fp_gset:cn { g__wheelchart_slice_#1_#2_angle_\WCcount _fp }
{
- \cs:w g__wheelchart_#3angle_fp\cs_end: +
+ \cs:w g__wheelchart_#3angle_fp \cs_end: +
(
\l__wheelchart_counter_or_clockwise_fp *
(
- (#4) * \cs:w g__wheelchart_#1_gap_\WCcount _fp\cs_end: + \cs:w l__wheelchart_slices_#1_#2_angle_shift_fp\cs_end:
+ (#4) * \cs:w g__wheelchart_#1_gap_\WCcount _fp \cs_end: + \cs:w l__wheelchart_slices_#1_#2_angle_shift_fp \cs_end:
- asind
(
- \cs:w g__wheelchart_inner_radius_\WCcount _fp\cs_end:
- * sind ( \cs:w l__wheelchart_slices_#1_#2_angle_shift_fp\cs_end: )
- / \cs:w g__wheelchart_outer_radius_\WCcount _fp\cs_end:
+ \cs:w g__wheelchart_inner_radius_\WCcount _fp \cs_end:
+ * sind ( \cs:w l__wheelchart_slices_#1_#2_angle_shift_fp \cs_end: )
+ / \cs:w g__wheelchart_outer_radius_\WCcount _fp \cs_end:
)
)
)
@@ -620,8 +625,8 @@
\cs_new_protected:Npn \__wheelchart_def_slice_keys:n #1
{
- {%note the double {{...}} such that the contents is in a group
- %such that pgfkeys which are specific to the current slice are local for this slice
+ {%note the double braces {{...}} so that the contents is in a group
+ %and in particular, pgfkeys which are specific to the current slice are local for this slice
\clist_if_in:NVT \l__wheelchart_slice_range_local_clist \WCcount
{
\pgfkeys { / wheelchart , slice_final /. expanded = { \exp_not:v { l__wheelchart_slice_\WCcount _keys_clist } } }
@@ -663,24 +668,24 @@
%g__wheelchart_WCcount_counter to be larger than \WCtotalcount
\tl_build_end:N \WClegend
\cs_set:Npn \WCcount { \theg__wheelchart_WCcount_counter }
- \cs_set:Npn \WCpercentage { \cs:w l__wheelchart_WCpercentage_\theg__wheelchart_WCcount_counter\cs_end: }
- \cs_set:Npn \WCpercentagerounded { \cs:w l__wheelchart_WCpercentagerounded_\theg__wheelchart_WCcount_counter\cs_end: }
+ \cs_set:Npn \WCpercentage { \cs:w l__wheelchart_WCpercentage_\theg__wheelchart_WCcount_counter \cs_end: }
+ \cs_set:Npn \WCpercentagerounded { \cs:w l__wheelchart_WCpercentagerounded_\theg__wheelchart_WCcount_counter \cs_end: }
\str_if_eq:eeTF { \l__wheelchart_type_tl } { etoc }
{
\cs_set:Npn \WCetocthelinkedname
- { \cs:w g__wheelchart_etoc_item_\l__wheelchart_etoc_name_tl _the_linked_name_\theg__wheelchart_WCcount_counter\cs_end: }
+ { \cs:w g__wheelchart_etoc_item_\l__wheelchart_etoc_name_tl _the_linked_name_\theg__wheelchart_WCcount_counter \cs_end: }
\cs_set:Npn \WCetocthelinkednumber
- { \cs:w g__wheelchart_etoc_item_\l__wheelchart_etoc_name_tl _the_linked_number_\theg__wheelchart_WCcount_counter\cs_end: }
+ { \cs:w g__wheelchart_etoc_item_\l__wheelchart_etoc_name_tl _the_linked_number_\theg__wheelchart_WCcount_counter \cs_end: }
\cs_set:Npn \WCetocthelinkedpage
- { \cs:w g__wheelchart_etoc_item_\l__wheelchart_etoc_name_tl _the_linked_page_\theg__wheelchart_WCcount_counter\cs_end: }
+ { \cs:w g__wheelchart_etoc_item_\l__wheelchart_etoc_name_tl _the_linked_page_\theg__wheelchart_WCcount_counter \cs_end: }
\cs_set:Npn \WCetocthename
- { \cs:w g__wheelchart_etoc_item_\l__wheelchart_etoc_name_tl _the_name_\theg__wheelchart_WCcount_counter\cs_end: }
+ { \cs:w g__wheelchart_etoc_item_\l__wheelchart_etoc_name_tl _the_name_\theg__wheelchart_WCcount_counter \cs_end: }
\cs_set:Npn \WCetocthenumber
- { \cs:w g__wheelchart_etoc_item_\l__wheelchart_etoc_name_tl _the_number_\theg__wheelchart_WCcount_counter\cs_end: }
+ { \cs:w g__wheelchart_etoc_item_\l__wheelchart_etoc_name_tl _the_number_\theg__wheelchart_WCcount_counter \cs_end: }
\cs_set:Npn \WCetocthepage
- { \cs:w g__wheelchart_etoc_item_\l__wheelchart_etoc_name_tl _the_page_\theg__wheelchart_WCcount_counter\cs_end: }
+ { \cs:w g__wheelchart_etoc_item_\l__wheelchart_etoc_name_tl _the_page_\theg__wheelchart_WCcount_counter \cs_end: }
\cs_set:Npn \WCetocthenumberofpages
- { \cs:w g__wheelchart_etoc_item_\l__wheelchart_etoc_name_tl _the_number_of_pages_\theg__wheelchart_WCcount_counter\cs_end: }
+ { \cs:w g__wheelchart_etoc_item_\l__wheelchart_etoc_name_tl _the_number_of_pages_\theg__wheelchart_WCcount_counter \cs_end: }
}
{
\clist_if_empty:NTF \l__wheelchart_header_clist
@@ -688,7 +693,7 @@
\int_step_inline:nn { \l__wheelchart_max_list_items_int }
{
\cs_set:cpn { WCvar\int_to_Alph:n {##1} }
- { \cs:w l__wheelchart_item_WCvar\int_to_Alph:n {##1}_\theg__wheelchart_WCcount_counter\cs_end: }
+ { \cs:w l__wheelchart_item_WCvar\int_to_Alph:n {##1}_\theg__wheelchart_WCcount_counter \cs_end: }
}
}
{
@@ -717,13 +722,13 @@
(
atand
(
- \cs:w g__wheelchart_#3_y_fp\cs_end: - \cs:w g__wheelchart_#4_y_fp\cs_end: ,
- \cs:w g__wheelchart_#3_x_fp\cs_end: - \cs:w g__wheelchart_#4_x_fp\cs_end:
+ \cs:w g__wheelchart_#3_y_fp \cs_end: - \cs:w g__wheelchart_#4_y_fp \cs_end: ,
+ \cs:w g__wheelchart_#3_x_fp \cs_end: - \cs:w g__wheelchart_#4_x_fp \cs_end:
)
- atand
(
- \cs:w g__wheelchart_#1_y_fp\cs_end: - \cs:w g__wheelchart_#2_y_fp\cs_end: ,
- \cs:w g__wheelchart_#1_x_fp\cs_end: - \cs:w g__wheelchart_#2_x_fp\cs_end:
+ \cs:w g__wheelchart_#1_y_fp \cs_end: - \cs:w g__wheelchart_#2_y_fp \cs_end: ,
+ \cs:w g__wheelchart_#1_x_fp \cs_end: - \cs:w g__wheelchart_#2_x_fp \cs_end:
)
)
}
@@ -969,9 +974,9 @@
\__wheelchart_for_loop:n
{
\pgfkeysvalueof { / wheelchart / before~slices }
- \int_step_inline:nn { \fp_eval:n { round ( \cs:w g__wheelchart_value_\WCcount _fp\cs_end: ) } }
- %note that \fp_eval:n { round ( ... ) } is necessary even when the value is an integer because if parse=pgfmath
- %then .0 is added and then \int_step_inline:nn { \cs:w g__wheelchart_value_\WCcount _fp\cs_end: } would give the messages
+ \int_step_inline:nn { \fp_eval:n { round ( \cs:w g__wheelchart_value_\WCcount _fp \cs_end: ) } }
+ %note that \fp_eval:n { round ( ... ) } is necessary even when the value is an integer because pgfmath
+ %could have added .0 and then \int_step_inline:nn { \cs:w g__wheelchart_value_\WCcount _fp \cs_end: } would give the messages
%Missing character: There is no . in font nullfont! Missing character: There is no 0 in font nullfont!
{
\int_gincr:N \g__wheelchart_discrete_count_int
@@ -1082,7 +1087,7 @@
\cs_set:Npe \WCmidangle
{ \fp_use:c { g__wheelchart_WCmidangle_\WCcount _fp } }
\pgfkeysvalueof { / wheelchart / for~loop~start }%this must be placed after the definition of macros such as \WCpercentage
- %such that these macros can be used in the key for loop start
+ %so that these macros can be used in the key for loop start
\begin { scope }
[
shift = { ( \WCmidangle \c_colon_str \fp_use:c { g__wheelchart_explode_\WCcount _fp } ) } ,
@@ -1161,16 +1166,21 @@
\fp_gset:cn { g__wheelchart_#1_\WCcount _fp } { \pgfmathresult }
}
-\cs_new_protected:Npn \__wheelchart_if_text:nn #1#2
+\cs_new_protected:Npn \__wheelchart_if_text:nnn #1#2#3
{
%https://tex.stackexchange.com/questions/42280/expand-away-empty-macros-within-ifthenelse
%https://tex.stackexchange.com/questions/44919/proper-way-to-detect-empty-blank-text
\begin { pgfinterruptpicture }
+ \DeclareDocumentCommand \\ {#2} {}
+ %for arc data, \\ is used with seq_set_split so has no optional argument thus then #2 is empty
+ %otherwise, #2 is o
+ %no s because an optional star does not apply in a node
+ %no ! because a space between \\ and its optional argument is allowed in a node
%https://tex.stackexchange.com/questions/459853/savebox-within-tikzpicture-results-in-an-empty-savebox
\hbox_gset:Nn \g__wheelchart_if_text_box { \pgfkeysvalueof { / wheelchart / #1 } }
\end { pgfinterruptpicture }
\dim_compare:nNnT { \box_wd:N \g__wheelchart_if_text_box } > { 0 pt }
- { {#2} }
+ { {#3} }
}
\cs_new_protected:Npn \__wheelchart_initial:n #1
@@ -1182,7 +1192,7 @@
\tl_if_empty:nTF {#1}
{ \cs_set:Npn \WCtotalcount { 0 } }
{
- \cs:w seq_set_split:Ne\l__wheelchart_expand_list_tl\cs_end:
+ \cs:w seq_set_split:Ne\l__wheelchart_expand_list_tl \cs_end:
\l__wheelchart_list_seq
{ \pgfkeysvalueof { / wheelchart / separator~rows } }
{#1}
@@ -1190,7 +1200,7 @@
\int_zero:N \l__wheelchart_max_list_items_int
\seq_map_indexed_inline:Nn \l__wheelchart_list_seq
{
- \cs:w seq_set_split:Ne\l__wheelchart_expand_list_items_tl\cs_end:
+ \cs:w seq_set_split:Ne\l__wheelchart_expand_list_items_tl \cs_end:
\l__wheelchart_list_items_seq
{ \pgfkeysvalueof { / wheelchart / separator~columns } }
{##2}
@@ -1245,7 +1255,7 @@
\etocsetnexttocdepth { -1 }%only for the next toc
\etocsetstyle { \l__wheelchart_etoc_level_tl } {} {}
{
- \int_compare:nNnT { \cs:w g__wheelchart_etoc_item_\l__wheelchart_etoc_name_tl _count_int\cs_end: } > { 0 }
+ \int_compare:nNnT { \cs:w g__wheelchart_etoc_item_\l__wheelchart_etoc_name_tl _count_int \cs_end: } > { 0 }
{
\cs_gset:cpe
{
@@ -1304,7 +1314,7 @@
{}
\int_gzero_new:c { g__wheelchart_etoc_item_\l__wheelchart_etoc_name_tl _count_int }
\pgfkeysvalueof { / wheelchart / etoc~code }
- \int_compare:nNnT { \cs:w g__wheelchart_etoc_item_\l__wheelchart_etoc_name_tl _count_int\cs_end: } > { 0 }
+ \int_compare:nNnT { \cs:w g__wheelchart_etoc_item_\l__wheelchart_etoc_name_tl _count_int \cs_end: } > { 0 }
{
\cs_gset:cpe
{
@@ -1331,32 +1341,32 @@
{
\__wheelchart_def_slice_keys:n
{ \__wheelchart_gdef_count_fp:nn { value } { value } }
- \cs_set:Npe \WCtotalnum { \fp_eval:n { \WCtotalnum + \cs:w g__wheelchart_value_\WCcount _fp\cs_end: } }
+ \cs_set:Npe \WCtotalnum { \fp_eval:n { \WCtotalnum + \cs:w g__wheelchart_value_\WCcount _fp \cs_end: } }
}
\int_step_inline:nn { \WCtotalcount }
{
\cs_set:cpe { l__wheelchart_WCpercentage_##1 }
- { \fp_eval:n { \cs:w g__wheelchart_value_##1_fp\cs_end: / ( \WCtotalnum / 100 ) } }
+ { \fp_eval:n { \cs:w g__wheelchart_value_##1_fp \cs_end: / ( \WCtotalnum / 100 ) } }
\cs_set:cpe { l__wheelchart_WCpercentagerounded_##1 }
- { \fp_eval:n { round ( \cs:w l__wheelchart_WCpercentage_##1\cs_end: , \pgfkeysvalueof { / wheelchart / perc~precision } ) } }
+ { \fp_eval:n { round ( \cs:w l__wheelchart_WCpercentage_##1 \cs_end: , \pgfkeysvalueof { / wheelchart / perc~precision } ) } }
}
}
\cs_new_protected:Npn \__wheelchart_inner_and_wheel_data:n #1
{
- \__wheelchart_if_text:nn { #1~data }
+ \__wheelchart_if_text:nnn { #1~data } { o }
{
\__wheelchart_def_fp:nn { #1_data_angle_pos } { #1~data~angle~pos }
\__wheelchart_def_fp:nn { #1_data_angle_shift } { #1~data~angle~shift }
\__wheelchart_def_fp:nn { #1_data_pos } { #1~data~pos }
\__wheelchart_def_fp:nn { #1_data_sep } { #1~data~sep }
\node [ align = left , / wheelchart / #1_data_style ] at
- \cs:w __wheelchart_point_plot_\bool_to_str:N \l__wheelchart_plot_bool :nnnnn\cs_end:
+ \cs:w __wheelchart_point_plot_\bool_to_str:N \l__wheelchart_plot_bool :nnnnn \cs_end:
{ \WCcount }
- { \cs:w l__wheelchart_#1_data_angle_pos_fp\cs_end: }
- { \cs:w l__wheelchart_#1_data_angle_shift_fp\cs_end: }
- { \cs:w l__wheelchart_#1_data_pos_fp\cs_end: }
- { \cs:w l__wheelchart_#1_data_sep_fp\cs_end: }
+ { \cs:w l__wheelchart_#1_data_angle_pos_fp \cs_end: }
+ { \cs:w l__wheelchart_#1_data_angle_shift_fp \cs_end: }
+ { \cs:w l__wheelchart_#1_data_pos_fp \cs_end: }
+ { \cs:w l__wheelchart_#1_data_sep_fp \cs_end: }
{ \pgfkeysvalueof { / wheelchart / #1~data } } ;
}
}
@@ -1366,13 +1376,13 @@
\cs_new_protected:Npn \__wheelchart_legend_append:nn #1#2
{
- \tl_build_put_right:NV \WClegend \l__wheelchart_legend_row_tl%note the V specifier such that \WClegend can also be combined
- %with an S column of the package siunitx and such that \WClegend can be used in a tblr environment of the package tabularray
+ \tl_build_put_right:NV \WClegend \l__wheelchart_legend_row_tl%note the V specifier so that \WClegend can also be combined
+ %with an S column of the package siunitx and so that \WClegend can be used in a tblr environment of the package tabularray
%and then the option expand=\WClegend needs to be given to the tblr environment
\tl_build_put_right:Nn \WClegend { \protect \setcounter { g__wheelchart_WCcount_counter } }%note the \protect for in case that
%\WClegend would be parsed in a particular way
%note that the counter g__wheelchart_WCcount_counter is defined globally and at the end of the previous \l__wheelchart_legend_row_tl
- %such that this value is defined and has the right value at the start of the next \l__wheelchart_legend_row_tl
+ %so that this value is defined and has the right value at the start of the next \l__wheelchart_legend_row_tl
%if \WClegend is used in a tblr environment of the package tabularray then \UseTblrLibrary{counter} is required
\tl_build_put_right:Ne \WClegend { { \int_eval:n {#1} } }
\tl_build_put_right:Nn \WClegend {#2}
@@ -1414,8 +1424,8 @@
{
atand
(
- \cs:w g__wheelchart_#3_y_fp\cs_end: - \cs:w g__wheelchart_#4_y_fp\cs_end: ,
- \cs:w g__wheelchart_#3_x_fp\cs_end: - \cs:w g__wheelchart_#4_x_fp\cs_end:
+ \cs:w g__wheelchart_#3_y_fp \cs_end: - \cs:w g__wheelchart_#4_y_fp \cs_end: ,
+ \cs:w g__wheelchart_#3_x_fp \cs_end: - \cs:w g__wheelchart_#4_x_fp \cs_end:
)
}
\fp_set:Nn \l__wheelchart_slices_arc_coord_fp
@@ -1440,7 +1450,7 @@
)
:
atand ( ( \l__wheelchart_slices_arc_A_fp - ( 1 / \l__wheelchart_slices_arc_A_fp ) ) / 2 )
- }%note the min ( \l__wheelchart_slices_arc_B_fp , 0 ) such that the acosd is always defined
+ }%note the min ( \l__wheelchart_slices_arc_B_fp , 0 ) so that the acosd is always defined
}
}
]
@@ -1486,8 +1496,8 @@
* abs ( ( 1 / \l__wheelchart_slices_arc_A_fp ) + \l__wheelchart_slices_arc_A_fp )
* sqrt
(
- ( \cs:w g__wheelchart_#3_x_fp\cs_end: - \cs:w g__wheelchart_#4_x_fp\cs_end: ) ^ 2
- + ( \cs:w g__wheelchart_#3_y_fp\cs_end: - \cs:w g__wheelchart_#4_y_fp\cs_end: ) ^ 2
+ ( \cs:w g__wheelchart_#3_x_fp \cs_end: - \cs:w g__wheelchart_#4_x_fp \cs_end: ) ^ 2
+ + ( \cs:w g__wheelchart_#3_y_fp \cs_end: - \cs:w g__wheelchart_#4_y_fp \cs_end: ) ^ 2
)
}
}
@@ -1539,11 +1549,11 @@
\fp_eval:n
{
(
- \cs:w g__wheelchart_#3_x_fp\cs_end: + \cs:w g__wheelchart_#4_x_fp\cs_end: +
+ \cs:w g__wheelchart_#3_x_fp \cs_end: + \cs:w g__wheelchart_#4_x_fp \cs_end: +
(
\g__wheelchart_slices_orientation_fp * ( \l__wheelchart_slices_arrow_coord_fp - 1 )
* \l__wheelchart_slices_arrow_A_fp
- * ( \cs:w g__wheelchart_#3_y_fp\cs_end: - \cs:w g__wheelchart_#4_y_fp\cs_end: )
+ * ( \cs:w g__wheelchart_#3_y_fp \cs_end: - \cs:w g__wheelchart_#4_y_fp \cs_end: )
)
)
/ 2
@@ -1552,11 +1562,11 @@
\fp_eval:n
{
(
- \cs:w g__wheelchart_#3_y_fp\cs_end: + \cs:w g__wheelchart_#4_y_fp\cs_end: +
+ \cs:w g__wheelchart_#3_y_fp \cs_end: + \cs:w g__wheelchart_#4_y_fp \cs_end: +
(
\g__wheelchart_slices_orientation_fp * ( \l__wheelchart_slices_arrow_coord_fp - 1 )
* \l__wheelchart_slices_arrow_A_fp
- * ( \cs:w g__wheelchart_#4_x_fp\cs_end: - \cs:w g__wheelchart_#3_x_fp\cs_end: )
+ * ( \cs:w g__wheelchart_#4_x_fp \cs_end: - \cs:w g__wheelchart_#3_x_fp \cs_end: )
)
)
/ 2
@@ -1593,10 +1603,10 @@
{
\fp_eval:n
{
- ( 1 - (#1) / max ( round ( \cs:w g__wheelchart_value_\WCcount _fp\cs_end: ) , 1 ) )
- * \cs:w g__wheelchart_slice_#2_start_angle_\WCcount _fp\cs_end:
- + (#1) * \cs:w g__wheelchart_slice_#2_end_angle_\WCcount _fp\cs_end:
- / max ( round ( \cs:w g__wheelchart_value_\WCcount _fp\cs_end: ) , 1 )
+ ( 1 - (#1) / max ( round ( \cs:w g__wheelchart_value_\WCcount _fp \cs_end: ) , 1 ) )
+ * \cs:w g__wheelchart_slice_#2_start_angle_\WCcount _fp \cs_end:
+ + (#1) * \cs:w g__wheelchart_slice_#2_end_angle_\WCcount _fp \cs_end:
+ / max ( round ( \cs:w g__wheelchart_value_\WCcount _fp \cs_end: ) , 1 )
}
}
@@ -1617,17 +1627,19 @@
arc_style /. style = {} ,
arc~around~line /. initial = 1 ,
arc~around~text /. default = true ,%this key is not set up with /.is choice or \bool_set:Nn
- %such that for example \WCvarA can be used as value for this key
+ %so that for example \WCvarA can be used as value for this key
arc~around~text /. initial = false ,
arc~data /. initial = {} ,
arc~data~align /. code = { \tl_set:Nn \l__wheelchart_arc_data_align_tl {#1} } ,%this key is not set up with /.is choice
- %such that for example \WCvarA can be used as value for this key
+ %so that for example \WCvarA can be used as value for this key
arc~data~align = center ,
arc~data~angle~pos /. initial = 0.5 ,
arc~data~angle~shift /. initial = 0 ,
arc~data~dir /. initial = 1 ,
arc~data~expand /. initial = n ,
arc~data~line~sep~factor /. initial = 1 ,
+ arc~data~lines~pos /. initial = 0.5 ,
+ arc~data~lines~shift /. initial = 0 ,
arc~data~pos /. initial = 1 ,
arc~data~sep /. initial = 1 ex / 1 cm ,
arc~data~style /. style = { arc_data_style /. style = {#1} } ,
@@ -1640,7 +1652,7 @@
arc~sep /. initial = 1 ex / 1 cm ,
at /. initial = { ( 0 , 0 ) } ,
before~slices /. initial = {} ,
- bool_set_true /. code = { \bool_set_true:N #1 } ,
+ bool_set_true /. code = \bool_set_true:N #1 ,
caption /. initial = {} ,
caption~left /. initial = {} ,
caption~left~sep /. initial = 0.5 ,
@@ -1670,9 +1682,9 @@
data~style /. style = { data_style /. style = {#1} } ,
data_style /. style = {} ,
discrete /. is~choice ,
- discrete / false /. code = { \bool_set_false:N \l__wheelchart_discrete_bool } ,
+ discrete / false /. code = \bool_set_false:N \l__wheelchart_discrete_bool ,
discrete / false /. value~forbidden ,
- discrete / true /. code = { \bool_set_true:N \l__wheelchart_discrete_bool } ,
+ discrete / true /. code = \bool_set_true:N \l__wheelchart_discrete_bool ,
discrete / true /. value~forbidden ,
discrete /. default = true ,
discrete = false ,
@@ -1777,7 +1789,7 @@
legend /. initial = {} ,
legend~columns /. initial = 1 ,
legend~entry /. initial = {} ,
- legend~only /. code = { \bool_set:Nn \l__wheelchart_legend_only_bool { \cs:w c_#1_bool\cs_end: } } ,
+ legend~only /. code = \bool_set:Nn \l__wheelchart_legend_only_bool { \cs:w c_#1_bool \cs_end: } ,
legend~only /. default = true ,
legend~only = false ,
legend~row /. code =
@@ -1800,7 +1812,7 @@
} ,
lines~ext~dirsep /. initial = 0 ,
lines~ext~fixed /. default = true ,%this key is not set up with /.is choice or \bool_set:Nn
- %such that for example \WCvarA can be used as value for this key
+ %so that for example \WCvarA can be used as value for this key
lines~ext~fixed /. initial = false ,
lines~ext~fixed~left /. initial =
{
@@ -1808,7 +1820,7 @@
{
\l__wheelchart_lines_ext_dir_int *
(
- \cs:w g__wheelchart_outer_radius_\WCcount _fp\cs_end: + \l__wheelchart_lines_sep_fp
+ \cs:w g__wheelchart_outer_radius_\WCcount _fp \cs_end: + \l__wheelchart_lines_sep_fp
+ \l__wheelchart_lines_fp + \l__wheelchart_lines_ext_fp
)
}
@@ -1819,7 +1831,7 @@
{
\l__wheelchart_lines_ext_dir_int *
(
- \cs:w g__wheelchart_outer_radius_\WCcount _fp\cs_end: + \l__wheelchart_lines_sep_fp
+ \cs:w g__wheelchart_outer_radius_\WCcount _fp \cs_end: + \l__wheelchart_lines_sep_fp
+ \l__wheelchart_lines_fp + \l__wheelchart_lines_ext_fp
)
}
@@ -1870,7 +1882,7 @@
outer_plot_style /. style = {} ,
outer~radius /. initial = 3 ,
perc~precision /. initial = 0 ,
- pie /. code = { \bool_set:Nn \l__wheelchart_pie_bool { \cs:w c_#1_bool\cs_end: } } ,
+ pie /. code = \bool_set:Nn \l__wheelchart_pie_bool { \cs:w c_#1_bool \cs_end: } ,
pie /. default = true ,
pie = false ,
plot /. style =
@@ -2029,12 +2041,12 @@
} ,
slices~inner /. initial =
{
- \fp_compare:nNnT { \cs:w g__wheelchart_inner_radius_\WCcount _fp\cs_end: } > { 0 }
+ \fp_compare:nNnT { \cs:w g__wheelchart_inner_radius_\WCcount _fp \cs_end: } > { 0 }
{
\fp_compare:nNnT
- { \cs:w g__wheelchart_inner_gap_\WCcount _fp\cs_end: }
+ { \cs:w g__wheelchart_inner_gap_\WCcount _fp \cs_end: }
<
- { \cs:w g__wheelchart_abs_half_angle_minus_new_angle_\WCcount _fp\cs_end: }
+ { \cs:w g__wheelchart_abs_half_angle_minus_new_angle_\WCcount _fp \cs_end: }
{
arc
[
@@ -2212,7 +2224,7 @@
{}
}
} ,
- slices~start~arrow/.style~2~args =
+ slices~start~arrow /. style~2~args =
{
slices~start =
{
@@ -2241,13 +2253,13 @@
(#1) -
\fp_eval:n
{
- \l__wheelchart_counter_or_clockwise_fp * \cs:w g__wheelchart_value_1_fp\cs_end: * 0.5
+ \l__wheelchart_counter_or_clockwise_fp * \cs:w g__wheelchart_value_1_fp \cs_end: * 0.5
* ( \l__wheelchart_total_angle_fp / \WCtotalnum )
}
}
} ,
start~half /. default = 90 ,
- title /. initial= {} ,
+ title /. initial = {} ,
title~left /. initial = {} ,
title~left~sep /. initial = 0.5 ,
title~left~style /. style = { title~left_style /. style = {#1} } ,
@@ -2283,13 +2295,13 @@
{
\cs_set:cpn {#1}
{ \use:e { \clist_item:nn {#2} { \int_mod:nn { \WCcount - 1 } { \clist_count:n {#2} } + 1 } } }
- %note the \use:e such that \WClist<name> also works when given as an argument to pgfmath
+ %note the \use:e so that \WClist<name> also works when given as an argument to pgfmath
%if the list contains a macro, for example
%\begin{tikzpicture}
%\def\n{1}
%\wheelchart[
- % value=\WClistA,
- % WClistA={\n}
+ % value=\WClistA,
+ % WClistA=\n
%]{\exampleforthismanual}
%\end{tikzpicture}
%https://tex.stackexchange.com/questions/671298/clist-item-and-pgfmathsetmacro-causing-an-error
@@ -2331,18 +2343,18 @@
{
\tl_set:Ne \l__wheelchart_key_name_tl { \pgfkeyscurrentname }%it is necessary to define \l__wheelchart_key_name_tl
%because \pgfkeyscurrentname will be overwritten by / errors / unknown~key /. expanded
- \regex_match:nVTF { \{(.+)\} } \l__wheelchart_key_name_tl
+ \regex_match:NVTF \c__wheelchart_braces_regex \l__wheelchart_key_name_tl
{
\tl_set:Ne \l__wheelchart_key_range_tl { \pgfkeyscurrentname }
- \regex_replace_all:nnN { \{(.+)\} } {} \l__wheelchart_key_name_tl
- \regex_replace_all:nnN { [\w\s]+\{(.+)\} } { \1 } \l__wheelchart_key_range_tl
+ \regex_replace_all:NnN \c__wheelchart_braces_regex {} \l__wheelchart_key_name_tl
+ \regex_replace_all:NnN \c__wheelchart_key_braces_regex { \1 } \l__wheelchart_key_range_tl
\str_if_eq:eeTF { \l__wheelchart_key_range_tl } { list }
{
\pgfkeys { / wheelchart , WC_list = { l__wheelchart_list_\l__wheelchart_key_name_tl } {#1} }
\pgfkeys
{
/ wheelchart ,
- \l__wheelchart_key_name_tl /. expand~once = { \cs:w l__wheelchart_list_\l__wheelchart_key_name_tl\cs_end: }
+ \l__wheelchart_key_name_tl /. expand~once = { \cs:w l__wheelchart_list_\l__wheelchart_key_name_tl \cs_end: }
}
}
{
@@ -2393,12 +2405,12 @@
\NewDocumentCommand \wheelchart { O {} m }
{
- {%note the double braces {{...}} such that the contents is in a group and such that & can be used in pgfmath in a tabular
+ {%note the double braces {{...}} so that the contents is in a group and so that & can be used in pgfmath in a tabular
\pgfkeys { / wheelchart , #1 }
\IfPackageLoadedTF { siunitx }
{ \cs_set:Npn \WCperc { \qty { \WCpercentagerounded } { \percent } } }
{ \cs_set:Npn \WCperc { \WCpercentagerounded \, \% } }%the definition of \WCperc is placed inside the command \wheelchart
- %such that \WCperc is not defined outside this command
+ %so that \WCperc is not defined outside this command
\bool_if:NTF \l__wheelchart_legend_only_bool
{
\__wheelchart_initial:n {#2}
@@ -2430,7 +2442,7 @@
{
\g__wheelchart_angle_fp +
(
- \l__wheelchart_counter_or_clockwise_fp * \cs:w g__wheelchart_value_\WCcount _fp\cs_end:
+ \l__wheelchart_counter_or_clockwise_fp * \cs:w g__wheelchart_value_\WCcount _fp \cs_end:
* ( \l__wheelchart_total_angle_fp / \WCtotalnum )
)
}
@@ -2455,7 +2467,7 @@
\fp_gset:cn { g__wheelchart_abs_half_angle_minus_new_angle_\WCcount _fp }
{ abs ( \g__wheelchart_angle_fp - \g__wheelchart_new_angle_fp ) / 2 }
\fp_set:Nn \l__wheelchart_abs_half_angle_minus_new_angle_minus_gap_polar_fp
- { \cs:w g__wheelchart_abs_half_angle_minus_new_angle_\WCcount _fp\cs_end: - \l__wheelchart_gap_polar_fp }
+ { \cs:w g__wheelchart_abs_half_angle_minus_new_angle_\WCcount _fp \cs_end: - \l__wheelchart_gap_polar_fp }
\fp_gzero_new:c { g__wheelchart_outer_gap_\WCcount _fp }
\fp_gzero_new:c { g__wheelchart_inner_gap_\WCcount _fp }
\bool_if:NTF \l__wheelchart_plot_bool
@@ -2466,7 +2478,7 @@
{
\fp_set:Nn \l__wheelchart_gap_max_angle_def_fp
{
- \cs:w g__wheelchart_inner_radius_\WCcount _fp\cs_end: > 0
+ \cs:w g__wheelchart_inner_radius_\WCcount _fp \cs_end: > 0
?
90
:
@@ -2490,8 +2502,8 @@
)
)
}
- \__wheelchart_def_gap:nn { outer } { \cs:w g__wheelchart_outer_radius_\WCcount _fp\cs_end: }
- \__wheelchart_def_gap:nn { inner } { \cs:w g__wheelchart_inner_radius_\WCcount _fp\cs_end: }
+ \__wheelchart_def_gap:nn { outer } { \cs:w g__wheelchart_outer_radius_\WCcount _fp \cs_end: }
+ \__wheelchart_def_gap:nn { inner } { \cs:w g__wheelchart_inner_radius_\WCcount _fp \cs_end: }
\fp_compare:nNnT { \l__wheelchart_abs_half_angle_minus_new_angle_minus_gap_polar_fp } > { 0.01 }
{
\fp_gset:cn { g__wheelchart_inner_radius_\WCcount _fp }
@@ -2508,7 +2520,7 @@
)
)
,
- \cs:w g__wheelchart_inner_radius_\WCcount _fp\cs_end:
+ \cs:w g__wheelchart_inner_radius_\WCcount _fp \cs_end:
)
}
}
@@ -2523,14 +2535,14 @@
\__wheelchart_gdef_count_fp:nn { data_pos } { data~pos }
\__wheelchart_gdef_count_fp:nn { data_sep } { data~sep }
\__wheelchart_def_angle:nnnn
- { \cs:w g__wheelchart_data_angle_pos_\WCcount _fp\cs_end: }
- { \cs:w g__wheelchart_data_angle_shift_\WCcount _fp\cs_end: }
- { \cs:w g__wheelchart_data_pos_\WCcount _fp\cs_end: }
- { \cs:w g__wheelchart_data_sep_\WCcount _fp\cs_end: }
+ { \cs:w g__wheelchart_data_angle_pos_\WCcount _fp \cs_end: }
+ { \cs:w g__wheelchart_data_angle_shift_\WCcount _fp \cs_end: }
+ { \cs:w g__wheelchart_data_pos_\WCcount _fp \cs_end: }
+ { \cs:w g__wheelchart_data_sep_\WCcount _fp \cs_end: }
\cs_set:Npe \WCdataangle { \pgfmathresult }
\__wheelchart_gdef_count_fp:nn { explode } { explode }
\pgfkeysvalueof { / wheelchart / for~loop~start }%this must be placed after the definition of macros such as
- %\WCpercentage such that these macros can be used in the key for loop start
+ %\WCpercentage so that these macros can be used in the key for loop start
\int_compare:nNnT { \WCcount } = { 1 }
{
\begin { scope }
@@ -2601,7 +2613,7 @@
[
shift /. expanded =
{
- \cs:w __wheelchart_point_plot_\bool_to_str:N \l__wheelchart_plot_bool :nnnnn\cs_end:
+ \cs:w __wheelchart_point_plot_\bool_to_str:N \l__wheelchart_plot_bool :nnnnn \cs_end:
{ \WCcount }
{ \l__wheelchart_slices_angle_pos_fp }
{ \l__wheelchart_slices_angle_shift_fp }
@@ -2639,9 +2651,9 @@
\__wheelchart_for_loop:n
{
\bool_if:NT \l__wheelchart_wheel_lines_bool
- %this is placed inside \__wheelchart_for_loop:n such that wheel lines can be applied for specific slices
+ %this is placed inside \__wheelchart_for_loop:n so that wheel lines can be applied for specific slices
{
- \int_step_inline:nnn { 0 } { \fp_eval:n { round ( \cs:w g__wheelchart_value_\WCcount _fp\cs_end: ) } }
+ \int_step_inline:nnn { 0 } { \fp_eval:n { round ( \cs:w g__wheelchart_value_\WCcount _fp \cs_end: ) } }
%note the \fp_eval:n { round ( ... ) } to avoid the messages Missing character: There is no ... in font nullfont!
{
\bool_if:NTF \l__wheelchart_plot_bool
@@ -2783,14 +2795,14 @@
\fp_compare:nF { \l__wheelchart_lines_fp == 0 && \l__wheelchart_lines_ext_fp == 0 }
{
\draw [ / wheelchart / lines_style ] let \p { l__wheelchart_lines_1 } =
- \cs:w __wheelchart_point_plot_\bool_to_str:N \l__wheelchart_plot_bool :nnnnn\cs_end:
+ \cs:w __wheelchart_point_plot_\bool_to_str:N \l__wheelchart_plot_bool :nnnnn \cs_end:
{ \WCcount }
- { \cs:w g__wheelchart_data_angle_pos_\WCcount _fp\cs_end: }
- { \cs:w g__wheelchart_data_angle_shift_\WCcount _fp\cs_end: }
- { \cs:w g__wheelchart_data_pos_\WCcount _fp\cs_end: }
+ { \cs:w g__wheelchart_data_angle_pos_\WCcount _fp \cs_end: }
+ { \cs:w g__wheelchart_data_angle_shift_\WCcount _fp \cs_end: }
+ { \cs:w g__wheelchart_data_pos_\WCcount _fp \cs_end: }
{ \l__wheelchart_lines_sep_fp + \l__wheelchart_lines_fp }
in
- \cs:w __wheelchart_point_plot_\bool_to_str:N \l__wheelchart_plot_bool :nnnnn\cs_end:
+ \cs:w __wheelchart_point_plot_\bool_to_str:N \l__wheelchart_plot_bool :nnnnn \cs_end:
{ \WCcount }
{ \l__wheelchart_lines_angle_pos_fp }
{ \l__wheelchart_lines_angle_shift_fp }
@@ -2838,7 +2850,7 @@
{
\fp_eval:n
{
- \l__wheelchart_lines_ext_dir_int * \cs:w g__wheelchart_data_sep_\WCcount _fp\cs_end:
+ \l__wheelchart_lines_ext_dir_int * \cs:w g__wheelchart_data_sep_\WCcount _fp \cs_end:
}
} ,
0
@@ -2849,7 +2861,7 @@
}
;
}
- \__wheelchart_if_text:nn { data }
+ \__wheelchart_if_text:nnn { data } { o }
{
\fp_compare:nNnTF { \l__wheelchart_lines_ext_fp } = { 0 }
{
@@ -2876,13 +2888,13 @@
\coordinate
[
at =
- \cs:w __wheelchart_point_plot_\bool_to_str:N \l__wheelchart_plot_bool :nnnnn\cs_end:
+ \cs:w __wheelchart_point_plot_\bool_to_str:N \l__wheelchart_plot_bool :nnnnn \cs_end:
{ \WCcount }
- { \cs:w g__wheelchart_data_angle_pos_\WCcount _fp\cs_end: }
- { \cs:w g__wheelchart_data_angle_shift_\WCcount _fp\cs_end: }
- { \cs:w g__wheelchart_data_pos_\WCcount _fp\cs_end: }
+ { \cs:w g__wheelchart_data_angle_pos_\WCcount _fp \cs_end: }
+ { \cs:w g__wheelchart_data_angle_shift_\WCcount _fp \cs_end: }
+ { \cs:w g__wheelchart_data_pos_\WCcount _fp \cs_end: }
{
- \cs:w g__wheelchart_data_sep_\WCcount _fp\cs_end: +
+ \cs:w g__wheelchart_data_sep_\WCcount _fp \cs_end: +
(
\l__wheelchart_lines_fp == 0
?
@@ -2902,7 +2914,7 @@
\node [ anchor = \l__wheelchart_data_anchor_tl , align = left , / wheelchart / data_style ]
at ( g__wheelchart_data_coordinate )
{ \pgfkeysvalueof { / wheelchart / data } } ;%a separate \node and not at the end of the \draw with lines_style
- %such that the key lines style is not passed to this \node
+ %so that the key lines style is not passed to this \node
}
\__wheelchart_def_fp:nn { arc_around_line } { arc~around~line }
\__wheelchart_def_fp:nn { arc_data_angle_pos } { arc~data~angle~pos }
@@ -2913,14 +2925,16 @@
\fp_gset:Nn \g__wheelchart_half_ex_over_one_cm_fp { 0.5 ex / 1 cm }%
\endpgfinterruptpicture%
\fp_gset:Nn \g__wheelchart_arc_data_aux_ii_fp { 0 }
- \__wheelchart_if_text:nn { arc~data }
+ \__wheelchart_if_text:nnn { arc~data } {}
{
- \cs_set:Npn \WCperc { \WCpercentagerounded { \, } { \% } }%such that \WCperc follows the arc if used in arc data
+ \cs_set:Npn \WCperc { \WCpercentagerounded { \, } { \% } }%so that \WCperc follows the arc if used in arc data
%this redefinition of \WCperc is local to the group of arc data
\__wheelchart_def_fp:nn { arc_data_pos } { arc~data~pos }
\__wheelchart_def_fp:nn { arc_data_sep } { arc~data~sep }
\__wheelchart_def_fp:nn { arc_data_line_sep_factor } { arc~data~line~sep~factor }
- \cs:w seq_set_split:Nn\pgfkeysvalueof { / wheelchart / arc~data~expand }\cs_end:
+ \__wheelchart_def_fp:nn { arc_data_lines_pos } { arc~data~lines~pos }
+ \__wheelchart_def_fp:nn { arc_data_lines_shift } { arc~data~lines~shift }
+ \cs:w seq_set_split:Nn\pgfkeysvalueof { / wheelchart / arc~data~expand } \cs_end:
\l__wheelchart_arc_data_seq
{ \\ }
{ \pgfkeysvalueof { / wheelchart / arc~data } }
@@ -2928,13 +2942,17 @@
{
\fp_set:Nn \l__wheelchart_arc_data_text_pos_fp
{
- \l__wheelchart_arc_data_pos_fp + 2 * \g__wheelchart_slices_orientation_fp
- * ( 2 * ####1 - \seq_count:N \l__wheelchart_arc_data_seq - 1 ) * sign ( \l__wheelchart_arc_data_dir_fp )
+ \l__wheelchart_arc_data_pos_fp + 4 * \g__wheelchart_slices_orientation_fp *
+ (
+ ####1 - 1 - \l__wheelchart_arc_data_lines_pos_fp * ( \seq_count:N \l__wheelchart_arc_data_seq - 1 )
+ + \l__wheelchart_arc_data_lines_shift_fp
+ )
+ * sign ( \l__wheelchart_arc_data_dir_fp )
* \l__wheelchart_arc_data_line_sep_factor_fp * \g__wheelchart_half_ex_over_one_cm_fp
/
(
- \cs:w g__wheelchart_outer_radius_\WCcount _fp\cs_end:
- - \cs:w g__wheelchart_inner_radius_\WCcount _fp\cs_end:
+ \cs:w g__wheelchart_outer_radius_\WCcount _fp \cs_end:
+ - \cs:w g__wheelchart_inner_radius_\WCcount _fp \cs_end:
+ 2 * \l__wheelchart_arc_data_sep_fp
)
}%the sign is needed because \l__wheelchart_arc_data_dir_fp is not necessarily 1 or -1
@@ -2957,9 +2975,9 @@
/ wheelchart / arc_data_style
}
}%get the length of the path
- %note the option overlay such that this does not increase the bounding box
+ %note the option overlay so that this does not increase the bounding box
%note the {} at the start of text and the braces around \fp_gset:Nn ...
- %such that the compilation does not stall
+ %so that the compilation does not stall
{ 0 }
{ 1 }
{ \l__wheelchart_plot_variable_tl }
@@ -3033,7 +3051,7 @@
{ \l__wheelchart_arc_data_text_pos_fp }
{ \l__wheelchart_arc_data_sep_fp + \g__wheelchart_half_ex_over_one_cm_fp }
+ \l__wheelchart_counter_or_clockwise_fp * \l__wheelchart_arc_data_dir_fp
- * \cs:w c__wheelchart_arc_data_start_factor_\l__wheelchart_arc_data_align_tl _fp\cs_end:
+ * \cs:w c__wheelchart_arc_data_start_factor_\l__wheelchart_arc_data_align_tl _fp \cs_end:
* \l__wheelchart_arc_data_total_angle_plot_false_fp
}
\path
@@ -3188,7 +3206,7 @@
}
\bool_if:NT \l__wheelchart_legend_row_bool
{ \__wheelchart_def_WClegend: }
- \__wheelchart_if_text:nn { middle }
+ \__wheelchart_if_text:nnn { middle } { o }
{ \node [ align = center , / wheelchart / middle_style ] at ( 0 , 0 ) { \pgfkeysvalueof { / wheelchart / middle } } ; }
\pgfkeysvalueof { / wheelchart / legend }
\end { scope }
@@ -3203,4 +3221,6 @@
\end { scope }
}
}
- } \ No newline at end of file
+ }
+
+\endinput \ No newline at end of file
diff --git a/graphics/pgf/contrib/wheelchart/wheelchart.tex b/graphics/pgf/contrib/wheelchart/wheelchart.tex
index 5f0857f1a6..952fc93a81 100644
--- a/graphics/pgf/contrib/wheelchart/wheelchart.tex
+++ b/graphics/pgf/contrib/wheelchart/wheelchart.tex
@@ -137,7 +137,7 @@
\setcounter{secnumdepth}{2}
\title{The \texttt{wheelchart} package\\[12pt]\large Diagrams with circular or other shapes using \tikzname{} and \LaTeX3}
\author{Matthias Floré}
-\date{Version 3.0 (2024/03/08)}%\\[12pt]
+\date{Version 4.0 (2024/07/28)}%\\[12pt]
\begin{document}
\iftotalpages%
\newsavebox{\fancyfootdefaultbox}%
@@ -155,7 +155,11 @@
\maketitle
\thispagestyle{fancy}
\begin{abstract}
-\noindent This package is based on the package |tikz| (see \cite{TtTaPGFp}) and can be used to draw various kinds of diagrams such as a bar chart, doughnut chart, infographic, pie chart, ring chart, square chart, sunburst chart, waffle chart and wheel chart with \tikzname. It provides several options to customize the diagrams. It is also possible to specify a plot for the shape of the chart. Furthermore a legend can be added and the table of contents can be displayed as one of these diagrams. Other tools for creating wheel charts or pie charts can be found in \cite{MpMP}, \cite{JhcIparowcltopotPGFm}, \cite{Tumfdb}, \cite{XdPCbupp} and \cite{RSVpaaMfp}.% This is the manual for version .
+\noindent This package is based on the package |tikz| (see \cite{TtTaPGFp}) and can be used to draw various kinds of diagrams such as bar charts, doughnut charts, infographics, pie charts, ring charts, square charts, sunburst charts, waffle charts and wheel charts.
+
+\noindent It provides several options to customize the diagrams. It is also possible to specify a plot for the shape of the chart. Furthermore a legend can be added and the table of contents can be displayed as one of these diagrams.
+
+\noindent Other tools for creating wheel charts or pie charts can be found in \cite{MpMP}, \cite{JhcIparowcltopotPGFm}, \cite{Tumfdb}, \cite{XdPCbupp} and \cite{RSVpaaMfp}.% This is the manual for version .
\end{abstract}
\section*{\contentsname}
\iftotalpages
@@ -257,7 +261,7 @@ The default wheelchart with these data is shown below.
\end{tikzpicture}
\end{codeexample}
\end{command}
-\newpage%such that this section has its own block in the header
+\newpage%so that this section has its own block in the header
\section{Additional macros}
\begin{command}{\WCangle\opt{\oarg{number}}\marg{angle pos}\marg{angle shift}\marg{pos}\marg{sep}}
This command gives the angle in degrees of the point which is constructed as follows.
@@ -670,6 +674,11 @@ In the example below, it is necessary to use |arc data expand=e| and to place |\
\begin{key}{/wheelchart/arc data line sep factor=\marg{factor} (initially 1)}
The contents of the key |arc data| can consist of multiple lines separated by |\\|. The \meta{factor} determines the spacing between these lines.
\end{key}
+\begin{key}{/wheelchart/arc data lines pos=\marg{factor} (initially 0.5)}
+\end{key}
+\begin{key}{/wheelchart/arc data lines shift=\marg{value} (initially 0)}
+The positioning of the lines of the key |arc data| is determined by the index $k-1-\text{|arc data lines pos|}\cdot(N-1)+\text{|arc data lines shift|}$ where $N$ is the number of lines and $k\in\{1,\dots,N\}$.
+\end{key}
\begin{key}{/wheelchart/arc data pos=\marg{value} (initially 1)}
\end{key}
\begin{key}{/wheelchart/arc data sep=\marg{value} (initially 1ex/1cm)}
@@ -738,7 +747,6 @@ This key accepts a list of keys which will be applied to the node where the cont
\begin{codeexample}[width=10cm]
\begin{tikzpicture}
\wheelchart[
- at={(5,2)},
caption=Caption,
caption style={font=\scshape},
caption left=Caption left,
@@ -2909,6 +2917,11 @@ The following example is an answer to the question on \url{https://tex.stackexch
\item In v2.0, the key |arc data angle shift| was not taken into account for the key |arc| in combination with the key |arc around text|. This is fixed in v3.0.
\item In v2.0, the number of items for each slice in the \meta{wheelchart data} which can be accessed with the macros |\WCvarA| and so on was determined by the number of items for the last slice. For example, |data{1}=\WCvarD| in combination with the \meta{wheelchart data} |1/black/A/a,2/gray/B| was not possible with v2.0. This is not a limitation anymore with v3.0.
\end{itemize}
+\item[] \textbf{Version 4.0 (2024/07/28)}
+\begin{itemize}
+\item Added the keys |arc data lines pos| and |arc data lines shift|.
+\item Solved an incompatibility if |\\| is used in a key such as |data| inside an environment such as |center|.
+\end{itemize}
\end{itemize}
\begin{thebibliography}{9}
\bibitem{JhcIparowcltopotPGFm}
diff --git a/graphics/pstricks/base/Changes b/graphics/pstricks/base/Changes
index 887654e5b9..5871e81cb9 100644
--- a/graphics/pstricks/base/Changes
+++ b/graphics/pstricks/base/Changes
@@ -1,4 +1,4 @@
-% $Id: Changes 805 2023-11-06 20:31:22Z herbert $
+% $Id: Changes 913 2024-07-09 16:27:10Z herbert $
For all changes see file History! Here are only the last one changes
listed.
@@ -11,6 +11,8 @@ pstricks.tex --------
versions like 2.47a have only changes in other files, but not
in this main package.
+3.20 2024-07-09 - changed \clipbox to \psclipbox to prevent clash with
+ other package which also uses \clipbox
3.19c 2024-02-02 - fix for check of wrong docname "pstricks.tex" in pstricks.sty (RN)
3.19b 2023-11-06 - Revert Code for \DocumentMetadata in pstricks.sty
3.19a 2023-10-30 - Try to suppress the warning with lualatex and a
diff --git a/graphics/pstricks/base/doc/pst-news24.pdf b/graphics/pstricks/base/doc/pst-news24.pdf
index bbc7bf404d..e102b8a602 100644
--- a/graphics/pstricks/base/doc/pst-news24.pdf
+++ b/graphics/pstricks/base/doc/pst-news24.pdf
Binary files differ
diff --git a/graphics/pstricks/base/doc/pst-news24.tex b/graphics/pstricks/base/doc/pst-news24.tex
index 3fb53580ab..bf357b88d4 100644
--- a/graphics/pstricks/base/doc/pst-news24.tex
+++ b/graphics/pstricks/base/doc/pst-news24.tex
@@ -41,6 +41,12 @@ broken.
Added a test for \verb|lualatex| before the default linewidth and color are set.
See last line in \verb|pstricks.tex|
+Moved macro \Lcs{clipbox} to \Lcs{psclipbox} to prevent a clash with package
+\LPack{adjustbox}
+from Martin Scharrer.
+
+
+
\section{\LuaLaTeX}\label{lua}
This version has a stable basic support for the lua package
\LPack{luapstricks.lua}, available from \url{https://github.com/zauguin/luapstricks}.
diff --git a/graphics/pstricks/base/doc/pstricks-bug.tex b/graphics/pstricks/base/doc/pstricks-bug.tex
index b5f9ba2c32..d4e0329dd3 100644
--- a/graphics/pstricks/base/doc/pstricks-bug.tex
+++ b/graphics/pstricks/base/doc/pstricks-bug.tex
@@ -97,7 +97,7 @@
% 15. When lines are very short, linestyle=dash may cause an error.
% PATCH: Input this file.
%
-% 16. \clipbox does not work.
+% 16. \psclipbox does not work.
% PATCH: Input this file.
%
% 17. Various nodes are missing \leavevmode, which can cause irregularities
@@ -509,8 +509,8 @@
stroke>
% 16.
-\def\clipbox{\@ifnextchar[{\clipbox@}{\clipbox@[\z@]}}
-\def\clipbox@[#1]{\pst@makebox\clipbox@@{#1}}
+\def\psclipbox{\@ifnextchar[{\psclipbox@}{\psclipbox@[\z@]}}
+\def\psclipbox@[#1]{\pst@makebox\psclipbox@@{#1}}
% 20.
\def\mixed@coor#1#2{%
diff --git a/graphics/pstricks/base/generic/pstricks.tex b/graphics/pstricks/base/generic/pstricks.tex
index 2f87e9895e..66b00657b9 100644
--- a/graphics/pstricks/base/generic/pstricks.tex
+++ b/graphics/pstricks/base/generic/pstricks.tex
@@ -88,8 +88,8 @@
\let\pgfforeach\foreach
%
-\def\fileversion{3.19c}
-\def\filedate{2024/02/02}
+\def\fileversion{3.20}
+\def\filedate{2024/07/09}
\pst@addfams{pstricks}
%
%\define@boolkey[psset]{pstricks}[Pst@]{useURWfonts}[true]{}
@@ -2609,13 +2609,13 @@
\AltClipMode
\fi
-\def\clipbox{\@ifnextchar[{\clipbox@}{\clipbox@[\z@]}}
+\def\psclipbox{\@ifnextchar[{\psclipbox@}{\psclipbox@[\z@]}}
% DG modification begin - Apr. 3, 1997
% From paulus@immd5.informatik.uni-erlangen.de (Dietrich Paulus)
%\def\clipbox@[#1]{\pst@makebox\clipbox@@{#1}}
-\def\clipbox@[#1]{\pst@makebox{\clipbox@@{#1}}}
+\def\psclipbox@[#1]{\pst@makebox{\psclipbox@@{#1}}}
% DG modification end
-\def\clipbox@@#1{%
+\def\psclipbox@@#1{%
\pssetlength\pst@dimg{#1}%
\leavevmode\hbox{%
\begin@psclip%
@@ -4119,10 +4119,19 @@ pop
\def\pst@picture{\@ifnextchar[{\pst@@picture}{\pst@@picture[]}}
\def\pst@@picture[#1]{\@ifnextchar({\pst@@picture@i[#1]}{\pst@@picture@@i[#1]}}%
\def\pst@@picture@@i[#1]{%
- \gdef\pscoor{(10,10)}%
+ \def\pic@coor{(0,0)(0,0)}%
+% \gdef\pscoor{(10,10)}%
\ifPst@calcframe
\typeout{>>>Check for file \jobname-\the\numexpr\ps@imagectr+1.psaux}%
- \IfFileExists{\jobname-\the\numexpr\ps@imagectr+1.psaux}{\input{\jobname-\the\numexpr\ps@imagectr+1.psaux}}{}%
+ \IfFileExists{\jobname-\the\numexpr\ps@imagectr+1.psaux}
+ {\input{\jobname-\the\numexpr\ps@imagectr+1.psaux}%
+ \xdef\pic@coor{(0,0)\pscoor}%
+ \typeout{----->>\pic@coor}%
+ \typeout{----->>\pscoor}%
+ }
+ {%\gdef\pscoor{(10,10)}
+ %\def\pic@coor{(0,0)(0,0)(10,10)}
+ }%
% \typeout{>>>\pscoor}%
\fi
\edef\@temp{[\noexpand#1]\pscoor}%
@@ -4168,7 +4177,7 @@ pop
\ifPst@pgffunctions\pstVerb{ pgffunctions }\fi% hv 2013-04-17
}
-\def\pic@coor{(0,0)(0,0)(10,10)}
+%\def\pic@coor{(0,0)(0,0)(10,10)}
\def\endpspicture{%
\ifPst@calcframe
\ifPSTlualatex
@@ -4236,7 +4245,7 @@ pop
\advance\pst@dimd\pst@dimb
\lower\pst@dimd\box\pst@hbox
\kern\pst@dimc}%
- \if@star\setbox\pst@hbox=\hbox{\clipbox@@\z@}\fi
+ \if@star\setbox\pst@hbox=\hbox{\psclipbox@@\z@}\fi
\leavevmode
\ifPst@draft
\expandafter\ifx\csname @latexerr\endcsname\relax
diff --git a/graphics/pstricks/contrib/pst-diffraction/Changes b/graphics/pstricks/contrib/pst-diffraction/Changes
index 9f4fe42b2b..d40c814ac7 100644
--- a/graphics/pstricks/contrib/pst-diffraction/Changes
+++ b/graphics/pstricks/contrib/pst-diffraction/Changes
@@ -1,4 +1,7 @@
pst-diffraction.tex --------
+2.06a 2024-07-15 - small fix in the documentation
+2.06 2024-07-10 - fix for missing contrast option for \psdiffractionCircular (Keno Wehr)
+2.05 2024-07-10 - removed unused optional argument gamma
2.04a 2024-06-29 - bugfix for the documentation header
- removed german and french docs
2.04 2010-01-05 - fix bug with missing \space for keywords
diff --git a/graphics/pstricks/contrib/pst-diffraction/README b/graphics/pstricks/contrib/pst-diffraction/README
index 86d7c0bb59..3d95ca6feb 100644
--- a/graphics/pstricks/contrib/pst-diffraction/README
+++ b/graphics/pstricks/contrib/pst-diffraction/README
@@ -1,7 +1,7 @@
%% Package `pst-diffraction.tex'
%%
-%% Manuel Luque (ml _at_ pstricks.de) (France)
-%% Herbert Voss (hv _at_ pstricks.de) (Germany)
+%% Manuel Luque (France)
+%% Herbert Voss (hvoss _at_ tug.org) (Germany)
%%
%% 2024-06-29
%%
@@ -19,24 +19,14 @@ Save the files
pst-diffraction.sty
pst-diffraction.tex
-pst-diffraction.pro
in any place, where latex or any other TeX program will find it.
-The pro file should go into $TEXMF$/dvips/pstricks/.
-
-pst-diffraction uses the extended version of the keyval package. So
-be sure that you
-- have installed xkeyval with the special pst-xkey
- (CTAN: tex-archive/macros/latex/contrib/xkeyval/)
-- do not load another package after pst-diffraction, which loads
- the old keyval.sty or pst-key.tex
You can run the documentation with
-make DE
-make E
-make FR
-or for all make all ;-) this will take a lot of time, because
+make
+
+or for all make all ;-) this may take some time, because
the images are very big.
If you like to get the documentation file in another format run
@@ -50,8 +40,7 @@ to get a PostScript file. But pay attention, that the pst-diffraction
files are saved in the above mentioned way, before you run
latex on the documentation file.
-The intermediate DVI file works only with viewers which can
-interprete the embedded PostScript code.
+Running the files with lualatex is possible, but may take a lot of
+time in fact of the heavy calculations.
-For another PDF output read the introduction from
-the documentation.
+hvoss@tug.org
diff --git a/graphics/pstricks/contrib/pst-diffraction/doc/pst-diffraction-doc.bib b/graphics/pstricks/contrib/pst-diffraction/doc/pst-diffraction-doc.bib
index 737b6dbba9..0d2ecefe77 100644
--- a/graphics/pstricks/contrib/pst-diffraction/doc/pst-diffraction-doc.bib
+++ b/graphics/pstricks/contrib/pst-diffraction/doc/pst-diffraction-doc.bib
@@ -1,45 +1,105 @@
-@STRING{dtk = {{D}ie {\TeX}nische {K}om{\"o}die} }
+@STRING{tugboat = {TUGboat} }
+@STRING{dtk = {Die {\TeX}nische Komödie} }
+@STRING{bretter = {Bretter, die die Welt bedeuten } }
+
+@Book{companion,
+ author = {Michel Goosens and Frank Mittelbach and Sebastian Rahtz and Dennis Roegel and Herbert Voß},
+ title = {The {\LaTeX} Graphics Companion},
+ publisher = {Lehmanns Media},
+ edition = {2},
+ date = {2022},
+ location = {Berlin},
+ note={Preprint of the english version, 2nd edition}
+}
+
+@Article{girou:01:,
+ author = {Denis Girou},
+ title = {Présentation de PSTricks},
+ journal = {Cahier {GUT}enberg},
+ year = 1994,
+ volume = {16},
+ month = apr,
+ pages = {21-70}
+}
+
+@Article{girou:02:,
+ author = {Timothy Van Zandt and Denis Girou},
+ title = {Inside {PST}ricks},
+ journal = TUGboat,
+ year = 1994,
+ volume = {15},
+ month = sep,
+ pages = {239-246}
+}
@Book{PostScript,
Author = {Kollock, Nikolai G.},
- Title = {PostScript richtig eingesetzt: vom Konzept zum
- praktischen Einsatz},
+ Title = {PostScript richtig eingesetzt: vom Konzept zum praktischen Einsatz},
Publisher = {IWT},
Address = {Vaterstetten},
year = 1989,
}
-@Manual{pstricks,
- Title = {PSTricks - {\PS} macros for Generic TeX},
- Author = {Timothy Van Zandt},
- Organization = {},
- Address = {\url{http://www.tug.org/application/PSTricks}},
- Note = {},
- year = 1993,
+@ctan{multido,
+title = {The Multido package},
+subtitle = {A loop facility for Generic TeX},
+author = {Van Zandt, Timothy and Voß, Herbert and Niepraschk, Rolf},
+url = {macros/latex/multido},
+urldate = {2018-09-01},
+version = {1.42}
}
-@Manual{pdftricks,
- Title = {PSTricks Support for pdf},
- Author = {Herbert Voss},
- Organization = {},
- Address = {\url{http://PSTricks.de/pdf/pdfoutput.phtml}},
- Note = {},
- year = 2002,
+@Book{PSTricks2,
+ author = {Herbert Voß},
+ title = {\texttt{PSTricks} -- {G}rafik f\"ur \TeX{} und \LaTeX},
+ edition = {7},
+ publisher = {DANTE {\eV} and Lehmanns Media},
+ date = {2016},
+ address = {Heidelberg and Hamburg}
}
-@Manual{miwi,
- Title = {References for \TeX{} and Friends},
- Author = {Michael Wiedmann and Peter Karp},
- Organization = {},
- Address = {\url{http://www.miwie.org/tex-refs/}},
- Note = {},
- year = 2003,
+@Book{PSTricksE,
+ author = {Herbert Voß},
+ title = {\texttt{PSTricks} -- Graphics and PostScript for \LaTeX},
+ edition = {1},
+ publisher = {UIT},
+ date = {2011},
+ address = {Cambridge -- UK}
+}
+
+@Book{LTXquick,
+ author = {Herbert Voß},
+ title = {{\LaTeX} quick reference},
+ edition = {1},
+ publisher = {UIT},
+ year = {2012},
+ address = {Cambridge -- UK}
+}
+
+@Book{presentations,
+ author = {Herbert Voß},
+ title = {Presentations with \LaTeX},
+ edition = {2},
+ publisher = {DANTE {\eV} and Lehmanns Media},
+ year = {2019},
+ address = {Heidelberg and Berlin}
}
+@Book{tbt,
+ author = {Victor Eijkhout},
+ title = {\TeX\ by Topic -- {A} \TeX{}nician Reference},
+ edition = {1},
+ publisher = {DANTE {\eV} and Lehmanns Media},
+ year = {2014},
+ address = {Heidelberg and Berlin}
+}
+
+
+
@Article{dtk02.1:voss:mathematischen,
- author = {Herbert Vo{\ss}},
+ author = {Herbert Voß},
title = {Die mathematischen {F}unktionen von {P}ostscript},
journal = dtk,
year = 2002,
@@ -49,7 +109,6 @@
month = mar,
pages = {40-47},
annote = bretter,
- keywords = {},
abstract = { \PS, faktisch genauso alt wie {\TeX}, ist im
Verh{\"a}ltnis dazu allgemein noch weniger bekannt, wenn es
darum geht zu beurteilen, was es denn nun im eigentlichen
@@ -61,31 +120,30 @@
gezeigt. }
}
-@Book{companion,
- author = {Michel Goosens and Frank Mittelbach and Sebastian Rahtz and Denis Roegel and Herbert Vo{\ss}},
- title = {The {\LaTeX} {G}raphics {C}ompanion},
- publisher = {{Addison-Wesley Publishing Company}},
- edition = 2,
- year = {2007},
- address = {Reading, Mass.}
+
+@Book{PostScript,
+ Author = {Kollock, Nikolai G.},
+ Title = {PostScript richtig eingesetzt: vom Konzept zum
+ praktischen Einsatz},
+ Publisher = {IWT},
+ Address = {Vaterstetten},
+ year = 1989,
}
-@Book{PSTricks2,
- author = {Herbert Vo\ss},
- title = {\texttt{PSTricks} -- {G}rafik f\"ur \TeX{} und \LaTeX},
- edition = {4.},
- publisher = {DANTE -- Lehmanns},
- year = {2007},
- address = {Heidelberg/Hamburg}
+@online{pstricks,
+ Title = {PSTricks - {\PS} macros for Generic TeX},
+ Author = {Timothy Van Zandt},
+ Organization = {},
+ url = {http://www.tug.org/application/PSTricks},
+ year = 1993,
}
-@Book{LaTeXRef,
- author = {Herbert Vo\ss},
- title = {\LaTeX\ Referenz},
- edition = {1.},
- publisher = {DANTE -- Lehmanns},
- year = {2007},
- address = {Heidelberg/Hamburg}
+
+@online{pdftricks,
+ Title = {PSTricks Support for pdf},
+ Author = {Herbert Voß},
+ url = {http://PSTricks.de/pdf/pdfoutput.phtml},
+ year = 2002,
}
@Book{diffraction,
@@ -107,12 +165,11 @@
publisher = {Society of {P}hoto {O}ptical}
}
-@Manual{Fresnel,
+@online{Fresnel,
Title = {Augustin Fresnel},
Author = {Manuel Luque},
Organization = {},
- Address = {\url{http://melusine.eu.org/syracuse/mluque/fresnel/augustin/fresnel.html}},
- Note = {},
+ url = {http://melusine.eu.org/syracuse/mluque/fresnel/augustin/fresnel.html},
year = 2004
}
diff --git a/graphics/pstricks/contrib/pst-diffraction/doc/pst-diffraction-doc.pdf b/graphics/pstricks/contrib/pst-diffraction/doc/pst-diffraction-doc.pdf
index 33256a5b76..d6e0b803ac 100644
--- a/graphics/pstricks/contrib/pst-diffraction/doc/pst-diffraction-doc.pdf
+++ b/graphics/pstricks/contrib/pst-diffraction/doc/pst-diffraction-doc.pdf
Binary files differ
diff --git a/graphics/pstricks/contrib/pst-diffraction/doc/pst-diffraction-doc.tex b/graphics/pstricks/contrib/pst-diffraction/doc/pst-diffraction-doc.tex
index f38f06f02e..382907d86c 100644
--- a/graphics/pstricks/contrib/pst-diffraction/doc/pst-diffraction-doc.tex
+++ b/graphics/pstricks/contrib/pst-diffraction/doc/pst-diffraction-doc.tex
@@ -1,13 +1,16 @@
%% $Id: pst-diffraction-docE.tex 134 2009-09-27 12:28:50Z herbert $
-\documentclass[11pt,english,BCOR10mm,DIV12,bibliography=totoc,parskip=false,smallheadings,
- headexclude,footexclude,oneside]{pst-doc}
-\usepackage{pst-grad,pst-diffraction}
-\let\pstDiffractionFV\fileversion
+\documentclass[11pt,english,BCOR=10mm,DIV=12,bibliography=totoc,parskip=false,headings=small,
+ headinclude=false,footinclude=false,twoside,english]{pst-doc}
-\usepackage{libertinus}
+%\usepackage{libertinus}
\usepackage{biblatex}
\addbibresource{pst-diffraction-doc.bib}
+\usepackage{xurl,pst-grad,pst-diffraction}
+\let\pstDiffractionFV\fileversion
+
+
+
\lstset{pos=t,wide=true,language=PSTricks,
morekeywords={psdiffractionRectangle,psdiffractionCircle,psdiffractionCircular},basicstyle=\footnotesize\ttfamily}
\lstdefinestyle{syntax}{backgroundcolor=\color{blue!20},numbers=none,xleftmargin=0pt,xrightmargin=0pt,
@@ -16,6 +19,15 @@
frame=single}
\newcommand*\psp{\texttt{pspicture}\xspace}
%
+
+\renewcommand\bgImage{%
+\begin{pspicture}(-3.5,-3.5)(3.5,3.5)
+\psdiffractionCircular[f=10,showFunc=true]
+\end{pspicture}
+}
+
+\def\eV{e.\kern-1pt{}V\kern-1pt}
+
\begin{document}
\title{\texttt{pst-diffraction}}
@@ -24,21 +36,18 @@ apertures; v.\pstDiffractionFV}
\author{Manuel Luque \\ Herbert Vo\ss}
\docauthor{Herbert Voß}
\date{\today}
-\maketitle
+%\maketitle
+\settitle
\tableofcontents
-
-\clearpage
-
-\begin{abstract}
-\noindent
+\psset{unit=1cm}
\vfill\noindent
Thanks to: Julien Cubizolles,
Doris Wagner,
Timothy Van Zandt, Keno Wehr,
Michael Zedler.
-\end{abstract}
+
\section{Optical setup}
@@ -136,7 +145,7 @@ By default the settings are as follows:
\begin{tabular}{@{}lll@{}}
\Lkeyword{a}=0.2e-3 in m; & \Lkeyword{k}=1; & \Lkeyword{f}=5 in m;\\
-\Lkeyword{lambda}=650 in nm; & \Lkeyword{pixel}=0.5; & \Lkeyword{contrast}=38, greates value;\\
+\Lkeyword{lambda}=650 in nm; & \Lkeyword{pixel}=0.5; & \Lkeyword{contrast}=38, greatest value;\\
\Lkeyword{colorMode}=3; & \Lkeyword{IIID}=\false.
\end{tabular}
@@ -156,7 +165,7 @@ By default the settings are as follows:
\end{pspicture}
\hfill
\begin{pspicture}(-1.5,-2.5)(3.5,3.5)
-\psdiffractionRectangle[IIID,Alpha=30,f=2.5]
+\psdiffractionRectangle[IIID,Alpha=30,f=2.5]% for Alpha see package pst-3dplot
\end{pspicture}
\end{lstlisting}
@@ -200,6 +209,7 @@ By default the settings are as follows:
\hfill
\begin{pspicture}(-1.5,-2)(3.5,3)
\psdiffractionRectangle[IIID,Alpha=20,a=0.5e-3,k=2,f=10,lambda=515,colorMode=1]
+% % for Alpha see package pst-3dplot
\end{pspicture}
\end{lstlisting}
@@ -211,6 +221,7 @@ By default the settings are as follows:
\hfill
\begin{pspicture}(-3.5,-1)(3.5,4)
\psdiffractionRectangle[IIID,Alpha=10,a=0.5e-3,k=20,f=10,pixel=0.5,lambda=450]
+% % for Alpha see package pst-3dplot
\end{pspicture}
\begin{lstlisting}[style=example]
@@ -220,6 +231,7 @@ By default the settings are as follows:
\hfill
\begin{pspicture}(-3.5,-1)(3.5,4)
\psdiffractionRectangle[IIID,Alpha=10,a=0.5e-3,k=20,f=10,pixel=0.5,lambda=450]
+% % for Alpha see package pst-3dplot
\end{pspicture}
\end{lstlisting}
@@ -230,7 +242,7 @@ It is also possible to render the diffraction pattern of two congruent rectangle
by using the option \Lkeyword{twoSlit}.
By default this option is deactivated.
The distance of the two rectangles is specified by the option $s$.
-The default for $s$ is $12e^{-3}\,\mathrm{m}$.
+The default for $s$ is $12\cdot10^{-3}\,\mathrm{m}$.
\begin{center}
@@ -249,12 +261,14 @@ The default for $s$ is $12e^{-3}\,\mathrm{m}$.
\begin{center}
\begin{pspicture}(-2,-1)(4,4)
\psdiffractionRectangle[IIID,Alpha=20,a=0.5e-3,k=10,f=10,pixel=0.5,lambda=650,twoSlit,s=2e-3]
+% % for Alpha see package pst-3dplot
\end{pspicture}
\end{center}
\begin{lstlisting}[pos=t,style=example,wide=false]
\begin{pspicture}(-2,-1)(4,4)
\psdiffractionRectangle[IIID,Alpha=20,a=0.5e-3,k=10,f=10,pixel=0.5,lambda=650,twoSlit,s=2e-3]
+% % for Alpha see package pst-3dplot
\end{pspicture}
\end{lstlisting}
@@ -271,9 +285,9 @@ cropped if its height exceeds the margin of the environment \Lenv{pspicture*}).
\hspace*{-1cm}%
\begin{LTXexample}[pos=t,style=example,wide=false]
-\begin{pspicture}(-3.5,-3.5)(3.5,3.5)
+\begin{pspicture*}(-3.5,-3.5)(3.5,3.5)
\psdiffractionCircular[r=0.5e-3,f=10,pixel=0.5,lambda=520]
-\end{pspicture}
+\end{pspicture*}
%
\begin{pspicture}(-3.5,-1.5)(3.5,3.5)
\psdiffractionCircular[IIID,r=0.5e-3,f=10,pixel=0.5,lambda=520]
@@ -281,6 +295,20 @@ cropped if its height exceeds the margin of the environment \Lenv{pspicture*}).
\end{LTXexample}
+\begin{LTXexample}[pos=t,style=example,wide=false]
+\begin{pspicture}(-3.5,-3.5)(3.5,3.5)
+\psdiffractionCircular[f=10]
+\end{pspicture}
+\hfill
+\begin{pspicture}(-3.5,-3.5)(3.5,3.5)
+\psdiffractionCircular[f=10,showFunc=true]
+\end{pspicture}
+\end{LTXexample}
+
+
+
+
+
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\section{Diffraction from two circular apertures}
Only the case of equal radii is provided, this common radius can be defined like in the
@@ -291,7 +319,7 @@ Furthermore one has to give the half distance of the circles measured from their
The rendering process could take some time in this case\dots
-\begin{pspicture}(-3,-3.5)(3.5,3.5)
+\begin{pspicture}(-3.5,-3.5)(4,3.5)
\psdiffractionCircular[r=0.5e-3,f=10,d=3e-3,lambda=515,twoHole]
\end{pspicture}
%
@@ -312,7 +340,7 @@ The rendering process could take some time in this case\dots
\hspace*{-1cm}%
-\begin{pspicture}(-3,-3)(3.5,4)
+\begin{pspicture}(-4,-3)(4,4)
\psdiffractionCircular[r=0.5e-3,f=10,d=2e-3,lambda=700,twoHole,colorMode=0]
\end{pspicture}
%
@@ -336,21 +364,22 @@ or $d=\frac{2r}{1.22}$ (see
\url{http://www.unice.fr/DeptPhys/optique/diff/trouscirc/diffrac.html}).
\hspace*{-1cm}%
-\begin{pspicture}(-3,-3.5)(3,3.5)
+\begin{pspicture}(-4,-3.5)(3,4.5)
\psdiffractionCircular[r=0.5e-3,f=10,d=4.1e-4,lambda=632,twoHole]
\end{pspicture}
%
-\begin{pspicture}(-3.5,-1.5)(3.5,3)
+\begin{pspicture}(-5,-2)(3.5,3)
\psdiffractionCircular[IIID,r=0.5e-3,f=10,d=4.1e-4,lambda=632,twoHole]
\end{pspicture}
+\bigskip
\begin{lstlisting}[style=example]
\begin{pspicture}(-3,-3.5)(3,3.5)
\psdiffractionCircular[r=0.5e-3,f=10,d=4.1e-4,lambda=632,twoHole]
\end{pspicture}
%
-\begin{pspicture}(-3.5,-1.5)(3.5,3)
+\begin{pspicture}(-5,-1.5)(3.5,3)
\psdiffractionCircular[IIID,r=0.5e-3,f=10,d=4.1e-4,lambda=632,twoHole]
\end{pspicture}
\end{lstlisting}
@@ -377,7 +406,7 @@ option \Lkeyword{colorMode}=0.
\makebox[\linewidth]{%
\begin{pspicture}(-3,-3)(3,2.5)
-\psdiffractionTriangle[f=10,h=1e-3,lambda=515,contrast=38]
+\psdiffractionTriangle[f=10,h=1e-3,lambda=515,contrast=18]
\end{pspicture}
\quad
\begin{pspicture}(-3,-3)(3,2.5)
@@ -391,7 +420,7 @@ option \Lkeyword{colorMode}=0.
\begin{lstlisting}[style=example]
\begin{pspicture}(-3,-3)(3,2.5)
-\psdiffractionTriangle[f=10,h=1e-3,lambda=515,contrast=38]
+\psdiffractionTriangle[f=10,h=1e-3,lambda=515,contrast=18]
\end{pspicture}
\quad
\begin{pspicture}(-3,-3)(3,2.5)
@@ -433,9 +462,8 @@ option \Lkeyword{colorMode}=0.
-\clearpage
-\section{List of all optional arguments for \texttt{pst-diff}}
-\Loption{pst-diff} is the short form for the keywords in the package \LPack{pst-diffraction}.
+\section{List of all optional arguments for \texttt{pst-diffraction}}
+%\Loption{pst-diff} is the short form for the keywords in the package \LPack{pst-diffraction}.
\xkvview{family=pst-diff,columns={key,type,default}}
@@ -444,7 +472,6 @@ option \Lkeyword{colorMode}=0.
\raggedright
\nocite{*}
\printbibliography
-%\bibliography{pst-diffraction-doc}
\printindex
diff --git a/graphics/pstricks/contrib/pst-diffraction/tex/pst-diffraction.tex b/graphics/pstricks/contrib/pst-diffraction/tex/pst-diffraction.tex
index 345fba99c4..2ff137b0a8 100644
--- a/graphics/pstricks/contrib/pst-diffraction/tex/pst-diffraction.tex
+++ b/graphics/pstricks/contrib/pst-diffraction/tex/pst-diffraction.tex
@@ -25,8 +25,8 @@
\ifx\PSTThreeDplotLoaded\endinput\else\input pst-3dplot.tex\fi
\ifx\PSTXKeyLoaded\endinput\else \input pst-xkey.tex \fi
%
-\def\fileversion{2.04a}
-\def\filedate{2024/06/29}
+\def\fileversion{2.06a}
+\def\filedate{2024/07/15}
\message{`PST-diffraction v\fileversion, \filedate\space (ML,hv)}%
\edef\PstAtCode{\the\catcode`\@} \catcode`\@=11\relax
\pst@addfams{pst-diff}
@@ -40,7 +40,7 @@
\define@key[psset]{pst-diff}{s}{\def\psk@Diffraction@Slit@s{#1 }} % distance entre les fentes
\define@key[psset]{pst-diff}{lambda}{\pst@checknum{#1}\psk@Diffraction@Slit@Lambda }% en nm
\define@key[psset]{pst-diff}{f}{\pst@checknum{#1}\psk@Diffraction@Slit@F }% focus en m
-\define@key[psset]{pst-diff}{gamma}{\pst@checknum{#1}\psk@Diffraction@gamma@G }
+%\define@key[psset]{pst-diff}{gamma}{\pst@checknum{#1}\psk@Diffraction@gamma@G }
\define@key[psset]{pst-diff}{pixel}{\pst@checknum{#1}\psk@Diffraction@Slit@pixel }
\define@key[psset]{pst-diff}{colorMode}{\pst@getint{#1}\psk@Diffraction@colorMode }
% 0 black and white inverse
@@ -65,7 +65,8 @@
\psset[pst-diff]{a=0.2e-3,f=5,k=1,r=1e-3,
d=6e-3,s=12e-3,h=0.5e-3,
lambda=650,pixel=0.5,
- contrast=38,gamma=0.8,twoHole=false,twoSlit=false,colorMode=3, scale=1,
+ contrast=38,%gamma=0.8,
+ twoHole=false,twoSlit=false,colorMode=3, scale=1,
IIID=false, showFunc=false}
%
% load the pstricks-add.pro only, if not already done
@@ -82,7 +83,7 @@
/focus \psk@Diffraction@Slit@F def
/widthSlit \psk@Diffraction@Slit@A def
/heightSlit \psk@Diffraction@Slit@k widthSlit mul def
- /Gamma \psk@Diffraction@gamma@G def
+ %/Gamma \psk@Diffraction@gamma@G def
/pixel \psk@Diffraction@Slit@pixel def
/SlitSeparation \psk@Diffraction@Slit@s def
\psk@Diffraction@Slit@Lambda tx@addDict begin wavelengthToRGB Red Green Blue end
@@ -162,7 +163,7 @@
\addto@pscode{%
% les dimensions sont en mètres
/focus \psk@Diffraction@Slit@F def
- /Gamma \psk@Diffraction@gamma@G def
+ %/Gamma \psk@Diffraction@gamma@G def
/pixel \psk@Diffraction@Slit@pixel def
/contrast 1e\psk@Diffraction@Slit@contrast def
/r \psk@Diffraction@Circular@r def
@@ -253,7 +254,8 @@
/y { yPts 2845 div } bind def
/R { x dup mul y dup mul add sqrt } bind def % R en m
/m Coeff R mul def
- 1 1e38 m J1Card Facteur x mul cos dup mul mul neg exp sub
+ % 1 1e38 m J1Card Facteur x mul cos dup mul mul neg exp sub
+ 1 contrast m J1Card Facteur x mul cos dup mul mul neg exp sub % fix by Keno Wehr
dup /intensity ED
dup dup
Red mul 3 -1 roll
@@ -283,7 +285,7 @@
\ifPst@Diffraction@IIID \else
newpath
R_limite neg %1.5 mul
- cm dup moveto
+ cm dup moveto
R_limite 2 mul cm 0 rlineto
0 R_limite 2 mul cm rlineto
R_limite neg 2 mul cm 0 rlineto
@@ -294,7 +296,8 @@
R_limite -0.001 0 {
/Radius exch def
/m Coeff Radius 0.01 mul mul def
- 1 1e38 m J1Card neg exp sub
+% 1 1e38 m J1Card neg exp sub
+ 1 contrast m J1Card neg exp sub % fix by keno wehr
dup /intensity ED
dup dup
Red mul 3 -1 roll % R
@@ -396,7 +399,7 @@
% les dimensions sont en mètres
/f \psk@Diffraction@Slit@F def
/h \psk@Diffraction@Triangle@h def
- /Gamma \psk@Diffraction@gamma@G def
+ %/Gamma \psk@Diffraction@gamma@G def
/L { \psk@Diffraction@Slit@Lambda 1e-9 mul} bind def % longueur d'onde en m
/pixel \psk@Diffraction@Slit@pixel def
/k { TwoPi f L mul div } bind def
diff --git a/graphics/pstricks/contrib/pst-node/Changes b/graphics/pstricks/contrib/pst-node/Changes
index 25e9da74cc..6ef6294b36 100644
--- a/graphics/pstricks/contrib/pst-node/Changes
+++ b/graphics/pstricks/contrib/pst-node/Changes
@@ -1,4 +1,5 @@
----- pst-node.tex
+1.45 2024-07-10 - fix \algparnode (Erich Schmidt)
1.44 2024-07-04 - modified \psparnode and \algparnode (Erich Schmidt)
1.43 2022-10-31 - fix for lualatex and empty value in \psk@nrot
1.42a 2020-04-01 - fix typo in the documentation
@@ -57,12 +58,14 @@
----- pst-node.sty
+1.02 2024-07-10 - update package versions (hv)
1.01 2012-09-18 - update package versions (hv)
1.00 2011-06-05 - make ancient variant 97 available (hv)
2008-12-12 first version (hv)
----- pst-node.pro
+1.15a 2024-07-10 - typos
1.15 2014-01-27 - comment out empty lines
1.14 2012-09-18 - add subroutines for global dict
1.13 2011-11-21 - fix bug for xelatex and scaling
diff --git a/graphics/pstricks/contrib/pst-node/README b/graphics/pstricks/contrib/pst-node/README
index 8e820c8558..29b62ef30c 100644
--- a/graphics/pstricks/contrib/pst-node/README
+++ b/graphics/pstricks/contrib/pst-node/README
@@ -4,7 +4,7 @@ if these packages are new to your TeX distribution.
For more information see the documentation of your LaTeX distribution
on installing packages into your LaTeX distribution or the
TeX Frequently Asked Questions:
-(http://www.tex.ac.uk/cgi-bin/texfaq2html?label=instpackages).
+(https://texfaq.org/#installing).
pst-node needs pstricks, which should be part of your
local TeX installation, otherwise get it from a CTAN server, f.ex.
diff --git a/graphics/pstricks/contrib/pst-node/doc/pst-node-doc.pdf b/graphics/pstricks/contrib/pst-node/doc/pst-node-doc.pdf
index 5f6e785518..f8bebfdf1e 100644
--- a/graphics/pstricks/contrib/pst-node/doc/pst-node-doc.pdf
+++ b/graphics/pstricks/contrib/pst-node/doc/pst-node-doc.pdf
Binary files differ
diff --git a/graphics/pstricks/contrib/pst-node/doc/pst-node-doc.tex b/graphics/pstricks/contrib/pst-node/doc/pst-node-doc.tex
index 5b23189446..a4d0faa964 100644
--- a/graphics/pstricks/contrib/pst-node/doc/pst-node-doc.tex
+++ b/graphics/pstricks/contrib/pst-node/doc/pst-node-doc.tex
@@ -1,7 +1,8 @@
%\RequirePackage{pdfmanagement-testphase}
\DocumentMetadata{}
-%% $Id: pst-node-doc.tex 438 2022-01-31 17:45:26Z herbert $
-\documentclass[fontsize=11pt,english,BCOR=10mm,DIV=12,bibliography=totoc,parskip=false,headings=small,
+%% $Id: pst-node-doc.tex 920 2024-07-11 07:41:04Z herbert $
+\documentclass[fontsize=11pt,english,BCOR=10mm,DIV=12,bibliography=totoc,parskip=false,
+ headings=small,
headinclude=false,footinclude=false,oneside]{pst-doc}
\listfiles
@@ -1357,7 +1358,7 @@ Here is how I used \Lcs{nput} to mark an angle in a previous example:
\end{pspicture}
\end{LTXexample}
-\clearpage%%%%%%%%%%%%%%%%%%%%%%%%%%
+%\clearpage%%%%%%%%%%%%%%%%%%%%%%%%%%
For the put macros there are several possibilities:
@@ -1412,7 +1413,7 @@ will produce the same effect as
\end{LTXexample}
-\clearpage%%%%%%%%%%%%%%%%%%%%%%%%%
+%\clearpage%%%%%%%%%%%%%%%%%%%%%%%%%
\subsection{Normal behavior with rotation}
If there are a point $B$ of type node and a point $A$ of any type then
@@ -1590,7 +1591,7 @@ connections:
You can include the node connections inside the \Lcs{psmatrix}, in the last entry
and right before \Lcs{endpsmatrix}. One advantage to doing this is that
-\Lkeyset{shortput=tab} is the default within a \Lcs{psmatrix}.
+\Lkeyset{shortput=tab} is the default within a \Lcs{psmatrix}.\label{tab}
\begin{LTXexample}
$ \begin{psmatrix}
@@ -2507,7 +2508,12 @@ For example,
\end{verbatim}
If your expression in \texttt{t} is algebraic, you must specify the keyword \texttt{algebraic}, as in
- \Lcs{fnpnode}\verb|[algebraic]{0.5}{x*(x+1)/2}{P}|.
+
+
+\begin{verbatim}
+\fnpnode[algebraic]{0.5}{x*(x+1)/2}{P}
+\end{verbatim}
+
\begin{LTXexample}[width=.35\textwidth]
\begin{pspicture}[showgrid](-.5,-.5)(2.5,3)
@@ -2574,7 +2580,7 @@ turn a list of coordinates into a node sequence P0 P1 ...
\begin{LTXexample}[width=.35\textwidth]
\begin{pspicture}[showgrid,algebraic](-.5,-.5)(2.5,2)
\pnodes{B}(.1,.1)(1;10)(*2 {x^2/4})(0,1.4)
-%definesuP0..P3--now join them
+% defines P0..P3 -- now join them
\psnline[arrowscale=2]{-D>}(0,3){B}
\end{pspicture}
\end{LTXexample}
@@ -2635,7 +2641,7 @@ Conversion between any angle unit and radian unit
\begin{LTXexample}[width=.35\textwidth]
\begin{pspicture}[showgrid,algebraic](-.5,-.5)(2.5,2)
\pnodes{P}(.1,.1)(1;10)(*2 {x^2/4})(0,1.4)
-%defines P0..P3--now join them
+% defines P0..P3 -- now join them
\psncurve[arrowscale=2]{-D>}(0,3){P}
\end{pspicture}
\end{LTXexample}
@@ -2644,7 +2650,7 @@ Conversion between any angle unit and radian unit
\begin{LTXexample}[width=.35\textwidth]
\begin{pspicture}[showgrid,algebraic](-.5,-.5)(2.5,2)
\pnodes{P}(.1,.1)(1;10)(*2 {x^2/4})(0,1.4)
-%defines P0..P3--now join them
+% defines P0..P3 -- now join them
\psnccurve[arrowscale=2]{-D>}(0,3){P}
\end{pspicture}
\end{LTXexample}
@@ -2753,7 +2759,7 @@ line from \verb|<basept>+<nodexpr1>| to \verb|<basept>+<nodexpr2>|.
\curvepnode{2}{\pfn}{P}% sets P, Ptang
\normalvec(Ptang){Q}\uput[-45](P){P}
\psxline[linecolor=red]{<->}(P){-(Ptang)}{1.5(Ptang)}
-\psxline[linecolor=blue]{->}(P){}{.5(Q)}%can use } for {(0,0)}
+\psxline[linecolor=blue]{->}(P){}{.5(Q)}% can use {} for {(0,0)}
\end{pspicture}
\end{LTXexample}
\vspace{2pc}
diff --git a/graphics/pstricks/contrib/pst-node/dvips/pst-node.pro b/graphics/pstricks/contrib/pst-node/dvips/pst-node.pro
index b75ef89863..4c7ee95623 100644
--- a/graphics/pstricks/contrib/pst-node/dvips/pst-node.pro
+++ b/graphics/pstricks/contrib/pst-node/dvips/pst-node.pro
@@ -1,13 +1,13 @@
-% $Id: pst-node.pro 438 2022-01-31 17:45:26Z herbert $
+% $Id: pst-node.pro 919 2024-07-10 18:31:27Z herbert $
%%
%% PostScript prologue for pst-node.tex.
-%% Version 1.15, 2014/01/27.
+%% Version 1.15a, 2024/07/10.
%%
%% This program can be redistributed and/or modified under the terms
%% of the LaTeX Project Public License Distributed from CTAN archives
%% in directory macros/latex/base/lppl.txt.
%
-%%%% EMPTY lines are not alowed!!! Problem with pst-eps -> \par
+%%%% EMPTY lines are not allowed!!! Problem with pst-eps -> \par
%
%
tx@Dict begin % from main pstricks dict
diff --git a/graphics/pstricks/contrib/pst-node/latex/pst-node.sty b/graphics/pstricks/contrib/pst-node/latex/pst-node.sty
index a7f494f031..4fe6a63aa2 100644
--- a/graphics/pstricks/contrib/pst-node/latex/pst-node.sty
+++ b/graphics/pstricks/contrib/pst-node/latex/pst-node.sty
@@ -1,10 +1,10 @@
-% $Id: pst-node.sty 438 2022-01-31 17:45:26Z herbert $
+% $Id: pst-node.sty 919 2024-07-10 18:31:27Z herbert $
%%
%% This is file `pst-node.sty'.
%%
%% IMPORTANT NOTICE:
%%
-%% pst-node.sty Copyright (C) 2004-2017 Herbert Voss <voss@perce.de>
+%% pst-node.sty Copyright (C) 2004-2024 Herbert Voss <voss@perce.de>
%% Rolf Niepraschk <Rolf.Niepraschk@ptb.de>
%%
%% This package may be distributed under the terms of the LaTeX Project
@@ -14,7 +14,7 @@
\NeedsTeXFormat{LaTeX2e}
\ProvidesPackage{pst-node}
- [2012/09/18 v1.01 LaTeX wrapper for `pst-node' (HV)]
+ [2024/07/10 v1.02 LaTeX wrapper for `pst-node' (HV)]
%
\newif\ifpst@OldVersion\pst@OldVersionfalse
\DeclareOption{97}{\pst@OldVersiontrue}
@@ -32,13 +32,14 @@
\@addtofilelist{pst-node97.pro}}{}%
\else
\RequirePackage{pstricks}
-\ProvidesPackage{pst-node}[2010/04/22 package wrapper for pst-node.tex]
+\ProvidesPackage{pst-node}[2024/07/10 package wrapper for pst-node.tex]
\input{pst-node.tex}
\ProvidesFile{pst-node.tex}
[\filedate\space \fileversion\space `pst-node' (tvz,hv)]
\IfFileExists{pst-node.pro}{%
\ProvidesFile{pst-node.pro}
- [2014/01/27 v. 1.15, PostScript prologue file (hv)]
+ [2024/07/10 v. 1.15a, PostScript prologue file (hv)]
\@addtofilelist{pst-node.pro}}{}%
\fi
+
\endinput
diff --git a/graphics/pstricks/contrib/pst-node/tex/pst-node.tex b/graphics/pstricks/contrib/pst-node/tex/pst-node.tex
index 8e618ef220..a653d76eea 100644
--- a/graphics/pstricks/contrib/pst-node/tex/pst-node.tex
+++ b/graphics/pstricks/contrib/pst-node/tex/pst-node.tex
@@ -1,4 +1,4 @@
-% $Id: pst-node.tex 654 2022-11-21 06:19:14Z herbert $
+% $Id: pst-node.tex 918 2024-07-10 17:41:55Z herbert $
%%
%% BEGIN pst-node.tex
%%
@@ -18,8 +18,8 @@
\ifx\PSTricksLoaded\endinput\else\input pstricks.tex \fi\relax
\ifx\PSTXKeyLoaded\endinput\else \input pst-xkey \fi
%
-\def\fileversion{1.44}
-\def\filedate{2024/07/04}
+\def\fileversion{1.45}
+\def\filedate{2024/07/10}
\message{ v\fileversion, \filedate}
%
\edef\TheAtCode{\the\catcode`\@}
@@ -1386,8 +1386,8 @@ tx@NodeDict \pst@tempg known
/dy YB YA sub def
/angle dy dx Atan def
/linelength \pst@number\pst@dimb \pst@number\psunit div def
- XA linelength angle cos mul add YA linelength angle sin mul add ){#4}%
-}
+ XA linelength angle cos mul add YA linelength angle sin mul add ){#4}}
+%
\def\psRelNode{\pst@object{psRelNode}}
\def\psRelNode@i(#1)(#2)#3#4{{% A - B - factor - node name
\use@par
@@ -1537,8 +1537,7 @@ tx@NodeDict \pst@tempg known
\def\trim@ #1{\trim@@ @#1 @ #1 @ @@}%
\def\trim@@ #1@ #2@ #3@@{\trim@@@\empty #2 @}%
\def\unbrace#1{#1}%
-\unbrace{\def\trim@@@ #1 } #2@#3{\expandafter\def%
- \expandafter #3\expandafter {#1}}%
+\unbrace{\def\trim@@@ #1 } #2@#3{\expandafter\def\expandafter #3\expandafter {#1}}%
%
\def\hasparen#1(#2\@nil{%check if expression contains a (--call with \hasparen#1(\@nil
\ifx\relax#2\relax \@parenfalse \else \@parentrue\fi}%
@@ -1577,24 +1576,28 @@ tx@NodeDict \pst@tempg known
\expandafter\testAlg\my@tempA|\@nil\my@next {#1}{#2}{#3}}
%
\def\psparnode#1#2#3{%
-% #1=t value, #2=x(t) y(t) in PS form,#3=node name,
- \pnode(! /t #1 def #2){#3}%
- \pnode(! /t #1 dup abs 1 lt {0.001 sub}{dup 0 gt {0.999} {1.001} ifelse mul} ifelse def
- #2
- /t #1 dup abs 1 lt {0.001 add}{dup 0 lt {0.999} {1.001} ifelse mul} ifelse def
- #2 3 -1 roll sub 3 1 roll exch sub 2 copy exch dup mul exch dup mul add sqrt
- dup 3 1 roll div 3 1 roll div){#3tang}% unit tangent vector at t
-}%
-
+ % #1=t value, #2=x(t) y(t) in PS form, #3=node name,
+ % also returns unit tangent vector at t with node #3tang
+ \pnode(! /t #1 def #2){#3}%
+ \pnode(! /t #1 dup abs 1 lt {0.001 sub} {dup 0 gt {0.999} {1.001} ifelse mul} ifelse def
+ #2
+ /t #1 dup abs 1 lt {0.001 add} {dup 0 lt {0.999} {1.001} ifelse mul} ifelse def
+ #2
+ 3 -1 roll sub 3 1 roll exch sub 2 copy exch dup mul exch dup mul add sqrt
+ dup 3 1 roll div 3 1 roll div){#3tang}% unit tangent vector at t
+}%
+%
\def\algparnode#1#2#3{%
-% #1=t value, #2=x(t) | y(t) in alg form,#3=node name,
- \pstVerb{tx@Dict begin /Func (#2) AlgParser cvx def end }
- \pnode(!/t #1 def Func){#3}
- \pnode(!/t #1 .001 sub def
- Func
- /t #1 dup abs 1 lt {0.001 add}{dup 0 lt {0.999} {1.001} ifelse mul } ifelse def
- Func 3 -1 roll sub 3 1 roll exch sub 2 copy exch dup mul exch dup mul add sqrt
- dup 3 1 roll div 3 1 roll div){#3tang}% unit tangent vector at t
+% #1=t value, #2=x(t) | y(t) in alg form, #3=node name,
+% also returns unit tangent vector at t with node #3tang
+ \pstVerb{tx@Dict begin /Func (#2) AlgParser cvx def end }%
+ \pnode(! /t #1 def Func){#3}%
+ \pnode(! /t #1 dup abs 1 lt {0.001 sub} {dup 0 gt {0.999} {1.001} ifelse mul} ifelse def
+ Func
+ /t #1 dup abs 1 lt {0.001 add}{dup 0 lt {0.999} {1.001} ifelse mul } ifelse def
+ Func
+ 3 -1 roll sub 3 1 roll exch sub 2 copy exch dup mul exch dup mul add sqrt
+ dup 3 1 roll div 3 1 roll div){#3tang}% unit tangent vector at t
}%
%
\def\nodex#1{%
@@ -1635,8 +1638,7 @@ tx@NodeDict \pst@tempg known
\nodexn{#3}{@TMP@a}%
\AplusB(#1)(@TMP@a){@TMP@B}%
\psline(@TMP@A)(@TMP@B)%
-}%
-\ignorespaces}%
+}\ignorespaces}%
%
\def\curvepnodes{\pst@object{curvepnodes}}
\def\curvepnodes@i#1#2#3#4{{%optional [plotpoints=xx]
@@ -1686,7 +1688,7 @@ tx@NodeDict \pst@tempg known
\else
\multido{\i=0+1}{\pst@cntc}{\pnode(!/x \pst@number\pst@dima\space def x #3){#4\i}%
\advance\pst@dima \pst@dimb}%
-\fi%
+\fi
\expandafter\xdef \csname \PST@root nodecount\endcsname {\the\pst@cnta}%
\ifnum\Pst@Debug>0 \typeout{Created nodes #40 .. #4\the\pst@cnta}\fi%
}\ignorespaces}%
diff --git a/graphics/tpic2pdftex/Makefile.in b/graphics/tpic2pdftex/Makefile.in
index 3ee8644210..35ec5ed91b 100644
--- a/graphics/tpic2pdftex/Makefile.in
+++ b/graphics/tpic2pdftex/Makefile.in
@@ -1,7 +1,7 @@
-# Makefile.in generated by automake 1.16.5 from Makefile.am.
+# Makefile.in generated by automake 1.17 from Makefile.am.
# @configure_input@
-# Copyright (C) 1994-2021 Free Software Foundation, Inc.
+# Copyright (C) 1994-2024 Free Software Foundation, Inc.
# This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
@@ -70,6 +70,8 @@ am__make_running_with_option = \
test $$has_opt = yes
am__make_dryrun = (target_option=n; $(am__make_running_with_option))
am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
+am__rm_f = rm -f $(am__rm_f_notfound)
+am__rm_rf = rm -rf $(am__rm_f_notfound)
pkgdatadir = $(datadir)/@PACKAGE@
pkgincludedir = $(includedir)/@PACKAGE@
pkglibdir = $(libdir)/@PACKAGE@
@@ -123,10 +125,9 @@ am__base_list = \
sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
am__uninstall_files_from_dir = { \
- test -z "$$files" \
- || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \
- || { echo " ( cd '$$dir' && rm -f" $$files ")"; \
- $(am__cd) "$$dir" && rm -f $$files; }; \
+ { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \
+ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \
+ $(am__cd) "$$dir" && echo $$files | $(am__xargs_n) 40 $(am__rm_f); }; \
}
am__installdirs = "$(DESTDIR)$(bindir)" "$(DESTDIR)$(man1dir)"
SCRIPTS = $(bin_SCRIPTS)
@@ -261,6 +262,7 @@ am__sh_e_setup = case $$- in *e*) set +e;; esac
# Default flags passed to test drivers.
am__common_driver_flags = \
--color-tests "$$am__color_tests" \
+ $$am__collect_skipped_logs \
--enable-hard-errors "$$am__enable_hard_errors" \
--expect-failure "$$am__expect_failure"
# To be inserted before the command running the test. Creates the
@@ -285,6 +287,11 @@ if test -f "./$$f"; then dir=./; \
elif test -f "$$f"; then dir=; \
else dir="$(srcdir)/"; fi; \
tst=$$dir$$f; log='$@'; \
+if test -n '$(IGNORE_SKIPPED_LOGS)'; then \
+ am__collect_skipped_logs='--collect-skipped-logs no'; \
+else \
+ am__collect_skipped_logs=''; \
+fi; \
if test -n '$(DISABLE_HARD_ERRORS)'; then \
am__enable_hard_errors=no; \
else \
@@ -345,20 +352,22 @@ distdir = $(PACKAGE)-$(VERSION)
top_distdir = $(distdir)
am__remove_distdir = \
if test -d "$(distdir)"; then \
- find "$(distdir)" -type d ! -perm -200 -exec chmod u+w {} ';' \
- && rm -rf "$(distdir)" \
+ find "$(distdir)" -type d ! -perm -700 -exec chmod u+rwx {} ';' \
+ ; rm -rf "$(distdir)" \
|| { sleep 5 && rm -rf "$(distdir)"; }; \
else :; fi
am__post_remove_distdir = $(am__remove_distdir)
DIST_ARCHIVES = $(distdir).tar.gz
-GZIP_ENV = --best
+GZIP_ENV = -9
DIST_TARGETS = dist-gzip
# Exists only to be overridden by the user if desired.
AM_DISTCHECK_DVI_TARGET = dvi
distuninstallcheck_listfiles = find . -type f -print
am__distuninstallcheck_listfiles = $(distuninstallcheck_listfiles) \
| sed 's|^\./|$(prefix)/|' | grep -v '$(infodir)/dir$$'
-distcleancheck_listfiles = find . -type f -print
+distcleancheck_listfiles = \
+ find . \( -type f -a \! \
+ \( -name .nfs* -o -name .smb* -o -name .__afs* \) \) -print
ACLOCAL = @ACLOCAL@
AMTAR = @AMTAR@
AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
@@ -414,8 +423,10 @@ ac_ct_CC = @ac_ct_CC@
am__include = @am__include@
am__leading_dot = @am__leading_dot@
am__quote = @am__quote@
+am__rm_f_notfound = @am__rm_f_notfound@
am__tar = @am__tar@
am__untar = @am__untar@
+am__xargs_n = @am__xargs_n@
bindir = @bindir@
build_alias = @build_alias@
builddir = @builddir@
@@ -594,7 +605,6 @@ cscope cscopelist:
am--fnord $(TEST_LOGS) $(TEST_LOGS:.log=.trs): $(am__force_recheck)
am--force-recheck:
@:
-
$(TEST_SUITE_LOG): $(TEST_LOGS)
@$(am__set_TESTS_bases); \
am__f_ok () { test -f "$$1" && test -r "$$1"; }; \
@@ -670,10 +680,37 @@ $(TEST_SUITE_LOG): $(TEST_LOGS)
result_count $$1 "XPASS:" $$xpass "$$red"; \
result_count $$1 "ERROR:" $$error "$$mgn"; \
}; \
+ output_system_information () \
+ { \
+ echo; \
+ { uname -a | $(AWK) '{ \
+ printf "System information (uname -a):"; \
+ for (i = 1; i < NF; ++i) \
+ { \
+ if (i != 2) \
+ printf " %s", $$i; \
+ } \
+ printf "\n"; \
+}'; } 2>&1; \
+ if test -r /etc/os-release; then \
+ echo "Distribution information (/etc/os-release):"; \
+ sed 8q /etc/os-release; \
+ elif test -r /etc/issue; then \
+ echo "Distribution information (/etc/issue):"; \
+ cat /etc/issue; \
+ fi; \
+ }; \
+ please_report () \
+ { \
+echo "Some test(s) failed. Please report this to $(PACKAGE_BUGREPORT),"; \
+echo "together with the test-suite.log file (gzipped) and your system"; \
+echo "information. Thanks."; \
+ }; \
{ \
echo "$(PACKAGE_STRING): $(subdir)/$(TEST_SUITE_LOG)" | \
$(am__rst_title); \
create_testsuite_report --no-color; \
+ output_system_information; \
echo; \
echo ".. contents:: :depth: 2"; \
echo; \
@@ -693,26 +730,25 @@ $(TEST_SUITE_LOG): $(TEST_LOGS)
create_testsuite_report --maybe-color; \
echo "$$col$$br$$std"; \
if $$success; then :; else \
- echo "$${col}See $(subdir)/$(TEST_SUITE_LOG)$${std}"; \
+ echo "$${col}See $(subdir)/$(TEST_SUITE_LOG) for debugging.$${std}";\
if test -n "$(PACKAGE_BUGREPORT)"; then \
- echo "$${col}Please report to $(PACKAGE_BUGREPORT)$${std}"; \
+ please_report | sed -e "s/^/$${col}/" -e s/'$$'/"$${std}"/; \
fi; \
echo "$$col$$br$$std"; \
fi; \
$$success || exit 1
check-TESTS: $(dist_check_SCRIPTS)
- @list='$(RECHECK_LOGS)'; test -z "$$list" || rm -f $$list
- @list='$(RECHECK_LOGS:.log=.trs)'; test -z "$$list" || rm -f $$list
- @test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG)
+ @$(am__rm_f) $(RECHECK_LOGS)
+ @$(am__rm_f) $(RECHECK_LOGS:.log=.trs)
+ @$(am__rm_f) $(TEST_SUITE_LOG)
@set +e; $(am__set_TESTS_bases); \
log_list=`for i in $$bases; do echo $$i.log; done`; \
- trs_list=`for i in $$bases; do echo $$i.trs; done`; \
- log_list=`echo $$log_list`; trs_list=`echo $$trs_list`; \
+ log_list=`echo $$log_list`; \
$(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) TEST_LOGS="$$log_list"; \
exit $$?;
recheck: all $(dist_check_SCRIPTS)
- @test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG)
+ @$(am__rm_f) $(TEST_SUITE_LOG)
@set +e; $(am__set_TESTS_bases); \
bases=`for i in $$bases; do echo $$i; done \
| $(am__list_recheck_tests)` || exit 1; \
@@ -741,7 +777,7 @@ distdir: $(BUILT_SOURCES)
distdir-am: $(DISTFILES)
$(am__remove_distdir)
- test -d "$(distdir)" || mkdir "$(distdir)"
+ $(AM_V_at)$(MKDIR_P) "$(distdir)"
@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
list='$(DISTFILES)'; \
@@ -827,7 +863,7 @@ dist dist-all:
distcheck: dist
case '$(DIST_ARCHIVES)' in \
*.tar.gz*) \
- eval GZIP= gzip $(GZIP_ENV) -dc $(distdir).tar.gz | $(am__untar) ;;\
+ eval GZIP= gzip -dc $(distdir).tar.gz | $(am__untar) ;;\
*.tar.bz2*) \
bzip2 -dc $(distdir).tar.bz2 | $(am__untar) ;;\
*.tar.lz*) \
@@ -837,7 +873,7 @@ distcheck: dist
*.tar.Z*) \
uncompress -c $(distdir).tar.Z | $(am__untar) ;;\
*.shar.gz*) \
- eval GZIP= gzip $(GZIP_ENV) -dc $(distdir).shar.gz | unshar ;;\
+ eval GZIP= gzip -dc $(distdir).shar.gz | unshar ;;\
*.zip*) \
unzip $(distdir).zip ;;\
*.tar.zst*) \
@@ -937,17 +973,17 @@ install-strip:
"INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
fi
mostlyclean-generic:
- -test -z "$(TEST_LOGS)" || rm -f $(TEST_LOGS)
- -test -z "$(TEST_LOGS:.log=.trs)" || rm -f $(TEST_LOGS:.log=.trs)
- -test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG)
+ -$(am__rm_f) $(TEST_LOGS)
+ -$(am__rm_f) $(TEST_LOGS:.log=.trs)
+ -$(am__rm_f) $(TEST_SUITE_LOG)
clean-generic:
- -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
+ -$(am__rm_f) $(CLEANFILES)
distclean-generic:
- -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
- -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
- -test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES)
+ -$(am__rm_f) $(CONFIG_CLEAN_FILES)
+ -test . = "$(srcdir)" || $(am__rm_f) $(CONFIG_CLEAN_VPATH_FILES)
+ -$(am__rm_f) $(DISTCLEANFILES)
maintainer-clean-generic:
@echo "This command is intended for maintainers to use"
@@ -1062,3 +1098,10 @@ $(tpic_files): Makefile
# Tell versions [3.59,3.63) of GNU make to not export all variables.
# Otherwise a system limit (for SysV at least) may be exceeded.
.NOEXPORT:
+
+# Tell GNU make to disable its built-in pattern rules.
+%:: %,v
+%:: RCS/%,v
+%:: RCS/%
+%:: s.%
+%:: SCCS/s.%
diff --git a/graphics/tpic2pdftex/aclocal.m4 b/graphics/tpic2pdftex/aclocal.m4
index 6f522ebc71..1a674a31f4 100644
--- a/graphics/tpic2pdftex/aclocal.m4
+++ b/graphics/tpic2pdftex/aclocal.m4
@@ -1,6 +1,6 @@
-# generated automatically by aclocal 1.16.5 -*- Autoconf -*-
+# generated automatically by aclocal 1.17 -*- Autoconf -*-
-# Copyright (C) 1996-2021 Free Software Foundation, Inc.
+# Copyright (C) 1996-2024 Free Software Foundation, Inc.
# This file is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
@@ -20,7 +20,7 @@ You have another version of autoconf. It may work, but is not guaranteed to.
If you have problems, you may need to regenerate the build system entirely.
To do so, use the procedure documented by the package, typically 'autoreconf'.])])
-# Copyright (C) 2002-2021 Free Software Foundation, Inc.
+# Copyright (C) 2002-2024 Free Software Foundation, Inc.
#
# This file is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
@@ -32,10 +32,10 @@ To do so, use the procedure documented by the package, typically 'autoreconf'.])
# generated from the m4 files accompanying Automake X.Y.
# (This private macro should not be called outside this file.)
AC_DEFUN([AM_AUTOMAKE_VERSION],
-[am__api_version='1.16'
+[am__api_version='1.17'
dnl Some users find AM_AUTOMAKE_VERSION and mistake it for a way to
dnl require some minimum version. Point them to the right macro.
-m4_if([$1], [1.16.5], [],
+m4_if([$1], [1.17], [],
[AC_FATAL([Do not call $0, use AM_INIT_AUTOMAKE([$1]).])])dnl
])
@@ -51,14 +51,14 @@ m4_define([_AM_AUTOCONF_VERSION], [])
# Call AM_AUTOMAKE_VERSION and AM_AUTOMAKE_VERSION so they can be traced.
# This function is AC_REQUIREd by AM_INIT_AUTOMAKE.
AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION],
-[AM_AUTOMAKE_VERSION([1.16.5])dnl
+[AM_AUTOMAKE_VERSION([1.17])dnl
m4_ifndef([AC_AUTOCONF_VERSION],
[m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl
_AM_AUTOCONF_VERSION(m4_defn([AC_AUTOCONF_VERSION]))])
# AM_AUX_DIR_EXPAND -*- Autoconf -*-
-# Copyright (C) 2001-2021 Free Software Foundation, Inc.
+# Copyright (C) 2001-2024 Free Software Foundation, Inc.
#
# This file is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
@@ -110,7 +110,7 @@ am_aux_dir=`cd "$ac_aux_dir" && pwd`
# AM_CONDITIONAL -*- Autoconf -*-
-# Copyright (C) 1997-2021 Free Software Foundation, Inc.
+# Copyright (C) 1997-2024 Free Software Foundation, Inc.
#
# This file is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
@@ -141,7 +141,7 @@ AC_CONFIG_COMMANDS_PRE(
Usually this means the macro was only invoked conditionally.]])
fi])])
-# Copyright (C) 1999-2021 Free Software Foundation, Inc.
+# Copyright (C) 1999-2024 Free Software Foundation, Inc.
#
# This file is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
@@ -273,7 +273,7 @@ AC_CACHE_CHECK([dependency style of $depcc],
# icc doesn't choke on unknown options, it will just issue warnings
# or remarks (even with -Werror). So we grep stderr for any message
# that says an option was ignored or not supported.
- # When given -MP, icc 7.0 and 7.1 complain thusly:
+ # When given -MP, icc 7.0 and 7.1 complain thus:
# icc: Command line warning: ignoring option '-M'; no argument required
# The diagnosis changed in icc 8.0:
# icc: Command line remark: option '-MP' not supported
@@ -332,7 +332,7 @@ _AM_SUBST_NOTMAKE([am__nodep])dnl
# Generate code to set up dependency tracking. -*- Autoconf -*-
-# Copyright (C) 1999-2021 Free Software Foundation, Inc.
+# Copyright (C) 1999-2024 Free Software Foundation, Inc.
#
# This file is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
@@ -400,7 +400,7 @@ AC_DEFUN([AM_OUTPUT_DEPENDENCY_COMMANDS],
# Do all the work for Automake. -*- Autoconf -*-
-# Copyright (C) 1996-2021 Free Software Foundation, Inc.
+# Copyright (C) 1996-2024 Free Software Foundation, Inc.
#
# This file is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
@@ -534,7 +534,7 @@ if test -z "$CSCOPE"; then
fi
AC_SUBST([CSCOPE])
-AC_REQUIRE([AM_SILENT_RULES])dnl
+AC_REQUIRE([_AM_SILENT_RULES])dnl
dnl The testsuite driver may need to know about EXEEXT, so add the
dnl 'am__EXEEXT' conditional if _AM_COMPILER_EXEEXT was seen. This
dnl macro is hooked onto _AC_COMPILER_EXEEXT early, see below.
@@ -542,47 +542,9 @@ AC_CONFIG_COMMANDS_PRE(dnl
[m4_provide_if([_AM_COMPILER_EXEEXT],
[AM_CONDITIONAL([am__EXEEXT], [test -n "$EXEEXT"])])])dnl
-# POSIX will say in a future version that running "rm -f" with no argument
-# is OK; and we want to be able to make that assumption in our Makefile
-# recipes. So use an aggressive probe to check that the usage we want is
-# actually supported "in the wild" to an acceptable degree.
-# See automake bug#10828.
-# To make any issue more visible, cause the running configure to be aborted
-# by default if the 'rm' program in use doesn't match our expectations; the
-# user can still override this though.
-if rm -f && rm -fr && rm -rf; then : OK; else
- cat >&2 <<'END'
-Oops!
-
-Your 'rm' program seems unable to run without file operands specified
-on the command line, even when the '-f' option is present. This is contrary
-to the behaviour of most rm programs out there, and not conforming with
-the upcoming POSIX standard: <http://austingroupbugs.net/view.php?id=542>
-
-Please tell bug-automake@gnu.org about your system, including the value
-of your $PATH and any error possibly output before this message. This
-can help us improve future automake versions.
+AC_REQUIRE([_AM_PROG_RM_F])
+AC_REQUIRE([_AM_PROG_XARGS_N])
-END
- if test x"$ACCEPT_INFERIOR_RM_PROGRAM" = x"yes"; then
- echo 'Configuration will proceed anyway, since you have set the' >&2
- echo 'ACCEPT_INFERIOR_RM_PROGRAM variable to "yes"' >&2
- echo >&2
- else
- cat >&2 <<'END'
-Aborting the configuration process, to ensure you take notice of the issue.
-
-You can download and install GNU coreutils to get an 'rm' implementation
-that behaves properly: <https://www.gnu.org/software/coreutils/>.
-
-If you want to complete the configuration process using your problematic
-'rm' anyway, export the environment variable ACCEPT_INFERIOR_RM_PROGRAM
-to "yes", and re-run configure.
-
-END
- AC_MSG_ERROR([Your 'rm' program is bad, sorry.])
- fi
-fi
dnl The trailing newline in this macro's definition is deliberate, for
dnl backward compatibility and to allow trailing 'dnl'-style comments
dnl after the AM_INIT_AUTOMAKE invocation. See automake bug#16841.
@@ -615,7 +577,7 @@ for _am_header in $config_headers :; do
done
echo "timestamp for $_am_arg" >`AS_DIRNAME(["$_am_arg"])`/stamp-h[]$_am_stamp_count])
-# Copyright (C) 2001-2021 Free Software Foundation, Inc.
+# Copyright (C) 2001-2024 Free Software Foundation, Inc.
#
# This file is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
@@ -636,7 +598,7 @@ if test x"${install_sh+set}" != xset; then
fi
AC_SUBST([install_sh])])
-# Copyright (C) 2003-2021 Free Software Foundation, Inc.
+# Copyright (C) 2003-2024 Free Software Foundation, Inc.
#
# This file is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
@@ -658,7 +620,7 @@ AC_SUBST([am__leading_dot])])
# Add --enable-maintainer-mode option to configure. -*- Autoconf -*-
# From Jim Meyering
-# Copyright (C) 1996-2021 Free Software Foundation, Inc.
+# Copyright (C) 1996-2024 Free Software Foundation, Inc.
#
# This file is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
@@ -693,7 +655,7 @@ AC_MSG_CHECKING([whether to enable maintainer-specific portions of Makefiles])
# Check to see how 'make' treats includes. -*- Autoconf -*-
-# Copyright (C) 2001-2021 Free Software Foundation, Inc.
+# Copyright (C) 2001-2024 Free Software Foundation, Inc.
#
# This file is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
@@ -736,7 +698,7 @@ AC_SUBST([am__quote])])
# Fake the existence of programs that GNU maintainers use. -*- Autoconf -*-
-# Copyright (C) 1997-2021 Free Software Foundation, Inc.
+# Copyright (C) 1997-2024 Free Software Foundation, Inc.
#
# This file is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
@@ -770,7 +732,7 @@ fi
# Helper functions for option handling. -*- Autoconf -*-
-# Copyright (C) 2001-2021 Free Software Foundation, Inc.
+# Copyright (C) 2001-2024 Free Software Foundation, Inc.
#
# This file is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
@@ -799,7 +761,7 @@ AC_DEFUN([_AM_SET_OPTIONS],
AC_DEFUN([_AM_IF_OPTION],
[m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])])
-# Copyright (C) 1999-2021 Free Software Foundation, Inc.
+# Copyright (C) 1999-2024 Free Software Foundation, Inc.
#
# This file is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
@@ -846,7 +808,23 @@ AC_LANG_POP([C])])
# For backward compatibility.
AC_DEFUN_ONCE([AM_PROG_CC_C_O], [AC_REQUIRE([AC_PROG_CC])])
-# Copyright (C) 2001-2021 Free Software Foundation, Inc.
+# Copyright (C) 2022-2024 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# _AM_PROG_RM_F
+# ---------------
+# Check whether 'rm -f' without any arguments works.
+# https://bugs.gnu.org/10828
+AC_DEFUN([_AM_PROG_RM_F],
+[am__rm_f_notfound=
+AS_IF([(rm -f && rm -fr && rm -rf) 2>/dev/null], [], [am__rm_f_notfound='""'])
+AC_SUBST(am__rm_f_notfound)
+])
+
+# Copyright (C) 2001-2024 Free Software Foundation, Inc.
#
# This file is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
@@ -865,16 +843,169 @@ AC_DEFUN([AM_RUN_LOG],
# Check to make sure that the build environment is sane. -*- Autoconf -*-
-# Copyright (C) 1996-2021 Free Software Foundation, Inc.
+# Copyright (C) 1996-2024 Free Software Foundation, Inc.
#
# This file is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.
+# _AM_SLEEP_FRACTIONAL_SECONDS
+# ----------------------------
+AC_DEFUN([_AM_SLEEP_FRACTIONAL_SECONDS], [dnl
+AC_CACHE_CHECK([whether sleep supports fractional seconds],
+ am_cv_sleep_fractional_seconds, [dnl
+AS_IF([sleep 0.001 2>/dev/null], [am_cv_sleep_fractional_seconds=yes],
+ [am_cv_sleep_fractional_seconds=no])
+])])
+
+# _AM_FILESYSTEM_TIMESTAMP_RESOLUTION
+# -----------------------------------
+# Determine the filesystem's resolution for file modification
+# timestamps. The coarsest we know of is FAT, with a resolution
+# of only two seconds, even with the most recent "exFAT" extensions.
+# The finest (e.g. ext4 with large inodes, XFS, ZFS) is one
+# nanosecond, matching clock_gettime. However, it is probably not
+# possible to delay execution of a shell script for less than one
+# millisecond, due to process creation overhead and scheduling
+# granularity, so we don't check for anything finer than that. (See below.)
+AC_DEFUN([_AM_FILESYSTEM_TIMESTAMP_RESOLUTION], [dnl
+AC_REQUIRE([_AM_SLEEP_FRACTIONAL_SECONDS])
+AC_CACHE_CHECK([filesystem timestamp resolution],
+ am_cv_filesystem_timestamp_resolution, [dnl
+# Default to the worst case.
+am_cv_filesystem_timestamp_resolution=2
+
+# Only try to go finer than 1 sec if sleep can do it.
+# Don't try 1 sec, because if 0.01 sec and 0.1 sec don't work,
+# - 1 sec is not much of a win compared to 2 sec, and
+# - it takes 2 seconds to perform the test whether 1 sec works.
+#
+# Instead, just use the default 2s on platforms that have 1s resolution,
+# accept the extra 1s delay when using $sleep in the Automake tests, in
+# exchange for not incurring the 2s delay for running the test for all
+# packages.
+#
+am_try_resolutions=
+if test "$am_cv_sleep_fractional_seconds" = yes; then
+ # Even a millisecond often causes a bunch of false positives,
+ # so just try a hundredth of a second. The time saved between .001 and
+ # .01 is not terribly consequential.
+ am_try_resolutions="0.01 0.1 $am_try_resolutions"
+fi
+
+# In order to catch current-generation FAT out, we must *modify* files
+# that already exist; the *creation* timestamp is finer. Use names
+# that make ls -t sort them differently when they have equal
+# timestamps than when they have distinct timestamps, keeping
+# in mind that ls -t prints the *newest* file first.
+rm -f conftest.ts?
+: > conftest.ts1
+: > conftest.ts2
+: > conftest.ts3
+
+# Make sure ls -t actually works. Do 'set' in a subshell so we don't
+# clobber the current shell's arguments. (Outer-level square brackets
+# are removed by m4; they're present so that m4 does not expand
+# <dollar><star>; be careful, easy to get confused.)
+if (
+ set X `[ls -t conftest.ts[12]]` &&
+ {
+ test "$[]*" != "X conftest.ts1 conftest.ts2" ||
+ test "$[]*" != "X conftest.ts2 conftest.ts1";
+ }
+); then :; else
+ # If neither matched, then we have a broken ls. This can happen
+ # if, for instance, CONFIG_SHELL is bash and it inherits a
+ # broken ls alias from the environment. This has actually
+ # happened. Such a system could not be considered "sane".
+ _AS_ECHO_UNQUOTED(
+ ["Bad output from ls -t: \"`[ls -t conftest.ts[12]]`\""],
+ [AS_MESSAGE_LOG_FD])
+ AC_MSG_FAILURE([ls -t produces unexpected output.
+Make sure there is not a broken ls alias in your environment.])
+fi
+
+for am_try_res in $am_try_resolutions; do
+ # Any one fine-grained sleep might happen to cross the boundary
+ # between two values of a coarser actual resolution, but if we do
+ # two fine-grained sleeps in a row, at least one of them will fall
+ # entirely within a coarse interval.
+ echo alpha > conftest.ts1
+ sleep $am_try_res
+ echo beta > conftest.ts2
+ sleep $am_try_res
+ echo gamma > conftest.ts3
+
+ # We assume that 'ls -t' will make use of high-resolution
+ # timestamps if the operating system supports them at all.
+ if (set X `ls -t conftest.ts?` &&
+ test "$[]2" = conftest.ts3 &&
+ test "$[]3" = conftest.ts2 &&
+ test "$[]4" = conftest.ts1); then
+ #
+ # Ok, ls -t worked. If we're at a resolution of 1 second, we're done,
+ # because we don't need to test make.
+ make_ok=true
+ if test $am_try_res != 1; then
+ # But if we've succeeded so far with a subsecond resolution, we
+ # have one more thing to check: make. It can happen that
+ # everything else supports the subsecond mtimes, but make doesn't;
+ # notably on macOS, which ships make 3.81 from 2006 (the last one
+ # released under GPLv2). https://bugs.gnu.org/68808
+ #
+ # We test $MAKE if it is defined in the environment, else "make".
+ # It might get overridden later, but our hope is that in practice
+ # it does not matter: it is the system "make" which is (by far)
+ # the most likely to be broken, whereas if the user overrides it,
+ # probably they did so with a better, or at least not worse, make.
+ # https://lists.gnu.org/archive/html/automake/2024-06/msg00051.html
+ #
+ # Create a Makefile (real tab character here):
+ rm -f conftest.mk
+ echo 'conftest.ts1: conftest.ts2' >conftest.mk
+ echo ' touch conftest.ts2' >>conftest.mk
+ #
+ # Now, running
+ # touch conftest.ts1; touch conftest.ts2; make
+ # should touch ts1 because ts2 is newer. This could happen by luck,
+ # but most often, it will fail if make's support is insufficient. So
+ # test for several consecutive successes.
+ #
+ # (We reuse conftest.ts[12] because we still want to modify existing
+ # files, not create new ones, per above.)
+ n=0
+ make=${MAKE-make}
+ until test $n -eq 3; do
+ echo one > conftest.ts1
+ sleep $am_try_res
+ echo two > conftest.ts2 # ts2 should now be newer than ts1
+ if $make -f conftest.mk | grep 'up to date' >/dev/null; then
+ make_ok=false
+ break # out of $n loop
+ fi
+ n=`expr $n + 1`
+ done
+ fi
+ #
+ if $make_ok; then
+ # Everything we know to check worked out, so call this resolution good.
+ am_cv_filesystem_timestamp_resolution=$am_try_res
+ break # out of $am_try_res loop
+ fi
+ # Otherwise, we'll go on to check the next resolution.
+ fi
+done
+rm -f conftest.ts?
+# (end _am_filesystem_timestamp_resolution)
+])])
+
# AM_SANITY_CHECK
# ---------------
AC_DEFUN([AM_SANITY_CHECK],
-[AC_MSG_CHECKING([whether build environment is sane])
+[AC_REQUIRE([_AM_FILESYSTEM_TIMESTAMP_RESOLUTION])
+# This check should not be cached, as it may vary across builds of
+# different projects.
+AC_MSG_CHECKING([whether build environment is sane])
# Reject unsafe characters in $srcdir or the absolute working directory
# name. Accept space and tab only in the latter.
am_lf='
@@ -893,49 +1024,40 @@ esac
# symlink; some systems play weird games with the mod time of symlinks
# (eg FreeBSD returns the mod time of the symlink's containing
# directory).
-if (
- am_has_slept=no
- for am_try in 1 2; do
- echo "timestamp, slept: $am_has_slept" > conftest.file
- set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null`
- if test "$[*]" = "X"; then
- # -L didn't work.
- set X `ls -t "$srcdir/configure" conftest.file`
- fi
- if test "$[*]" != "X $srcdir/configure conftest.file" \
- && test "$[*]" != "X conftest.file $srcdir/configure"; then
-
- # If neither matched, then we have a broken ls. This can happen
- # if, for instance, CONFIG_SHELL is bash and it inherits a
- # broken ls alias from the environment. This has actually
- # happened. Such a system could not be considered "sane".
- AC_MSG_ERROR([ls -t appears to fail. Make sure there is not a broken
- alias in your environment])
- fi
- if test "$[2]" = conftest.file || test $am_try -eq 2; then
- break
- fi
- # Just in case.
- sleep 1
- am_has_slept=yes
- done
- test "$[2]" = conftest.file
- )
-then
- # Ok.
- :
-else
- AC_MSG_ERROR([newly created file is older than distributed files!
+am_build_env_is_sane=no
+am_has_slept=no
+rm -f conftest.file
+for am_try in 1 2; do
+ echo "timestamp, slept: $am_has_slept" > conftest.file
+ if (
+ set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null`
+ if test "$[]*" = "X"; then
+ # -L didn't work.
+ set X `ls -t "$srcdir/configure" conftest.file`
+ fi
+ test "$[]2" = conftest.file
+ ); then
+ am_build_env_is_sane=yes
+ break
+ fi
+ # Just in case.
+ sleep "$am_cv_filesystem_timestamp_resolution"
+ am_has_slept=yes
+done
+
+AC_MSG_RESULT([$am_build_env_is_sane])
+if test "$am_build_env_is_sane" = no; then
+ AC_MSG_ERROR([newly created file is older than distributed files!
Check your system clock])
fi
-AC_MSG_RESULT([yes])
+
# If we didn't sleep, we still need to ensure time stamps of config.status and
# generated files are strictly newer.
am_sleep_pid=
-if grep 'slept: no' conftest.file >/dev/null 2>&1; then
- ( sleep 1 ) &
+AS_IF([test -e conftest.file || grep 'slept: no' conftest.file >/dev/null 2>&1],, [dnl
+ ( sleep "$am_cv_filesystem_timestamp_resolution" ) &
am_sleep_pid=$!
-fi
+])
AC_CONFIG_COMMANDS_PRE(
[AC_MSG_CHECKING([that generated files are newer than configure])
if test -n "$am_sleep_pid"; then
@@ -946,18 +1068,18 @@ AC_CONFIG_COMMANDS_PRE(
rm -f conftest.file
])
-# Copyright (C) 2009-2021 Free Software Foundation, Inc.
+# Copyright (C) 2009-2024 Free Software Foundation, Inc.
#
# This file is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.
-# AM_SILENT_RULES([DEFAULT])
-# --------------------------
-# Enable less verbose build rules; with the default set to DEFAULT
-# ("yes" being less verbose, "no" or empty being verbose).
-AC_DEFUN([AM_SILENT_RULES],
-[AC_ARG_ENABLE([silent-rules], [dnl
+# _AM_SILENT_RULES
+# ----------------
+# Enable less verbose build rules support.
+AC_DEFUN([_AM_SILENT_RULES],
+[AM_DEFAULT_VERBOSITY=1
+AC_ARG_ENABLE([silent-rules], [dnl
AS_HELP_STRING(
[--enable-silent-rules],
[less verbose build output (undo: "make V=1")])
@@ -965,11 +1087,6 @@ AS_HELP_STRING(
[--disable-silent-rules],
[verbose build output (undo: "make V=0")])dnl
])
-case $enable_silent_rules in @%:@ (((
- yes) AM_DEFAULT_VERBOSITY=0;;
- no) AM_DEFAULT_VERBOSITY=1;;
- *) AM_DEFAULT_VERBOSITY=m4_if([$1], [yes], [0], [1]);;
-esac
dnl
dnl A few 'make' implementations (e.g., NonStop OS and NextStep)
dnl do not support nested variable expansions.
@@ -988,14 +1105,6 @@ am__doit:
else
am_cv_make_support_nested_variables=no
fi])
-if test $am_cv_make_support_nested_variables = yes; then
- dnl Using '$V' instead of '$(V)' breaks IRIX make.
- AM_V='$(V)'
- AM_DEFAULT_V='$(AM_DEFAULT_VERBOSITY)'
-else
- AM_V=$AM_DEFAULT_VERBOSITY
- AM_DEFAULT_V=$AM_DEFAULT_VERBOSITY
-fi
AC_SUBST([AM_V])dnl
AM_SUBST_NOTMAKE([AM_V])dnl
AC_SUBST([AM_DEFAULT_V])dnl
@@ -1004,9 +1113,33 @@ AC_SUBST([AM_DEFAULT_VERBOSITY])dnl
AM_BACKSLASH='\'
AC_SUBST([AM_BACKSLASH])dnl
_AM_SUBST_NOTMAKE([AM_BACKSLASH])dnl
+dnl Delay evaluation of AM_DEFAULT_VERBOSITY to the end to allow multiple calls
+dnl to AM_SILENT_RULES to change the default value.
+AC_CONFIG_COMMANDS_PRE([dnl
+case $enable_silent_rules in @%:@ (((
+ yes) AM_DEFAULT_VERBOSITY=0;;
+ no) AM_DEFAULT_VERBOSITY=1;;
+esac
+if test $am_cv_make_support_nested_variables = yes; then
+ dnl Using '$V' instead of '$(V)' breaks IRIX make.
+ AM_V='$(V)'
+ AM_DEFAULT_V='$(AM_DEFAULT_VERBOSITY)'
+else
+ AM_V=$AM_DEFAULT_VERBOSITY
+ AM_DEFAULT_V=$AM_DEFAULT_VERBOSITY
+fi
+])dnl
])
-# Copyright (C) 2001-2021 Free Software Foundation, Inc.
+# AM_SILENT_RULES([DEFAULT])
+# --------------------------
+# Set the default verbosity level to DEFAULT ("yes" being less verbose, "no" or
+# empty being verbose).
+AC_DEFUN([AM_SILENT_RULES],
+[AC_REQUIRE([_AM_SILENT_RULES])
+AM_DEFAULT_VERBOSITY=m4_if([$1], [yes], [0], [1])])
+
+# Copyright (C) 2001-2024 Free Software Foundation, Inc.
#
# This file is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
@@ -1034,7 +1167,7 @@ fi
INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s"
AC_SUBST([INSTALL_STRIP_PROGRAM])])
-# Copyright (C) 2006-2021 Free Software Foundation, Inc.
+# Copyright (C) 2006-2024 Free Software Foundation, Inc.
#
# This file is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
@@ -1053,7 +1186,7 @@ AC_DEFUN([AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE($@)])
# Check how to create a tarball. -*- Autoconf -*-
-# Copyright (C) 2004-2021 Free Software Foundation, Inc.
+# Copyright (C) 2004-2024 Free Software Foundation, Inc.
#
# This file is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
@@ -1099,15 +1232,19 @@ m4_if([$1], [v7],
am_uid=`id -u || echo unknown`
am_gid=`id -g || echo unknown`
AC_MSG_CHECKING([whether UID '$am_uid' is supported by ustar format])
- if test $am_uid -le $am_max_uid; then
- AC_MSG_RESULT([yes])
+ if test x$am_uid = xunknown; then
+ AC_MSG_WARN([ancient id detected; assuming current UID is ok, but dist-ustar might not work])
+ elif test $am_uid -le $am_max_uid; then
+ AC_MSG_RESULT([yes])
else
- AC_MSG_RESULT([no])
- _am_tools=none
+ AC_MSG_RESULT([no])
+ _am_tools=none
fi
AC_MSG_CHECKING([whether GID '$am_gid' is supported by ustar format])
- if test $am_gid -le $am_max_gid; then
- AC_MSG_RESULT([yes])
+ if test x$gm_gid = xunknown; then
+ AC_MSG_WARN([ancient id detected; assuming current GID is ok, but dist-ustar might not work])
+ elif test $am_gid -le $am_max_gid; then
+ AC_MSG_RESULT([yes])
else
AC_MSG_RESULT([no])
_am_tools=none
@@ -1184,6 +1321,26 @@ AC_SUBST([am__tar])
AC_SUBST([am__untar])
]) # _AM_PROG_TAR
+# Copyright (C) 2022-2024 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# _AM_PROG_XARGS_N
+# ----------------
+# Check whether 'xargs -n' works. It should work everywhere, so the fallback
+# is not optimized at all as we never expect to use it.
+AC_DEFUN([_AM_PROG_XARGS_N],
+[AC_CACHE_CHECK([xargs -n works], am_cv_xargs_n_works, [dnl
+AS_IF([test "`echo 1 2 3 | xargs -n2 echo`" = "1 2
+3"], [am_cv_xargs_n_works=yes], [am_cv_xargs_n_works=no])])
+AS_IF([test "$am_cv_xargs_n_works" = yes], [am__xargs_n='xargs -n'], [dnl
+ am__xargs_n='am__xargs_n () { shift; sed "s/ /\\n/g" | while read am__xargs_n_arg; do "$@" "$am__xargs_n_arg"; done; }'
+])dnl
+AC_SUBST(am__xargs_n)
+])
+
m4_include([../../m4/kpse-common.m4])
m4_include([../../m4/kpse-warnings.m4])
m4_include([../../m4/kpse-win32.m4])
diff --git a/graphics/tpic2pdftex/configure.texk b/graphics/tpic2pdftex/configure.texk
index 34f8982c14..a54279b813 100755
--- a/graphics/tpic2pdftex/configure.texk
+++ b/graphics/tpic2pdftex/configure.texk
@@ -667,6 +667,8 @@ CC
MAINT
MAINTAINER_MODE_FALSE
MAINTAINER_MODE_TRUE
+am__xargs_n
+am__rm_f_notfound
AM_BACKSLASH
AM_DEFAULT_VERBOSITY
AM_DEFAULT_V
@@ -2406,7 +2408,7 @@ ac_compiler_gnu=$ac_cv_c_compiler_gnu
-am__api_version='1.16'
+am__api_version='1.17'
@@ -2509,6 +2511,165 @@ test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}'
test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644'
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether sleep supports fractional seconds" >&5
+printf %s "checking whether sleep supports fractional seconds... " >&6; }
+if test ${am_cv_sleep_fractional_seconds+y}
+then :
+ printf %s "(cached) " >&6
+else case e in #(
+ e) if sleep 0.001 2>/dev/null
+then :
+ am_cv_sleep_fractional_seconds=yes
+else case e in #(
+ e) am_cv_sleep_fractional_seconds=no ;;
+esac
+fi
+ ;;
+esac
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $am_cv_sleep_fractional_seconds" >&5
+printf "%s\n" "$am_cv_sleep_fractional_seconds" >&6; }
+
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking filesystem timestamp resolution" >&5
+printf %s "checking filesystem timestamp resolution... " >&6; }
+if test ${am_cv_filesystem_timestamp_resolution+y}
+then :
+ printf %s "(cached) " >&6
+else case e in #(
+ e) # Default to the worst case.
+am_cv_filesystem_timestamp_resolution=2
+
+# Only try to go finer than 1 sec if sleep can do it.
+# Don't try 1 sec, because if 0.01 sec and 0.1 sec don't work,
+# - 1 sec is not much of a win compared to 2 sec, and
+# - it takes 2 seconds to perform the test whether 1 sec works.
+#
+# Instead, just use the default 2s on platforms that have 1s resolution,
+# accept the extra 1s delay when using $sleep in the Automake tests, in
+# exchange for not incurring the 2s delay for running the test for all
+# packages.
+#
+am_try_resolutions=
+if test "$am_cv_sleep_fractional_seconds" = yes; then
+ # Even a millisecond often causes a bunch of false positives,
+ # so just try a hundredth of a second. The time saved between .001 and
+ # .01 is not terribly consequential.
+ am_try_resolutions="0.01 0.1 $am_try_resolutions"
+fi
+
+# In order to catch current-generation FAT out, we must *modify* files
+# that already exist; the *creation* timestamp is finer. Use names
+# that make ls -t sort them differently when they have equal
+# timestamps than when they have distinct timestamps, keeping
+# in mind that ls -t prints the *newest* file first.
+rm -f conftest.ts?
+: > conftest.ts1
+: > conftest.ts2
+: > conftest.ts3
+
+# Make sure ls -t actually works. Do 'set' in a subshell so we don't
+# clobber the current shell's arguments. (Outer-level square brackets
+# are removed by m4; they're present so that m4 does not expand
+# <dollar><star>; be careful, easy to get confused.)
+if (
+ set X `ls -t conftest.ts[12]` &&
+ {
+ test "$*" != "X conftest.ts1 conftest.ts2" ||
+ test "$*" != "X conftest.ts2 conftest.ts1";
+ }
+); then :; else
+ # If neither matched, then we have a broken ls. This can happen
+ # if, for instance, CONFIG_SHELL is bash and it inherits a
+ # broken ls alias from the environment. This has actually
+ # happened. Such a system could not be considered "sane".
+ printf "%s\n" ""Bad output from ls -t: \"`ls -t conftest.ts[12]`\""" >&5
+ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in '$ac_pwd':" >&5
+printf "%s\n" "$as_me: error: in '$ac_pwd':" >&2;}
+as_fn_error $? "ls -t produces unexpected output.
+Make sure there is not a broken ls alias in your environment.
+See 'config.log' for more details" "$LINENO" 5; }
+fi
+
+for am_try_res in $am_try_resolutions; do
+ # Any one fine-grained sleep might happen to cross the boundary
+ # between two values of a coarser actual resolution, but if we do
+ # two fine-grained sleeps in a row, at least one of them will fall
+ # entirely within a coarse interval.
+ echo alpha > conftest.ts1
+ sleep $am_try_res
+ echo beta > conftest.ts2
+ sleep $am_try_res
+ echo gamma > conftest.ts3
+
+ # We assume that 'ls -t' will make use of high-resolution
+ # timestamps if the operating system supports them at all.
+ if (set X `ls -t conftest.ts?` &&
+ test "$2" = conftest.ts3 &&
+ test "$3" = conftest.ts2 &&
+ test "$4" = conftest.ts1); then
+ #
+ # Ok, ls -t worked. If we're at a resolution of 1 second, we're done,
+ # because we don't need to test make.
+ make_ok=true
+ if test $am_try_res != 1; then
+ # But if we've succeeded so far with a subsecond resolution, we
+ # have one more thing to check: make. It can happen that
+ # everything else supports the subsecond mtimes, but make doesn't;
+ # notably on macOS, which ships make 3.81 from 2006 (the last one
+ # released under GPLv2). https://bugs.gnu.org/68808
+ #
+ # We test $MAKE if it is defined in the environment, else "make".
+ # It might get overridden later, but our hope is that in practice
+ # it does not matter: it is the system "make" which is (by far)
+ # the most likely to be broken, whereas if the user overrides it,
+ # probably they did so with a better, or at least not worse, make.
+ # https://lists.gnu.org/archive/html/automake/2024-06/msg00051.html
+ #
+ # Create a Makefile (real tab character here):
+ rm -f conftest.mk
+ echo 'conftest.ts1: conftest.ts2' >conftest.mk
+ echo ' touch conftest.ts2' >>conftest.mk
+ #
+ # Now, running
+ # touch conftest.ts1; touch conftest.ts2; make
+ # should touch ts1 because ts2 is newer. This could happen by luck,
+ # but most often, it will fail if make's support is insufficient. So
+ # test for several consecutive successes.
+ #
+ # (We reuse conftest.ts[12] because we still want to modify existing
+ # files, not create new ones, per above.)
+ n=0
+ make=${MAKE-make}
+ until test $n -eq 3; do
+ echo one > conftest.ts1
+ sleep $am_try_res
+ echo two > conftest.ts2 # ts2 should now be newer than ts1
+ if $make -f conftest.mk | grep 'up to date' >/dev/null; then
+ make_ok=false
+ break # out of $n loop
+ fi
+ n=`expr $n + 1`
+ done
+ fi
+ #
+ if $make_ok; then
+ # Everything we know to check worked out, so call this resolution good.
+ am_cv_filesystem_timestamp_resolution=$am_try_res
+ break # out of $am_try_res loop
+ fi
+ # Otherwise, we'll go on to check the next resolution.
+ fi
+done
+rm -f conftest.ts?
+# (end _am_filesystem_timestamp_resolution)
+ ;;
+esac
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $am_cv_filesystem_timestamp_resolution" >&5
+printf "%s\n" "$am_cv_filesystem_timestamp_resolution" >&6; }
+
+# This check should not be cached, as it may vary across builds of
+# different projects.
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether build environment is sane" >&5
printf %s "checking whether build environment is sane... " >&6; }
# Reject unsafe characters in $srcdir or the absolute working directory
@@ -2529,49 +2690,45 @@ esac
# symlink; some systems play weird games with the mod time of symlinks
# (eg FreeBSD returns the mod time of the symlink's containing
# directory).
-if (
- am_has_slept=no
- for am_try in 1 2; do
- echo "timestamp, slept: $am_has_slept" > conftest.file
- set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null`
- if test "$*" = "X"; then
- # -L didn't work.
- set X `ls -t "$srcdir/configure" conftest.file`
- fi
- if test "$*" != "X $srcdir/configure conftest.file" \
- && test "$*" != "X conftest.file $srcdir/configure"; then
-
- # If neither matched, then we have a broken ls. This can happen
- # if, for instance, CONFIG_SHELL is bash and it inherits a
- # broken ls alias from the environment. This has actually
- # happened. Such a system could not be considered "sane".
- as_fn_error $? "ls -t appears to fail. Make sure there is not a broken
- alias in your environment" "$LINENO" 5
- fi
- if test "$2" = conftest.file || test $am_try -eq 2; then
- break
- fi
- # Just in case.
- sleep 1
- am_has_slept=yes
- done
- test "$2" = conftest.file
- )
-then
- # Ok.
- :
-else
- as_fn_error $? "newly created file is older than distributed files!
+am_build_env_is_sane=no
+am_has_slept=no
+rm -f conftest.file
+for am_try in 1 2; do
+ echo "timestamp, slept: $am_has_slept" > conftest.file
+ if (
+ set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null`
+ if test "$*" = "X"; then
+ # -L didn't work.
+ set X `ls -t "$srcdir/configure" conftest.file`
+ fi
+ test "$2" = conftest.file
+ ); then
+ am_build_env_is_sane=yes
+ break
+ fi
+ # Just in case.
+ sleep "$am_cv_filesystem_timestamp_resolution"
+ am_has_slept=yes
+done
+
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $am_build_env_is_sane" >&5
+printf "%s\n" "$am_build_env_is_sane" >&6; }
+if test "$am_build_env_is_sane" = no; then
+ as_fn_error $? "newly created file is older than distributed files!
Check your system clock" "$LINENO" 5
fi
-{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-printf "%s\n" "yes" >&6; }
+
# If we didn't sleep, we still need to ensure time stamps of config.status and
# generated files are strictly newer.
am_sleep_pid=
-if grep 'slept: no' conftest.file >/dev/null 2>&1; then
- ( sleep 1 ) &
+if test -e conftest.file || grep 'slept: no' conftest.file >/dev/null 2>&1
+then :
+
+else case e in #(
+ e) ( sleep "$am_cv_filesystem_timestamp_resolution" ) &
am_sleep_pid=$!
+ ;;
+esac
fi
rm -f conftest.file
@@ -2861,17 +3018,13 @@ else
fi
rmdir .tst 2>/dev/null
+AM_DEFAULT_VERBOSITY=1
# Check whether --enable-silent-rules was given.
if test ${enable_silent_rules+y}
then :
enableval=$enable_silent_rules;
fi
-case $enable_silent_rules in # (((
- yes) AM_DEFAULT_VERBOSITY=0;;
- no) AM_DEFAULT_VERBOSITY=1;;
- *) AM_DEFAULT_VERBOSITY=1;;
-esac
am_make=${MAKE-make}
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $am_make supports nested variables" >&5
printf %s "checking whether $am_make supports nested variables... " >&6; }
@@ -2894,15 +3047,45 @@ esac
fi
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $am_cv_make_support_nested_variables" >&5
printf "%s\n" "$am_cv_make_support_nested_variables" >&6; }
-if test $am_cv_make_support_nested_variables = yes; then
- AM_V='$(V)'
- AM_DEFAULT_V='$(AM_DEFAULT_VERBOSITY)'
-else
- AM_V=$AM_DEFAULT_VERBOSITY
- AM_DEFAULT_V=$AM_DEFAULT_VERBOSITY
-fi
AM_BACKSLASH='\'
+am__rm_f_notfound=
+if (rm -f && rm -fr && rm -rf) 2>/dev/null
+then :
+
+else case e in #(
+ e) am__rm_f_notfound='""' ;;
+esac
+fi
+
+
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking xargs -n works" >&5
+printf %s "checking xargs -n works... " >&6; }
+if test ${am_cv_xargs_n_works+y}
+then :
+ printf %s "(cached) " >&6
+else case e in #(
+ e) if test "`echo 1 2 3 | xargs -n2 echo`" = "1 2
+3"
+then :
+ am_cv_xargs_n_works=yes
+else case e in #(
+ e) am_cv_xargs_n_works=no ;;
+esac
+fi ;;
+esac
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $am_cv_xargs_n_works" >&5
+printf "%s\n" "$am_cv_xargs_n_works" >&6; }
+if test "$am_cv_xargs_n_works" = yes
+then :
+ am__xargs_n='xargs -n'
+else case e in #(
+ e) am__xargs_n='am__xargs_n () { shift; sed "s/ /\\n/g" | while read am__xargs_n_arg; do "" "$am__xargs_n_arg"; done; }'
+ ;;
+esac
+fi
+
@@ -4149,7 +4332,7 @@ else case e in #(
# icc doesn't choke on unknown options, it will just issue warnings
# or remarks (even with -Werror). So we grep stderr for any message
# that says an option was ignored or not supported.
- # When given -MP, icc 7.0 and 7.1 complain thusly:
+ # When given -MP, icc 7.0 and 7.1 complain thus:
# icc: Command line warning: ignoring option '-M'; no argument required
# The diagnosis changed in icc 8.0:
# icc: Command line remark: option '-MP' not supported
@@ -4467,47 +4650,9 @@ fi
-# POSIX will say in a future version that running "rm -f" with no argument
-# is OK; and we want to be able to make that assumption in our Makefile
-# recipes. So use an aggressive probe to check that the usage we want is
-# actually supported "in the wild" to an acceptable degree.
-# See automake bug#10828.
-# To make any issue more visible, cause the running configure to be aborted
-# by default if the 'rm' program in use doesn't match our expectations; the
-# user can still override this though.
-if rm -f && rm -fr && rm -rf; then : OK; else
- cat >&2 <<'END'
-Oops!
-Your 'rm' program seems unable to run without file operands specified
-on the command line, even when the '-f' option is present. This is contrary
-to the behaviour of most rm programs out there, and not conforming with
-the upcoming POSIX standard: <http://austingroupbugs.net/view.php?id=542>
-Please tell bug-automake@gnu.org about your system, including the value
-of your $PATH and any error possibly output before this message. This
-can help us improve future automake versions.
-END
- if test x"$ACCEPT_INFERIOR_RM_PROGRAM" = x"yes"; then
- echo 'Configuration will proceed anyway, since you have set the' >&2
- echo 'ACCEPT_INFERIOR_RM_PROGRAM variable to "yes"' >&2
- echo >&2
- else
- cat >&2 <<'END'
-Aborting the configuration process, to ensure you take notice of the issue.
-
-You can download and install GNU coreutils to get an 'rm' implementation
-that behaves properly: <https://www.gnu.org/software/coreutils/>.
-
-If you want to complete the configuration process using your problematic
-'rm' anyway, export the environment variable ACCEPT_INFERIOR_RM_PROGRAM
-to "yes", and re-run configure.
-
-END
- as_fn_error $? "Your 'rm' program is bad, sorry." "$LINENO" 5
- fi
-fi
# am_maintainer_mode
@@ -4853,6 +4998,18 @@ printf %s "checking that generated files are newer than configure... " >&6; }
fi
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: done" >&5
printf "%s\n" "done" >&6; }
+case $enable_silent_rules in # (((
+ yes) AM_DEFAULT_VERBOSITY=0;;
+ no) AM_DEFAULT_VERBOSITY=1;;
+esac
+if test $am_cv_make_support_nested_variables = yes; then
+ AM_V='$(V)'
+ AM_DEFAULT_V='$(AM_DEFAULT_VERBOSITY)'
+else
+ AM_V=$AM_DEFAULT_VERBOSITY
+ AM_DEFAULT_V=$AM_DEFAULT_VERBOSITY
+fi
+
if test -n "$EXEEXT"; then
am__EXEEXT_TRUE=
am__EXEEXT_FALSE='#'