texlive[64332] Master/texmf-dist: circuitikz (10sep22)

commits+karl at tug.org commits+karl at tug.org
Sat Sep 10 22:09:54 CEST 2022


Revision: 64332
          http://tug.org/svn/texlive?view=revision&revision=64332
Author:   karl
Date:     2022-09-10 22:09:54 +0200 (Sat, 10 Sep 2022)
Log Message:
-----------
circuitikz (10sep22)

Modified Paths:
--------------
    trunk/Master/texmf-dist/doc/context/third/circuitikz/circuitikz-context.pdf
    trunk/Master/texmf-dist/doc/generic/circuitikz/CHANGELOG.md
    trunk/Master/texmf-dist/doc/latex/circuitikz/changelog.tex
    trunk/Master/texmf-dist/doc/latex/circuitikz/circuitikzmanual.pdf
    trunk/Master/texmf-dist/doc/latex/circuitikz/circuitikzmanual.tex
    trunk/Master/texmf-dist/tex/context/third/circuitikz/t-circuitikz.tex
    trunk/Master/texmf-dist/tex/generic/circuitikz/pgfcircbipoles.tex
    trunk/Master/texmf-dist/tex/generic/circuitikz/pgfcircquadpoles.tex
    trunk/Master/texmf-dist/tex/generic/circuitikz/pgfcirctripoles.tex
    trunk/Master/texmf-dist/tex/latex/circuitikz/circuitikz.sty

Modified: trunk/Master/texmf-dist/doc/context/third/circuitikz/circuitikz-context.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/generic/circuitikz/CHANGELOG.md
===================================================================
--- trunk/Master/texmf-dist/doc/generic/circuitikz/CHANGELOG.md	2022-09-10 20:09:32 UTC (rev 64331)
+++ trunk/Master/texmf-dist/doc/generic/circuitikz/CHANGELOG.md	2022-09-10 20:09:54 UTC (rev 64332)
@@ -1,12 +1,21 @@
 <!--- CircuiTikz - Changelog --->
 The major changes among the different CircuiTikZ versions are listed here. See <https://github.com/circuitikz/circuitikz/commits> for a full list of changes.
 
