texlive[75014] Master/texmf-dist: tikz-ext (24apr25)

commits+karl at tug.org commits+karl at tug.org
Thu Apr 24 22:26:20 CEST 2025


Revision: 75014
          https://tug.org/svn/texlive?view=revision&revision=75014
Author:   karl
Date:     2025-04-24 22:26:20 +0200 (Thu, 24 Apr 2025)
Log Message:
-----------
tikz-ext (24apr25)

Modified Paths:
--------------
    trunk/Master/texmf-dist/doc/latex/tikz-ext/README.md
    trunk/Master/texmf-dist/doc/latex/tikz-ext/tikz-ext-manual-en-library-beamer.tex
    trunk/Master/texmf-dist/doc/latex/tikz-ext/tikz-ext-manual-en-library-paths.ortho.tex
    trunk/Master/texmf-dist/doc/latex/tikz-ext/tikz-ext-manual-en-main-body.tex
    trunk/Master/texmf-dist/doc/latex/tikz-ext/tikz-ext-manual-en-main-preamble.tex
    trunk/Master/texmf-dist/doc/latex/tikz-ext/tikz-ext-manual.pdf
    trunk/Master/texmf-dist/tex/generic/tikz-ext/tikzext-util.tex
    trunk/Master/texmf-dist/tex/generic/tikz-ext/tikzlibraryext.beamer.code.tex
    trunk/Master/texmf-dist/tex/generic/tikz-ext/tikzlibraryext.misc.code.tex
    trunk/Master/texmf-dist/tex/generic/tikz-ext/tikzlibraryext.paths.ortho.code.tex
    trunk/Master/texmf-dist/tex/latex/tikz-ext/pgffor-ext.sty

Modified: trunk/Master/texmf-dist/doc/latex/tikz-ext/README.md
===================================================================
--- trunk/Master/texmf-dist/doc/latex/tikz-ext/README.md	2025-04-24 20:26:06 UTC (rev 75013)
+++ trunk/Master/texmf-dist/doc/latex/tikz-ext/README.md	2025-04-24 20:26:20 UTC (rev 75014)
@@ -17,7 +17,7 @@
   * Additional arrow tips: `ext_Hug Cap`, `ext_Loop`, `ext_Double Cap`, `ext_Double Stealth`, `ext_Double Triangle`.
 * `ext.arrows-plus` allows to place arrow tips along a path.
   * via pics *along* a path operation (`ext/arrow`, `ext/softpath arrows` and `ext/softpath arrow`)
-  * via keys ( `ext/arc arrows` and `ext/softpath arrows`) along a previous arc or any path segment.
+  * via keys (`ext/arc arrows` and `ext/softpath arrows`) along a previous arc or any path segment.
   * All except the `ext/arrow` key support the bending of arrow tips.
   * The `\arrow` command of the `decorations.markings` library has alternatives `\arrow*` and `\arrow**` for shifting and shifting/bending.
 * `ext.beamer` provides better Beamer support for TikZ.
@@ -24,20 +24,20 @@
 * `ext.calendar-plus` extends the `calendar` library with more tests, week numbers and a few goodies.
   * The already defined keys `day xshift`, `day yshift`, `month xshift` and `month yshift` are now proper value-keys and can be accessed without having to use an `@`-riddled macro name.
   * The `if` key is nestable.
-  * Via the `pgfcalendar-ext` package more conditionals are available, also week numbering according to ISO 8601 is supported.
+  * The `pgfcalendar-ext` package implemented more conditionals and also provides week numbering according to ISO 8601.
 * `ext.layers` allows to put nodes etc on a separate layer without having to use `pgfonlayer`.
 * `ext.misc` which includes
   * the PGFKeys library `ext.pgfkeys-plus` and
   * the PGFFor extension `pgffor-ext`.
-* `ext.node-families` uses the AUX file to sync the sizes of nodes.
+* `ext.node-families` uses the AUX file to sync the sizes of nodes (memoizable).
   * `ext.node-families.shapes.geometric`
 * `ext.nodes` extends the functionalities around nodes.
-* `ext.paths.arcto` implements a `arc to` path operation to construct an arc *to* a point.
+* `ext.paths.arcto` implements an `arc to` path operation to construct an arc *to* a point.
 * `ext.paths.ortho` provides orthogonal path operations `-|-`, `|-|`, `r-rl`, `r-lr`, `r-du` and `r-ud`.
 * `ext.paths.timer` adds timers to the path operations `rectangle`, `parabola`, `sin` and `cos`.
 * `ext.patterns.images` allows images to be used as a path‘s pattern.
 * `ext.positioning-plus` adds more ways to position nodes in reference to each other.
-* `ext.scalepicture` scales a TikZ picture to the desired dimensions.
+* `ext.scalepicture` scales a TikZ picture to the desired dimensions (uses the AUX file, memoizable).
 * Shapes:
   * `ext.shapes.circlearrow`
   * `ext.shapes.circlecrosssplit`

Modified: trunk/Master/texmf-dist/doc/latex/tikz-ext/tikz-ext-manual-en-library-beamer.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/tikz-ext/tikz-ext-manual-en-library-beamer.tex	2025-04-24 20:26:06 UTC (rev 75013)
+++ trunk/Master/texmf-dist/doc/latex/tikz-ext/tikz-ext-manual-en-library-beamer.tex	2025-04-24 20:26:20 UTC (rev 75014)
@@ -12,12 +12,12 @@
 \section{Beamer with \tikzname}
 \label{tikzlibrary:beamer}
 \begin{tikzlibrary}{ext.beamer}
-  This library can help create \tikzname\ diagrams in the class Beamer\indexPackageO{beamer}.
+  This library can help create \tikzname\ diagrams in the \Beamer\ class.
 \end{tikzlibrary}
 
 %\begin{multicols*}{2}
 \subsection{Helpers}
-These helpers are always available, even if this library is loaded outside of Beamer.
+These helpers are always available, even if this library is loaded outside of \Beamer.
 \begin{key}{/\tikzext/ignore line width}
 If this key is used on a scope (or the \tikzname\ picture itself),
 the line widths of paths will not contribute to the bounding box
@@ -38,9 +38,9 @@
 \end{key}
 
 \subsection{Beamer}
-While \tikzname\ has some rudimentary support for the |beamer| class,
+While \tikzname\ has some rudimentary support for the \Beamer\ class,
 i.\,e. in the form of \texttt{\string\path<}\meta{overlay specification}\texttt{>},
-this uses Beamer's |\alt| command internally so that on overlays
+this uses \Beamer's |\alt| command internally so that on overlays
 that are not included in \meta{overlay specification}, the path will not be typeset
 and will therefore not contribute to the diagram's bounding box.
 
@@ -85,7 +85,7 @@
 directly with a distinct \meta{name}.
 \end{key}
 
-\subsubsection{Beamer Function and keys}
+\subsubsection{\Beamer Function and keys}
 \begin{key}{/\tikzext/beamer function=\mchoice{original, alt, only, uncover, visible, invisible}}
 This key changes how the \meta{overlay specification} in
 \texttt{\string\path<}\meta{overlay specification}\texttt{>}
@@ -109,12 +109,12 @@
     visible=\meta{overlay specification} (default all),
   invisible=\meta{overlay specification} (default all)%
 }
