From 34d318af65decbdb242ae03b64bf3f53266067b6 Mon Sep 17 00:00:00 2001 From: Norbert Preining Date: Sun, 3 Jul 2022 03:01:27 +0000 Subject: CTAN sync 202207030301 --- graphics/pgf/contrib/circuitikz/doc/changelog.tex | 25 +++++-- .../contrib/circuitikz/doc/circuitikz-context.pdf | Bin 17645 -> 17645 bytes .../contrib/circuitikz/doc/circuitikzmanual.pdf | Bin 1544857 -> 1545633 bytes .../contrib/circuitikz/doc/circuitikzmanual.tex | 79 +++++++++++---------- graphics/pgf/contrib/circuitikz/tex/circuitikz.sty | 4 +- .../pgf/contrib/circuitikz/tex/pgfcircbipoles.tex | 50 +++++++++++++ .../pgf/contrib/circuitikz/tex/t-circuitikz.tex | 4 +- 7 files changed, 115 insertions(+), 47 deletions(-) (limited to 'graphics/pgf/contrib') diff --git a/graphics/pgf/contrib/circuitikz/doc/changelog.tex b/graphics/pgf/contrib/circuitikz/doc/changelog.tex index ded454a028..8fafa56d53 100644 --- a/graphics/pgf/contrib/circuitikz/doc/changelog.tex +++ b/graphics/pgf/contrib/circuitikz/doc/changelog.tex @@ -4,6 +4,21 @@ here. See \url{https://github.com/circuitikz/circuitikz/commits} for a full list of changes. \begin{itemize} +\item + Version 1.5.3 (2022-07-02) + + Minor release: fixes to the manual, and a new component (Shockley + diodes). + + \begin{itemize} + \tightlist + \item + Merging changes to fix the language in the manual (thanks to Charles + 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)). + \end{itemize} \item Version 1.5.2 (2022-05-08) @@ -603,7 +618,7 @@ full list of changes. 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) @@ -965,7 +980,7 @@ A detailed list of changes can be seen below. \item Fixed a (puzzling) problem with coupler2 \item - Fixed a compatibility problem with newer PGF (\textgreater3.0.1a) + Fixed a compatibility problem with newer PGF (\textgreater{}3.0.1a) \end{itemize} \item Version 0.9.2 (2019-06-21) @@ -1115,7 +1130,7 @@ A detailed list of changes can be seen below. \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. @@ -1151,7 +1166,7 @@ A detailed list of changes can be seen below. \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 @@ -1180,7 +1195,7 @@ A detailed list of changes can be seen below. \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 diff --git a/graphics/pgf/contrib/circuitikz/doc/circuitikz-context.pdf b/graphics/pgf/contrib/circuitikz/doc/circuitikz-context.pdf index 8fac207e51..96c33b3c5b 100644 Binary files a/graphics/pgf/contrib/circuitikz/doc/circuitikz-context.pdf and b/graphics/pgf/contrib/circuitikz/doc/circuitikz-context.pdf differ diff --git a/graphics/pgf/contrib/circuitikz/doc/circuitikzmanual.pdf b/graphics/pgf/contrib/circuitikz/doc/circuitikzmanual.pdf index b03c2d5f54..76ec057a8a 100644 Binary files a/graphics/pgf/contrib/circuitikz/doc/circuitikzmanual.pdf and b/graphics/pgf/contrib/circuitikz/doc/circuitikzmanual.pdf differ diff --git a/graphics/pgf/contrib/circuitikz/doc/circuitikzmanual.tex b/graphics/pgf/contrib/circuitikz/doc/circuitikzmanual.tex index 74d74b4dcd..03e0207baa 100644 --- a/graphics/pgf/contrib/circuitikz/doc/circuitikzmanual.tex +++ b/graphics/pgf/contrib/circuitikz/doc/circuitikzmanual.tex @@ -154,7 +154,7 @@ There is really no support for Plain TeX --- the maintainers are willing to cons \subsection{Installing a new version of the package.} -The stable version of the package should come with your \LaTeX\ distribution. Downloading the files from CTAN and installing them locally is, unfortunately, a distribution-dependent task and sometime not so trivial. If you search for \texttt{local texmf tree} and the name of your distribution on \url{https://tex.stackexchange.com/} you will find a lot of hints. +The stable version of the package should come with your \LaTeX\ distribution. Downloading the files from CTAN and installing them locally is, unfortunately, a distribution-dependent task and sometimes not so trivial. If you search for \texttt{local texmf tree} and the name of your distribution on \url{https://tex.stackexchange.com/} you will find a lot of hints. Anyway, the easiest way of using whichever version of \Circuitikz\ is to point to the github page \url{https://circuitikz.github.io/circuitikz/} of the project, and download the version you want. You will download a simple (biggish) file, called \texttt{circuitikzgit.sty}. @@ -186,20 +186,20 @@ So, if loaded with said option, one must write \verb!(0,0) to[*R] (2,0)! and, fo Anyway, the compatibility code is a \emph{best effort} task and only very lightly tested --- the authors advice is to choose one or the other, without mixing them. -Another thing to take into account is that any \TikZ{} figure (and \Circuitikz{} ones qualify) \textbf{will} have problems if you use the \texttt{babel} package with a language that changes active characters (most of them). The solution is normally to add the line \verb|\usetikzlibrary{babel}| in your preamble, after loading \TikZ{} or \Circuitikz. This will normally solve the problem; some language also requires using \verb|\deactivatequoting| or the option \texttt{shorthands=off} for \texttt{babel}. Please check the documentation of \TikZ{} or this question \href{https://tex.stackexchange.com/questions/166772/problem-with-babel-and-tikz-using-draw}{on \TeX{} stackexchange site}. +Another thing to take into account is that any \TikZ{} figure (and \Circuitikz{} ones qualify) \textbf{will} have problems if you use the \texttt{babel} package with a language that changes active characters (most of them). The solution is normally to add the line \verb|\usetikzlibrary{babel}| in your preamble, after loading \TikZ{} or \Circuitikz. This will normally solve the problem; some languages also require using \verb|\deactivatequoting| or the option \texttt{shorthands=off} for \texttt{babel}. Please check the documentation of \TikZ{} or this question \href{https://tex.stackexchange.com/questions/166772/problem-with-babel-and-tikz-using-draw}{on \TeX{} stackexchange site}. -Finally, the \TikZ{} library \texttt{bending} is loaded by the package, and its effects (the bending of the arrows on curved paths) will affect also the rest of your drawings. +Finally, the \TikZ{} library \texttt{bending} is loaded by the package, and its effects (the bending of the arrows on curved paths) will also affect the rest of your drawings. \subsection{Known bugs and limitation}\label{sec:bugs} \Circuitikz{} will \textbf{not work} correctly with global (in the main \texttt{circuitikz} environment, or in \texttt{scope} environments) \emph{negative} scale parameters (\texttt{scale}, \texttt{xscale} or \texttt{yscale}), unless \texttt{transform shape} is also used, and even in this cases the behavior is not guaranteed. -Neither it will work with angle-changing scaling (when \texttt{xscale} is different form \texttt{yscale}) and with the global \texttt{rotate} parameter. +Neither will it work with angle-changing scaling (when \texttt{xscale} is different form \texttt{yscale}) and with the global \texttt{rotate} parameter. Correcting this will need a big rewrite of the path routines, and although the authors are thinking about solving it, don't hold your breath; it will need changing a lot of interwoven code (labels, voltages, currents and so on). Contributions and help would be highly appreciated. -This same issue create a lot of problem of compatibility between \Circuitikz{} and the new \texttt{pic} Ti\emph{k}Z feature, so basically don't put components into \texttt{pic}s. +This same issue creates a lot of problems with compatibility between \Circuitikz{} and the new \texttt{pic} Ti\emph{k}Z feature, so basically don't put components into \texttt{pic}s. -Also, notice that several components will interact in a funny way with global path options. Depending on the specific component, some parameter is inherited by the internal shape, and some other is reset. This is not easy to fix in general. We want some option to go through --- fill color, dashed pattern for example --- and some other to stay only in the outer path; and if the background shape need some option for drawing the internal shape, like for example a rounded corner, it \emph{must} reset the external option. So there is no perfect solution, although since \texttt{v1.5.0} the shapes have been ``robustified'', so that by default arced corners and arrows parameters will \emph{not} be propagated into the shape. +Also, notice that several components will interact in a funny way with global path options. Depending on the specific component, some parameters are inherited by the internal shape, and some others are reset. This is not easy to fix in general. We want some options to go through --- fill color, dashed pattern for example --- and some others to stay only in the outer path; and if the background shape needs some option for drawing the internal shape, like for example a rounded corner, it \emph{must} reset the external option. So there is no perfect solution, although since \texttt{v1.5.0} the shapes have been ``robustified'', so that by default arced corners and arrows parameters will \emph{not} be propagated into the shape. Arrows with \texttt{to[]} components don't work, anyway, so basically avoid this situation. \begin{LTXexample}[varwidth=true, basicstyle=\small\ttfamily] @@ -214,7 +214,7 @@ Arrows with \texttt{to[]} components don't work, anyway, so basically avoid this \end{LTXexample} -\subsection{Scale factors inaccuracies}\label{sec:usefpu} +\subsection{Scale factor inaccuracies}\label{sec:usefpu} Sometimes, when using fractional scaling factors and big values for the coordinates, the basic layer inaccuracies from \TeX{} can bite you, producing results like the following one: @@ -243,19 +243,19 @@ The \texttt{use fpu reciprocal} key seems to have no side effects, but given tha \subsection{Incompabilities between version}\label{sec:incompatible-changes} -Here, we will provide a list of incompabilitys between different version of \Circuitikz. We will try to hold this list short, but sometimes it is easier to break with old syntax than including a lot of switches and compatibility layers. In general, changes that would invalidate a circuit (changes of polarity of components and so on) are almost always protected by a flag; the same is not true for purely aesthetic changes. -If unsure, you can check the version at your local installation using the macro \verb!\pgfcircversion{}!. +Here, we will provide a list of incompabilities between different version of \Circuitikz. We will try to hold this list short, but sometimes it is easier to break with old syntax than include a lot of switches and compatibility layers. In general, changes that would invalidate a circuit (changes of polarity of components and so on) are almost always protected by a flag; the same is not true for purely aesthetic changes. +If unsure, you can check the version in your local installation by using the macro \verb!\pgfcircversion{}!. \begin{itemize} \item Since \texttt{v1.5.1}\footnote{Do not use \texttt{v1.5.0}, it's buggy.} color management (see section~\ref{sec:colors}) and the details of how the shapes are drawn and protected by the external drawing options has changed. There should be no substantial changes to the circuits, though. - \item The \TikZ{} fix for \texttt{to[...] +(x,y)} behavior (see~\ref{sec:path-relative-coordinates}) uncovered a bug in the positioning of the labels in \Circuitikz{} that is present since \texttt{v0.8}. So you \textbf{must} upgrade to \texttt{v1.4.1} or better if you have \TikZ{} newer than \texttt{3.1.8} (and you want/need to use the \texttt{+(x,y)} syntax). + \item The \TikZ{} fix for \texttt{to[...] +(x,y)} behavior (see~\ref{sec:path-relative-coordinates}) uncovered a bug in the positioning of the labels in \Circuitikz{} that had been present since \texttt{v0.8}. So you \textbf{must} upgrade to \texttt{v1.4.1} or better if you have \TikZ{} newer than \texttt{3.1.8} (and you want/need to use the \texttt{+(x,y)} syntax). \item There have been changes in (internal) parameters for capacitors in \texttt{v1.4.1}; now to change them you should use the style interface (see~\ref{sec:capacitors-styling}). - \item \Circuitikz{} \texttt{v1.4.0} introduce the rollback system for the package when using LaTeX; that (at least in principle) should be completely backward-compatible. - \item The path construction in \texttt{v1.4.0} has been changed a bit (again). The change shouldn't break any circuit and correct a behavior that should have been fixed with the \texttt{v1.2.1} change (see below). + \item \Circuitikz{} \texttt{v1.4.0} introduced the rollback system for the package when using LaTeX; that (at least in principle) should be completely backward-compatible. + \item The path construction in \texttt{v1.4.0} has been changed a bit (again). The change shouldn't break any circuit and will correct a behavior that should have been fixed with the \texttt{v1.2.1} change (see below). \item Version 1.3.6 fixes several problems with the stacked labels; the most important change is that now the bracing of arguments is respected as in version 1.3.0 for the other labels. The special treatment in stacked labels (and only in stacked labels!) for the (still experimental\footnote{and, really, not advised\dots}) \texttt{siunitx} compact syntax \texttt{<...>} has been removed: it was completely buggy before, and silently ignored, now will throw an error. \item Version 1.3.3 fixes the direction of the arrows in tunable elements; before this version, they were more or less random, now the arrow goes from bottom left to top right. You have the option to go back to the old behavior with \texttt{\textbackslash ctikzset\{bipoles/fix tunable direction=false\}}. As a compensation for the fuss, now the arrows are configurable. To learn more, see the FAQ:~\ref{faq:tunable-arrow}. \item Version 1.3.1 removes the warning if you do not specify a voltage direction. \item Version 1.3.0 fixes the buggy stripping of braces from labels and annotations (see~\ref{sec:bracing-of-labels}). - \item After 1.2.7 a big code reorganization (which had the collateral effect of fixing some bug) has been made; no changes should be visible, but a fallback point at 1.2.7 has been added. + \item After 1.2.7 a big code reorganization (which had the collateral effect of fixing some bugs) has been made; no changes should be visible, but a fallback point at 1.2.7 has been added. \item You \textbf{must} upgrade to v1.2.7 or newer if you use a \TikZ{} 3.1.8 or 3.1.8a (but better upgrade both packages to the current version). You can check the \TikZ{} version installed using the macro \verb|\pgfversion|. \item After v1.2.1: \textbf{Important:} the routine that implements the \texttt{to[...]} component positioning has been rewritten. That should enhance the line joins in paths, and it's safer, but it can potentially change some old behavior. @@ -275,7 +275,7 @@ If unsure, you can check the version at your local installation using the macro \item After v0.9.0: the parameters \texttt{tripoles/american or port/aaa}, \texttt{...bbb}, \texttt{...ccc} and \texttt{...ddd} are no longer used and are silently ignored; the same stands for the similarly named parameters in \texttt{nor}, \texttt{xor}, and \texttt{xnor} ports. \item After v0.9.0: voltage and current directions/signs (plus and minus signs in case of \texttt{american voltages} and arrows in case of \texttt{european voltages}) have been rationalized with a couple of new options (see details in section~\ref{curr-and-volt}). The default case is still the same as v0.8.3, to avoid potentially wrong circuits, but you would be better off with one of the new voltage directions (\texttt{EFvoltages} or \texttt{RPvoltages}) for newer circuits. \item Since v0.8.2: voltage and current label directions (\texttt{v<=} / \texttt{i<=}) do NOT change the orientation of the drawn source shape anymore. Use the \texttt{invert} option to rotate the shape of the source. Furthermore, from this version on, the current label (\texttt{i=}) at current sources can be used independent of the regular label (\texttt{l=}). - \item Since v0.7: The label behavior at mirrored bipoles has changed, this fixes the voltage drawing, but perhaps you have to adjust your label positions. + \item Since v0.7: The label behavior at mirrored bipoles has changed, this fixes the voltage drawing, but perhaps you will have to adjust your label positions. \item Since v0.5.1: The parts \texttt{pfet}, \texttt{pigfete}, \texttt{pigfetebulk}, and \texttt{pigfetd} are now mirrored by default. Please adjust your yscale-option to correct this. \item Since v0.5: New voltage counting direction, there exists an option to use the old behavior. \end{itemize} @@ -300,8 +300,8 @@ If you have older projects that show compatibility problems, you have two option \end{lstlisting} which is an inferior solution because it can fool any package you use that depend on \texttt{circuitikz}. - Both ways, you have to take care of the options that may have changed between versions (and sometime syles, if you use them). - \item if you are using \ConTeXt, only versions \texttt{0.8.3}, \texttt{0.9.3}, \texttt{0.9.6}, \texttt{1.0}, \texttt{1.1.2}, \texttt{1.2.7}, and \texttt{1.4.6} are packaged; if can use it with + Either way, you have to take care of the options that may have changed between versions (and sometime syles, if you use them). + \item if you are using \ConTeXt, only versions \texttt{0.8.3}, \texttt{0.9.3}, \texttt{0.9.6}, \texttt{1.0}, \texttt{1.1.2}, \texttt{1.2.7}, and \texttt{1.4.6} are packaged; you can use it with \begin{lstlisting}[numbers=none] \usemodule[circuitikz-0.8.3] \end{lstlisting} @@ -309,14 +309,14 @@ If you have older projects that show compatibility problems, you have two option \subsection{Feedback} -The easiest way to contact the authors is via the official Github repository: \url{https://github.com/circuitikz/circuitikz/issues}. For general help question, a lot of nice people is quite active on \url{https://tex.stackexchange.com/questions/tagged/circuitikz} --- be sure to read the help pages for the site and ask! +The easiest way to contact the authors is via the official Github repository: \url{https://github.com/circuitikz/circuitikz/issues}. For general help question, a lot of nice people are quite active on \url{https://tex.stackexchange.com/questions/tagged/circuitikz} --- be sure to read the help pages for the site and ask! \subsection{Package options} \label{sec:package-options} -Circuit people are very opinionated about their symbols. In order to meet the individual gusto you can set a bunch of package options. +Circuit people are very opinionated about their symbols. In order to satisfy the individual taste you can set a bunch of package options. -There are arguably way too much options in \Circuitikz, as you can see in the following list. Since version \texttt{1.0}, it is recommended to just use the basic ones --- voltage directions (you \textbf{should} specify one of them), \texttt{siunitx}, the global style (\texttt{american} or \texttt{european}) and use styles (see~\ref{sec:styling}) for the remaining options. +There are arguably way too many options in \Circuitikz, as you can see in the following list. Since version \texttt{1.0}, it is recommended to just use the basic ones --- voltage directions (you \textbf{should} specify one of them), \texttt{siunitx}, the global style (\texttt{american} or \texttt{european}) and use styles (see~\ref{sec:styling}) for the remaining options. The standard options are set by historical reason, and reflect the preferences of the author that introduced them. For example you get this: @@ -381,7 +381,7 @@ Feel free to load the package with your own cultural options: \item \texttt{nofetbodydiode}: do not draw the body diode of a FET; \item \texttt{fetsolderdot}: draw solderdot at bulk-source junction of some transistors; \item \texttt{nofetsolderdot}: do not draw solderdot at bulk-source junction of some transistors; - \item \texttt{emptypmoscircle}: the circle at the gate of a pmos transistor gets not filled; + \item \texttt{emptypmoscircle}: the circle at the gate of a pmos transistor does not get filled; \item \texttt{lazymos}: draws lazy nmos and pmos transistors. Chip designers with huge circuits prefer this notation; \item \texttt{legacytransistorstext}: the text of transistor nodes is typeset near the collector; \item \texttt{nolegacytransistorstext} or \texttt{centertransistorstext}: the text of transistor nodes is typeset near the center of the component; @@ -392,9 +392,9 @@ Feel free to load the package with your own cultural options: \item Voltage directions: until v0.8.3, there was an error in the coherence between american and european voltages styles (see section~\ref{curr-and-volt}) for the batteries. This has been fixed, but to guarantee backward compatibility and to avoid nasty surprises, the fix is available with new options: \begin{itemize} \item \texttt{oldvoltagedirection}: Use old way of voltage direction having a difference between european and american direction, with wrong default labelling for batteries; - \item \texttt{nooldvoltagedirection}: The standard from 0.5 onward, utilize the (German?) standard of voltage arrows in the direction of electric fields (without fixing batteries); - \item \texttt{RPvoltages} (meaning Rising Potential voltages): the arrow is in direction of rising potential, like in \texttt{oldvoltagedirection}, but batteries and current sources are fixed to follow the passive/active standard; - \item \texttt{EFvoltages} (meaning Electric Field voltages): the arrow is in direction of the electric field, like in \texttt{nooldvoltagedirection}, but batteries are fixed; + \item \texttt{nooldvoltagedirection}: The standard from 0.5 onward, utilizes the (German?) standard of voltage arrows in the direction of electric fields (without fixing batteries); + \item \texttt{RPvoltages} (meaning Rising Potential voltages): the arrow is in the direction of rising potential, like in \texttt{oldvoltagedirection}, but batteries and current sources are fixed to follow the passive/active standard; + \item \texttt{EFvoltages} (meaning Electric Field voltages): the arrow is in the direction of the electric field, like in \texttt{nooldvoltagedirection}, but batteries are fixed; \end{itemize} If none of these option are given, the package will default to \texttt{nooldvoltagedirection}. The behavior is also selectable circuit by circuit with the \texttt{voltage dir} style. \item \texttt{betterproportions}\footnote{May change in the future!}: nicer proportions of transistors in comparision to resistors; @@ -437,7 +437,7 @@ somewhere in your document preamble. It will load automatically the needed packa Let's say we want to prepare a circuit to teach how a current shunt works; the idea is to draw a current generator, a couple of resistors in parallel, and the indication of currents and voltages for the discussion. A circuit in \Circuitikz{} is drawn into a \texttt{circuitikz} environment (which is really an alias for \texttt{tikzpicture}). In this first example we will use absolute coordinates. -The electrical components can be divided in two main categories: the one that are bipoles and are placed along a path (also known as \texttt{to}-style component, for their usage), and components that are nodes and can have any number of poles or connections. +The electrical components can be divided in two main categories: the ones that are bipoles and are placed along a path (also known as \texttt{to}-style component, for their usage), and components that are nodes and can have any number of poles or connections. Let's start with the first type of component, and build a basic mesh: @@ -448,7 +448,7 @@ Let's start with the first type of component, and build a basic mesh: \end{circuitikz} \end{LTXexample} -The symbol for the current source can surprise somebody; this is actually the european-style symbol, and the type of symbol chosen reflects the default options of the package (see section~\ref{sec:package-options}). Let's change the style for now (the author of the tutorial, Romano, is European --- but he has always used American-style circuits, so\dots); and while we're at it, let's add the other branch and some labels. +The symbol for the current source might surprise some; this is actually the european-style symbol, and the type of symbol chosen reflects the default options of the package (see section~\ref{sec:package-options}). Let's change the style for now (the author of the tutorial, Romano, is European --- but he has always used American-style circuits, so\dots); and while we're at it, let's add the other branch and some labels. \begin{LTXexample}[varwidth=true] \begin{circuitikz}[american] @@ -459,7 +459,7 @@ The symbol for the current source can surprise somebody; this is actually the eu \end{circuitikz} \end{LTXexample} -You can use a single path or multiple paths when drawing your circuit, it's just a question of style (but be aware that closing paths perfectly could be non-trivial, see section~\ref{sec:line-joins}), and you can use standard \TikZ\ lines (\verb|--|, \verb+|-+ or similar) for the wires. Nonetheless, sometime using the \Circuitikz{} specific \texttt{short} component for the wires can be useful, because then we can add labels and poles at them, like for example in the following circuit, where we add a current (with the key \texttt{i=...}, see section~\ref{sec:currents}) and a connection dot (with the special shortcut \texttt{-*} which adds a \texttt{circ} node at the end of the connection, see sections~\ref{sec:terminals} and~\ref{sec:bipole-nodes}). +You can use a single path or multiple paths when drawing your circuit, it's just a question of style (but be aware that closing paths perfectly could be non-trivial, see section~\ref{sec:line-joins}), and you can use standard \TikZ\ lines (\verb|--|, \verb+|-+ or similar) for the wires. Nonetheless, sometime using the \Circuitikz{} specific \texttt{short} component for the wires can be useful, because then we can add labels and poles to them, as for example in the following circuit, where we add a current (with the key \texttt{i=...}, see section~\ref{sec:currents}) and a connection dot (with the special shortcut \texttt{-*} which adds a \texttt{circ} node at the end of the connection, see sections~\ref{sec:terminals} and~\ref{sec:bipole-nodes}). \begin{LTXexample}[varwidth=true] \begin{circuitikz}[american] @@ -499,7 +499,7 @@ Finally, we would like to add voltages indication for carrying out the current f \end{circuitikz} \end{LTXexample} -\emph{Et voilá!}. Remember that this is still \LaTeX, which means that you have done a description of your circuit, which is, in a lot of way, independent of the visualization of it. If you ever have to adapt the circuit to, say, a journal that force European style and flows instead of currents, you just change a couple of things and you have what seems a completely different diagram: +\emph{Et voilá!}. Remember that this is still \LaTeX, which means that you have done a description of your circuit, which is, in a lot of way, independent of the visualization of it. If you ever have to adapt the circuit to, say, a journal that forces European style and flows instead of currents, you just change a couple of things and you have what seems a completely different diagram: \begin{LTXexample}[varwidth=true] \begin{circuitikz}[european, voltage shift=0.5] @@ -524,7 +524,7 @@ And finally, this is still \TikZ, so that you can freely mix other graphics elem \draw (2,3) -- (4,3) to[R=$R_2$, f>_=$i_2$] (4,0) to[short, -*] (2,0); - \draw[red, thick] (1.5,2.5) rectangle (4.5,3.5) + \draw[red, thick] (0.6,2.1) rectangle (4.2,3.8) node[pos=0.5, above]{KCL}; \end{circuitikz} \end{LTXexample} @@ -576,7 +576,7 @@ The second step is to position the op-amp. We can check the manual and see the c where we notice the type of the component (it is a node-type component, so we have to use \texttt{node} to position it) and the available ``anchors'': points we can use to position the shape or to connect to. Not all the anchors are \emph{explicitly} printed in the description box; you should read further in the manual and you'll see a ``\emph{component} anchors'' (\ref{sec:amplifiers-anchors}) section with the relevant information. -Anyway, the op-amp must be connected with the \texttt{+} anchor to our input wire, so we say \texttt{anchor=+} in the option lists; this shifts the whole element so that the named anchor will lie at the current position of the path. Moreover, normally the shape has the inverting input on the bottom side, and we want it the other way around, so we use also \texttt{noinv input up} in the keys defining the node. We could also have flipped the shape with \texttt{yscale=-1}, but in this case we should have considered the effects on anchors and on the text; see section~\ref{sec:mirroring-and-flipping}. +Anyway, the op-amp must be connected with the \texttt{+} anchor to our input wire, so we say \texttt{anchor=+} in the option lists; this shifts the whole element so that the named anchor will lie at the current position of the path. Moreover, normally the shape has the inverting input on the bottom side, and we want it the other way around, so we use also \texttt{noinv input up} in the keys defining the node. We could also have flipped the shape with \texttt{yscale=-1}, but in this case we would need to consider the effects on anchors and on the text; see section~\ref{sec:mirroring-and-flipping}. Now we can draw the resistors; let's start with $R_1$. We will draw it going down vertically from the \texttt{-} anchor --- we have named the node \texttt{OA} so that will be \texttt{OA.-}. We will need to connect the $R_2$ also, so we do the following: \begin{itemize} @@ -595,7 +595,7 @@ Now we can draw the resistors; let's start with $R_1$. We will draw it going dow \end{circuitikz} \end{LTXexample} -We only miss the feedback resistor now. We will use \emph{orthogonal coordinates}, writing: +We are only missing the feedback resistor now. We will use \emph{orthogonal coordinates}, writing: \begin{lstlisting}[numbers=none] \draw (FB) to[R=$R_2$] (FB -| OA.out) -- (OA.out) \end{lstlisting} @@ -604,7 +604,7 @@ The meaning is the following: \begin{itemize} \item move the current point to the coordinate named \texttt{FB}; \item put a resistor, with label $R_2$, from here \textbf{to}\dots - \item the coordinates which is on the horizontal of \texttt{FB} and on the vertical of \texttt{OA.out}: the \texttt{-|} coordinate operation is quite mnemonic; + \item the coordinates, which are at the intersection of a horizontal line through \texttt{FB} and a vertical line through \texttt{OA.out}: the \texttt{-|} coordinate operation is quite mnemonic; \item then continue drawing to \texttt{OA.out}. \end{itemize} @@ -644,7 +644,7 @@ The \verb|\ctikzset| command choosing the style is better placed in the preamble \subsubsection{Reusing the circuit: the easy way} \begingroup % to keep changes local -The easiest way to reuse the circuit is to put it in a macro. This is a very flexible way of doing it; the only drawback is that the only easy way to position it is using the first coordinate: you will not be able to move the component using ``anchors''; that is more complex and will need the use of subcircuits (but you will loose parameters\dots see section~\ref{sec:subcircuits}). +The easiest way to reuse the circuit is to put it in a macro. This is a very flexible way of doing it; the only drawback is that the only easy way to position it is using the first coordinate: you will not be able to move the component using ``anchors''; that is more complex and will need the use of subcircuits (but you will lose parameters\dots see section~\ref{sec:subcircuits}). Defining a macro for our amplifier could be as easy as this: @@ -695,10 +695,10 @@ And we can use it like in the following: The idea is to draw a two-stage amplifier for a lesson, or exercise, on the different qualities of BJT and MOSFET transistors. -Please Notice that this section uses the ``new'' position for transistors labels, enabled since version \texttt{0.9.7}. You should refer to older manuals to see how to do the same with older versions; basically the transistor's names where put with an additional \verb|node{}| command. +Please notice that this section uses the ``new'' position for transistor labels, enabled since version \texttt{0.9.7}. You should refer to older manuals to see how to do the same with older versions; basically the transistor's names were output using an additional \verb|node{}| command. Also notice that this is a more ``personal'' tutorial, showing a way to draw circuits that is, in the author's opinion, highly reusable and easy to do. -The idea is using relative coordinates and named nodes as much as possible, so that changes in the circuit are easily done by changing just a few numbers that select relative positions and using symmetries. Crucially, this kind of spproach make each block reusable in other diagrams bu just changing one coordinate. +The idea is to use relative coordinates and named nodes as much as possible, so that changes in the circuit are easily done by changing just a few numbers that select relative positions and by using symmetries. Crucially, this kind of approach makes each block reusable in other diagrams by just changing one coordinate. First of all, let's define a handy function to show the position of nodes: @@ -717,7 +717,7 @@ First of all, let's define a handy function to show the position of nodes: \let\coord=\showcoord \end{lstlisting} -The idea is that you can use \verb|\coord()| instead of \verb|coordinate()| in paths, and that will draw sort of \emph{markers} showing them. For example: +The idea is that you can use \verb|\coord()| instead of \verb|coordinate()| in paths, and that will draw small red \emph{markers} showing them. For example: \begin{LTXexample}[varwidth=true] \begin{circuitikz}[american,] @@ -745,14 +745,14 @@ So let's start with the first stage transistor; given that my preferred way of d I had to do draw an invisible line to take into account the text for Q1 --- the text is not taken into account in calculating the bounding box. This is because the ``geographical'' anchors (\texttt{north}, \texttt{north west}, \dots) are defined for the symbol only. In a complex circuit, this is rarely a problem. -Another thing I like to modify with respect to the standard is the position of the arrows in transistors, which are normally in the middle the symbol. Using the following setting (see section~\ref{sec:styling-transistors}) will move the arrows to the start or end of the corresponding pin. +Another thing I like to modify with respect to the standard is the position of the arrows in transistors, which are normally in the middle of the symbol. Using the following setting (see section~\ref{sec:styling-transistors}) will move the arrows to the start or end of the corresponding pin. \ctikzset{transistors/arrow pos=end} \begin{lstlisting} \ctikzset{transistors/arrow pos=end} \end{lstlisting} -The tricky thing about \verb|\killdepth{}| macro is finicky details. Without the \verb|\killdepth| macro, the labels of different transistor will be adjusted so that the vertical center of the box is at the \texttt{center} anchor, and as an effect, labels with descenders (like Q) will have a different baseline than labels without. You can see this here (it's really subtle): +The tricky thing about \verb|\killdepth{}| macro is the finicky details. Without the \verb|\killdepth| macro, the labels of different transistors will be adjusted so that the vertical center of the box is at the \texttt{center} anchor, and as an effect, labels with descenders (like Q) will have a different baseline than labels without. You can see this here (it's really subtle): \begin{LTXexample}[varwidth=true] \begin{circuitikz}[american,] @@ -783,7 +783,7 @@ We will start connecting the first transistor with the power supply with a coupl \end{circuitikz} \end{LTXexample} -After that, let's add the input part. I will use a named node here, to refer to it to add the input source. Notice how the ground node is positioned: the coordinate \texttt{(in |- GND)} is the point with the horizontal coordinate of \texttt{(in)} and the vertical one of \texttt{(GND)}, lining it up with the ground of the capacitor $C_1$ (you can think it as ``the point on the vertical of \texttt{in} and the horizontal of \texttt{GND}''). +After that, let's add the input part. I will use a named node here, referring to it to add the input source. Notice how the ground node is positioned: the coordinate \texttt{(in |- GND)} is the point with the horizontal coordinate of \texttt{(in)} and the vertical one of \texttt{(GND)}, lining it up with the ground of the capacitor $C_1$ (you can think it as ``the point aligned verticallly with \texttt{in} and horizontally with \texttt{GND}''). \begin{LTXexample}[varwidth=true] \begin{circuitikz}[american, scale=0.7, transform shape] @@ -2341,6 +2341,8 @@ The package options \texttt{fulldiode}, \texttt{strokediode}, and \texttt{emptyd \circuitdescbip*[emptyvarcap]{empty varcap}{Empty varcap}{VCo} \circuitdescbip*[emptytvsdiode]{empty TVS diode}{Empty TVS diode, transorb\footnotemark}{tvsDo} \footnotetext{Transobs were suggested by \href{Anisio Braga}{https://tex.stackexchange.com/q/642219/38080}} + \circuitdescbip*[emptyshdiode]{empty Shockley diode}{Empty Shockley diode\footnotemark}{shDo} + \footnotetext{Shockley diodes were suggested by \href{@Dauph}{https://tex.stackexchange.com/q/646039/38080}} \circuitdescbip*[emptybidirectionaldiode]{empty bidirectionaldiode}{Empty bidirectionaldiode}{biDo} \circuitdescbip[fulldiode] {full diode}{Full diode}{D*} \circuitdescbip[fullsdiode]{full Schottky diode}{Full Schottky diode}{sD*} @@ -2352,6 +2354,7 @@ The package options \texttt{fulldiode}, \texttt{strokediode}, and \texttt{emptyd \circuitdescbip[fulllaserdiode]{full laser diode}{Full laser diode}{lasD*} \circuitdescbip[fullvarcap]{full varcap}{Full varcap}{VC*} \circuitdescbip[fulltvsdiode]{full TVS diode}{Full TVS diode, transorb}{tvsD*} + \circuitdescbip[fullshdiode]{full Shockley diode}{Full Shockley diode}{shD*} \circuitdescbip[fullbidirectionaldiode]{full bidirectionaldiode}{Full bidirectionaldiode}{biD*} \end{groupdesc} diff --git a/graphics/pgf/contrib/circuitikz/tex/circuitikz.sty b/graphics/pgf/contrib/circuitikz/tex/circuitikz.sty index cfd7d63e70..816eb2cef2 100644 --- a/graphics/pgf/contrib/circuitikz/tex/circuitikz.sty +++ b/graphics/pgf/contrib/circuitikz/tex/circuitikz.sty @@ -16,8 +16,8 @@ \providecommand\DeclareRelease[3]{} \providecommand\DeclareCurrentRelease[2]{} -\def\pgfcircversion{1.5.2} -\def\pgfcircversiondate{2022/05/08} +\def\pgfcircversion{1.5.3} +\def\pgfcircversiondate{2022/07/02} \DeclareRelease{0.4}{2012/12/20}{circuitikz-0.4-body.tex} \DeclareRelease{v0.4}{2012/12/20}{circuitikz-0.4-body.tex} diff --git a/graphics/pgf/contrib/circuitikz/tex/pgfcircbipoles.tex b/graphics/pgf/contrib/circuitikz/tex/pgfcircbipoles.tex index d09e907a8d..0908574829 100644 --- a/graphics/pgf/contrib/circuitikz/tex/pgfcircbipoles.tex +++ b/graphics/pgf/contrib/circuitikz/tex/pgfcircbipoles.tex @@ -3864,6 +3864,50 @@ \pgfusepath{draw} } +%% Black Shockley diode +\pgfcircdeclarebipolescaled{diodes} +{} +{\ctikzvalof{bipoles/diode/height}} +{fullshdiode} +{\ctikzvalof{bipoles/diode/height}} +{\ctikzvalof{bipoles/diode/width}} +{ + + \pgf@circ@setlinewidth{bipoles}{\pgfstartlinewidth} + \pgfscope + \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@down}} + \pgfpathlineto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up}} + \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{0pt}} + \pgfpathlineto{\pgfpoint{\pgf@circ@res@left}{0pt}} + \pgfpathclose + \pgf@circ@fill@strokecolor + \pgfusepath{draw,fill} + \endpgfscope + \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}} + \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@up}} + \pgfusepath{draw} +} +%% Empty generic diode +\pgfcircdeclarebipolescaled{diodes} +{} +{\ctikzvalof{bipoles/diode/height}} +{emptyshdiode} +{\ctikzvalof{bipoles/diode/height}} +{\ctikzvalof{bipoles/diode/width}} +{ + \pgf@circ@setlinewidth{bipoles}{\pgfstartlinewidth} + \pgfscope + \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@down}} + \pgfpathlineto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up}} + \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{0pt}} + \pgfpathlineto{\pgfpoint{\pgf@circ@res@left}{0pt}} + \pgfpathclose + \pgf@circ@draworfill + \endpgfscope + \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}} + \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@up}} + \pgfusepath{draw} +} %% Empty bidirectionaldiode \pgfcircdeclarebipolescaled{diodes} @@ -4238,6 +4282,8 @@ \pgfcirc@style@to@style{#1 varcap}{VC#2} \pgfcirc@activate@bipole{l}{#1tvsdiode}{#1tvsdiode}{#1 TVS diode} \pgfcirc@style@to@style{#1 TVS diode}{tvsD#2} + \pgfcirc@activate@bipole{l}{#1shdiode}{#1shdiode}{#1 Shockley diode} + \pgfcirc@style@to@style{#1 Shockley diode}{shD#2} \pgfcirc@activate@bipole{l}{#1bidirectionaldiode}{#1bidirectionaldiode}{#1 bidirectionaldiode} \pgfcirc@style@to@style{#1 bidirectionaldiode}{biD#2} \pgfcirc@activate@bipole{l}{#1thyristor}{#1thyristor}{#1 thyristor} @@ -4276,6 +4322,8 @@ \pgfcirc@style@to@style{#1 varcap}{VC#2} \pgfcirc@node@to@style{l}{emptytvsdiode}{#1 TVS diode}{\circuitikzbasekey/bipole/is strokedsymbol=true} \pgfcirc@style@to@style{#1 TVS diode}{tvsD#2} + \pgfcirc@node@to@style{l}{emptyshdiode}{#1 Shockley diode}{\circuitikzbasekey/bipole/is strokedsymbol=true} + \pgfcirc@style@to@style{#1 Shockley diode}{shD#2} \pgfcirc@node@to@style{l}{emptybidirectionaldiode}{#1 bidirectionaldiode}{\circuitikzbasekey/bipole/is strokedsymbol=true} \pgfcirc@style@to@style{#1 bidirectionaldiode}{biD#2} \pgfcirc@node@to@style{l}{emptythyristor}{#1 thyristor}{\circuitikzbasekey/bipole/is strokedsymbol=true} @@ -4314,6 +4362,8 @@ \pgfcirc@style@to@style{varcap}{VC} \pgfcirc@style@to@style{\pgfcircdiodestylemacro TVS diode}{TVS diode} \pgfcirc@style@to@style{TVS diode}{tvsD} +\pgfcirc@style@to@style{\pgfcircdiodestylemacro Shockley diode}{Shockley diode} +\pgfcirc@style@to@style{Shockley diode}{shD} \pgfcirc@style@to@style{\pgfcircdiodestylemacro bidirectionaldiode}{bidirectionaldiode} \pgfcirc@style@to@style{bidirectionaldiode}{biD} \pgfcirc@style@to@style{\pgfcircdiodestylemacro thyristor}{thyristor} diff --git a/graphics/pgf/contrib/circuitikz/tex/t-circuitikz.tex b/graphics/pgf/contrib/circuitikz/tex/t-circuitikz.tex index 7cf1d37aa0..a49ce37f84 100644 --- a/graphics/pgf/contrib/circuitikz/tex/t-circuitikz.tex +++ b/graphics/pgf/contrib/circuitikz/tex/t-circuitikz.tex @@ -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.2} -\def\pgfcircversiondate{2022/05/08} +\def\pgfcircversion{1.5.3} +\def\pgfcircversiondate{2022/07/02} \writestatus{loading}{\pgfcircversiondate{} The CircuiTikz circuit drawing package version \pgfcircversion} \usemodule[tikz] -- cgit v1.2.3