+* Version 1.5.4 (2022-09-09)
+
+    New components and enhancement for old ones in this version.
+
+    - Added jumpers, inspired by a question [on TeX.stackexchange](https://tex.stackexchange.com/questions/652494/drawing-jumper-pinhead-bridge-with-circuitikz)
+    - Added generic double bipoles, inspired by user `@erwinderboer` [on GitHub](https://github.com/circuitikz/circuitikz/issues/641)
+    - Added styling for the transistor bodydiode, suggested by user [Alex Ghilas on TeX.stackexchange](https://tex.stackexchange.com/questions/653348/drawing-mosfet-bodydiode-dashed)
+    - Additions to the manual (how to remove pins on amplifiers)
+
 * Version 1.5.3 (2022-07-02)
 
     Minor release: fixes to the manual, and a new component (Shockley diodes).
 
-    - Merging changes to fix the language in the manual (thanks to Charles B. Cameron, user `@cameroncb1` on GitHub).
-    - Added Shockley diode (suggested by [@dauph](https://tex.stackexchange.com/questions/646039/creating-a-shockley-diode-in-circuitikz)).
+    - Merging changes to fix the language in the manual (thanks to Charles B. Cameron, user `@cameroncb1` on GitHub)
+    - Added Shockley diode (suggested by [@dauph](https://tex.stackexchange.com/questions/646039/creating-a-shockley-diode-in-circuitikz))
 
 * Version 1.5.2 (2022-05-08)
 

Modified: trunk/Master/texmf-dist/doc/latex/circuitikz/changelog.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/circuitikz/changelog.tex	2022-09-10 20:09:32 UTC (rev 64331)
+++ trunk/Master/texmf-dist/doc/latex/circuitikz/changelog.tex	2022-09-10 20:09:54 UTC (rev 64332)
@@ -5,6 +5,29 @@
 
 \begin{itemize}
 \item
+  Version 1.5.4 (2022-09-09)
+
+  New components and enhancement for old ones in this version.
+
+  \begin{itemize}
+  \tightlist
+  \item
+    Added jumpers, inspired by a question
+    \href{https://tex.stackexchange.com/questions/652494/drawing-jumper-pinhead-bridge-with-circuitikz}{on
+    TeX.stackexchange}
+  \item
+    Added generic double bipoles, inspired by user
+    \texttt{@erwinderboer}
+    \href{https://github.com/circuitikz/circuitikz/issues/641}{on
+    GitHub}
+  \item
+    Added styling for the transistor bodydiode, suggested by user
+    \href{https://tex.stackexchange.com/questions/653348/drawing-mosfet-bodydiode-dashed}{Alex
+    Ghilas on TeX.stackexchange}
+  \item
+    Additions to the manual (how to remove pins on amplifiers)
+  \end{itemize}
+\item
   Version 1.5.3 (2022-07-02)
 
   Minor release: fixes to the manual, and a new component (Shockley
@@ -14,10 +37,10 @@
   \tightlist
   \item
     Merging changes to fix the language in the manual (thanks to Charles
-    B. Cameron, user \texttt{@cameroncb1} on GitHub).
+    B. Cameron, user \texttt{@cameroncb1} on GitHub)
   \item
     Added Shockley diode (suggested by
-    {[}@dauph{]}(https://tex.stackexchange.com/questions/646039/creating-a-shockley-diode-in-circuitikz)).
+    \href{https://tex.stackexchange.com/questions/646039/creating-a-shockley-diode-in-circuitikz}{@dauph})
   \end{itemize}
 \item
   Version 1.5.2 (2022-05-08)
@@ -618,7 +641,7 @@
     Rewrite of the path generation macros
   \item
     Several small bugs fixed (no one ever used some
-    ``f\^{}\textgreater{}'' options\ldots{})
+    ``f\^{}\textgreater{}'' options\ldots)
   \end{itemize}
 \item
   Version 1.2.0 (2020-06-21)
@@ -980,7 +1003,7 @@
   \item
     Fixed a (puzzling) problem with coupler2
   \item
-    Fixed a compatibility problem with newer PGF (\textgreater{}3.0.1a)
+    Fixed a compatibility problem with newer PGF (\textgreater3.0.1a)
   \end{itemize}
 \item
   Version 0.9.2 (2019-06-21)
@@ -1130,7 +1153,7 @@
   \item
     Fixed direction of controlled american voltage source
   \item
-    ``v\textless{}='' and ``i\textless{}='' do not rotate the sources
+    ``v\textless='' and ``i\textless='' do not rotate the sources
     anymore(see them as ``counting direction indication'', this can be
     different then the shape orientation); Use the option ``invert'' to
     change the direction of the source/apperance of the shape.
@@ -1166,7 +1189,7 @@
   \item
     Allow use of voltage label at a {[}short{]}
   \item
-    Correct line joins between path components (to{[}\ldots{}{]})
+    Correct line joins between path components (to{[}\ldots{]})
   \item
     New Pole-shape .-. to fill perpendicular joins
   \item
@@ -1195,7 +1218,7 @@
   \item
     Fixed varcap symbol at small scalings
   \item
-    New packet-option "straightvoltages, to draw straight(no curved)
+    New packet-option ``straightvoltages, to draw straight(no curved)
     voltage arrows
   \item
     New option ``invert'' to revert the node direction at paths

Modified: trunk/Master/texmf-dist/doc/latex/circuitikz/circuitikzmanual.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/circuitikz/circuitikzmanual.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/circuitikz/circuitikzmanual.tex	2022-09-10 20:09:32 UTC (rev 64331)
+++ trunk/Master/texmf-dist/doc/latex/circuitikz/circuitikzmanual.tex	2022-09-10 20:09:54 UTC (rev 64332)
@@ -3731,6 +3731,7 @@
 \end{circuitikz}
 \end{LTXexample}
 
+You can tweak the appearance of transistor's circles and even draw it partially; see ~\ref{sec:trans-circle-custom} for details.
 
 \paragraph{Body diodes and similar things.}\label{sec:bodydiodes-anchor} For all transistors (minus \texttt{bjtnpn} and \texttt{bjtpnp})  a body diode (or freewheeling or flyback diode) can automatically be drawn. Just use the global option \texttt{bodydiode}, or for single transistors, the tikz-option \texttt{bodydiode}.
 As you can see in the next example, the text for the diode is moved if a bodydiode is present (but beware, if you change a lot the relative dimension of components, it may become misplaced):
@@ -3746,8 +3747,10 @@
 \end{circuitikz}
 \end{LTXexample}
 
-You can use the \texttt{body ...} anchors to add more or different things to the transistors in addition (or instead) of the flyback diode.
+You can tweak the appearance of transistor's bodydiodes; see ~\ref{sec:trans-bodydiode-custom}.
 
+For more complex snubs or protections, you can use the \texttt{body ...} anchors to add more or different things to the transistors in addition (or instead) of the flyback diode.
+
 \begin{LTXexample}[varwidth=true]
 \def\snubb#1#2{% add a snubber to a transistor
     \draw (#1.body C #2) to[short, *-, nodes width=0.02]
@@ -3953,7 +3956,7 @@
 \end{groupdesc}
 
 
-\subsubsection{Transistor circle customization}
+\subsubsection{Transistor circle customization}\label{sec:trans-circle-custom}
 
 \paragraph{Position and size.} You can see in the following diagram where the circle is positioned --- when there is no bodydiode, it will pass through the anchors for the body diode and near the base connection. The dimension of the circle is bigger when the bodydiode is in, to encompass it.
 The anchors are present even there is no circle, so you can use them to draw different kind of circles (say, encompassing two transistors) in a coherent way.
@@ -4058,6 +4061,47 @@
 \end{circuitikz}
 \end{LTXexample}
 
+\subsubsection{Transistor bodydiode customization}\label{sec:trans-bodydiode-custom}
+
+You can change the style of the bodydiode\footnote{Suggested by \href{https://tex.stackexchange.com/questions/653348/drawing-mosfet-bodydiode-dashed}{user Alex Ghilas on TeX.SX}, implemented in \texttt{v1.5.4}.} in a similar way to the one used for circles (albeit with less options), by setting keys with the \verb!\ctikzset! command (or, like in the following example, directly in the node instantiation) under the \texttt{transistor bodydiode} hierarchy. The available keys are:
+
+\begin{center}
+    \begin{tabular}{>{\ttfamily}l>{\ttfamily}lp{0.5\linewidth}}
+        \toprule
+     parameter &  default & description  \\
+     \midrule
+     relative thickness & 1.0 & multiply the class thickness \\
+     color & default & stroke color: \texttt{default} is the same as the component \\
+     dash & default & dash pattern: \texttt{default} means not to change the setting for the component; \texttt{none} means unbroken line; every other input is a dash pattern.\footnotemark \\
+        \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}
+
+The following is a quite extensive example. Obviously, a good strategy in this case is to define styles for the options.
+
+\begin{LTXexample}[varwidth=true, pos=t, basicstyle=\small\ttfamily]
+\begin{tikzpicture}[red solid thin bodydiode/.style={bodydiode,
+        circuitikz/transistor bodydiode/dash=none,
+        circuitikz/transistor bodydiode/color=red,
+        circuitikz/transistor bodydiode/relative thickness=0.3}]
+    \draw (0,0) node (mosfet1) [nigfete,anchor=D,bodydiode] {$Q_1$};
+    \draw[densely dashed]  (3,0) node (mosfet1) [nigfete,anchor=D,bodydiode] {$Q_2$};
+    \draw (6,0) node (mosfet1) [nigfete,anchor=D,bodydiode,
+        circuitikz/transistor bodydiode/color=gray] {$Q_3$};
+    \draw (0,-2) node (mosfet1) [nigfete,anchor=D,bodydiode,
+        circuitikz/transistor bodydiode/dash={{2pt}{1pt}}]  {$Q_4$};
+    \draw[densely dashed]  (3,-2) node (mosfet1) [nigfete,anchor=D,
+        red solid thin bodydiode] {$Q_5$};
+    \ctikzset{transistor bodydiode/relative thickness=.5}% from now on, in scope
+    \draw[densely dotted] (6,-2) node (mosfet1) [nigfete,anchor=D,bodydiode,
+          circuitikz/transistor bodydiode/dash=none] {$Q_6$};
+    \path (7,0); %% adjust bounding box (node text is outside it!)
+\end{tikzpicture}
+\end{LTXexample}
+
+
+
 \subsubsection{Transistors anchors}
 
 For \textsc{nmos}, \textsc{pmos}, \textsc{nfet}, \textsc{nigfete}, \textsc{nigfetd}, \textsc{pfet}, \textsc{pigfete}, and \textsc{pigfetd}  transistors  one has \texttt{base}, \texttt{gate}, \texttt{source} and \texttt{drain} anchors (which can be abbreviated with \texttt{B}, \texttt{G}, \texttt{S} and \texttt{D}):
@@ -4623,8 +4667,8 @@
 Transformers automatically use the inductor shape currently selected. These are the three possibilities:
 \begin{groupdesc}
     \ctikzset{inductor=cute}
-    \circuitdesc{transformer}{Transformer (cute inductor)}{}( A1/180/0.1,
-    A2/180/0.1, B1/0/0.1, B2/0/0.1,
+    \circuitdesc{transformer}{Transformer (cute inductor)}{$T_1$}( A1/180/0.1,
+    A2/180/0.1, B1/0/0.1, B2/0/0.1, north/45/0.4,
     inner dot A1/-135/0.2, inner dot A2/135/0.2, inner dot B1/-45/0.1,
     inner dot B2/45/0.1 )
     \ctikzset{inductor=american}
@@ -4648,8 +4692,16 @@
     \ctikzset{inductor=cute} % reset default
 \end{groupdesc}
 
-\subsubsection{Double dipoles anchors}
+You can also build generic double bipoles\footnote{The idea of generic double bipoles was originated by user \href{https://github.com/circuitikz/circuitikz/issues/641}{erwindenboer on GitHub}.} (although it's often better to use subcircuits in this case; see section~\ref{sec:subcircuits}).
 
+\begin{groupdesc}
+    \circuitdesc{double bipole}{Generic double bipole (configurable components)}{$A_v$}(north/45/0.4, center/-90/0.6, east/45/0.2)[L.south/180/0.2, R.west/-45/0.2]
+    \ctikzset{double bipole L=fulllediodeshape, double bipole R=emptydiodeshape, double bipole R invert, diodes/scale=0.6}
+    \circuitdesc{double bipole}{Generic double bipole (this specific configuration is shown in section~\ref{sec:doublebipoles})}{$A_v$}(north/45/0.4, center/-90/0.6, east/45/0.2)[L.south/180/0.2, R.west/-45/0.2]
+\end{groupdesc}
+
+\subsubsection{Transformer anchors}
+
 All the double bipoles/quadrupoles have the four anchors, two for each port.
 The first port, to the left, is port \texttt{A}, having the anchors \texttt{A1} (up) and \texttt{A2} (down); same for port \texttt{B}.
 
@@ -4743,7 +4795,7 @@
 \node [ocirc] at (T.B1){}; \node [ocirc] at (T.B2){};
 \end{circuitikz}
 \end{LTXexample}
-\subsubsection{Double dipoles customization}
+\subsubsection{Transformers customization}
 
 Transformers are in the \texttt{inductors} class (also the gyrator\dots), so they scale with the key \texttt{inductors/scale}.
 
@@ -4860,6 +4912,88 @@
 
 Remember that the default \texttt{pgfkeys} directory is \texttt{/tikz} for nodes and for the options of the environment, so you \emph{have} to use the full path (with \texttt{circuitikz/}) there.
 
+\subsubsection{Generic double bipoles}\label{sec:doublebipoles}
+
+Generic double bipoles have more or less the same keys for size that the transformers (like \texttt{../width}, \texttt{.../inner} etc.) using the component name \texttt{double bipole}. Also the anchors are similar, with the main difference that the ``dot'' anchors are fixed, so they do \emph{not} adapt to the size of the component.
+Another important difference is that the class of the generic double bipole is \texttt{misc}, not \texttt{inductors} (which is reserved to transformers and, for an historical hiccup, to the gyrator).
+
+By default, the left component is a generic impedance, and the right one is an (American-style, it will not change automatically) voltage generator. You can use \texttt{quadpoles style=inner} as shown in the rightmost drawing below.
+
+\geocoord{double bipole} {\ctikzset{quadpoles style=inline}\geocoord{double bipole}}
+
+The other anchors behave similarly to the transistor's ones; you also have access to the internal components nodes by using \texttt{\emph{nodename}-R} and \texttt{\emph{nodename}-L} names for the right and left element, which is supposed to be \texttt{T} in the drawing below. Be wary that given that here you can (see later) reverse the direction of one or both of the elements, the rotation (and so the anchors) is not fixed (you can see that in the blue and green examples below).
+
+\begin{quote}
+\begin{circuitikz}[cute inductors,
+    ]
+    \def\coordx(#1)[#2:#3]#4{node[circle, #4, draw, inner sep=1pt,pin={[#4, overlay, inner sep=0.5pt, font=\scriptsize, pin distance=#2cm, pin edge={#4, overlay,}]#3:#1}](#1){}}
+    \tikzset{ddpinv/.style={double bipole, circuitikz/double bipole R invert}}
+    \foreach \comp/\pos/\case in {%
+                            double bipole/0/0%
+                            ,double bipole/4/1%
+                            ,ddpinv/8/2%
+                            }{
+        \draw (\pos, 0) node[\comp](T){};
+        \ifcase\case
+            \foreach \a/\d/\t in {inner dot A1/0.2/75, inner dot A2/0.2/-75, inner dot B1/0.1/-45, inner dot B2/0.1/45}
+            \path (T.\a) \coordx(\a)[\d:\t]{red};
+            \path (T-L.south) \coordx(T-L.south)[0.6:180]{red};
+        \or
+            \foreach \a/\d/\t in {outer dot A1/0.4/90, outer dot A2/0.4/-90, outer dot B1/0.2/45, outer dot B2/0.2/-45}
+            \path (T.\a) \coordx(\a)[\d:\t]{blue};
+            \path (T-R.a) \coordx(T-R.a)[0.6:0]{blue};
+            \path (T-R.b) \coordx(T-R.b)[0.6:0]{blue};
+            \path (T-R.south) \coordx(T-R.south)[0.6:0]{blue};
+        \or
+            \foreach \a/\t in {A1/120, A2/-120, B1/120, B2/-120, base/-90}
+            \path (T.\a) \coordx(\a)[0.2:\t]{green!50!black};
+            \path (T-R.a) \coordx(T-R.a)[0.6:0]{green!50!black};
+            \path (T-R.b) \coordx(T-R.b)[0.6:0]{green!50!black};
+            \path (T-R.north) \coordx(T-R.north)[0.6:0]{green!50!black};
+        \fi
+    }
+\end{circuitikz}
+\end{quote}
+
+Generic double bipoles are meant to be used through a style, choosing the left and right components. The keys that let you change the components are the following ones:
+\begin{itemize}
+    \item \texttt{double bipole L}, \texttt{double bipole R}: the \textbf{nodename} of the component you want on the left and right side (default: \texttt{genericshape} and \texttt{vsourceAMshape}).
+    \item \texttt{double bipole L invert}, \texttt{double bipole R invert}: controls the direction of the element inserted (default \texttt{false} for both; that means that the left bipole goes ``down'' and the second one ``up'').
+    \item \texttt{every double bipole L}, \texttt{every double bipole R}: a style that is enacted when drawing the component; by default it's void.
+\end{itemize}
+For example, the LED-diode double bipole at the start of the section could be obtained this way:
+\begin{LTXexample}[varwidth=true]
+\begin{circuitikz}[
+    led to D/.style={double bipole,
+        % at tikz level, you have to use circuitikz/ explicitly
+        circuitikz/double bipole L=fulllediodeshape,
+        circuitikz/double bipole R=emptydiodeshape,
+        circuitikz/every double bipole L/.style={diodes/scale=0.6},
+        circuitikz/every double bipole R/.style={diodes/scale=0.6},
+        circuitikz/double bipole R invert,
+        },
+    ]
+    \draw (0,0) node[led to D]{};
+\end{circuitikz}
+\end{LTXexample}
+
+As a final example, and given that the addition of generic double bipole was stimulated by an issue opened by \href{https://github.com/circuitikz/circuitikz/issues/641}{user erwindenboer on GitHub} suggesting the addition of a nullor shape, the nullor can be obtained like this:
+\begin{LTXexample}[varwidth=true]
+\begin{circuitikz}[
+    nullor/.style={double bipole,
+        % at tikz level, you have to use circuitikz/ explicitly
+        circuitikz/double bipole L=nullatorshape,
+        circuitikz/double bipole R=noratorshape,
+        circuitikz/every double bipole L/.style={sources/scale=0.5},
+        },
+    ]
+    \draw (0,0) node[nullor](T1){};
+\end{circuitikz}
+\end{LTXexample}
+although now adding currents and voltages is not as trivial as if the component is built with a subcircuit\dots
+
+
+
 \subsection{Amplifiers}\label{sec:amplifiers}
 
 \begin{groupdesc}
@@ -4979,6 +5113,7 @@
 
 You can scale the amplifiers using the key \texttt{amplifiers/scale} and setting it to something different from \texttt{1.0}. The font used for symbols will not scale, so it's your responsibility to change it if the need arises.
 
+\paragraph{Input polarity.}
 All these amplifier have the possibility to flip input and output (if needed) polarity. You can change polarity of the input with the
 \texttt{noinv input down} (default) or \texttt{noinv input up} key; and the output with \texttt{noinv output up} (default) or \texttt{noinv output down} key:
 \begin{LTXexample}[varwidth=true]
@@ -4999,9 +5134,10 @@
 
 When you use the \texttt{noinv input/output ...} keys the anchors (\texttt{+}, \texttt{-}, \texttt{out +}, \texttt{out -}) will change with the effective position of the terminals. You have also the anchors \texttt{in up}, \texttt{in down}, \texttt{out up}, \texttt{out down} that will not change with the positive or negative sign.
 
+\paragraph{Input and output pins symbols.}
 You can change the symbols ``$+$'' or ``$-$'' appearing in the amplifiers if you want, both globally and on component-by-component basis. The plus and minus symbols can be changed with \verb|\ctikzset| of the keys \texttt{amplifiers/plus} and \texttt{amplifiers/minus} (which defaults to the math mode plus or minus cited before), or using the styles \texttt{amp plus} and \texttt{amp minus}.
 
-The font used is set in several keys, but you can change it globally with \verb|\tikzset{amp symbol font}|, which has a default of 10-point  (in \LaTeX, and the corresponding one in \ConTeXt). You can change it for example with
+The font used is set in several keys, but you can change it globally with \texttt{\textbackslash tikzset\{amp symbol font\}}, which has a default of 10-point  (in \LaTeX, and the corresponding one in \ConTeXt). You can change it for example with
 \begin{lstlisting}
  \tikzset{amp symbol font={%
  \color{blue}\fontsize{12}{12}\selectfont\boldmath}}
@@ -5036,7 +5172,26 @@
 \end{circuitikz}
 \end{LTXexample}
 
-The amplifier label (given as the text  of the node) is normally more or less centered in the shape (in the case of the triangular shape, it is shifted a bit to the left to \emph{seem} visually centered); since version \texttt{1.1.0} you can move it at the left side plus a fixed offset setting the key \texttt{component text} or the style with the same name to \texttt{left}; by default the key is \texttt{center}.
+\paragraph{Input and output pins length.} The length of the wires that extends outside the main amplifier shape are not easily changed globally. You can use a trick\footnote{See the discussion with \href{https://github.com/circuitikz/circuitikz/issues/645}{user @erwindenboer on GitHub};notice that this method is using internal keys and can stop working in the future.} though if you want to remove them completely:
+the size of an amplifier (included the pins) is set by the \texttt{circuitikz} key \texttt{tripoles/\emph{amplifier style}/width} and the size of the body of the amplifier, relative to it, is set by the key\texttt{tripoles/\emph{amplifier style}/port width}.
+Making the latter equal to one will set the length of the pin to zero; if you want to maintain the same aspect ratio of the shape you need to compensate with the width.
+
+For example, for the normal operational amplifier the key \texttt{tripoles/op amp/width} defaults to 1.7 and \texttt{tripoles/op amp/port width} is 0.7 (you need to peek that values in the source file \texttt{pgfcirctripoles.tex}). So you can do this:
+
+\begin{LTXexample}[varwidth=true]
+\begin{tikzpicture}[]
+  \draw (0,0) node[op amp](A){};
+  \ctikzset{tripoles/op amp/port width=1,
+    tripoles/op amp/width=1.19, % 1.7*0.7
+  }
+  \draw (2.5,0) node[op amp](B){};
+  \draw
+    (A.out) node[red, circ]{} (A.+) node[blue, circ]{}
+    (B.out) node[red, circ]{} (B.+) node[blue, circ]{};
+\end{tikzpicture}
+\end{LTXexample}
+
+\paragraph{Main amplifier label.} The amplifier label (given as the text  of the node) is normally more or less centered in the shape (in the case of the triangular shape, it is shifted a bit to the left to \emph{seem} visually centered); since version \texttt{1.1.0} you can move it at the left side plus a fixed offset setting the key \texttt{component text} or the style with the same name to \texttt{left}; by default the key is \texttt{center}.
 You can change the offset with the key \texttt{left text distance} (default \texttt{0.3em}; you must use a length here). These parameters are shared with IEEE-style logic ports.
 
 \begin{LTXexample}[varwidth=true]
@@ -5053,8 +5208,8 @@
 \end{LTXexample}
 
 These keys are also used for the positioning of the labels in the label positioning of IEEE logic gates (see~\ref{sec:ieeestdports}).
-\paragraph{European-style amplifier customization}
 
+\paragraph{European-style amplifier customization.}
 Thanks to the suggestions from David Rouvel (\email{david.rouvel at iphc.cnrs.fr}) there are several possible customization for the European-style amplifiers.
 
 Since 0.9.0, the default appearance of the symbol has changed to be more in line with the standard; notice that to have a bigger triangle by default we should require more packages, and I fear {Con\TeX t} compatibility; but see later on how to change it. Notice that the font used for the symbol is defined in \texttt{tripoles/en amp/font2} and that the font used for the \texttt{+} and \texttt{-} symbols is  \texttt{tripoles/en amp/font}.
@@ -5170,7 +5325,7 @@
 \end{LTXexample}
 
 
-\subsection{Switches and buttons}
+\subsection{Switches, buttons and jumpers}
 
 Switches and button come in to-style (the simple ones and the pushbuttons), and as nodes.
 
@@ -5513,8 +5668,72 @@
 \end{circuitikz}
 \end{LTXexample}
 
+\subsubsection{Jumpers}
 
+You can think of jumpers like a kind of switches (they have the same function, just the way of operating them is different).
+\Circuitikz{} has two types of jumper symbols available, the simple ones and the three pins (or two-ways) ones.
 
+\paragraph{Simple jumpers.} These are the most common ones. They come in three variations, bare, open and closed.
+
+\begin{groupdesc}
+    \circuitdescbip*[bjumper]{bare jumper}{Bare jumper}{}(in/135/0.6, out/45/0.6)[out.n/90/0.2]
+    \circuitdescbip*[ojumper]{open jumper}{Open jumper}{}(in/135/0.6, out/45/0.6, top arc/90/0.3)[out.s/-90/0.2]
+    \circuitdescbip*[cjumper]{closed jumper}{Closed jumper}{}(left/135/0.6, right/45/0.6, top arc/90/0.3)[in.s/-90/0.2]
+\end{groupdesc}
+
+The \texttt{top arc} anchor can be used to locate the position of the top of the wire (when present). In bare jumper, the anchor is located in the middle of the connectors gap.
+
+\begin{LTXexample}[varwidth=true, basicstyle=\small\ttfamily]
+\begin{circuitikz}[scale=0.8]
+    \draw (0,0) to[open jumper, l=J1] ++(2,0)
+        to[closed jumper, l_=J2, name=J2] ++(2,0)
+        to[bare jumper=J3] ++(2,0);
+    \draw [dashed] (J2.top arc) -- ++(0,0.5)
+        node[above] {\tiny open to enable};
+\end{circuitikz}
+\end{LTXexample}
+
+Similarly to switches, you have access to the subnodes representing the contacts, to be able to draw wires at different angles.
+
+The kind of poles used in the diagram can be changed with the \verb!\ctikzset! key \texttt{bipoles/jumpers/shape}.
+
+\begin{LTXexample}[varwidth=true, basicstyle=\small\ttfamily]
+\begin{circuitikz}[scale=0.8]
+    \draw (0,0) to[open jumper, l=J1, name=J1] ++(2,0)
+        to[closed jumper, l_=J2, name=J2,
+            bipoles/jumper/shape=odiamondpole] ++(2,0);
+        \draw [red] (J2-in.-135) -- ++(-135:1)
+            node[font=\tiny, below]{marked \emph{hot}};
+\end{circuitikz}
+\end{LTXexample}
+
+\paragraph{Two-ways (three-pins) jumpers.} In this case, the symbol represent two-ways jumpers (normally, three pins that can be connected in a couple of ways).
+
+To maintain flexibility, every possible combination of bare, open or closed is available; but to avoid to have to define too much different bipoles, a different approach is used here. You have to specify the style using a different key, namely \texttt{tjumper connections}.
+
+\begin{groupdesc}
+    \circuitdescbip*[tjumper]{three-pins jumper}{Three-pins jumper (see later for connections)}{}(in/135/0.6, out/45/0.6, tap/-90/0.2)[out.n/90/0.2]
+    \ctikzset{tjumper connections=12}
+    \circuitdescbip*[tjumper]{three-pins jumper}{Three-pins jumper (connections \texttt{\ctikzvalof{tjumper connections}})}{}(top arc left/135/0.6, top arc right/45/0.6, tap/-145/0.2)[out.n/-90/0.2]
+    \ctikzset{tjumper connections=S1}
+    \circuitdescbip*[tjumper]{three-pins jumper}{Three-pins jumper (connections \texttt{\ctikzvalof{tjumper connections}})}{}(top arc left/135/0.6, top arc right/45/0.6, tap/-145/0.2)[out.n/-90/0.2]
+\end{groupdesc}
+
+The option is used as shown in the following example, or by setting the key using \verb!\ctikzset!. The value \textbf{must} be two character, either two numbers (where \texttt{0} means ``bare'', \texttt{1} means ``open'', and \texttt{2} means ``closed'') or the letter \texttt{S} (for ``span'') and one number. In the latter case, the arc will connect the fist and last pole\footnote{Although really I never saw an example of this use\dots You never know.}
+
+\begin{LTXexample}[varwidth=true, pos=t, basicstyle=\small\ttfamily]
+\begin{circuitikz}
+    \draw (0,1.5) to[three-pins jumper, l=J1, name=T] ++(3,0)
+    to[three-pins jumper, tjumper connections=21, l=J2] ++(3,0)
+    to[three-pins jumper, tjumper connections=20, l=J3] ++(3,0);
+    \draw (T.tap) -- ++(0,-0.5);
+    \ctikzset{bipoles/jumper/shape=osquarepole}
+    \draw (0,0) to[three-pins jumper, l=JA, name=T] ++(3,0)
+    to[three-pins jumper, tjumper connections=S1, l=JB] ++(3,0)
+    to[three-pins jumper, tjumper connections=S2, l=JB] ++(3,0);
+\end{circuitikz}
+\end{LTXexample}
+
 \subsection{Logic gates}
 
 Logic gates, with two or more input, are supported. Albeit in principle these components are multipoles, the are considered tripoles here, for historical reasons (when they just had two inputs).

Modified: trunk/Master/texmf-dist/tex/context/third/circuitikz/t-circuitikz.tex
===================================================================
--- trunk/Master/texmf-dist/tex/context/third/circuitikz/t-circuitikz.tex	2022-09-10 20:09:32 UTC (rev 64331)
+++ trunk/Master/texmf-dist/tex/context/third/circuitikz/t-circuitikz.tex	2022-09-10 20:09:54 UTC (rev 64332)
@@ -10,8 +10,8 @@
 %
 % See the files gpl-3.0_license.txt and lppl-1-3c_license.txt for more details.
 
-\def\pgfcircversion{1.5.3}
-\def\pgfcircversiondate{2022/07/02}
+\def\pgfcircversion{1.5.4}
+\def\pgfcircversiondate{2022/09/09}
 \writestatus{loading}{\pgfcircversiondate{} The CircuiTikz circuit drawing package version \pgfcircversion}
 
 \usemodule[tikz]

Modified: trunk/Master/texmf-dist/tex/generic/circuitikz/pgfcircbipoles.tex
===================================================================
--- trunk/Master/texmf-dist/tex/generic/circuitikz/pgfcircbipoles.tex	2022-09-10 20:09:32 UTC (rev 64331)
+++ trunk/Master/texmf-dist/tex/generic/circuitikz/pgfcircbipoles.tex	2022-09-10 20:09:54 UTC (rev 64332)
@@ -4381,7 +4381,7 @@
 % %>>>
 
 %%%%%%%%%%%%%
-%% switches and buttons
+%% switches, buttons and jumpers
 %%%%%%%%%%%%%
 
 %% Definitions for switches%<<<1
@@ -5166,6 +5166,225 @@
 \pgfcirc at node@to at path{proximeter}{inline proximeter}{}
 % %>>>
 
+% jumpers: definitions and code %<<<
+% definitons for jumpers
+\ctikzset{bipoles/jumper/width/.initial=0.4}
+\ctikzset{bipoles/tjumper/width/.initial=0.6}% normally is less than 0.4*2
+\ctikzset{tjumper connections/.initial=00}% bare-bare
+\ctikzset{bipoles/jumper/height/.initial=0.4}
+\ctikzset{bipoles/jumper/depth/.initial=0.1}
+\ctikzset{bipoles/jumper/shape/.initial=ocirc}
+\ctikzset{bipoles/jumper/curvature/.initial=2}  % curvature of the arc
+\ctikzset{bipoles/jumper/open shift/.initial=3} % displacement to open the arc
+
+% jumpers
+% simple jumpers
+% #1 -> name
+% #2 -> height of the link arc (0 means no link, 1 closed, 2 open)
+\long\def\pgfcircdeclarejumper#1#2{
+    \pgfcircdeclarebipolescaled{switches}
+        {
+            % This is the radius of the "ocirc" shape (see pgfcircshapes.tex)
+            \saveddimen{\radius}{\pgfmathsetlength\pgf at x{\pgf at circ@Rlen*\ctikzvalof{nodes width}}}
+            % shapename
+            \savedmacro{\thisshape}{\edef\thisshape{\tikz at fig@name}}
+            % shape type
+            \savedmacro{\cshape}{\edef\cshape{\ctikzvalof{bipoles/jumper/shape}}}
+            % arc characteristics (can vary, must be saved...)
+            \savedmacro{\curvature}{\edef\curvature{\ctikzvalof{bipoles/jumper/curvature}}}
+            \savedmacro{\openshift}{\edef\openshift{\ctikzvalof{bipoles/jumper/open shift}}}
+            %
+            \anchor{cout}{\northeast \pgf at y=0cm}
+            \anchor{cin}{\southwest\pgf at y=0cm}
+            \anchor{out}{\northeast \pgf at y=0cm\advance\pgf at x by \radius}
+            \anchor{in}{\southwest\pgf at y=0cm\advance\pgf at x by -\radius}
+            \anchor{text}{\northeast
+                \pgf at x=\dimexpr -.5\wd\pgfnodeparttextbox\relax
+                \advance\pgf at y by .6\ht\pgfnodeparttextbox\relax
+            }
+            \anchor{top arc}{\northeast
+                \pgf at circ@res at other=\pgf at x
+                \pgf at circ@res at temp=\radius
+                \ifnum #2=1 \edef\@@b{1}\else\edef\@@b{\openshift}\fi
+                \pgfpointcurveattime{0.5}
+                    {\pgfpoint{-0.9\pgf at circ@res at other}{{(\@@b)*\radius}}}
+                    {\pgfpoint{-0.5\pgf at circ@res at other}{{(\@@b+\curvature)*\radius}}}
+                    {\pgfpoint{0.5\pgf at circ@res at other}{{(\@@b+\curvature)*\radius}}}
+                    {\pgfpoint{0.9\pgf at circ@res at other}{{(\@@b)*\radius}}}
+            }
+        }
+        {\ctikzvalof{bipoles/jumper/depth}}
+        {#1}
+        {\ctikzvalof{bipoles/jumper/height}}
+        {\ctikzvalof{bipoles/jumper/width}}{
+            %
+            \ifnum #2=0 \else
+                \ifnum #2=1 \edef\@@b{1}\else\edef\@@b{\openshift}\fi
+                \pgfpathmoveto{\pgfpoint{0.9*\pgf at circ@res at left}{(\@@b)*\radius}}
+                \pgfpathcurveto
+                    {\pgfpoint{.5\pgf at circ@res at left}{(\@@b+\curvature)*\radius}}
+                    {\pgfpoint{.5\pgf at circ@res at right}{(\@@b+\curvature)*\radius}}
+                    {\pgfpoint{0.9*\pgf at circ@res at right}{(\@@b)*\radius}}
+                \pgfusepath{draw}
+            \fi
+            \pgftransformshift{\pgfpoint{\pgf at circ@res at left}{0pt}}
+            \pgfnode{\cshape}{center}{}{\thisshape-in}{\pgfusepath{draw}}
+            \pgftransformshift{\pgfpoint{2\pgf at circ@res at right}{0pt}}
+            \pgfnode{\cshape}{center}{}{\thisshape-out}{\pgfusepath{draw}}
+        }
+}
+\pgfcircdeclarejumper{bjumper}{0}
+\pgfcircdeclarejumper{cjumper}{1}
+\pgfcircdeclarejumper{ojumper}{2}
+\pgfcirc at activate@bipole{l}{bjumper}{bjumper}{bare jumper}
+\pgfcirc at activate@bipole{l}{ojumper}{ojumper}{open jumper}
+\pgfcirc at activate@bipole{l}{cjumper}{cjumper}{closed jumper}
+% jumpers
+% three pins (two-ways) jumpers
+% #1 -> name
+% #2 -> height of the first link arc (0 means no link, 1 closed, 2 open)
+% #3 -> height of the second link arc (0 means no link, 1 closed, 2 open)
+\def\pgf at circ@tjumper at splitstatus#1#2\relax{%split the two values
+    \edef\@@a{#1}\edef\@@b{#2}%
+}
+\pgfcircdeclarebipolescaled{switches}
+    {
+        % This is the radius of the "ocirc" shape (see pgfcircshapes.tex)
+        \saveddimen{\radius}{\pgfmathsetlength\pgf at x{\pgf at circ@Rlen*\ctikzvalof{nodes width}}}
+        % shapename
+        \savedmacro{\thisshape}{\def\thisshape{\tikz at fig@name}}
+        % shape type
+        \savedmacro{\cshape}{\def\cshape{\ctikzvalof{bipoles/jumper/shape}}}
+        % arc characteristics (can vary, must be saved...)
+        \savedmacro{\curvature}{\edef\curvature{\ctikzvalof{bipoles/jumper/curvature}}}
+        \savedmacro{\openshift}{\edef\openshift{\ctikzvalof{bipoles/jumper/open shift}}}
+        \savedmacro{\jumpertype}{\edef\jumpertype{\ctikzvalof{tjumper connections}}}
+        %
+        \anchor{cout}{\northeast \pgf at y=0cm}
+        \anchor{cin}{\southwest\pgf at y=0cm}
+        \anchor{ctap}{\pgf at x=0cm\pgf at y=0cm}
+        \anchor{out}{\northeast \pgf at y=0cm\advance\pgf at x by \radius}
+        \anchor{in}{\southwest\pgf at y=0cm\advance\pgf at x by -\radius}
+        \anchor{tap}{\pgf at x=0cm\pgf at y=0cm\advance\pgf at y by -\radius}
+        \anchor{top arc left}{\northeast
+            \pgf at circ@res at other=-\pgf at x
+            \pgf at circ@res at temp=\pgf at x
+            %
+            % read the status of the jumper
+            %
+            \expandafter\pgf at circ@tjumper at splitstatus\jumpertype\relax% a bit of magic...
+            \edef\@@S{S}%the "S" letter
+            \ifx\@@a\@@S %span, it's in the center
+                \ifnum \@@b=0\pgfpointorigin\else % no arc, anchor on the center-base
+                    \ifnum \@@b=2 \edef\@@b{\openshift} \else \edef\@bb{1}\relax \fi
+                    \pgfpointcurveattime{0.5}
+                        {\pgfpoint{0.9*\pgf at circ@res at other}{(\@@b)*\radius}}
+                        {\pgfpoint{.5*\pgf at circ@res at other}{(\@@b+\curvature)*\radius}}
+                        {\pgfpoint{.5*\pgf at circ@res at temp}{(\@@b+\curvature)*\radius}}
+                        {\pgfpoint{0.9*\pgf at circ@res at temp}{(\@@b)*\radius}}
+                \fi
+            \else
+                % adjust the lengths of the gap, if needed
+                \ifnum \@@a=2 \edef\@@a{\openshift} \else \edef\@aa{1} \relax \fi
+                \ifnum \@@b=2 \edef\@@b{\openshift} \else \edef\@bb{1} \relax \fi
+                % left join
+                \ifnum \@@a=0 \pgfpoint{0.475*\pgf at circ@res at other}{0pt}\else
+                    \pgfpointcurveattime{0.5}
+                        {\pgfpoint{0.95*\pgf at circ@res at other}{\@@a*\radius}}
+                        {\pgfpoint{.75*\pgf at circ@res at other}{(\@@a+\curvature)*\radius}}
+                        {\pgfpoint{.25*\pgf at circ@res at other}{(\@@a+\curvature)*\radius}}
+                        {\pgfpoint{0.05*\pgf at circ@res at other}{\@@a*\radius}}
+                \fi
+            \fi
+        }
+        \anchor{top arc right}{\northeast
+            \pgf at circ@res at other=-\pgf at x
+            \pgf at circ@res at temp=\pgf at x
+            %
+            % read the status of the jumper
+            %
+            \expandafter\pgf at circ@tjumper at splitstatus\jumpertype\relax% a bit of magic...
+            \edef\@@S{S}%the "S" letter
+            \ifx\@@a\@@S %span, it's in the center
+                \ifnum \@@b=0\pgfpointorigin\else % no arc, anchor on the center-base
+                    \ifnum \@@b=2 \edef\@@b{\openshift} \else \edef\@bb{1}\relax \fi
+                    \pgfpointcurveattime{0.5}
+                        {\pgfpoint{0.9*\pgf at circ@res at other}{(\@@b)*\radius}}
+                        {\pgfpoint{.5*\pgf at circ@res at other}{(\@@b+\curvature)*\radius}}
+                        {\pgfpoint{.5*\pgf at circ@res at temp}{(\@@b+\curvature)*\radius}}
+                        {\pgfpoint{0.9*\pgf at circ@res at temp}{(\@@b)*\radius}}
+                \fi
+            \else
+                % adjust the lengths of the gap, if needed
+                \ifnum \@@a=2 \edef\@@a{\openshift} \else \edef\@aa{1} \relax \fi
+                \ifnum \@@b=2 \edef\@@b{\openshift} \else \edef\@bb{1} \relax \fi
+                % right join
+                \ifnum \@@b=0 \pgfpoint{0.475*\pgf at circ@res at temp}{0pt}\else
+                    \pgfpointcurveattime{0.5}
+                        {\pgfpoint{0.95*\pgf at circ@res at temp}{\@@b*\radius}}
+                        {\pgfpoint{.75\pgf at circ@res at temp}{(\@@b+\curvature)*\radius}}
+                        {\pgfpoint{.25\pgf at circ@res at temp}{(\@@b+\curvature)*\radius}}
+                        {\pgfpoint{0.05*\pgf at circ@res at temp}{\@@b*\radius}}
+                \fi
+            \fi
+        }
+    }
+    {\ctikzvalof{bipoles/jumper/depth}}
+    {tjumper}
+    {\ctikzvalof{bipoles/jumper/height}}
+    {\ctikzvalof{bipoles/tjumper/width}}{
+        %
+        % read the status of the jumper
+        %
+        \expandafter\pgf at circ@tjumper at splitstatus\jumpertype\relax% a bit of magic...
+        \edef\@@S{S}%the "S" letter
+        \ifx\@@a\@@S %span
+            \ifnum \@@b=0 \else
+                \ifnum \@@b=2 \edef\@@b{\openshift} \else \edef\@bb{1}\relax \fi
+                \pgfpathmoveto{\pgfpoint{0.9*\pgf at circ@res at left}{(\@@b)*\radius}}
+                \pgfpathcurveto
+                    {\pgfpoint{.5\pgf at circ@res at left}{(\@@b+\curvature)*\radius}}
+                    {\pgfpoint{.5\pgf at circ@res at right}{(\@@b+\curvature)*\radius}}
+                    {\pgfpoint{0.9*\pgf at circ@res at right}{(\@@b)*\radius}}
+                \pgfusepath{draw}
+            \fi
+        \else
+        % let's do the connection, if needed
+            % adjust the lengths of the gap, if needed
+            \ifnum \@@a=2 \edef\@@a{\openshift} \else \edef\@aa{1} \relax \fi
+            \ifnum \@@b=2 \edef\@@b{\openshift} \else \edef\@bb{1} \relax \fi
+            % left arc
+            \ifnum \@@a=0 \else
+                \pgfpathmoveto{\pgfpoint{0.95*\pgf at circ@res at left}{\@@a*\radius}}
+                \pgfpathcurveto
+                    {\pgfpoint{.75\pgf at circ@res at left}{(\@@a+\curvature)*\radius}}
+                    {\pgfpoint{.25\pgf at circ@res at left}{(\@@a+\curvature)*\radius}}
+                    {\pgfpoint{0.05*\pgf at circ@res at left}{\@@a*\radius}}
+                \pgfusepath{draw}
+            \fi
+            % right arc
+            \ifnum \@@b=0 \else
+                \pgfpathmoveto{\pgfpoint{0.95*\pgf at circ@res at right}{\@@b*\radius}}
+                \pgfpathcurveto
+                    {\pgfpoint{.75\pgf at circ@res at right}{(\@@b+\curvature)*\radius}}
+                    {\pgfpoint{.25\pgf at circ@res at right}{(\@@b+\curvature)*\radius}}
+                    {\pgfpoint{0.05*\pgf at circ@res at right}{\@@b*\radius}}
+                \pgfusepath{draw}
+            \fi
+        \fi
+        % draw the poles (always filled!)
+        \pgftransformshift{\pgfpoint{\pgf at circ@res at left}{0pt}}
+        \pgfnode{\cshape}{center}{}{\thisshape-in}{\pgfusepath{draw}}
+        \pgftransformshift{\pgfpoint{\pgf at circ@res at right}{0pt}}
+        \pgfnode{\cshape}{center}{}{\thisshape-tap}{\pgfusepath{draw}}
+        \pgftransformshift{\pgfpoint{\pgf at circ@res at right}{0pt}}
+        \pgfnode{\cshape}{center}{}{\thisshape-out}{\pgfusepath{draw}}
+    }
+
+\pgfcirc at activate@bipole{l}{tjumper}{tjumper}{three-pins jumper}
+
+% %>>>
+
 %%%%%%%%%%%%%%%%%
 %% Instruments
 %%%%%%%%%%%%%%%%%

Modified: trunk/Master/texmf-dist/tex/generic/circuitikz/pgfcircquadpoles.tex
===================================================================
--- trunk/Master/texmf-dist/tex/generic/circuitikz/pgfcircquadpoles.tex	2022-09-10 20:09:32 UTC (rev 64331)
+++ trunk/Master/texmf-dist/tex/generic/circuitikz/pgfcircquadpoles.tex	2022-09-10 20:09:54 UTC (rev 64332)
@@ -36,8 +36,12 @@
 \ctikzset{quadpoles/coupler/height/.initial=1.3}
 \ctikzset{quadpoles/coupler2/width/.initial=1.3}
 \ctikzset{quadpoles/coupler2/height/.initial=1.3}
+\ctikzset{quadpoles/double bipole/inner/.initial=0.4}
+\ctikzset{quadpoles/double bipole/width/.initial=1.5}
+\ctikzset{quadpoles/double bipole/width1/.initial=.4}
+\ctikzset{quadpoles/double bipole/height/.initial=1.5}
+\ctikzset{quadpoles/double bipole/height1/.initial=.8}
 
-
 \ctikzset{quadpoles style/.is choice}
 \ctikzset{quadpoles style/inward/.code={% default value
         \ctikzset{quadpoles/transformer/inner=0.4}%
@@ -46,6 +50,8 @@
         \ctikzset{quadpoles/transformer core/width=1.5}%
         \ctikzset{quadpoles/gyrator/inner=0.4}%
         \ctikzset{quadpoles/gyrator/width=1.5}%
+        \ctikzset{quadpoles/double bipole/inner=0.4}%
+        \ctikzset{quadpoles/double bipole/width=1.5}%
     }%
 }
 \ctikzset{quadpoles style/inline/.code={% now horizontal baffle
@@ -55,6 +61,8 @@
         \ctikzset{quadpoles/transformer core/width=0.6}%
         \ctikzset{quadpoles/gyrator/inner=1} % FIXME
         \ctikzset{quadpoles/gyrator/width=0.6}%
+        \ctikzset{quadpoles/double bipole/inner=1}%
+        \ctikzset{quadpoles/double bipole/width=0.6}%
     }%
 }
 %%>>>
@@ -68,11 +76,6 @@
         \saveddimen{\scaledRlen}{\pgfmathsetlength{\pgf at x}{\ctikzvalof{\ctikzclass/scale}\pgf at circ@Rlen}}
         % shapename
         \savedmacro{\thisshape}{\def\thisshape{\tikz at fig@name}}
-        \anchor{center}{
-            \northwest
-            \pgf at x=0pt
-            \pgf at y=0pt
-        }
         \savedmacro{\stretto}{\def\stretto{\ctikzvalof{quadpoles/#1/inner}}}
         \savedanchor\northwest{%
             \pgfmathsetlength{\pgf at circ@scaled at Rlen}{\ctikzvalof{\ctikzclass/scale}\pgf at circ@Rlen}
@@ -81,7 +84,7 @@
             \pgf at x=.5\pgf at circ@scaled at Rlen
             \pgf at x=-\ctikzvalof{quadpoles/#1/width}\pgf at x
         }
-        %% we define the upper right (positive coord) dot (which is B1)
+        %% we define the upper right (positive coord) inner and outer dots (on the side of B1)
         \savedanchor{\innerdot}{%
             \pgfmathsetlength{\pgf at circ@scaled at Rlen}{\ctikzvalof{\ctikzclass/scale}\pgf at circ@Rlen}
             \pgf at xa=.5\pgf at circ@scaled at Rlen
@@ -120,22 +123,15 @@
             \fi
             \pgfmathsetlength\pgf at y{0.5*\pgf at circ@scaled at Rlen}
         }
-        \anchor{A2}{
-            \northwest
-            \pgf at y=-\pgf at y
-        }
-        \anchor{B1}{
-            \northwest
-            \pgf at x=-\pgf at x
-        }
-        \anchor{A1}{
-            \northwest
-        }
-        \anchor{B2}{
-            \northwest
-            \pgf at x=-\pgf at x
-            \pgf at y=-\pgf at y
-        }
+        % geographical
+        \anchor{center}{\northwest\pgf at x=0pt\pgf at y=0pt}
+        \pgfcirc at northwest@symmetric at geoanchors
+        \anchor{base}{\northwest\pgf at x=0pt}
+        % external wires
+        \anchor{A2}{\northwest\pgf at y=-\pgf at y}
+        \anchor{B1}{\northwest\pgf at x=-\pgf at x}
+        \anchor{A1}{\northwest}
+        \anchor{B2}{\northwest\pgf at x=-\pgf at x \pgf at y=-\pgf at y}
         %% dot's anchors
         \anchor{inner dot A1}{\innerdot\pgf at x=-\pgf at x}
         \anchor{outer dot A1}{\outerdot\pgf at x=-\pgf at x}
@@ -145,45 +141,12 @@
         \anchor{outer dot B1}{\outerdot}
         \anchor{inner dot B2}{\innerdot\pgf at y=-\pgf at y}
         \anchor{outer dot B2}{\outerdot\pgf at y=-\pgf at y}
-        % geographical
-        \anchor{north}{
+        % text above
+        \anchor{text}{
             \northwest
-            \pgf at x=0pt
+            \pgf at x=\dimexpr -.5\wd\pgfnodeparttextbox\relax
+            \advance\pgf at y by .6\ht\pgfnodeparttextbox\relax
         }
-        \anchor{south}{
-            \northwest
-            \pgf at x=0pt
-            \pgf at y=-\pgf at y
-        }
-        \anchor{west}{
-            \northwest
-            \pgf at y=0pt
-        }
-        \anchor{east}{
-            \northwest
-            \pgf at y=0pt
-            \pgf at x=-\pgf at x
-        }
-        \anchor{south west}{
-            \northwest
-            \pgf at y=-\pgf at y
-        }
-        \anchor{north east}{
-            \northwest
-            \pgf at x=-\pgf at x
-        }
-        \anchor{north west}{
-            \northwest
-        }
-        \anchor{south east}{
-            \northwest
-            \pgf at x=-\pgf at x
-            \pgf at y=-\pgf at y
-        }
-        \anchor{base}{
-            \northwest
-            \pgf at x=0pt
-        }
         #3%
         \pgf at circ@draw at component{
             \pgf at circ@setcolor
@@ -199,8 +162,10 @@
 }
 
 
+% these are deprecated anchors (really I do not know what they are --- Romano.)
+% They are here for compatibility, I suppose. Don't use.
 \def\pgf at circ@drawtransformerbasicanchor{
-    \ctikzvalof{quadpoles/trans/height}
+    % \ctikzvalof{quadpoles/trans/height}
     \anchor{AA2}{
         \northwest
         \pgf at x=\ctikzvalof{quadpoles/transformer/width1}\pgf at x
@@ -389,6 +354,159 @@
 }{}
 % %>>>
 
+% Node shapes for generic double bipoles %<<<
+%
+\long\def\pgfcircdeclaredbipole#1#2#3{
+    \pgfdeclareshape{#1}
+    {
+        \savedmacro{\ctikzclass}{\edef\ctikzclass{misc}}
+        \saveddimen{\scaledRlen}{\pgfmathsetlength{\pgf at x}{\ctikzvalof{\ctikzclass/scale}\pgf at circ@Rlen}}
+        % shapename
+        \savedmacro{\thisshape}{\def\thisshape{\tikz at fig@name}}
+        \savedmacro{\stretto}{\def\stretto{\ctikzvalof{quadpoles/#1/inner}}}
+        \savedanchor\northwest{%
+            \pgfmathsetlength{\pgf at circ@scaled at Rlen}{\ctikzvalof{\ctikzclass/scale}\pgf at circ@Rlen}
+            \pgf at y=\ctikzvalof{quadpoles/#1/height}\pgf at circ@scaled at Rlen
+            \pgf at y=.5\pgf at y
+            \pgf at x=.5\pgf at circ@scaled at Rlen
+            \pgf at x=-\ctikzvalof{quadpoles/#1/width}\pgf at x
+        }
+        %% we define the upper right (positive coord) inner and outer dot (near B1)
+        %% in the generic case, we just place the dot position in a fixed spot
+        %% we do not know the width of the component there...
+        \savedanchor{\innerdot}{%
+            \pgfmathsetlength{\pgf at circ@scaled at Rlen}{\ctikzvalof{\ctikzclass/scale}\pgf at circ@Rlen}
+            \pgf at xa=.5\pgf at circ@scaled at Rlen
+            \pgf at xa=-\ctikzvalof{quadpoles/#1/width}\pgf at xa
+            \pgfmathsetlength\pgf at x{-0.5*\stretto*\pgf at xa}
+            \pgfmathsetlength\pgf at y{0.5*\pgf at circ@scaled at Rlen}
+        }
+        \savedanchor{\outerdot}{%
+            \pgfmathsetlength{\pgf at circ@scaled at Rlen}{\ctikzvalof{\ctikzclass/scale}\pgf at circ@Rlen}
+            \pgf at xa=.5\pgf at circ@scaled at Rlen
+            \pgf at xa=-\ctikzvalof{quadpoles/#1/width}\pgf at xa
+            \pgfmathsetlength\pgf at x{-1.5*\stretto*\pgf at xa}
+            \pgfmathsetlength\pgf at y{0.5*\pgf at circ@scaled at Rlen}
+        }
+        % geographical
+        \anchor{center}{\northwest\pgf at x=0pt\pgf at y=0pt}
+        \pgfcirc at northwest@symmetric at geoanchors
+        \anchor{base}{\northwest\pgf at x=0pt}
+        % external wires
+        \anchor{A2}{\northwest\pgf at y=-\pgf at y}
+        \anchor{B1}{\northwest\pgf at x=-\pgf at x}
+        \anchor{A1}{\northwest}
+        \anchor{B2}{\northwest\pgf at x=-\pgf at x \pgf at y=-\pgf at y}
+        %% dot's anchors
+        \anchor{inner dot A1}{\innerdot\pgf at x=-\pgf at x}
+        \anchor{outer dot A1}{\outerdot\pgf at x=-\pgf at x}
+        \anchor{inner dot A2}{\innerdot\pgf at x=-\pgf at x\pgf at y=-\pgf at y}
+        \anchor{outer dot A2}{\outerdot\pgf at x=-\pgf at x\pgf at y=-\pgf at y}
+        \anchor{inner dot B1}{\innerdot}
+        \anchor{outer dot B1}{\outerdot}
+        \anchor{inner dot B2}{\innerdot\pgf at y=-\pgf at y}
+        \anchor{outer dot B2}{\outerdot\pgf at y=-\pgf at y}
+        % text above
+        \anchor{text}{
+            \northwest
+            \pgf at x=\dimexpr -.5\wd\pgfnodeparttextbox\relax
+            \advance\pgf at y by .6\ht\pgfnodeparttextbox\relax
+        }
+        #3%
+        \pgf at circ@draw at component{
+            \pgf at circ@setcolor
+            \northwest
+            \pgf at circ@res at up = \pgf at y
+            \pgf at circ@res at down = -\pgf at y
+            \pgf at circ@res at right = -\pgf at x
+            \pgf at circ@res at left = \pgf at x
+            #2%
+        }
+    }
+}
+
+\ctikzset{every double bipole L/.style={}}
+\ctikzset{every double bipole R/.style={}}
+\ctikzset{double bipole L/.initial=genericshape}
+\ctikzset{double bipole R/.initial=vsourceAMshape}
+\newif\ifpgf at circ@dbipoleL at invert\pgf at circ@dbipoleL at invertfalse
+\newif\ifpgf at circ@dbipoleR at invert\pgf at circ@dbipoleR at invertfalse
+\ctikzset{double bipole L invert/.is if=pgf at circ@dbipoleL at invert}
+\ctikzset{double bipole R invert/.is if=pgf at circ@dbipoleR at invert}
+
+\def\pgf at circ@drawdbipolebasicbody{
+    \pgfscope
+        \ifpgf at circ@dbipoleL at invert
+            \pgf at circ@res at temp=\pgf at circ@res at down
+            \pgf at circ@res at other=\pgf at circ@res at up
+        \else
+            \pgf at circ@res at temp=\pgf at circ@res at up
+            \pgf at circ@res at other=\pgf at circ@res at down
+        \fi
+        \pgfslopedattimetrue
+        \pgfallowupsidedownattimetrue
+        \pgftransformlineattime{.5}{%
+            \pgfpoint%
+            {\stretto\pgf at circ@res at left}%
+            {\pgf at circ@res at temp}%
+        }{%
+            \pgfpoint
+            {\stretto\pgf at circ@res at left}%
+            {\pgf at circ@res at other}%
+        }
+        \pgfkeys{\circuitikzbasekey/.cd,  every double bipole L}
+        \edef\pgf at circ@temp{\ctikzvalof{double bipole L}}%
+        \pgfnode{\pgf at circ@temp}{center}{}{\thisshape-L}{\pgfusepath{stroke}}
+    \endpgfscope
+    \pgfscope
+        \ifpgf at circ@dbipoleR at invert
+            \pgf at circ@res at temp=\pgf at circ@res at down
+            \pgf at circ@res at other=\pgf at circ@res at up
+        \else
+            \pgf at circ@res at temp=\pgf at circ@res at up
+            \pgf at circ@res at other=\pgf at circ@res at down
+        \fi
+        \pgfslopedattimetrue
+        \pgfallowupsidedownattimetrue
+        \pgftransformlineattime{.5}{%
+            \pgfpoint%
+            {\stretto\pgf at circ@res at right}%
+            {\pgf at circ@res at other}%
+        }{%
+            \pgfpoint
+            {\stretto\pgf at circ@res at right}%
+            {\pgf at circ@res at temp}%
+        }
+        %
+        \pgfkeys{\circuitikzbasekey/.cd, every double bipole R}
+        \edef\pgf at circ@temp{\ctikzvalof{double bipole R}}%
+        \pgfnode{\pgf at circ@temp}{center}{}{\thisshape-R}{\pgfusepath{stroke}}
+    \endpgfscope
+    %
+    \pgfpathmoveto{\pgfpoint{\pgf at circ@res at left}{\pgf at circ@res at up}}
+    \pgfpathlineto{\pgfpoint{\stretto\pgf at circ@res at left}{\pgf at circ@res at up}}
+    \pgfpathlineto{\pgfpointanchor{\thisshape-L}{\ifpgf at circ@dbipoleL at invert a\else b\fi}}
+    %
+    \pgfpathmoveto{\pgfpointanchor{\thisshape-L}{\ifpgf at circ@dbipoleL at invert b\else a\fi}}
+    \pgfpathlineto{\pgfpoint{\stretto\pgf at circ@res at left}{\pgf at circ@res at down}}
+    \pgfpathlineto{\pgfpoint{\pgf at circ@res at left}{\pgf at circ@res at down}}
+    %
+    \pgfpathmoveto{\pgfpoint{\pgf at circ@res at right}{\pgf at circ@res at up}}
+    \pgfpathlineto{\pgfpoint{\stretto\pgf at circ@res at right}{\pgf at circ@res at up}}
+    \pgfpathlineto{\pgfpointanchor{\thisshape-R}{\ifpgf at circ@dbipoleR at invert b\else a\fi}}
+    %
+    \pgfpathmoveto{\pgfpointanchor{\thisshape-R}{\ifpgf at circ@dbipoleR at invert a\else b\fi}}
+    \pgfpathlineto{\pgfpoint{\stretto\pgf at circ@res at right}{\pgf at circ@res at down}}
+    \pgfpathlineto{\pgfpoint{\pgf at circ@res at right}{\pgf at circ@res at down}}
+    \pgfusepath{draw}
+}
+\pgfcircdeclaredbipole{double bipole}{
+    \pgf at circ@drawdbipolebasicbody
+}{}
+
+
+% %>>>
+
 %%%%%%%%%%%%%%%%%%%
 %% Block diagrams
 %%%%%%%%%%%%%%%%%%%

Modified: trunk/Master/texmf-dist/tex/generic/circuitikz/pgfcirctripoles.tex
===================================================================
--- trunk/Master/texmf-dist/tex/generic/circuitikz/pgfcirctripoles.tex	2022-09-10 20:09:32 UTC (rev 64331)
+++ trunk/Master/texmf-dist/tex/generic/circuitikz/pgfcirctripoles.tex	2022-09-10 20:09:54 UTC (rev 64332)
@@ -3375,8 +3375,16 @@
 % 0 --- nothing, 1 --- solid, 2 --- dashed
 \ctikzset{transistor circle/partial borders/.initial=none}       % Value none for normal borders
 \ctikzset{transistor circle/partial border dash/.initial={{2pt}{2pt}}}
+%
+% body diode style
+\ctikzset{transistor bodydiode/.is family}
+\ctikzset{transistor bodydiode/relative thickness/.initial=1}
+\ctikzset{transistor bodydiode/color/.initial=default}
+\ctikzset{transistor bodydiode/dash/.initial=default}
+
 %%>>>
 
+
 %% definitions of transistor shapes%<<<
 %
 % draw partial transistor outline
@@ -3406,7 +3414,7 @@
 % add a circle to the transistor:
 \def\pgf at circ@trcircle at draw@partial#1{%
     \expandafter\pgf at circ@trcircle at split#1\relax
-    \typeout{PARTIAL: \@@a:\@@b:\@@c:\@@d}
+    % \typeout{PARTIAL: \@@a:\@@b:\@@c:\@@d}
     \pgfscope % right side upper arc
         \pgfpathmoveto{\pgfpoint{\circleleft+\circleradius}{\circleradius}}
         \pgfpatharc{90}{0}{\circleradius}
@@ -3905,7 +3913,23 @@
         #3%
         % BODY DIODE
         \ifpgf at circuit@fet at bodydiode
-            \drawbodydiode{#1}
+            \pgfscope
+                \pgfsetlinewidth{\ctikzvalof{transistor bodydiode/relative thickness}\pgflinewidth}
+                \edef\@@none{none}\edef\@@default{default}
+                \edef\@@tmp{\ctikzvalof{transistor bodydiode/color}}
+                \ifx\@@tmp\@@default\else
+                    \pgfsetcolor{\@@tmp}
+                \fi
+                \edef\@@tmp{\ctikzvalof{transistor bodydiode/dash}}
+                \ifx\@@tmp\@@default\else
+                    \ifx\@@tmp\@@none
+                        \pgfsetdash{}{0pt}% solid line, override dash
+                    \else
+                        \expandafter\pgfsetdash\expandafter{\@@tmp}{0cm}
+                    \fi
+                \fi
+                \drawbodydiode{#1}
+            \endpgfscope
         \fi
         %
     }

Modified: trunk/Master/texmf-dist/tex/latex/circuitikz/circuitikz.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex/circuitikz/circuitikz.sty	2022-09-10 20:09:32 UTC (rev 64331)
+++ trunk/Master/texmf-dist/tex/latex/circuitikz/circuitikz.sty	2022-09-10 20:09:54 UTC (rev 64332)
@@ -16,8 +16,8 @@
 \providecommand\DeclareRelease[3]{}
 \providecommand\DeclareCurrentRelease[2]{}
 
-\def\pgfcircversion{1.5.3}
-\def\pgfcircversiondate{2022/07/02}
+\def\pgfcircversion{1.5.4}
+\def\pgfcircversiondate{2022/09/09}
 
 \DeclareRelease{0.4}{2012/12/20}{circuitikz-0.4-body.tex}
 \DeclareRelease{v0.4}{2012/12/20}{circuitikz-0.4-body.tex}



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