-These keys work similar to Beamer's own |\onslide| command
+These keys work similar to \Beamer's own |\onslide| command
 but only apply to the element it is used on.
 
 The implementation of this is rather experimental and should be used carefully.
 Multiple uses of these options \emph{don't} stack, only the last one wins --
-this includes the use of the first syntax shorcuts introduced
+this includes the use of the first syntax shortcuts introduced
 in the next subsubsection.
 
 The same overlays as above can be created with the first of the following diagram.
@@ -154,7 +154,7 @@
   Applies the specific list depending whether the current overlay is before,
   on or after the specified \meta{overlay specification}.
 \end{key}
-\subsubsection{Beamer Shortcuts}
+\subsubsection{\Beamer Shortcuts}
 But, of course, no one wants to write |/utils/ext/only={2}{red}| to
 make an element red on overlay 2.
 \begin{key}{/\tikzext/beamer shortcuts=\marg{key-value list}}
@@ -167,7 +167,6 @@
 \begin{key}{/\tikzext/beamer shortcuts/first char=%
   \mchoice{uncover, cover, visible, invisible, aobs visible, aobs invisible} (initially uncover)}
   The value of this key will be used for the first char shorthands that can be enabled with the following keys.
-\end{key}
 \begin{key}{/\tikzext/beamer shortcuts/enable first char <}
   This install a \enquote{first char} handler with the character |<|.
   
@@ -221,6 +220,12 @@
 \end{tikzpicture}
 \end{codeexample}
 \end{key}
+\begin{key}{/{tikz/graphs/ext}/better beamer shortcut}
+This sets up a few things that enables the |<| first char syntax in the appropriate places.
+For nodes, it tries to be smart and checks for the presence of a |>| to decide whether the \Beamer\ shortcut
+or the the |graphs| library's own shortcut should be used.
+\end{key}
+\end{key}
 
 \subsubsection{Key Handler}
 Maybe this is a syntax that someone wants \dots

Modified: trunk/Master/texmf-dist/doc/latex/tikz-ext/tikz-ext-manual-en-library-paths.ortho.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/tikz-ext/tikz-ext-manual-en-library-paths.ortho.tex	2025-04-24 20:26:06 UTC (rev 75013)
+++ trunk/Master/texmf-dist/doc/latex/tikz-ext/tikz-ext-manual-en-library-paths.ortho.tex	2025-04-24 20:26:20 UTC (rev 75014)
@@ -12,13 +12,50 @@
 \label{library:paths.ortho}
 
 \begin{tikzlibrary}{ext.paths.ortho}
-  This library adds new path specifications \verb!|-|!, \verb!-|-! as well as
-  |r-ud|, |r-du|, |r-lr| and |r-rl|.
+  This library adds new path specifications \verb!|-|!, \verb!-|-!
+  as well as |r-ud|, |r-du|, |r-lr| and |r-rl|.
 \end{tikzlibrary}
 
-\subsection{Zig-Zag}
+\begin{multicols*}{2}[\subsection{Timers}]
+New timers are setup for both the Zig-Zag and the Zig-Zig connections
+that will be introduced in this section.
+These can be configured through the following keys.
+\begin{key}{/\tikzext/ortho/spacing=\meta{number} (initially 4)}\keycompat{tikz/ortho}
+  For $\meta{number} \geq 2$
+  \begin{itemize}
+  \item |pos = 0| will be at the start,\indexKeyO{pos}
+  \item |pos = 1| will be at the end,
+  \item |pos = |$\frac{1}{\meta{number}}$ will be at the first kink,
+  \item |pos = |$\frac{\meta{number}-1}{\meta{number}}$ will be at the second kink and
+  \item |pos = .5| will be in the middle of the middle part of the connection.
+  \end{itemize}
+  
+  If $\meta{number} \leq 1$ then
+  \begin{itemize}
+  \item |pos = -1| will be at the start,
+  \item |pos = 2| will be at the end,
+  \item |pos = 0| will be at the first kink,
+  \item |pos = 1| will be at the second kink and
+  \item |pos = .5| will still be in the middle of the middle part of the connection.
+  \end{itemize}
+\end{key}
+
+\newcolumn
+\begin{key}{/\tikzext/ortho/middle 0 to 1}\keycompat{tikz/ortho}
+  This is an alias for |spacing = 0|.
+\end{key}
+
+\begin{codeexample}[width=4cm,preamble=\usetikzlibrary{ext.paths.ortho}]
+\tikz \draw (0,0) -|- (2,3) 
+  foreach \p in {0.0, 0.25, 0.5, 0.75, 1.0}{
+    node [pos=\p] {\p}};
+\end{codeexample}
+\end{multicols*}
+
+\pagebreak
+\begin{multicols*}{2}[\subsection{Zig-Zag}]
 Similar to the path operations \verb!|-! and \verb!-|! this library adds\indexPathOperationO{\protect\pgfmanualbar-}\indexPathOperationO{-\protect\pgfmanualbar}
-the path operations \verb!|-|! and \verb!-|-!.
+the path operations \verb!|-|! (\enquote{vhv}) and \verb!-|-! (\enquote{hvh}).
 {\catcode`\|=12
 \begin{pathoperation}[noindex]{|-|}{\opt{\oarg{options}}\meta{coordinate or cycle}}
     \index{---1@\protect\texttt{\protect\pgfmanualbar-\protect\pgfmanualbar} path operation}%
@@ -33,11 +70,30 @@
     This operation means ``first horizontal, then vertical and then horizontal again''.
 \end{pathoperation}
 }
-\begin{key}{/\tikzext/ortho/ratio=\meta{ratio} (initially 0.5)}\keycompat{tikz/ortho}
-  This sets the ratio for the middle part of the Zig-Zag connection.
-  
-  For values $\meta{ratio} < 0$ and $\meta{ratio} > 1$ the Zig-Zag lines will
-  look more like Zig-Zig lines.
+
+Where the middle part (horizontal for \verb!|-|! and vertical for \verb!-|-!)
+of these path operation end up can be specified by a ratio, a distance or
+a factor of one base vector of the $x\!y$ coordinate system.
+
+If used with nodes, the key |from center| toggles from where these are measured.
+\begin{key}{/\tikzext/ortho/from center=\opt{\meta{true or false}} (default true)}\keycompat{tikz/ortho}
+  When nodes get connected the placement of the middle part of the Zig-Zag
+  and the Zig-Zig (see below) connections will be calculated from the border
+  of these nodes.
+  The middle part of the connections will be calculated from the nodes' center
+  if this key is set to |true|.
+\end{key}
+
+\begin{keylist}[/\tikzext/ortho]{%
+  hvh ratio=\meta{ratio} (initially 0.5),
+  vhv ratio=\meta{ratio} (initially 0.5),
+  hvvh ratio=\meta{ratio},
+  ratio=\meta{ratio}}\keylistcompat{tikz/ortho}
+  This sets the ratio for the middle part of the \verb!-|-! and/or the \verb!|-|! operation.
+
+  For values of $\meta{ratio} < 0$ and $\meta{ratio} > 1$ the Zig-Zag lines will
+  look more like the Zig-Zig lines.
+
 \begin{codeexample}[preamble=\usetikzlibrary{ext.paths.ortho}]
 \begin{tikzpicture}[very thick, rounded corners]
 \draw[help lines] (-.25, -1.25) grid (2.25, 1.25);
@@ -45,129 +101,104 @@
       (2, 0) -|-[ratio=.25] (0,-1) -- cycle;
 \end{tikzpicture}
 \end{codeexample}
-\end{key}
-%TODO: hvvh/distance needs fixing, maybe?
-\begin{key}{/\tikzext/ortho/distance=\meta{distance}}\keycompat{tikz/ortho}
-  This sets the distance between the start point
-  and the middle part of the Zig-Zag connection.
+\end{keylist}
+
+For specifying a distance or a factor in the $x\!y$ coordinate system the same option will be used.
+\begin{keylist}[/\tikzext/ortho]{%
+  hvh distance=\meta{distance},
+  vhv distance=\meta{distance},
+  hvvh distance=\meta{distance},
+  distance=\meta{distance}}\keylistcompat{tikz/ortho}
   
-  For values $\meta{distance} < 0$ the distance will be used for the target coordinate.
-\begin{codeexample}[width=8cm,preamble=\usetikzlibrary{ext.paths.ortho}]
+If \meta{distance} contains a unit, this will be used as the absolute distance
+for the middle part of the \verb!-|-! and/or the \verb!|-|! operation.
+If \meta{distance} doesn't contain a unit it will be interpreted
+as the factor for the base $y$ (\verb!|-|!) or $x$ vector (\verb!-|-!)
+in the $x\!y$ coordinate system.
+
+This distance is measured from the target coordinate if it's negative,
+otherwise from the start coordinate.
+
+The |distance| option also sets the distance of the Zig-Zig path operations below.
+
+\begin{codeexample}[width=6cm,preamble=\usetikzlibrary{ext.paths.ortho}]
 \begin{tikzpicture}[very thick,-latex]
-\draw[help lines,-] (-.25, -.25) grid (5.25, 3.25);
-\draw (0, 0) -|-[distance= .5cm] ++(2, 1);
-\draw (0, 2) -|-[distance=-.5cm] ++(2, 1);
+\draw[help lines,-]
+  (-.25, -.25) grid (5.25, 3.25);
+\draw (0, 0)
+  -|-[hvh distance=+ .5cm] ++(2, 1);
+\draw (0, 2)
+  -|-[hvh distance=+-.5cm] ++(2, 1);
 
 \tikzset{xshift=3cm}
-\draw (2, 1) -|-[distance= .5cm] ++(-2, -1);
-\draw (2, 3) -|-[distance=-.5cm] ++(-2, -1);
+\draw (2, 1)
+  -|-[hvh distance=+ .5cm]++(-2,-1);
+\draw (2, 3)
+  -|-[hvh distance=+-.5cm]++(-2,-1);
 \end{tikzpicture}
 \end{codeexample}
-\end{key}
-\begin{key}{/\tikzext/ortho/from center=\opt{\meta{true or false}} (default true)}\keycompat{tikz/ortho}
-  When nodes get connected the placement of the middle part of the Zig-Zag
-  and the Zig-Zig (see below) connections will be calculated from the border
-  of these nodes.
-  The middle part of the connections can be calculated from the nodes' center
-  if this key is set to |true|.
-\end{key}
+\end{keylist}
+\end{multicols*}
 
-New timers are setup for both the Zig-Zag and the Zig-Zig connections,
-these can be configured through the following keys.
-\begin{codeexample}[width=8cm,preamble=\usetikzlibrary{ext.paths.ortho}]
-\tikz \draw (0,0) -|- (2,3) 
-  foreach \p in {0.0, 0.25, 0.5, 0.75, 1.0}{
-    node [pos=\p] {\p}};
-\end{codeexample}
-\begin{key}{/\tikzext/ortho/spacing=\meta{number} (initially 4)}\keycompat{tikz/ortho}
-  Unless $\meta{number} = 0$ is set
-  \begin{itemize}
-  \item |pos = 0| will be at the start,\indexKeyO{pos}
-  \item |pos = 1| will be at the end,
-  \item |pos = |$\frac{1}{\meta{number}}$ will be at the first kink,
-  \item |pos = |$\frac{\meta{number}-1}{\meta{number}}$ will be at the second kink and
-  \item |pos = .5| will be in the middle of the middle part of the connection.
-  \end{itemize}
-  
-  If $\meta{number} = 0$ then
-  \begin{itemize}
-  \item |pos = -1| will be at the start,
-  \item |pos = 2| will be at the end,
-  \item |pos = 0| will be at the first kink,
-  \item |pos = 1| will be at the second kink and
-  \item |pos = .5| will still be in the middle of the middle part of the connection.
-  \end{itemize}
-\end{key}
-\begin{key}{/\tikzext/ortho/middle 0 to 1}\keycompat{tikz/ortho}
-  This is an alias for |spacing = 0|.
-\end{key}
-
-\subsection{Zig-Zig}
+\begin{multicols*}{2}[\subsection{Zig-Zig}]
 \begin{pathoperation}{r-ud}{\opt{\oarg{options}}\meta{coordinate or cycle}}
   This operation means ``first up, then horizontal and then down''.
-  \begin{key}{/\tikzext/ortho/ud distance=\meta{length} (initially .5cm)}\keycompat{tikz/ortho}
-    This sets the distance between the start and the horizontal line to \meta{length}.
-  \end{key}
 \end{pathoperation}
 \begin{pathoperation}{r-du}{\opt{\oarg{options}}\meta{coordinate or cycle}}
   This operation means ``first down, then horizontal and then up''.
-  \begin{key}{/\tikzext/ortho/du distance=\meta{length} (initially .5cm)}\keycompat{tikz/ortho}
-    This sets the distance between the start and the horizontal line to \meta{length}.
-  \end{key}
 \end{pathoperation}
 \begin{pathoperation}{r-lr}{\opt{\oarg{options}}\meta{coordinate or cycle}}
   This operation means ``left down, then vertical and then right''.
-  \begin{key}{/\tikzext/ortho/lr distance=\meta{length} (initially .5cm)}\keycompat{tikz/ortho}
-    This sets the distance between the start and the vertical line to \meta{length}.
-  \end{key}
 \end{pathoperation}
 \begin{pathoperation}{r-rl}{\opt{\oarg{options}}\meta{coordinate or cycle}}
   This operation means ``first right, then vertical and then down''.
-  \begin{key}{/\tikzext/ortho/rl distance=\meta{length} (initially .5cm)}\keycompat{tikz/ortho}
-    This sets the distance between the start and the vertical line to \meta{length}.
-  \end{key}
 \end{pathoperation}
 
-All distances can be set with one key.
-\begin{key}{/\tikzext/ortho/udlr distance=\meta{length}}\keycompat{tikz/ortho}
-  Sets all the previous distances to the same value \meta{length}.
-\end{key}
+\newcolumn
+\begin{keylist}[/\tikzext/ortho]{%
+  ud distance=\meta{distance} (initially .5cm),
+  du distance=\meta{distance} (initially .5cm),
+  lr distance=\meta{distance} (initially .5cm),
+  rl distance=\meta{distance} (initially .5cm),
+  udlr distance=\meta{distance},
+  distance=\meta{distance}}%
+  \listcompat{These were all in the \texttt{/tikz/ortho} namespace.}
+  If \meta{distance} contains a unit, this will be used as the absolute distance
+  for the middle part of the previously introduced path operation.
+  If \meta{distance} doesn't contain a unit it will be interpreted
+  as the factor for the base $y$ (|ud|/|du|) or $x$ vector (|lr|/|rl|)
+  in the $x\!y$ coordinate system.
+  
+  The distance is measured from the start, never from the target coordinate.
+  
+  The |distance| option also sets the distance of the Zig-Zag path operations above.
+\end{keylist}
+\end{multicols*}
 
-\subsection{Even more Horizontal and Vertical Lines}
+\begin{multicols*}{2}[\subsection{Even more Horizontal and Vertical Lines}]
 
 The following keys can be used to access vertical and horizontal line path operations.
-\begin{stylekey}{/\tikzext/horizontal vertical}\keycompat{tikz}
-  This installs  \verb!to path = -| (\tikztotarget) \tikztonodes!\indexKeyO{to path}
+\begin{keylist}[/\tikzext]{%
+  horizontal vertical,
+  vertical horizontal}\keylistcompat{tikz/horizontal vertical, /tikz}
+  These install the path operations \verb!-|! or \verb!|-! respectively as to paths%
+  \indexKeyO{to path} that can be used with the path operations |to| or |edge|.
+\end{keylist}
+\begin{keylist}[/\tikzext]{%
+  horizontal vertical horizontal=\opt{\meta{options}},
+  vertical horizontal vertical=\opt{\meta{options}}}\keylistcompat{tikz/horizontal vertical horizontal, /tikz}
+  These installs the operations \verb!-|-! or \verb!|-|! respectively as to paths
   that can be used with the path operations |to| or |edge|.
-\end{stylekey}
-\begin{stylekey}{/\tikzext/vertical horizontal}\keycompat{tikz}
-  This installs \verb!to path = |- (\tikztotarget) \tikztonodes!
+\end{keylist}
+\begin{keylist}[/\tikzext]{%
+  up horizontal down=\opt{\meta{options}},
+  down horizontal up=\opt{\meta{options}},
+  left vertical right=\opt{\meta{options}},
+  right vertical left=\opt{\meta{options}}}\listcompat{These were all in the \texttt{/tikz} namespace.}
+  These install the Zig-Zig path operations as to paths
   that can be used with the path operations |to| or |edge|.
-\end{stylekey}
-\begin{stylekey}{/\tikzext/horizontal vertical horizontal=\opt{\meta{options}}}\keycompat{tikz}
-  This installs  \verb!to path = -|- (\tikztotarget) \tikztonodes!
-  that can be used with the path operations |to| or |edge|.
-\end{stylekey}
-\begin{stylekey}{/\tikzext/vertical horizontal vertical=\opt{\meta{options}}}\keycompat{tikz}
-  This installs  \verb!to path = |-| (\tikztotarget) \tikztonodes!
-  that can be used with the path operations |to| or |edge|.
-\end{stylekey}
-\begin{stylekey}{/\tikzext/up horizontal down=\opt{\meta{options}}}\keycompat{tikz}
-  This installs  \verb!to path = r-ud (\tikztotarget) \tikztonodes!
-  that can be used with the path operations |to| or |edge|.
-\end{stylekey}
-\begin{stylekey}{/\tikzext/down horizontal up=\opt{\meta{options}}}\keycompat{tikz}
-  This installs  \verb!to path = r-du (\tikztotarget) \tikztonodes!
-  that can be used with the path operations |to| or |edge|.
-\end{stylekey}
-\begin{stylekey}{/\tikzext/left vertical right=\opt{\meta{options}}}\keycompat{tikz}
-  This installs  \verb!to path = r-lr (\tikztotarget) \tikztonodes!
-  that can be used with the path operations |to| or |edge|.
-\end{stylekey}
-\begin{stylekey}{/\tikzext/right vertical left=\opt{\meta{options}}}\keycompat{tikz}
-  This installs  \verb!to path = r-rl (\tikztotarget) \tikztonodes!
-  that can be used with the path operations |to| or |edge|.
-\end{stylekey}
+\end{keylist}
+
 When connecting rectangular nodes, these keys could be useful as well.
 They all need to be given to a |to| or |edge| path operation.
 \begin{stylekey}{/\tikzext/only vertical second=\opt{\meta{length}} (default 0pt)}\keycompat{tikz}
@@ -195,7 +226,7 @@
 The optional \meta{length} can be used to shift the line orthogonally to its direction.
 \end{stylekey}
 
-%\pagebreak
+%\newcolumn
 Since all previous key are rather cumbersome, one can install shortcuts for these.
 \begin{stylekey}{/\tikzext/ortho/install shortcuts}\keycompat{tikz/ortho}
 Installs the following shortcuts:\\
@@ -216,3 +247,4 @@
 \end{tabular}
 }
 \end{stylekey}
+\end{multicols*}
\ No newline at end of file

Modified: trunk/Master/texmf-dist/doc/latex/tikz-ext/tikz-ext-manual-en-main-body.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/tikz-ext/tikz-ext-manual-en-main-body.tex	2025-04-24 20:26:06 UTC (rev 75013)
+++ trunk/Master/texmf-dist/doc/latex/tikz-ext/tikz-ext-manual-en-main-body.tex	2025-04-24 20:26:20 UTC (rev 75014)
@@ -209,8 +209,14 @@
 \section*{Changelog}\addcontentsline{toc}{section}{Changelog}
 \begin{multicols}{2}\raggedright
 \noindent
-Version 0.6.1 (\the\year-\ifnum\month<10 0\fi\the\month-\ifnum\day<10 0\fi\the\day)
+Version \tikzextversion\ (\the\year-\ifnum\month<10 0\fi\the\month-\ifnum\day<10 0\fi\the\day)
 \begin{itemize}
+\item Bugfix to and slight refactoring of |ext.paths.ortho|.
+\item Bugfix to |pgffor-ext|/|ext.misc|.
+\item Added better support for |graphs| library for |ext.beamer|.
+\end{itemize}
+Version 0.6.1 (2025-04-12)
+\begin{itemize}
 \item \addTikz{beamer}
 \item Added new tips |ext_Double Cap|, |ext_Double Stealth| and |ext_Double Triange|.
 \item Bugfix to |ext.arrows-plus|. \cite{GH18}

Modified: trunk/Master/texmf-dist/doc/latex/tikz-ext/tikz-ext-manual-en-main-preamble.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/tikz-ext/tikz-ext-manual-en-main-preamble.tex	2025-04-24 20:26:06 UTC (rev 75013)
+++ trunk/Master/texmf-dist/doc/latex/tikz-ext/tikz-ext-manual-en-main-preamble.tex	2025-04-24 20:26:20 UTC (rev 75014)
@@ -557,28 +557,35 @@
 %  box.north east) -- node [above, overlay] {\texttt{radius}} ++(-#1,0);
 }
 \makeatother
-\newcommand*\keycompat[2][pre 0.6]{%
+\newcommand*\listcompat[2][pre~0.6]{%
+  \vspace{-6pt}\item{\color{gray}\small\sffamily#1\kern.5em{#2}}\vspace{-2pt}\par
+}
+\newcommand*\keylistcompat[2][pre~0.6]{%
+  \vspace{-6pt}\item{\color{gray}\small\sffamily #1\kern.5em{\ttfamily/#2/\myname}}\vspace{-2pt}\par
+  \pgfmanualpdflabel{/#2/\myname}{}%
+}
+\newcommand*\keycompat[2][pre~0.6]{%
   \vspace{-3pt}\item{\color{gray}\small\sffamily #1\kern.5em{\ttfamily/#2/\myname}}\vspace{-2pt}\par
   \pgfmanualpdflabel{/#2/\myname}{}%
 }
-\newcommand*\cmdcompat[2][pre 0.6]{%
+\newcommand*\cmdcompat[2][pre~0.6]{%
   \vspace{-3pt}\item{\color{gray}\small\sffamily #1\kern.5em{\ttfamily\string#2}}\vspace{-2pt}\par
 %  \pgfmanualpdflabel{\string#2}{}%
 }
-\newcommand*\tipcompat[1][pre 0.6]{%
+\newcommand*\tipcompat[1][pre~0.6]{%
   \vspace{-3pt}\item{\color{gray}\small\sffamily #1\kern.5em{\ttfamily\expandafter\tipcompatstrip\currentarrowtype\tipstop}}\vspace{-2pt}\par
 %  \pgfmanualpdflabel{/#2/\myname}{}%
 }
-\newcommand*\tipCompat[2][pre 0.6]{
+\newcommand*\tipCompat[2][pre~0.6]{
   \vspace{-8pt}\item{\color{gray}\small\sffamily #1\kern.5em{\ttfamily#2}}\vspace{2pt}\par
 %  \pgfmanualpdflabel{/#2/\myname}{}%
 }
 \def\tipcompatstrip ext#1#2\tipstop{#2}%
-\newcommand*\handlercompat[2][pre 0.6]{%
+\newcommand*\handlercompat[2][pre~0.6]{%
   \vspace{-3pt}\item{\color{gray}\small\sffamily #1\kern.5em{\ttfamily#2}}\vspace{-2pt}\par
   \pgfmanualpdflabel{#2}{}%
 }
-\newcommand*\mathcompat[2][pre 0.6]{%
+\newcommand*\mathcompat[2][pre~0.6]{%
   \vspace{-3pt}\item{\color{gray}\small\sffamily #1\kern.5em{\ttfamily#2}}\vspace{-2pt}\par
 %  \pgfmanualpdflabel{/#2/\myname}{}%
 }
@@ -685,4 +692,6 @@
   \index{ext\textunderscore#1@\protect\texttt{.ext\textunderscore#1} handler}%
   \index{Key handlers!.ext\textunderscore#1@\protect\texttt{.ext\textunderscore#1}}
 }
-\makeatother
\ No newline at end of file
+\makeatother
+
+\newcommand*\Beamer{\textsc{Beamer}}
\ No newline at end of file

Modified: trunk/Master/texmf-dist/doc/latex/tikz-ext/tikz-ext-manual.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/tex/generic/tikz-ext/tikzext-util.tex
===================================================================
--- trunk/Master/texmf-dist/tex/generic/tikz-ext/tikzext-util.tex	2025-04-24 20:26:06 UTC (rev 75013)
+++ trunk/Master/texmf-dist/tex/generic/tikz-ext/tikzext-util.tex	2025-04-24 20:26:20 UTC (rev 75014)
@@ -6,8 +6,8 @@
 % 2. under the GNU Free Documentation License.
 %
 
-\def\tikzextversion{0.6.1}
-\def\tikzextversionnumber{9}
+\def\tikzextversion{0.6.2}
+\def\tikzextversionnumber{10}
 \def\tikzextset{\pgfqkeys{/tikz/ext}}
 \def\pgfextset{\pgfqkeys{/pgf/ext}}
 \pgfextset{
@@ -168,8 +168,9 @@
     \tikzextset{
       compat/#1/.is choice,
       compat/#1/.default=#2,
-      compat/#1/0.6.1/.style={/tikz/ext/compat/#1/0.6}}%
-    \pgfutil at for\tikzext at temp:=pre 0.6,0.6,0.6.1,newest,warn\do{%
+      compat/#1/0.6.1/.style={/tikz/ext/compat/#1/0.6},
+      compat/#1/0.6.2/.style={/tikz/ext/compat/#1/0.6}}%
+    \pgfutil at for\tikzext at temp:=pre 0.6,0.6,0.6.1,0.6.2,newest,warn\do{%
       \pgfkeys at expanded{%
         \noexpand\tikzextset{%
           compat/\tikzext at temp/.append style=%
@@ -203,7 +204,10 @@
   }}
 \tikzext at temp{pre 0.6}
 \tikzext at temp{0.6}
-\tikzextset{compat/0.6.1/.style={/tikz/ext/compat/0.6}}
+\tikzextset{
+  compat/0.6.1/.style={/tikz/ext/compat/0.6},
+  compat/0.6.2/.style={/tikz/ext/compat/0.6}%
+}
 \tikzext at temp{newest}
 \tikzext at temp{warn}
 \tikzextset{compat=warn}

Modified: trunk/Master/texmf-dist/tex/generic/tikz-ext/tikzlibraryext.beamer.code.tex
===================================================================
--- trunk/Master/texmf-dist/tex/generic/tikz-ext/tikzlibraryext.beamer.code.tex	2025-04-24 20:26:06 UTC (rev 75013)
+++ trunk/Master/texmf-dist/tex/generic/tikz-ext/tikzlibraryext.beamer.code.tex	2025-04-24 20:26:20 UTC (rev 75014)
@@ -342,25 +342,34 @@
 }
 
 % ext/ keys need special handling in graphs library
-\pgfqkeys{/tikz/graphs}{
-  ext/uncover/.style={
-    /tikz/graphs/@edges styling/.append={,/tikz/ext/uncover={#1}},
-    /tikz/ext/uncover={#1}},
-  ext/visible/.style={
-    /tikz/graphs/@edges styling/.append={,/tikz/ext/visible={#1}},
-    /tikz/ext/visible={#1}},
-  ext/cover/.style={
-    /tikz/graphs/@edges styling/.append={,/tikz/ext/cover={#1}}
-    /tikz/ext/cover={#1}},
-  ext/invisible/.style={
-    /tikz/graphs/@edges styling/.append={,/tikz/ext/invisible={#1}}
-    /tikz/ext/invisible={#1}},
-  ext/better beamer shortcut/.code={%
-    \pgfkeyslet{/handlers/first char syntax/\expandafter\meaning\string<}\relax % disable < shortcut
-    \tikzgraphsset{
-      @edges styling/.append={,/tikz/ext/beamer shortcuts/enable first char <},
-      @nodes styling/.append style={/tikz/ext/beamer shortcuts/enable first char <},
-      /tikz/every label/.append style={/tikz/ext/beamer shortcuts/enable first char <}
-    }%
-  }
+\def\tikzext at beamer@graphs at firstchar#1{%
+  \pgfutil at in@{>}{#1}%
+  \ifpgfutil at in@
+    \tikzext at beamer@firstchar{#1}%
+  \else
+    \tikz at lg@parse at less{#1}%
+  \fi
+}
+\pgfkeysdef{/tikz/ext/beamer shortcuts/enable first char < graphs}{%
+  \pgfkeysvalueof{/tikz/ext/beamer shortcuts/@enable first char/. at cmd}{<}{\tikzext at beamer@graphs at firstchar}\pgfeov
+}
+\pgfkeysdef{/tikz/graphs/ext/uncover}{%
+  \pgfkeysaddvalue{/tikz/graphs/@edges styling}{}{,/tikz/ext/uncover={#1}}%
+  \pgfkeysvalueof{/tikz/ext/uncover/. at cmd}{#1}\pgfeov}
+\pgfkeysdef{/tikz/graphs/ext/visible}{%
+  \pgfkeysadd{/tikz/graphs/@edges styling}{}{,/tikz/ext/visible={#1}}%
+  \pgfkeysvalueof{/tikz/ext/visible/. at cmd}{#1}\pgfeov}
+\pgfkeysdef{/tikz/graphs/ext/cover}{%
+  \pgfkeysaddvalue{/tikz/graphs/@edges styling}{}{,/tikz/ext/cover={#1}}%
+  \pgfkeysvalueof{/tikz/ext/cover/. at cmd}{#1}\pgfeov}
+\pgfkeysdef{/tikz/graphs/ext/invisible}{%
+  \pgfkeysaddvalue{/tikz/graphs/@edges styling}{}{,/tikz/ext/invisible={#1}}%
+  \pgfkeysvalueof{/tikz/ext/invisible/. at cmd}{#1}\pgfeov}
+\pgfkeysdef{/tikz/graphs/ext/better beamer shortcut}{%
+  \pgfkeyslet{/handlers/first char syntax/\expandafter\meaning\string<}\relax % disable < shortcut
+  \pgfkeysaddvalue{/tikz/graphs/@edges styling}{}{,/tikz/ext/beamer shortcuts/enable first char <}%
+  \pgfkeys{
+    /tikz/graphs/@nodes styling/.append style={/tikz/ext/beamer shortcuts/enable first char < graphs},
+    /tikz/every label/.append style={/tikz/ext/beamer shortcuts/enable first char <}
+  }%
 }
\ No newline at end of file

Modified: trunk/Master/texmf-dist/tex/generic/tikz-ext/tikzlibraryext.misc.code.tex
===================================================================
--- trunk/Master/texmf-dist/tex/generic/tikz-ext/tikzlibraryext.misc.code.tex	2025-04-24 20:26:06 UTC (rev 75013)
+++ trunk/Master/texmf-dist/tex/generic/tikz-ext/tikzlibraryext.misc.code.tex	2025-04-24 20:26:20 UTC (rev 75014)
@@ -41,9 +41,9 @@
   \endgroup
 }
 
-\pgfutil at IfUndefined{tikzext at pgf@foreach at no@list at parse@to}{% stupid test
+\unless\ifcsname iftikzext at pgffor@nolist\endcsname
   \input pgffor-ext.code.tex
-}{}
+\fi
 
 %% PGFmath
 %% strrepeat("x", 5) = "xxxxx"

Modified: trunk/Master/texmf-dist/tex/generic/tikz-ext/tikzlibraryext.paths.ortho.code.tex
===================================================================
--- trunk/Master/texmf-dist/tex/generic/tikz-ext/tikzlibraryext.paths.ortho.code.tex	2025-04-24 20:26:06 UTC (rev 75013)
+++ trunk/Master/texmf-dist/tex/generic/tikz-ext/tikzlibraryext.paths.ortho.code.tex	2025-04-24 20:26:20 UTC (rev 75014)
@@ -14,10 +14,10 @@
 \let\tikzextorig at tikz@rect\tikz at rect
 \def\tikz at rect{\pgfutil at ifnextchar e\tikzextorig at tikz@rect\tikzext at tikz@r}
 \def\tikzext at tikz@r -{%
-  \pgfutil at ifnextchar l\tikzext at tikz@lr at lineto{%
-    \pgfutil at ifnextchar r\tikzext at tikz@rl at lineto{%
-      \pgfutil at ifnextchar u\tikzext at tikz@ud at lineto{%
-        \pgfutil at ifnextchar d\tikzext at tikz@du at lineto\tikz at expand
+  \pgfutil at ifnextchar l\tikzext at ortho@lr{%
+    \pgfutil at ifnextchar r\tikzext at ortho@rl{%
+      \pgfutil at ifnextchar u\tikzext at ortho@ud{%
+        \pgfutil at ifnextchar d\tikzext at ortho@du\tikz at expand
       }%
     }%
   }%
@@ -25,32 +25,27 @@
 %% For the operator |-| we need to check after TikZ found |-
 \let\tikzextorig at tikz@vh at lineto@next\tikz at vh@lineto at next
 \def\tikz at vh@lineto at next{%
-  \pgfutil at ifnextchar|{\expandafter\tikzext at tikz@vhv at lineto\pgfutil at gobble}%
-    {\pgfutil at ifnextchar\tikz at activebar{\expandafter\tikzext at tikz@vhv at lineto\pgfutil at gobble}%
+  \pgfutil at ifnextchar|{\expandafter\tikzext at ortho@vhv\pgfutil at gobble}%
+    {\pgfutil at ifnextchar\tikz at activebar{\expandafter\tikzext at ortho@vhv\pgfutil at gobble}%
       {\tikzextorig at tikz@vh at lineto@next}}}
 %% For the operator -|- we need to check after TikZ found -|
 \let\tikzextorig at tikz@hv at lineto\tikz at hv@lineto
 \def\tikz at hv@lineto{%
-  \pgfutil at ifnextchar-{\expandafter\tikzext at tikz@hvh at lineto\pgfutil at gobble}%
+  \pgfutil at ifnextchar-{\expandafter\tikzext at ortho@hvh\pgfutil at gobble}%
     {\tikzextorig at tikz@hv at lineto}}
 
 %% |-|[<opts>] and -|-[<opts>] are allowed
-\def\tikzext at tikz@vhv at lineto{\pgfutil at ifnextchar[{\tikzext at tikz@collect at hvvh@options\tikzext at tikz@vhv at lineto@next}{\tikzext at tikz@collect at hvvh@options\tikzext at tikz@vhv at lineto@next[]}}
-\def\tikzext at tikz@hvh at lineto{\pgfutil at ifnextchar[{\tikzext at tikz@collect at hvvh@options\tikzext at tikz@hvh at lineto@next}{\tikzext at tikz@collect at hvvh@options\tikzext at tikz@hvh at lineto@next[]}}
+\def\tikzext at ortho@vhv{\pgfutil at ifnextchar[{\tikzext at ortho@opts\tikzext at ortho@vhv at next}{\tikzext at ortho@opts\tikzext at ortho@vhv at next[]}}
+\def\tikzext at ortho@hvh{\pgfutil at ifnextchar[{\tikzext at ortho@opts\tikzext at ortho@hvh at next}{\tikzext at ortho@opts\tikzext at ortho@hvh at next[]}}
 
 %% r-rl[<opts>], r-lr[<opts>], etc.
-\def\tikzext at tikz@rl at lineto rl{\pgfutil at ifnextchar[{\tikzext at tikz@collect at hvvh@options\tikzext at tikz@rl at lineto@next}{\tikzext at tikz@collect at hvvh@options\tikzext at tikz@rl at lineto@next[]}}
-\def\tikzext at tikz@lr at lineto lr{\pgfutil at ifnextchar[{\tikzext at tikz@collect at hvvh@options\tikzext at tikz@lr at lineto@next}{\tikzext at tikz@collect at hvvh@options\tikzext at tikz@lr at lineto@next[]}}
-\def\tikzext at tikz@du at lineto du{\pgfutil at ifnextchar[{\tikzext at tikz@collect at hvvh@options\tikzext at tikz@du at lineto@next}{\tikzext at tikz@collect at hvvh@options\tikzext at tikz@du at lineto@next[]}}
-\def\tikzext at tikz@ud at lineto ud{\pgfutil at ifnextchar[{\tikzext at tikz@collect at hvvh@options\tikzext at tikz@ud at lineto@next}{\tikzext at tikz@collect at hvvh@options\tikzext at tikz@ud at lineto@next[]}}
+\def\tikzext at ortho@rl rl{\pgfutil at ifnextchar[{\tikzext at ortho@opts\tikzext at ortho@rl at next}{\tikzext at ortho@opts\tikzext at ortho@rl at next[]}}
+\def\tikzext at ortho@lr lr{\pgfutil at ifnextchar[{\tikzext at ortho@opts\tikzext at ortho@lr at next}{\tikzext at ortho@opts\tikzext at ortho@lr at next[]}}
+\def\tikzext at ortho@du du{\pgfutil at ifnextchar[{\tikzext at ortho@opts\tikzext at ortho@du at next}{\tikzext at ortho@opts\tikzext at ortho@du at next[]}}
+\def\tikzext at ortho@ud ud{\pgfutil at ifnextchar[{\tikzext at ortho@opts\tikzext at ortho@ud at next}{\tikzext at ortho@opts\tikzext at ortho@ud at next[]}}
 
 %% TikZ interjects are done, the rest is independent:
-
-
-\newdimen\tikzext at tikz@udlr at distance
-\newdimen\tikzext at tikz@hvvh at distance
-\newif\iftikzext at tikz@hvvh at middle         % checks whether spacing = 0 was selected
-\newif\iftikzext at tikz@hvvh at fromcenter
+\newif\iftikzext at ortho@fromcenter
 \newif\iftikzext at ortho@preflush
 \tikzext at ortho@preflushtrue
 
@@ -61,149 +56,150 @@
   udlr/.code=\pgfqkeys{/tikz/ext/ortho}{#1},%
   ortho/.search also=/tikz,
   ortho/middle 0 to 1/.style={/tikz/ext/ortho/spacing=0},%
-  ortho/from center/.is if=tikzext at tikz@hvvh at fromcenter,%
-  ortho/spacing/.code=% spacing = 0 means that the middle part are the pos-itions 0 to 1,
-  %                                           the first part is -1 to 0, the last part is to 2
-    \pgfmathint{#1}\let\tikzext at tikz@hvvh at timing@parts\pgfmathresult% in case they are calculations to be done
-    \ifcase\tikzext at tikz@hvvh at timing@parts\relax
-      \tikzext at tikz@hvvh at middletrue
-      \def\tikzext at tikz@hvvh at timing@parts{1}%
-      \def\tikzext at tikz@hvvh at timing@first{0}%
-      \def\tikzext at tikz@hvvh at timing@last{1}%
-      \def\tikzext at tikz@hvvh at timing@subtr{0}%
-      \def\tikzext at tikz@hvvh at timing@factor{1}%
-    \else            % in all other cases n > 0 the kinks are at pos = 1/n and (n - 1)/n
-      \tikzext at tikz@hvvh at middlefalse
-      \pgfmathreciprocal{#1}\let\tikzext at tikz@hvvh at timing@first\pgfmathresult
-      \pgfmathsetmacro\tikzext at tikz@hvvh at timing@last{1-\pgfmathresult}%
-      \pgfmathreciprocal{#1-2}%
-      \let\tikzext at tikz@hvvh at timing@subtr\pgfmathresult
-      \pgfmathsetmacro\tikzext at tikz@hvvh at timing@factor{1+2*\pgfmathresult}%
+  ortho/from center/.is if=tikzext at ortho@fromcenter,%
+  ortho/spacing/.code=% spacing = 0 or 1 means that the middle part are the pos-itions 0 to 1,
+  %                                          the first part is -1 to 0, the last part is to 2
+    \pgfmathint{#1}\let\tikzext at ortho@timing at parts\pgfmathresult% in case they are calculations to be done
+    \ifnum\tikzext at ortho@timing at parts<2
+      \def\tikzext at ortho@timing at parts{1}%
+      \def\tikzext at ortho@timing at first{0}%
+      \def\tikzext at ortho@timing at last{1}%
+      \def\tikzext at ortho@timing at subtr{0}%
+      \def\tikzext at ortho@timing at factor{1}%
+    \else            % in all other cases n > 1 the kinks are at pos = 1/n and (n - 1)/n
+      \pgfmathreciprocal{\tikzext at ortho@timing at parts}%
+      \let\tikzext at ortho@timing at first\pgfmathresult
+      \pgfmathsetmacro\tikzext at ortho@timing at last{1-\pgfmathresult}%
+      \pgfmathreciprocal{\tikzext at ortho@timing at parts-2}%
+      \let\tikzext at ortho@timing at subtr\pgfmathresult
+      \pgfmathsetmacro\tikzext at ortho@timing at factor{1+2*\pgfmathresult}%
     \fi,%
-  ortho/ratio/.code=\pgfmathsetmacro\tikzext at tikz@hvvh at ratio{#1},%
-  % TODO: not possible to do distance in TikZ coordinate system
-  ortho/distance/.code=\pgfmathsetlength\tikzext at tikz@hvvh at distance{#1}\let\tikzext at tikz@hvvh at ratio\pgfutil at empty,%
-  ortho/udlr distance/.style={%
-    /tikz/ext/ortho/ud distance={#1},%
-    /tikz/ext/ortho/du distance={#1},%
-    /tikz/ext/ortho/lr distance={#1},%
-    /tikz/ext/ortho/rl distance={#1}},%
-  ortho/ud distance/.initial=+.5cm,%
-  ortho/du distance/.initial=+.5cm,%
-  ortho/lr distance/.initial=+.5cm,%
-  ortho/rl distance/.initial=+.5cm,%
+  ortho/hvh ratio/.code=%
+    \pgfkeyssetvalue{/tikz/ext/ortho/hvh distance}{}%
+    \pgfkeyssetvalue{/tikz/ext/ortho/hvh ratio}{#1},
+  ortho/vhv ratio/.code=%
+    \pgfkeyssetvalue{/tikz/ext/ortho/vhv distance}{}%
+    \pgfkeyssetvalue{/tikz/ext/ortho/vhv ratio}{#1},
+  ortho/hvh distance/.code=%
+    \pgfkeyssetvalue{/tikz/ext/ortho/hvh distance}{#1}%
+    \pgfkeyssetvalue{/tikz/ext/ortho/hvh ratio}{},
+  ortho/vhv distance/.code=%
+    \pgfkeyssetvalue{/tikz/ext/ortho/vhv distance}{#1}%
+    \pgfkeyssetvalue{/tikz/ext/ortho/vhv ratio}{},
+  ortho/hvvh distance/.style={
+    /tikz/ext/ortho/hvh distance={#1},
+    /tikz/ext/ortho/vhv distance={#1}},
+  ortho/hvvh ratio/.style={
+    /tikz/ext/ortho/hvh ratio={#1},
+    /tikz/ext/ortho/vhv ratio={#1}},
+  ortho/ratio/.style={% there's no udlr ratio so we make ratio an alias to hvvh ratio
+    /tikz/ext/ortho/hvh ratio={#1},
+    /tikz/ext/ortho/vhv ratio={#1}},
+  % with it's always a distance (or a unit in the xy cs)
+  ortho/ud distance/.initial=+.5cm,
+  ortho/du distance/.initial=+.5cm,
+  ortho/lr distance/.initial=+.5cm,
+  ortho/rl distance/.initial=+.5cm,
+  ortho/udlr distance/.style={
+    /tikz/ext/ortho/ud distance={#1},
+    /tikz/ext/ortho/du distance={#1},
+    /tikz/ext/ortho/lr distance={#1},
+    /tikz/ext/ortho/rl distance={#1}},
+  ortho/distance/.style={
+    /tikz/ext/ortho/hvh distance={#1},
+    /tikz/ext/ortho/vhv distance={#1},
+    /tikz/ext/ortho/ud  distance={#1},
+    /tikz/ext/ortho/du  distance={#1},
+    /tikz/ext/ortho/lr  distance={#1},
+    /tikz/ext/ortho/rl  distance={#1}},
   ortho/ratio=.5,% default value
   ortho/spacing=4,% default value
 }%
 
-%BEGIN_FOLD Timer
-\def\tikzext at timer@hvhline{%
-  \pgf at process{\tikz at timer@start}\pgf at ya\pgf at y
-  \pgf at process{\tikz at timer@end}\pgf at yc\pgf at y
-  \pgf at process{\tikz at timer@middle}\pgf at xb\tikz at time pt%
-  \ifdim\tikz at time pt<\tikzext at tikz@hvvh at timing@first pt% first quarter
-    \iftikzext at tikz@hvvh at middle
-      \advance\pgf at xb1pt%
-    \else
-      \pgf at xb\tikzext at tikz@hvvh at timing@parts\pgf at xb
-    \fi
-    \edef\tikz at marshal{\noexpand\pgftransformlineattime{\pgf at sys@tonumber{\pgf at xb}}{\noexpand\tikz at timer@start}{%
-        \noexpand\pgfqpoint{\the\pgf at x}{\the\pgf at ya}}}%
-  \else
-    \ifdim\tikz at time pt>\tikzext at tikz@hvvh at timing@last pt% last quarter
-      \iftikzext at tikz@hvvh at middle
-        \advance\pgf at xb-1pt%
-      \else
-        \pgf at xb\tikzext at tikz@hvvh at timing@parts\pgf at xb
-      \fi
-      \advance\pgf at xb\dimexpr-\tikzext at tikz@hvvh at timing@parts pt+1pt\relax%
-      \edef\tikz at marshal{\noexpand\pgftransformlineattime{\pgf at sys@tonumber{\pgf at xb}}%
-        {\noexpand\pgfqpoint{\the\pgf at x}{\the\pgf at yc}}{\noexpand\tikz at timer@end}}%
-    \else% middle half
-      \pgf at xb\tikzext at tikz@hvvh at timing@factor\pgf at xb%
-      \advance\pgf at xb-\tikzext at tikz@hvvh at timing@subtr pt%
-      \edef\tikz at marshal{\noexpand\pgftransformlineattime{\pgf at sys@tonumber{\pgf at xb}}%
-        {\noexpand\pgfqpoint{\the\pgf at x}{\the\pgf at ya}}{\noexpand\tikz at timer@middle}}%
-    \fi\fi\tikz at marshal}
-\def\tikzext at timer@vhvline{%
-  \pgf at process{\tikz at timer@start}\pgf at xa\pgf at x
-  \pgf at process{\tikz at timer@end}\pgf at xc\pgf at x
-  \pgf at process{\tikz at timer@middle}\pgf at xb\tikz at time pt%
-  \ifdim\tikz at time pt<\tikzext at tikz@hvvh at timing@first pt% first quarter
-    \iftikzext at tikz@hvvh at middle
-      \advance\pgf at xb1pt%
-    \else
-      \pgf at xb\tikzext at tikz@hvvh at timing@parts\pgf at xb
-    \fi
-    \edef\tikz at marshal{\noexpand\pgftransformlineattime{\pgf at sys@tonumber{\pgf at xb}}{\noexpand\tikz at timer@start}{%
-        \noexpand\pgfqpoint{\the\pgf at xa}{\the\pgf at y}}}%
-  \else
-    \ifdim\tikz at time pt>\tikzext at tikz@hvvh at timing@last pt% last quarter
-    \iftikzext at tikz@hvvh at middle
-      \advance\pgf at xb-1pt%
-    \else
-      \pgf at xb\tikzext at tikz@hvvh at timing@parts\pgf at xb
-    \fi
-      \advance\pgf at xb by\dimexpr-\tikzext at tikz@hvvh at timing@parts pt+1pt\relax%
-      \edef\tikz at marshal{\noexpand\pgftransformlineattime{\pgf at sys@tonumber{\pgf at xb}}%
-        {\noexpand\pgfqpoint{\the\pgf at xc}{\the\pgf at y}}{\noexpand\tikz at timer@end}}%
-    \else% middle half
-      \pgf at xb=\tikzext at tikz@hvvh at timing@factor\pgf at xb
-      \advance\pgf at xb by-\tikzext at tikz@hvvh at timing@subtr pt%
-      \edef\tikz at marshal{\noexpand\pgftransformlineattime{\pgf at sys@tonumber{\pgf at xb}}%
-        {\noexpand\pgfqpoint{\the\pgf at xa}{\the\pgf at y}}{\noexpand\tikz at timer@middle}}%
-      \fi\fi\tikz at marshal}%
-
 %% collect options and nodes, coordinates and pics onpath
-\let\tikz at hvvh@currentoption\pgfutil at empty
-\def\tikzext at tikz@collect at hvvh@options#1[#2]{\def\tikz at hvvh@currentoption{#2}#1}
-\def\tikzext at tikz@hvh at lineto@next{%
-  \pgfutil at ifnextchar n{\tikz at collect@label at onpath\tikzext at tikz@hvh at lineto@next}
-    {\pgfutil at ifnextchar c{\tikz at collect@coordinate at onpath\tikzext at tikz@hvh at lineto@next}%
-      {\pgfutil at ifnextchar p{\tikz at collect@pic at onpath\tikzext at tikz@hvh at lineto@next}{\tikz at scan@one at point\tikzext at tikz@@hvh at lineto}}}}%
-\def\tikzext at tikz@vhv at lineto@next{%
-  \pgfutil at ifnextchar n{\tikz at collect@label at onpath\tikzext at tikz@vhv at lineto@next}
-    {\pgfutil at ifnextchar c{\tikz at collect@coordinate at onpath\tikzext at tikz@vhv at lineto@next}%
-      {\pgfutil at ifnextchar p{\tikz at collect@pic at onpath\tikzext at tikz@vhv at lineto@next}{\tikz at scan@one at point\tikzext at tikz@@vhv at lineto}}}}%
-\def\tikzext at tikz@ud at lineto@next{%
-  \pgfutil at ifnextchar n{\tikz at collect@label at onpath\tikzext at tikz@ud at lineto@next}
-    {\pgfutil at ifnextchar c{\tikz at collect@coordinate at onpath\tikzext at tikz@ud at lineto@next}
-      {\pgfutil at ifnextchar p{\tikz at collect@pic at onpath\tikzext at tikz@ud at lineto@next}{\tikz at scan@one at point\tikzext at tikz@@ud at lineto}}}}%
-\def\tikzext at tikz@du at lineto@next{%
-  \pgfutil at ifnextchar n{\tikz at collect@label at onpath\tikzext at tikz@du at lineto@next}
-    {\pgfutil at ifnextchar c{\tikz at collect@coordinate at onpath\tikzext at tikz@du at lineto@next}
-      {\pgfutil at ifnextchar p{\tikz at collect@pic at onpath\tikzext at tikz@du at lineto@next}{\tikz at scan@one at point\tikzext at tikz@@du at lineto}}}}%
-\def\tikzext at tikz@lr at lineto@next{%
-  \pgfutil at ifnextchar n{\tikz at collect@label at onpath\tikzext at tikz@lr at lineto@next}
-    {\pgfutil at ifnextchar c{\tikz at collect@coordinate at onpath\tikzext at tikz@lr at lineto@next}
-      {\pgfutil at ifnextchar p{\tikz at collect@pic at onpath\tikzext at tikz@lr at lineto@next}{\tikz at scan@one at point\tikzext at tikz@@lr at lineto}}}}%
-\def\tikzext at tikz@rl at lineto@next{%
-  \pgfutil at ifnextchar n{\tikz at collect@label at onpath\tikzext at tikz@rl at lineto@next}
-    {\pgfutil at ifnextchar c{\tikz at collect@coordinate at onpath\tikzext at tikz@rl at lineto@next}
-      {\pgfutil at ifnextchar p{\tikz at collect@pic at onpath\tikzext at tikz@rl at lineto@next}{\tikz at scan@one at point\tikzext at tikz@@rl at lineto}}}}%
+\let\tikzext at ortho@options\pgfutil at empty
+\def\tikzext at ortho@opts#1[#2]{\def\tikzext at ortho@options{#2}#1}
+\def\tikzext at ortho@hvh at next{%
+  \pgfutil at ifnextchar n{\tikz at collect@label at onpath\tikzext at ortho@hvh at next}
+    {\pgfutil at ifnextchar c{\tikz at collect@coordinate at onpath\tikzext at ortho@hvh at next}%
+      {\pgfutil at ifnextchar p{\tikz at collect@pic at onpath\tikzext at ortho@hvh at next}{\tikz at scan@one at point\tikzext at ortho@hvh at do}}}}%
+\def\tikzext at ortho@vhv at next{%
+  \pgfutil at ifnextchar n{\tikz at collect@label at onpath\tikzext at ortho@vhv at next}
+    {\pgfutil at ifnextchar c{\tikz at collect@coordinate at onpath\tikzext at ortho@vhv at next}%
+      {\pgfutil at ifnextchar p{\tikz at collect@pic at onpath\tikzext at ortho@vhv at next}{\tikz at scan@one at point\tikzext at ortho@vhv at do}}}}%
+\def\tikzext at ortho@ud at next{%
+  \pgfutil at ifnextchar n{\tikz at collect@label at onpath\tikzext at ortho@ud at next}
+    {\pgfutil at ifnextchar c{\tikz at collect@coordinate at onpath\tikzext at ortho@ud at next}
+      {\pgfutil at ifnextchar p{\tikz at collect@pic at onpath\tikzext at ortho@ud at next}{\tikz at scan@one at point\tikzext at ortho@ud at do}}}}%
+\def\tikzext at ortho@du at next{%
+  \pgfutil at ifnextchar n{\tikz at collect@label at onpath\tikzext at ortho@du at next}
+    {\pgfutil at ifnextchar c{\tikz at collect@coordinate at onpath\tikzext at ortho@du at next}
+      {\pgfutil at ifnextchar p{\tikz at collect@pic at onpath\tikzext at ortho@du at next}{\tikz at scan@one at point\tikzext at ortho@du at do}}}}%
+\def\tikzext at ortho@lr at next{%
+  \pgfutil at ifnextchar n{\tikz at collect@label at onpath\tikzext at ortho@lr at next}
+    {\pgfutil at ifnextchar c{\tikz at collect@coordinate at onpath\tikzext at ortho@lr at next}
+      {\pgfutil at ifnextchar p{\tikz at collect@pic at onpath\tikzext at ortho@lr at next}{\tikz at scan@one at point\tikzext at ortho@lr at do}}}}%
+\def\tikzext at ortho@rl at next{%
+  \pgfutil at ifnextchar n{\tikz at collect@label at onpath\tikzext at ortho@rl at next}
+    {\pgfutil at ifnextchar c{\tikz at collect@coordinate at onpath\tikzext at ortho@rl at next}
+      {\pgfutil at ifnextchar p{\tikz at collect@pic at onpath\tikzext at ortho@rl at next}{\tikz at scan@one at point\tikzext at ortho@rl at do}}}}%
 
-\def\tikzext at do@hvvh#1#2#3#4#5{%
-% #1 = first kink
-% #2 = second kink
-% #3 = end
-% #4 = timer
-% #5 = tikz at shapeborder@name
+\def\tikzext at ortho@do#1#2#3#4{%
+  % #1 = first kink
+  % #2 = second kink
+  % #3 = end
+  % #4 = tikz at shapeborder@name
   \pgfpathlineto{#1}%
   \pgfpathlineto{#2}%
   \pgfpathlineto{#3}%
-  \def\tikz at timer@middle{#2}%
+  \def\tikzext at ortho@timer at kinkA{#1}%
+  \def\tikzext at ortho@timer at kinkB{#2}%
   \def\tikz at timer@end{#3}%
-  \let\tikz at timer#4
-  \edef\pgf at temp{#5}%
-  \ifx\pgf at temp\pgfutil at empty
+  \let\tikz at timer\tikzext at ortho@timer
+  \def\tikzext at temp{#4}%
+  \ifx\tikzext at temp\pgfutil at empty
     \let\tikz at moveto@waiting\relax
   \else
-    \let\tikz at moveto@waiting\pgf at temp
+    \let\tikz at moveto@waiting\tikzext at temp
   \fi
   \tikz at scan@next at command}%
 
+\def\tikzext at ortho@timer{%
+  \pgfutil at tempdima=\tikz at time pt
+  \ifdim\pgfutil at tempdima<\tikzext at ortho@timer at first pt % first quarter
+    \ifnum\tikzext at ortho@timer at parts=1
+      \advance\pgfutil at tempdima1pt
+    \else
+      \pgfutil at tempdima\tikzext at ortho@timer at parts\pgfutil at tempdima
+    \fi
+    \pgftransformlineattime{\pgf at sys@tonumber\pgfutil at tempdima}{\tikz at timer@start}{\tikzext at ortho@timer at kinkA}%
+  \else
+    \ifdim\pgfutil at tempdima>\tikzext at ortho@timer at last pt %last quarter
+      \ifnum\tikzext at ortho@timer at parts=1
+        \advance\pgfutil at tempdima-1pt%
+      \else
+        \pgfutil at tempdima\tikzext at ortho@timer at parts\pgfutil at tempdima
+      \fi
+      \advance\pgfutil at tempdima-\tikzext at ortho@timer at parts pt
+      \advance\pgfutil at tempdima1pt
+      \pgftransformlineattime{\pgf at sys@tonumber\pgfutil at tempdima}{\tikzext at ortho@timer at kinkB}{\tikz at timer@end}%
+    \else % middle bit
+      \pgfutil at tempdima=\tikzext at ortho@timer at factor\pgfutil at tempdima
+      \advance\pgfutil at tempdima-\tikzext at ortho@timer at subtr pt
+      \pgftransformlineattime{\pgf at sys@tonumber\pgfutil at tempdima}{\tikzext at ortho@timer at kinkA}{\tikzext at ortho@timer at kinkB}%
+    \fi
+  \fi
+}
+
+\def\tikzext at ortho@savetimer{%
+  \def\noexpand\tikzext at ortho@timer at parts{\tikzext at ortho@timing at parts}%
+  \def\noexpand\tikzext at ortho@timer at first{\tikzext at ortho@timing at first}%
+  \def\noexpand\tikzext at ortho@timer at last{\tikzext at ortho@timing at last}%
+  \def\noexpand\tikzext at ortho@timer at subtr{\tikzext at ortho@timing at subtr}%
+  \def\noexpand\tikzext at ortho@timer at factor{\tikzext at ortho@timing at factor}%
+}
 %% -|- operator
-\def\tikzext at tikz@@hvh at lineto#1{%
+\def\tikzext at ortho@hvh at do#1{%
   \edef\tikz at timer@start{\noexpand\pgfqpoint{\the\tikz at lastx}{\the\tikz at lasty}}%
   \pgf at xb=\tikz at lastx
   \pgf at xc=\tikz at lastx
@@ -211,15 +207,34 @@
   \tikz at make@last at position{#1}%
   \tikz at flush@moveto at toward{\pgfqpoint{\tikz at lastx}{\pgf at yc}}\pgf at xc\pgf at yc
   \begingroup
-    \tikzextset{ortho/.expand once=\tikz at hvvh@currentoption}%
+    \def\tikzext at temp{\pgfqkeys{/tikz/ext/ortho}}%
+    \expandafter\tikzext at temp\expandafter{\tikzext at ortho@options}%
+    \edef\tikzext at ortho@ratio{\pgfkeysvalueof{/tikz/ext/ortho/hvh ratio}}%
+    \ifx\tikzext at ortho@ratio\pgfutil at empty
+      \pgfmathparse{\pgfkeysvalueof{/tikz/ext/ortho/hvh distance}}%
+      \ifpgfmathunitsdeclared
+        \pgfutil at tempdima=\pgfmathresult pt
+      \else
+        \pgf at process{\pgfqpointxy{\pgfmathresult}{0}}%
+        \ifdim\pgf at x<0pt
+          \pgf at x=-\pgf at x
+        \fi
+        \ifdim\pgfmathresult pt<0pt
+          \pgf at x=-\pgf at x 
+        \fi
+        \pgfutil at tempdima=\pgf at x
+      \fi
+    \else
+      \pgfmathsetmacro\tikzext at ortho@ratio{\tikzext at ortho@ratio}%
+    \fi
     \iftikz at shapeborder
       \pgf at process{\pgfpointshapeborder{\tikz at shapeborder@name}{\pgfqpoint{\pgf at xb}{\tikz at lasty}}}%
-      \iftikzext at tikz@hvvh at fromcenter
+      \iftikzext at ortho@fromcenter
         \pgf at xc\pgf at xb
       \fi
-      \pgfutil at ifxempty\tikzext at tikz@hvvh at ratio{%
-        \ifdim\tikzext at tikz@hvvh at distance<0pt\relax
-          \iftikzext at tikz@hvvh at fromcenter
+      \ifx\tikzext at ortho@ratio\pgfutil at empty
+        \ifdim\pgfutil at tempdima<0pt\relax
+          \iftikzext at ortho@fromcenter
             \pgf at xc\tikz at lastx
           \else
             \pgf at xc\pgf at x
@@ -226,54 +241,56 @@
           \fi
         \fi
         \ifdim\pgf at xb>\tikz at lastx
-          \tikzext at tikz@hvvh at distance-\tikzext at tikz@hvvh at distance
+          \pgfutil at tempdima-\pgfutil at tempdima
         \fi
-      }{%
-        \iftikzext at tikz@hvvh at fromcenter
-          \tikzext at tikz@hvvh at distance\tikz at lastx
+      \else
+        \iftikzext at ortho@fromcenter
+          \pgfutil at tempdima\tikz at lastx
         \else
-          \tikzext at tikz@hvvh at distance\pgf at x
+          \pgfutil at tempdima\pgf at x
         \fi
-        \advance\tikzext at tikz@hvvh at distance-\pgf at xc
-        \tikzext at tikz@hvvh at distance\tikzext at tikz@hvvh at ratio\tikzext at tikz@hvvh at distance
-      }%
-      \advance\pgf at xc\tikzext at tikz@hvvh at distance
+        \advance\pgfutil at tempdima-\pgf at xc
+        \pgfutil at tempdima\tikzext at ortho@ratio\pgfutil at tempdima
+      \fi
+      \advance\pgf at xc\pgfutil at tempdima
       \edef\pgf at tempa{\noexpand\pgfqpoint{\the\pgf at xc}{\the\pgf at yc}}%
       \edef\pgf at tempb{\noexpand\pgfqpoint{\the\pgf at xc}{\the\tikz at lasty}}%
       \edef\pgf at temp{\pgfqpoint{\the\pgf at x}{\the\pgf at y}}%
     \else
       \let\tikz at shapeborder@name\pgfutil at empty
-      \iftikzext at tikz@hvvh at fromcenter
+      \iftikzext at ortho@fromcenter
         \pgf at xc\pgf at xb
       \fi
-      \pgfutil at ifxempty\tikzext at tikz@hvvh at ratio{%
-        \ifdim\tikzext at tikz@hvvh at distance<0pt\relax
+      \ifx\tikzext at ortho@ratio\pgfutil at empty
+        \ifdim\pgfutil at tempdima<0pt\relax
           \pgf at xc\tikz at lastx
         \fi
         \ifdim\pgf at xb>\tikz at lastx
-          \tikzext at tikz@hvvh at distance-\tikzext at tikz@hvvh at distance
+          \pgfutil at tempdima-\pgfutil at tempdima
         \fi
-      }{%
-        \tikzext at tikz@hvvh at distance\tikz at lastx
-        \advance\tikzext at tikz@hvvh at distance-\pgf at xc
-        \tikzext at tikz@hvvh at distance\tikzext at tikz@hvvh at ratio\tikzext at tikz@hvvh at distance
-      }%
-      \advance\pgf at xc\tikzext at tikz@hvvh at distance
+      \else
+        \pgfutil at tempdima\tikz at lastx
+        \advance\pgfutil at tempdima-\pgf at xc
+        \pgfutil at tempdima\tikzext at ortho@ratio\pgfutil at tempdima
+      \fi
+      \advance\pgf at xc\pgfutil at tempdima
       \edef\pgf at tempa{\noexpand\pgfqpoint{\the\pgf at xc}{\the\pgf at yc}}%
       \edef\pgf at tempb{\noexpand\pgfqpoint{\the\pgf at xc}{\the\tikz at lasty}}%
       \edef\pgf at temp{\pgfqpoint{\the\tikz at lastx}{\the\tikz at lasty}}%
     \fi%
-    \xdef\pgf at marshal{%
-      \noexpand\tikzext at do@hvvh
+    \edef\tikzext at temp{%
+  \endgroup
+      \tikzext at ortho@savetimer
+      \noexpand\tikzext at ortho@do
         {\expandafter\noexpand\pgf at tempa}%
         {\expandafter\noexpand\pgf at tempb}%
         {\expandafter\noexpand\pgf at temp}%
-        {\noexpand\tikzext at timer@hvhline}{\tikz at shapeborder@name}}%
-  \endgroup
-  \pgf at marshal}%
+        {\tikz at shapeborder@name}}%
+  \tikzext at temp
+}%
 
 %% |-| operator
-\def\tikzext at tikz@@vhv at lineto#1{%
+\def\tikzext at ortho@vhv at do#1{%
   \edef\tikz at timer@start{\noexpand\pgfqpoint{\the\tikz at lastx}{\the\tikz at lasty}}%
   \pgf at xc=\tikz at lastx
   \pgf at yb=\tikz at lasty
@@ -281,15 +298,36 @@
   \tikz at make@last at position{#1}%
   \tikz at flush@moveto at toward{\pgfqpoint{\pgf at xc}{\tikz at lasty}}\pgf at xc\pgf at yc
   \begingroup
-    \tikzextset{ortho/.expand once=\tikz at hvvh@currentoption}%
+    \def\tikzext at temp{\pgfqkeys{/tikz/ext/ortho}}%
+    \expandafter\tikzext at temp\expandafter{\tikzext at ortho@options}%
+    \edef\tikzext at ortho@ratio{\pgfkeysvalueof{/tikz/ext/ortho/vhv ratio}}%
+    \ifx\tikzext at ortho@ratio\pgfutil at empty
+      \pgfmathparse{\pgfkeysvalueof{/tikz/ext/ortho/vhv distance}}%
+      \ifpgfmathunitsdeclared
+        \pgfutil at tempdima=\pgfmathresult pt
+      \else
+        \typeout{\pgfmathresult\space before}%
+        \pgf at process{\pgfqpointxy{0}{\pgfmathresult}}%
+        \ifdim\pgf at y<0pt
+          \pgf at y=-\pgf at y
+        \fi
+        \ifdim\pgfmathresult pt<0pt
+          \pgf at y=-\pgf at y
+        \fi
+        \typeout{\pgfmathresult\space after, \the\pgf at y}%
+        \pgfutil at tempdima=\pgf at y
+      \fi
+    \else
+      \pgfmathsetmacro\tikzext at ortho@ratio{\tikzext at ortho@ratio}%
+    \fi
     \iftikz at shapeborder
       \pgf at process{\pgfpointshapeborder{\tikz at shapeborder@name}{\pgfqpoint{\tikz at lastx}{\pgf at yb}}}%
-      \iftikzext at tikz@hvvh at fromcenter
+      \iftikzext at ortho@fromcenter
         \pgf at yc\pgf at yb
       \fi
-      \ifx\tikzext at tikz@hvvh at ratio\pgfutil at empty
-        \ifdim\tikzext at tikz@hvvh at distance<0pt\relax
-          \iftikzext at tikz@hvvh at fromcenter
+      \ifx\tikzext at ortho@ratio\pgfutil at empty
+        \ifdim\pgfutil at tempdima<0pt\relax
+          \iftikzext at ortho@fromcenter
             \pgf at yc\tikz at lasty
           \else
             \pgf at yc\pgf at y
@@ -296,255 +334,191 @@
           \fi
         \fi
         \ifdim\pgf at yb>\tikz at lasty
-          \tikzext at tikz@hvvh at distance-\tikzext at tikz@hvvh at distance
+          \pgfutil at tempdima-\pgfutil at tempdima
         \fi
       \else
-        \iftikzext at tikz@hvvh at fromcenter
-          \tikzext at tikz@hvvh at distance\tikz at lasty
+        \iftikzext at ortho@fromcenter
+          \pgfutil at tempdima\tikz at lasty
         \else
-          \tikzext at tikz@hvvh at distance\pgf at y
+          \pgfutil at tempdima\pgf at y
         \fi
-        \advance\tikzext at tikz@hvvh at distance-\pgf at yc
-        \tikzext at tikz@hvvh at distance\tikzext at tikz@hvvh at ratio\tikzext at tikz@hvvh at distance
+        \advance\pgfutil at tempdima-\pgf at yc
+        \pgfutil at tempdima\tikzext at ortho@ratio\pgfutil at tempdima
       \fi
-      \advance\pgf at yc\tikzext at tikz@hvvh at distance
+      \advance\pgf at yc\pgfutil at tempdima
       \edef\pgf at tempa{\noexpand\pgfqpoint{\the\pgf at xc}{\the\pgf at yc}}%
       \edef\pgf at tempb{\noexpand\pgfqpoint{\the\tikz at lastx}{\the\pgf at yc}}%
       \edef\pgf at temp{\pgfqpoint{\the\pgf at x}{\the\pgf at y}}%
     \else
       \let\tikz at shapeborder@name\pgfutil at empty
-      \iftikzext at tikz@hvvh at fromcenter
+      \iftikzext at ortho@fromcenter
         \pgf at yc\pgf at yb
       \fi
-      \ifx\tikzext at tikz@hvvh at ratio\pgfutil at empty
-        \ifdim\tikzext at tikz@hvvh at distance<0pt\relax
+      \ifx\tikzext at ortho@ratio\pgfutil at empty
+        \ifdim\pgfutil at tempdima<0pt\relax
           \pgf at yc\tikz at lasty
         \fi
         \ifdim\pgf at yb>\tikz at lasty
-          \tikzext at tikz@hvvh at distance-\tikzext at tikz@hvvh at distance
+          \pgfutil at tempdima-\pgfutil at tempdima
         \fi
       \else
-        \tikzext at tikz@hvvh at distance\tikz at lasty
-        \advance\tikzext at tikz@hvvh at distance-\pgf at yc
-        \tikzext at tikz@hvvh at distance\tikzext at tikz@hvvh at ratio\tikzext at tikz@hvvh at distance
+        \pgfutil at tempdima\tikz at lasty
+        \advance\pgfutil at tempdima-\pgf at yc
+        \pgfutil at tempdima\tikzext at ortho@ratio\pgfutil at tempdima
       \fi
-      \advance\pgf at yc\tikzext at tikz@hvvh at distance
+      \advance\pgf at yc\pgfutil at tempdima
       \edef\pgf at tempa{\noexpand\pgfqpoint{\the\pgf at xc}{\the\pgf at yc}}%
       \edef\pgf at tempb{\noexpand\pgfqpoint{\the\tikz at lastx}{\the\pgf at yc}}%
       \edef\pgf at temp{\pgfqpoint{\the\tikz at lastx}{\the\tikz at lasty}}%
     \fi%
-    \xdef\pgf at marshal{%
-      \noexpand\tikzext at do@hvvh
+    \edef\tikzext at temp{%
+  \endgroup
+      \tikzext at ortho@savetimer
+      \noexpand\tikzext at ortho@do
         {\expandafter\noexpand\pgf at tempa}%
         {\expandafter\noexpand\pgf at tempb}%
         {\expandafter\noexpand\pgf at temp}%
-        {\noexpand\tikzext at timer@vhvline}{\tikz at shapeborder@name}}%
-  \endgroup
-  \pgf at marshal}%
+        {\tikz at shapeborder@name}}%
+    \tikzext at temp
+}
 
 %% r-ud operator
-\def\tikzext at tikz@@ud at lineto#1{%
-  \edef\tikz at timer@start{\noexpand\pgfqpoint{\the\tikz at lastx}{\the\tikz at lasty}}%
+\def\tikzext at ortho@ud at do#1{\tikzext at ortho@uddu at do{#1}{}{ud}{<}}
+
+%% r-du operator
+\def\tikzext at ortho@du at do#1{\tikzext at ortho@uddu at do{#1}{-}{du}{>}}
+
+%% r-lr operator
+\def\tikzext at ortho@lr at do#1{\tikzext at ortho@lrrl at do{#1}{-}{lr}{>}}
+
+%% r-rl operator
+\def\tikzext at ortho@rl at do#1{\tikzext at ortho@lrrl at do{#1}{}{rl}{<}}
+
+% ud/du
+\def\tikzext at ortho@uddu at do#1#2#3#4{%
+ \edef\tikz at timer@start{\noexpand\pgfqpoint{\the\tikz at lastx}{\the\tikz at lasty}}%
   \pgf at xc\tikz at lastx
   \pgf at yb\tikz at lasty
-  \advance\tikz at lasty1pt%
+  \advance\tikz at lasty#21pt%
   \let\pgf at temp\tikz at moveto@waiting
   \tikz at flush@moveto at toward{\pgfqpoint{\tikz at lastx}{\tikz at lasty}}\pgf at xc\pgf at yc
   \tikz at make@last at position{#1}%
   \begingroup
-    \tikzextset{ortho/.expand once=\tikz at hvvh@currentoption}%
-    \pgfmathsetlength\tikzext at tikz@udlr at distance{\pgfkeysvalueof{/tikz/ext/ortho/ud distance}}%
-    \iftikz at shapeborder
-      \advance\pgf at y1pt%
-      \pgf at process{\pgfpointshapeborder{\tikz at shapeborder@name}{\pgfqpoint{\pgf at x}{\pgf at y}}}%
-      \iftikzext at tikz@hvvh at fromcenter
-        \pgf at yc\pgf at yb
-      \else\ifx\pgf at temp\relax
-          \pgf at yc\pgf at yb
-        \fi
-      \fi
-      \ifdim\pgf at yc<\pgf at y
-        \iftikzext at tikz@hvvh at fromcenter
-          \pgf at yc=\tikz at lasty
-        \else
-          \pgf at yc=\pgf at y
-        \fi
-      \fi
-      \advance\pgf at yc\tikzext at tikz@udlr at distance
-      \edef\pgf at temp{\noexpand\pgfqpoint{\the\pgf at x}{\the\pgf at y}}%
+    \def\tikzext at temp{\pgfqkeys{/tikz/ext/ortho}}%
+    \expandafter\tikzext at temp\expandafter{\tikzext at ortho@options}%
+    \pgfmathparse{\pgfkeysvalueof{/tikz/ext/ortho/#3 distance}}%
+    \ifpgfmathunitsdeclared
+      \pgfutil at tempdima=\pgfmathresult pt
     \else
-      \let\tikz at shapeborder@name\pgfutil at empty
-      \ifx\pgf at temp\relax\else
-        \iftikzext at tikz@hvvh at fromcenter\else
-          \pgf at yb\pgf at yc
-        \fi
+      \pgf at process{\pgfqpointxy{0}{\pgfmathresult}}%
+      \pgfutil at tempdima=\pgf at y
+      \ifdim\pgfutil at tempdima<0pt
+        \pgfutil at tempdima=-\pgfutil at tempdima
       \fi
-      \ifdim\pgf at yb<\tikz at lasty\pgf at yb\tikz at lasty\fi
-      \advance\pgf at yb\tikzext at tikz@udlr at distance
-      \pgf at yc\pgf at yb
-      \edef\pgf at temp{\noexpand\pgfqpoint{\the\tikz at lastx}{\the\tikz at lasty}}%
     \fi
-    \xdef\pgf at marshal{%
-      \noexpand\tikzext at do@hvvh
-        {\noexpand\pgfqpoint{\the\pgf at xc}{\the\pgf at yc}}%
-        {\noexpand\pgfqpoint{\the\tikz at lastx}{\the\pgf at yc}}%
-        {\expandafter\noexpand\pgf at temp}%
-        {\noexpand\tikzext at timer@vhvline}{\tikz at shapeborder@name}}%
-  \endgroup
-  \pgf at marshal}%
-
-%% r-du operator
-\def\tikzext at tikz@@du at lineto#1{%
-  \edef\tikz at timer@start{\noexpand\pgfqpoint{\the\tikz at lastx}{\the\tikz at lasty}}%
-  \pgf at xc\tikz at lastx
-  \pgf at yb\tikz at lasty
-  \advance\tikz at lasty-1pt%
-  \let\pgf at temp\tikz at moveto@waiting
-  \tikz at flush@moveto at toward{\pgfqpoint{\tikz at lastx}{\tikz at lasty}}\pgf at xc\pgf at yc
-  \tikz at make@last at position{#1}%
-  \begingroup
-    \tikzextset{ortho/.expand once=\tikz at hvvh@currentoption}%
-    \pgfmathsetlength\tikzext at tikz@udlr at distance{\pgfkeysvalueof{/tikz/ext/ortho/du distance}}%
     \iftikz at shapeborder
-      \advance\pgf at y-1pt%
+      \advance\pgf at y#21pt%
       \pgf at process{\pgfpointshapeborder{\tikz at shapeborder@name}{\pgfqpoint{\pgf at x}{\pgf at y}}}%
-      \iftikzext at tikz@hvvh at fromcenter
+      \iftikzext at ortho@fromcenter
         \pgf at yc\pgf at yb
       \else\ifx\pgf at temp\relax
           \pgf at yc\pgf at yb
         \fi
       \fi
-      \ifdim\pgf at yc>\pgf at y
-        \iftikzext at tikz@hvvh at fromcenter
+      \ifdim\pgf at yc#4\pgf at y
+        \iftikzext at ortho@fromcenter
           \pgf at yc=\tikz at lasty
         \else
           \pgf at yc=\pgf at y
         \fi
       \fi
-      \advance\pgf at yc-\tikzext at tikz@udlr at distance
+      \advance\pgf at yc#2\pgfutil at tempdima
       \edef\pgf at temp{\noexpand\pgfqpoint{\the\pgf at x}{\the\pgf at y}}%
     \else
       \let\tikz at shapeborder@name\pgfutil at empty
       \ifx\pgf at temp\relax\else
-        \iftikzext at tikz@hvvh at fromcenter\else
+        \iftikzext at ortho@fromcenter\else
           \pgf at yb\pgf at yc
         \fi
       \fi
-      \ifdim\pgf at yb>\tikz at lasty\pgf at yb\tikz at lasty\fi
-      \advance\pgf at yb-\tikzext at tikz@udlr at distance
+      \ifdim\pgf at yb#4\tikz at lasty\pgf at yb\tikz at lasty\fi
+      \advance\pgf at yb#2\pgfutil at tempdima
       \pgf at yc\pgf at yb
       \edef\pgf at temp{\noexpand\pgfqpoint{\the\tikz at lastx}{\the\tikz at lasty}}%
     \fi
-    \xdef\pgf at marshal{%
-      \noexpand\tikzext at do@hvvh
+    \edef\tikzext at temp{%
+  \endgroup
+      \tikzext at ortho@savetimer
+      \noexpand\tikzext at ortho@do
         {\noexpand\pgfqpoint{\the\pgf at xc}{\the\pgf at yc}}%
         {\noexpand\pgfqpoint{\the\tikz at lastx}{\the\pgf at yc}}%
         {\expandafter\noexpand\pgf at temp}%
-        {\noexpand\tikzext at timer@vhvline}{\tikz at shapeborder@name}}%
-  \endgroup
-  \pgf at marshal}%
+        {\tikz at shapeborder@name}}%
+  \tikzext at temp
+}
 
-%% r-lr operator
-\def\tikzext at tikz@@lr at lineto#1{%
+%% lr/rl
+\def\tikzext at ortho@lrrl at do#1#2#3#4{%
   \edef\tikz at timer@start{\noexpand\pgfqpoint{\the\tikz at lastx}{\the\tikz at lasty}}%
   \pgf at xb\tikz at lastx
   \pgf at yc\tikz at lasty
-  \advance\tikz at lastx-1pt%
+  \advance\tikz at lastx#21pt%
   \let\pgf at temp\tikz at moveto@waiting
   \tikz at flush@moveto at toward{\pgfqpoint{\tikz at lastx}{\tikz at lasty}}\pgf at xc\pgf at yc
   \tikz at make@last at position{#1}%
   \begingroup
-    \tikzextset{ortho/.expand once=\tikz at hvvh@currentoption}%
-    \pgfmathsetlength\tikzext at tikz@udlr at distance{\pgfkeysvalueof{/tikz/ext/ortho/lr distance}}%
+    \def\tikzext at temp{\pgfqkeys{/tikz/ext/ortho}}%
+    \expandafter\tikzext at temp\expandafter{\tikzext at ortho@options}%
+    \pgfmathparse{\pgfkeysvalueof{/tikz/ext/ortho/#3 distance}}%
+    \ifpgfmathunitsdeclared
+      \pgfutil at tempdima=\pgfmathresult pt
+    \else
+      \pgf at process{\pgfqpointxy{\pgfmathresult}{0}}%
+      \pgfutil at tempdima=\pgf at x
+      \ifdim\pgfutil at tempdima<0pt
+        \pgfutil at tempdima=-\pgfutil at tempdima
+      \fi
+    \fi
     \iftikz at shapeborder
-      \advance\pgf at x-1pt%
+      \advance\pgf at x#21pt%
       \pgf at process{\pgfpointshapeborder{\tikz at shapeborder@name}{\pgfqpoint{\pgf at x}{\pgf at y}}}%
-      \iftikzext at tikz@hvvh at fromcenter
+      \iftikzext at ortho@fromcenter
         \pgf at xc\pgf at xb
       \else\ifx\pgf at temp\relax
           \pgf at xc\pgf at xb
         \fi
       \fi
-      \ifdim\pgf at xc>\pgf at x
-        \iftikzext at tikz@hvvh at fromcenter
+      \ifdim\pgf at xc#4\pgf at x
+        \iftikzext at ortho@fromcenter
           \pgf at xc=\tikz at lastx
         \else
           \pgf at xc=\pgf at x
         \fi
       \fi
-      \advance\pgf at xc-\tikzext at tikz@udlr at distance
+      \advance\pgf at xc#2\pgfutil at tempdima
       \edef\pgf at temp{\noexpand\pgfqpoint{\the\pgf at x}{\the\pgf at y}}%
     \else
       \let\tikz at shapeborder@name\pgfutil at empty
       \ifx\pgf at temp\relax\else
-        \iftikzext at tikz@hvvh at fromcenter\else
+        \iftikzext at ortho@fromcenter\else
           \pgf at xb\pgf at xc
         \fi
       \fi
-      \ifdim\pgf at xb>\tikz at lastx\pgf at xb\tikz at lastx\fi
-      \advance\pgf at xb-\tikzext at tikz@udlr at distance
+      \ifdim\pgf at xb#4\tikz at lastx\pgf at xb\tikz at lastx\fi
+      \advance\pgf at xb#2\pgfutil at tempdima
       \pgf at xc\pgf at xb
       \edef\pgf at temp{\noexpand\pgfqpoint{\the\tikz at lastx}{\the\tikz at lasty}}%
     \fi
-    \xdef\pgf at marshal{%
-      \noexpand\tikzext at do@hvvh
-        {\noexpand\pgfqpoint{\the\pgf at xc}{\the\pgf at yc}}%
-        {\noexpand\pgfqpoint{\the\pgf at xc}{\the\tikz at lasty}}%
-        {\expandafter\noexpand\pgf at temp}%
-        {\noexpand\tikzext at timer@hvhline}{\tikz at shapeborder@name}}%
+    \edef\tikzext at temp{%
   \endgroup
-  \pgf at marshal}%
-
-%% r-rl operator
-\def\tikzext at tikz@@rl at lineto#1{%
-  \edef\tikz at timer@start{\noexpand\pgfqpoint{\the\tikz at lastx}{\the\tikz at lasty}}%
-  \pgf at xb\tikz at lastx
-  \pgf at yc\tikz at lasty
-  \advance\tikz at lastx1pt%
-  \let\pgf at temp\tikz at moveto@waiting
-  \tikz at flush@moveto at toward{\pgfqpoint{\tikz at lastx}{\tikz at lasty}}\pgf at xc\pgf at yc
-  \tikz at make@last at position{#1}%
-  \begingroup
-    \tikzextset{ortho/.expand once=\tikz at hvvh@currentoption}%
-    \pgfmathsetlength\tikzext at tikz@udlr at distance{\pgfkeysvalueof{/tikz/ext/ortho/rl distance}}%
-    \iftikz at shapeborder%
-      \advance\pgf at x1pt%
-      \pgf at process{\pgfpointshapeborder{\tikz at shapeborder@name}{\pgfqpoint{\pgf at x}{\pgf at y}}}%
-      \iftikzext at tikz@hvvh at fromcenter
-        \pgf at xc\pgf at xb
-      \else\ifx\pgf at temp\relax
-          \pgf at xc\pgf at xb
-        \fi
-      \fi
-      \ifdim\pgf at xc<\pgf at x
-        \iftikzext at tikz@hvvh at fromcenter
-          \pgf at xc=\tikz at lastx
-        \else
-          \pgf at xc=\pgf at x
-        \fi
-      \fi
-      \advance\pgf at xc\tikzext at tikz@udlr at distance
-      \edef\pgf at temp{\noexpand\pgfqpoint{\the\pgf at x}{\the\pgf at y}}%
-    \else
-      \let\tikz at shapeborder@name\pgfutil at empty%
-      \ifx\pgf at temp\relax\else
-        \iftikzext at tikz@hvvh at fromcenter\else
-          \pgf at xb\pgf at xc
-        \fi
-      \fi
-      \ifdim\pgf at xb<\tikz at lastx\pgf at xb\tikz at lastx\fi
-      \advance\pgf at xb\tikzext at tikz@udlr at distance
-      \pgf at xc\pgf at xb
-      \edef\pgf at temp{\noexpand\pgfqpoint{\the\tikz at lastx}{\the\tikz at lasty}}%
-    \fi
-    \xdef\pgf at marshal{%
-      \noexpand\tikzext at do@hvvh
+      \tikzext at ortho@savetimer
+      \noexpand\tikzext at ortho@do
         {\noexpand\pgfqpoint{\the\pgf at xc}{\the\pgf at yc}}%
         {\noexpand\pgfqpoint{\the\pgf at xc}{\the\tikz at lasty}}%
         {\expandafter\noexpand\pgf at temp}%
-        {\noexpand\tikzext at timer@hvhline}{\tikz at shapeborder@name}}%
-  \endgroup
-  \pgf at marshal}%
+        {\tikz at shapeborder@name}}%
+  \tikzext at temp
+}
 
 %% a few nice to haves, use with to or edge operator
 \tikzextset{
@@ -656,7 +630,7 @@
         \edef\tikztostart{[xshift={#1}]\tikztostart\tikzext at ortho@anchor}%
       \fi
     \endpgfextra
-    expandafter(\tikztostart)
+    \expandafter(\tikztostart)
     -- (perpendicular cs: vertical line through/.expanded={(\tikztostart)},
                         horizontal line through={(\tikztotarget)})
     \tikztonodes
@@ -740,4 +714,4 @@
   },
   compat/paths.ortho/\pgfkeysvalueof{/tikz/ext/compat/paths.ortho}%
 }
-\endinput
\ No newline at end of file
+\endinput

Modified: trunk/Master/texmf-dist/tex/latex/tikz-ext/pgffor-ext.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex/tikz-ext/pgffor-ext.sty	2025-04-24 20:26:06 UTC (rev 75013)
+++ trunk/Master/texmf-dist/tex/latex/tikz-ext/pgffor-ext.sty	2025-04-24 20:26:20 UTC (rev 75014)
@@ -7,14 +7,9 @@
 %
 
 \RequirePackage{pgffor}
-\ifcsname tikzext at pgffor@nolist at parse\endcsname
-  \expandafter\@gobble
-\else
-  \expandafter\@firstofone
+\unless\ifcsname iftikzext at pgffor@nolist\endcsname
+  \input pgffor-ext.code.tex
 \fi
-{
-  \input{pgffor-ext.code.tex}
-}
 
 \pgfqkeys{/pgf/foreach/ext}{
   .code=\pgfqkeys{/pgf/foreach/ext}{#1},



More information about the tex-live-commits mailing list.