diff options
Diffstat (limited to 'Master/texmf-dist/doc/generic/pgf/text-en/pgfmanual-en-library-circuits.tex')
-rw-r--r-- | Master/texmf-dist/doc/generic/pgf/text-en/pgfmanual-en-library-circuits.tex | 2159 |
1 files changed, 1093 insertions, 1066 deletions
diff --git a/Master/texmf-dist/doc/generic/pgf/text-en/pgfmanual-en-library-circuits.tex b/Master/texmf-dist/doc/generic/pgf/text-en/pgfmanual-en-library-circuits.tex index 6290ee705d0..66bbd1e3233 100644 --- a/Master/texmf-dist/doc/generic/pgf/text-en/pgfmanual-en-library-circuits.tex +++ b/Master/texmf-dist/doc/generic/pgf/text-en/pgfmanual-en-library-circuits.tex @@ -7,20 +7,22 @@ % % See the file doc/generic/pgf/licenses/LICENSE for more details. + \section{Circuit Libraries} \label{section-library-circuits} \emph{Written and documented by Till Tantau, and Mark Wibrow. Inspired by the work of Massimo Redaelli.} + \subsection{Introduction} -The circuit libraries can be used to draw different kinds of -electrical or logical circuits. There is not a single library for -this, but a whole hierarchy of libraries that work in concert. The -main design goal was to create a balance between ease-of-use and -ease-of-extending, while creating high-quality graphical -representations of circuits. +The circuit libraries can be used to draw different kinds of electrical or +logical circuits. There is not a single library for this, but a whole hierarchy +of libraries that work in concert. The main design goal was to create a balance +between ease-of-use and ease-of-extending, while creating high-quality +graphical representations of circuits. + \subsubsection{A First Example} @@ -70,12 +72,11 @@ representations of circuits. \end{tikzpicture} \end{codeexample} -An important feature of the circuit library is that the appearance of -a circuit can be configured in general ways and that the labels are -placed automatically by default. Here is the graphic once more, -generated from \emph{exactly the same source code}, with only -the options of the |{tikzpicture}| environment replaced by -|[rotate=-90,circuit ee IEC,x=3.25cm,y=2.25cm]|: +An important feature of the circuit library is that the appearance of a circuit +can be configured in general ways and that the labels are placed automatically +by default. Here is the graphic once more, generated from \emph{exactly the +same source code}, with only the options of the |{tikzpicture}| environment +replaced by |[rotate=-90,circuit ee IEC,x=3.25cm,y=2.25cm]|: \begin{tikzpicture}[rotate=-90,circuit ee IEC,x=3cm,y=2.25cm] % Let us start with some contacts: @@ -116,90 +117,92 @@ the options of the |{tikzpicture}| environment replaced by \subsubsection{Symbols} -A circuit typically consists of numerous electronic elements like -logical gates or resistors or diodes that are connected by wires. In -\pgfname/\tikzname, we use nodes for the -electronic elements and normal lines for the wires. \tikzname\ offers -a large number of different ways of positioning and connecting nodes -in general, all of which can be used here. Additionally, the -|circuits| library defines an additional useful |to|-path that is -particularly useful for elements like a resistor on a line. +A circuit typically consists of numerous electronic elements like logical gates +or resistors or diodes that are connected by wires. In \pgfname/\tikzname, we +use nodes for the electronic elements and normal lines for the wires. +\tikzname\ offers a large number of different ways of positioning and +connecting nodes in general, all of which can be used here. Additionally, the +|circuits| library defines an additional useful |to|-path that is particularly +useful for elements like a resistor on a line. There are many different names that are used to refer to electrical -``elements,'' so a bit of terminology standardization is useful: We -will call such elements \emph{symbols}. A \emph{symbol shape} is a -\pgfname\ shape declared using the |\pgfdeclareshape| command. A -\emph{symbol node} is a node whose shape is a symbol shape. +``elements'', so a bit of terminology standardization is useful: We will call +such elements \emph{symbols}. A \emph{symbol shape} is a \pgfname\ shape +declared using the |\pgfdeclareshape| command. A \emph{symbol node} is a node +whose shape is a symbol shape. \subsubsection{Symbol Graphics} -Symbols can be created by -|\node[shape=some symbol shape]|. However, in order to represent some -symbols correctly, just using standard \pgfname\ shapes is not -sufficient. For instance, most symbols have a visually appealing -``default size,'' but the size of a symbol shape depends only on the -current values of parameters like |minimum height| or |inner xsep|. +Symbols can be created by |\node[shape=some symbol shape]|. However, in order +to represent some symbols correctly, just using standard \pgfname\ shapes is +not sufficient. For instance, most symbols have a visually appealing ``default +size'', but the size of a symbol shape depends only on the current values of +parameters like |minimum height| or |inner xsep|. For these reasons, the circuit libraries introduce the concept of a -\emph{symbol graphic}. This is a style that causes a |\node| to -not only have the correct shape, but also the correct size and the -correct path usage. More generally, this style may set up things in any -way so that the ``symbol looks correct''. When you write, for -instance, |\node[diode]|, then the style called |diode graphic| is -used, which in turn is set to something like +\emph{symbol graphic}. This is a style that causes a |\node| to not only have +the correct shape, but also the correct size and the correct path usage. More +generally, this style may set up things in any way so that the ``symbol looks +correct''. When you write, for instance, |\node[diode]|, then the style called +|diode graphic| is used, which in turn is set to something like |shape=diode IEC,draw,minimum height=...|. Here is an overview of the different kinds of circuit libraries: - +% \begin{itemize} -\item The \tikzname-library |circuits| defines general keys for - creating circuits. Mostly, these keys are useful for defining more - specialized libraries. - - You normally do not use this library directly since it does not - define any symbol graphics. -\item The \tikzname-library |circuits.logic| defines keys for creating - logical gates like and-gates or xor-gates. However, this library - also does not actually define any symbol graphics; this is done by - two sublibraries: - \begin{itemize} - \item The library |circuits.logic.US| defines symbol graphics that - cause the logical gates to be rendered in the ``US-style.'' It - includes all of the above libraries and you can use this library - directly. - \item The library |circuits.logic.IEC| also defines symbol graphics - for logical gates, but it uses rectangular gates rather that the - round US-gates. This library can coexist peacefully with the above - library, you can change which symbol graphics are used ``on the - fly.'' - \end{itemize} -\item The \tikzname-library |cirucits.ee| defines keys for symbols - from electrical engineering like resistors or capacitors. Again, - sublibraries define the actual symbol graphics. - \begin{itemize} - \item The library |circuits.ee.IEC| defines symbol shapes that - follow the IEC norm. - \end{itemize} -\item The \pgfname-libraries |shapes.gates.*| define (circuit) symbol - shapes. However, you normally do not use these shapes directly, - rather you use a style that uses an appropriate symbol graphic, - which in turn uses one of these shapes. + \item The \tikzname-library |circuits| defines general keys for creating + circuits. Mostly, these keys are useful for defining more specialized + libraries. + + You normally do not use this library directly since it does not define + any symbol graphics. + \item The \tikzname-library |circuits.logic| defines keys for creating + logical gates like and-gates or xor-gates. However, this library also + does not actually define any symbol graphics; this is done by two + sublibraries: + % + \begin{itemize} + \item The library |circuits.logic.US| defines symbol graphics that + cause the logical gates to be rendered in the ``US-style''. It + includes all of the above libraries and you can use this + library directly. + \item The library |circuits.logic.IEC| also defines symbol graphics + for logical gates, but it uses rectangular gates rather that + the round US-gates. This library can coexist peacefully with + the above library, you can change which symbol graphics are + used ``on the fly''. + \end{itemize} + \item The \tikzname-library |cirucits.ee| defines keys for symbols from + electrical engineering like resistors or capacitors. Again, + sublibraries define the actual symbol graphics. + % + \begin{itemize} + \item The library |circuits.ee.IEC| defines symbol shapes that + follow the IEC norm. + \end{itemize} + \item The \pgfname-libraries |shapes.gates.*| define (circuit) symbol + shapes. However, you normally do not use these shapes directly, rather + you use a style that uses an appropriate symbol graphic, which in turn + uses one of these shapes. \end{itemize} -Let us have a look at a simple example. Suppose we wish to create a -logical circuit. Then we first have to decide which symbol graphics we -would like to use. Suppose we wish to use the US-style, then we would -include the library |circuits.logic.US|. If you wish to use IEC-style -symbols, use |circuits.logic.IEC|. If you cannot decide, include both: +Let us have a look at a simple example. Suppose we wish to create a logical +circuit. Then we first have to decide which symbol graphics we would like to +use. Suppose we wish to use the US-style, then we would include the library +|circuits.logic.US|. If you wish to use IEC-style symbols, use +|circuits.logic.IEC|. If you cannot decide, include both: +% \begin{codeexample}[code only] \usetikzlibrary{circuits.logic.US,circuits.logic.IEC} \end{codeexample} -To create a picture that contains a US-style circuit you can now use -the option |circuit logic US|. This will set up keys like |and gate| to -create use an appropriate symbol graphic for rendering an |and gate|. Using the |circuit logic IEC| instead will set up |and gate| to -use another symbol graphic. - +% +To create a picture that contains a US-style circuit you can now use the option +|circuit logic US|. This will set up keys like |and gate| to create use an +appropriate symbol graphic for rendering an |and gate|. Using the +|circuit logic IEC| instead will set up |and gate| to use another symbol +graphic. +% \begin{codeexample}[] \begin{tikzpicture}[circuit logic US] \matrix[column sep=7mm] @@ -220,7 +223,6 @@ use another symbol graphic. \end{tikzpicture} \end{codeexample} - \begin{codeexample}[] \begin{tikzpicture}[circuit logic IEC] \matrix[column sep=7mm] @@ -242,19 +244,17 @@ use another symbol graphic. \end{codeexample} - \subsubsection{Annotations} -An \emph{annotation} is a little extra drawing that can be added to a -symbol. For instance, when you add two little parallel arrows pointing -away from some electrical element, this usually means that the element -is light emitting. - -Instead of having one symbol for ``diode'' and another for ``light -emitting diode,'' there is just one |diode| symbol, but you can add -the |light emitting| annotation to it. This is done by passing the -annotation as a parameter to the symbol as in the following example: +An \emph{annotation} is a little extra drawing that can be added to a symbol. +For instance, when you add two little parallel arrows pointing away from some +electrical element, this usually means that the element is light emitting. +Instead of having one symbol for ``diode'' and another for ``light emitting +diode'', there is just one |diode| symbol, but you can add the |light emitting| +annotation to it. This is done by passing the annotation as a parameter to the +symbol as in the following example: +% \begin{codeexample}[] \tikz [circuit ee IEC] \draw (0,0) to [diode={light emitting}] (3,0) @@ -262,37 +262,34 @@ annotation as a parameter to the symbol as in the following example: \end{codeexample} - \subsection{The Base Circuit Library} \begin{tikzlibrary}{circuits} - This library is a base library that is included by other circuit - libraries. You do not include it directly, but you will typically - use some of the general keys, described below. + This library is a base library that is included by other circuit libraries. + You do not include it directly, but you will typically use some of the + general keys, described below. \end{tikzlibrary} \begin{key}{/tikz/circuits} - This key should be passed as an option to a picture or a scope that - contains a circuit. It will do some internal setups. This key is - normally called by more specialized keys like |circuit ee IEC|. + This key should be passed as an option to a picture or a scope that contains + a circuit. It will do some internal setups. This key is normally called by + more specialized keys like |circuit ee IEC|. \end{key} - - \subsubsection{Symbol Size} \begin{key}{/tikz/circuit symbol unit=\meta{dimension} (initially 7pt)} - This dimension is a ``unit'' for the size of symbols. The libraries - generally define the sizes of symbols relative to this - dimension. For instance, the longer side of an inductor is, by - default, in the IEC library equal to five times this - \meta{dimension}. When you change this \meta{dimension}, the size of - all symbols will automatically change accordingly. - - Note, that it is still possible to overwrite the size of any - particular symbol. These settings apply only to the default sizes. + This dimension is a ``unit'' for the size of symbols. The libraries + generally define the sizes of symbols relative to this dimension. For + instance, the longer side of an inductor is, by default, in the IEC library + equal to five times this \meta{dimension}. When you change this + \meta{dimension}, the size of all symbols will automatically change + accordingly. + Note, that it is still possible to overwrite the size of any particular + symbol. These settings apply only to the default sizes. + % \begin{codeexample}[] \begin{tikzpicture}[circuit ee IEC] \draw (0,1) to [resistor] (3.5,1); @@ -300,32 +297,35 @@ annotation as a parameter to the symbol as in the following example: (0,0) to [resistor] (3.5,0); \end{tikzpicture} \end{codeexample} + % \end{key} \begin{stylekey}{/tikz/huge circuit symbols} - This style sets the default circuit symbol unit to |10pt|. + This style sets the default circuit symbol unit to |10pt|. \end{stylekey} +% \begin{stylekey}{/tikz/large circuit symbols} - This style sets the default circuit symbol unit to |8pt|. + This style sets the default circuit symbol unit to |8pt|. \end{stylekey} +% \begin{stylekey}{/tikz/medium circuit symbols} - This style sets the default circuit symbol unit to |7pt|. + This style sets the default circuit symbol unit to |7pt|. \end{stylekey} +% \begin{stylekey}{/tikz/small circuit symbols} - This style sets the default circuit symbol unit to |6pt|. + This style sets the default circuit symbol unit to |6pt|. \end{stylekey} +% \begin{stylekey}{/tikz/tiny circuit symbols} - This style sets the default circuit symbol unit to |5pt|. + This style sets the default circuit symbol unit to |5pt|. \end{stylekey} -\begin{key}{/tikz/circuit symbol size=|width| \meta{width} |height| - \meta{height}} - This key sets |minimum height| to \meta{height} times the current - value of the circuit symbol unit and the |minimum width| to - \meta{width} times this value. Thus, this option can be used with a - node command to set the size of the node as a multiple of the - circuit symbol unit. - +\begin{key}{/tikz/circuit symbol size=|width| \meta{width} |height| \meta{height}} + This key sets |minimum height| to \meta{height} times the current value of + the circuit symbol unit and the |minimum width| to \meta{width} times this + value. Thus, this option can be used with a node command to set the size of + the node as a multiple of the circuit symbol unit. + % \begin{codeexample}[] \begin{tikzpicture}[circuit ee IEC] \draw (0,1) to [resistor] (2,1) to[inductor] (4,1); @@ -336,41 +336,43 @@ annotation as a parameter to the symbol as in the following example: \end{scope} \end{tikzpicture} \end{codeexample} + % \end{key} - \subsubsection{Declaring New Symbols} - \begin{key}{/tikz/circuit declare symbol=\meta{name}} - This key is used to declare a symbol. It does not cause this symbol - to be shown nor does it set a graphic to be used for the symbol, it - simply ``prepares'' several keys that can later be used to draw a - symbol and to configure it. - - In detail, the first key that is defined is just called - \meta{name}. This key should be given as an option to a |node| or on - a |to| path, as explained below. The key will take options, which - can be used to influence the way the symbol graphic is rendered. - - Let us have a look at an example. Suppose we want to define a symbol - called |foo|, which just looks like a simple rectangle. We could - then say + This key is used to declare a symbol. It does not cause this symbol to be + shown nor does it set a graphic to be used for the symbol, it simply + ``prepares'' several keys that can later be used to draw a symbol and to + configure it. + + In detail, the first key that is defined is just called \meta{name}. This + key should be given as an option to a |node| or on a |to| path, as + explained below. The key will take options, which can be used to influence + the way the symbol graphic is rendered. + + Let us have a look at an example. Suppose we want to define a symbol called + |foo|, which just looks like a simple rectangle. We could then say + % \begin{codeexample}[code only] \tikzset{circuit declare symbol=foo} \end{codeexample} - The symbol could now be used like this: + % + The symbol could now be used like this: + % \begin{codeexample}[code only] \node [foo] at (1,1) {}; \node [foo={red}] at (2,1) {}; \end{codeexample} - However, in the above example we would not actually see anything - since we have not yet set up the graphic to be used by |foo|. For - this, we must use a key called |set foo graphic| or, generally, - |set| \meta{name} |graphic|. This key gets graphic options as parameter - that will be set when a symbol |foo| should be shown: + However, in the above example we would not actually see anything since we + have not yet set up the graphic to be used by |foo|. For this, we must use + a key called |set foo graphic| or, generally, |set| \meta{name} |graphic|. + This key gets graphic options as parameter that will be set when a symbol + |foo| should be shown: + % \begin{codeexample}[] \begin{tikzpicture} [circuit declare symbol=foo, @@ -381,302 +383,317 @@ annotation as a parameter to the symbol as in the following example: \end{tikzpicture} \end{codeexample} - In detail, when you use the key \meta{name}=\meta{options} with a - node, the following happens: - \begin{enumerate} - \item The |inner sep| is set to |0.5pt|. - \item The following style is executed: - \begin{stylekey}{/tikz/every circuit symbol} - Use this style to set up things in general. - \end{stylekey} - \item The graphic options that have been set using - |set| \meta{name} |graphic| are set. - \item The style |every |\meta{name} is executed. You can use it to - configure the symbol further. - \item The \meta{options} are executed. + In detail, when you use the key \meta{name}=\meta{options} with a node, the + following happens: + % + \begin{enumerate} + \item The |inner sep| is set to |0.5pt|. + \item The following style is executed: + % + \begin{stylekey}{/tikz/every circuit symbol} + Use this style to set up things in general. + \end{stylekey} + \item The graphic options that have been set using |set| \meta{name} + |graphic| are set. + \item The style |every |\meta{name} is executed. You can use it to + configure the symbol further. + \item The \meta{options} are executed. \end{enumerate} - The key \meta{name} will have a different effect when it is used on - a |to| path command inside a |circuit| environment (the |circuit| - environment sets up |to| paths in such a way that the use of a key - declared using |circuit declare symbol| is automatically detected). - When \meta{name} is used on a |to| path, the above actions also - happen (setting the inner separation, using the symbol graphic, and - so on), but they are passed to the key |circuit handle symbol|, - which is explained next. + The key \meta{name} will have a different effect when it is used on a |to| + path command inside a |circuit| environment (the |circuit| environment sets + up |to| paths in such a way that the use of a key declared using + |circuit declare symbol| is automatically detected). When \meta{name} is + used on a |to| path, the above actions also happen (setting the inner + separation, using the symbol graphic, and so on), but they are passed to + the key |circuit handle symbol|, which is explained next. \end{key} - \begin{key}{/tikz/circuit handle symbol=\meta{options}} - This key is mostly used internally. Its purpose is to render a - symbol. The effect of this key differs, depending on whether it is - used as the optional argument of a |to| path command or elsewhere. - - If the key is not used as an argument of a |to| path command, the - \meta{options} are simply executed. - - The more interesting case happens when the key is given on a |to| - path command. In this case, several things happen: - \begin{enumerate} - \item The |to| path is locally changed and set to an internal - path (which you should not try to change) that consists mostly of - a single straight line. - \item The \meta{options} are tentatively executed with filtering - switched on. Everything is filtered out, except for the key |pos| - and also the styles |at start|, |very near start|, |near start|, - |midway|, |near end|, |very near end|, and |at end|. If none of - them is found, |midway| is used. - \item The filtered option is used to determine a position for the - symbol on the path. At the given position (with |pos=0| - representing the start and |pos=1| representing the end), a node - will be added to the path (in a manner to be described presently). - \item This node gets \meta{options} as its option list. - \item The node is added by virtue of a special |markings| - decoration. This means that a |mark| command is executed that - causes the node to be placed as a mark on the path. - \item The marking decoration will automatically subdivide the path - and cause a line to be drawn from the start of the path to the - node's border (at the position that lies on a line from the node's - center to the start of the path) and then from the node's border - (at a position on the other side of the node) to the end of the - path. - \item The marking decoration will also take care of the case that - multiple marks are present on a path, in this case the lines from - and to the borders of the nodes are only between consecutive - nodes. - \item The marking decoration will also rotate the coordinate system - in such a way that the $x$-axis points along the path. Thus, if - you use the |transform shape| option, the node will ``point - along'' the path. - \item In case a node is at |pos=0| or at |pos=1| some special code - will suppress the superfluous lines to the start or end of the - path. - \end{enumerate} - - The net effect of all of the above is that a node will be placed - ``on the path'' and the path will have a ``gap'' just large enough - to encompass the node. Another effect is that you can use this key - multiple times on a path to add several node to a path, provided - they do not overlap. + This key is mostly used internally. Its purpose is to render a symbol. The + effect of this key differs, depending on whether it is used as the optional + argument of a |to| path command or elsewhere. + + If the key is not used as an argument of a |to| path command, the + \meta{options} are simply executed. + + The more interesting case happens when the key is given on a |to| path + command. In this case, several things happen: + % + \begin{enumerate} + \item The |to| path is locally changed and set to an internal path + (which you should not try to change) that consists mostly of a + single straight line. + \item The \meta{options} are tentatively executed with filtering + switched on. Everything is filtered out, except for the key |pos| + and also the styles |at start|, |very near start|, |near start|, + |midway|, |near end|, |very near end|, and |at end|. If none of + them is found, |midway| is used. + \item The filtered option is used to determine a position for the + symbol on the path. At the given position (with |pos=0| + representing the start and |pos=1| representing the end), a node + will be added to the path (in a manner to be described presently). + \item This node gets \meta{options} as its option list. + \item The node is added by virtue of a special |markings| decoration. + This means that a |mark| command is executed that causes the node + to be placed as a mark on the path. + \item The marking decoration will automatically subdivide the path and + cause a line to be drawn from the start of the path to the node's + border (at the position that lies on a line from the node's center + to the start of the path) and then from the node's border (at a + position on the other side of the node) to the end of the path. + \item The marking decoration will also take care of the case that + multiple marks are present on a path, in this case the lines from + and to the borders of the nodes are only between consecutive nodes. + \item The marking decoration will also rotate the coordinate system in + such a way that the $x$-axis points along the path. Thus, if you + use the |transform shape| option, the node will ``point along'' the + path. + \item In case a node is at |pos=0| or at |pos=1| some special code will + suppress the superfluous lines to the start or end of the path. + \end{enumerate} + + The net effect of all of the above is that a node will be placed ``on the + path'' and the path will have a ``gap'' just large enough to encompass the + node. Another effect is that you can use this key multiple times on a path + to add several node to a path, provided they do not overlap. + % \begin{codeexample}[] \begin{tikzpicture}[circuit] \draw (0,0) to [circuit handle symbol={draw,shape=rectangle,near start}, circuit handle symbol={draw,shape=circle,near end}] (3,2); \end{tikzpicture} \end{codeexample} + % \begin{codeexample}[] \begin{tikzpicture}[transform shape,circuit] \draw (0,0) to [circuit handle symbol={draw,shape=rectangle,at start}, circuit handle symbol={draw,shape=circle,near end}] (3,2); \end{tikzpicture} \end{codeexample} + % \end{key} - \subsubsection{Pointing Symbols in the Right Direction} -Unlike normal nodes, which generally should not be rotated since this -will make their text hard to read, symbols often need to be -rotated. There are two ways of achieving such rotations: - +Unlike normal nodes, which generally should not be rotated since this will make +their text hard to read, symbols often need to be rotated. There are two ways +of achieving such rotations: +% \begin{enumerate} -\item When you place a symbol on a |to| path, the graphic symbol is - automatically rotated such that it ``points along the path.'' Here - is an examples that shows how the inductor shape (which looks, - unrotated, like this: \tikz[circuit ee IEC]\node[inductor]{};) is - automatically rotated around: + \item When you place a symbol on a |to| path, the graphic symbol is + automatically rotated such that it ``points along the path''. Here is + an examples that shows how the inductor shape (which looks, unrotated, + like this: \tikz[circuit ee IEC]\node[inductor]{};) is automatically + rotated around: + % \begin{codeexample}[] \tikz [circuit ee IEC] \draw (3,0) to[inductor] (1,0) to[inductor] (0,2); \end{codeexample} -\item Many shapes cannot be placed ``on'' a path in this way, namely - whenever there are more than two possible inputs. Also, you may wish - to place the nodes first, possibly using a matrix, and connect them - afterwards. In this case, you can simply add rotations like - |rotate=90| to the shapes to rotate them. The following four keys - make this slightly more convenient: - \begin{key}{/tikz/point up} - This is the same as |rotate=90|. + % + \item Many shapes cannot be placed ``on'' a path in this way, namely + whenever there are more than two possible inputs. Also, you may wish to + place the nodes first, possibly using a matrix, and connect them + afterwards. In this case, you can simply add rotations like |rotate=90| + to the shapes to rotate them. The following four keys make this + slightly more convenient: + % + \begin{key}{/tikz/point up} + This is the same as |rotate=90|. + % \begin{codeexample}[] \tikz [circuit ee IEC] \node [diode,point up] {}; \end{codeexample} - \end{key} - \begin{key}{/tikz/point down} - This is the same as |rotate=-90|. + \end{key} + % + \begin{key}{/tikz/point down} + This is the same as |rotate=-90|. + % \begin{codeexample}[] \tikz [circuit ee IEC] \node [diode,point down] {}; \end{codeexample} - \end{key} - \begin{key}{/tikz/point left} - This is the same as |rotate=-180|. + \end{key} + % + \begin{key}{/tikz/point left} + This is the same as |rotate=-180|. + % \begin{codeexample}[] \tikz [circuit ee IEC] \node [diode,point left] {}; \end{codeexample} - \end{key} - \begin{key}{/tikz/point right} - This key has no effect. + \end{key} + % + \begin{key}{/tikz/point right} + This key has no effect. + % \begin{codeexample}[] \tikz [circuit ee IEC] \node [diode,point right] {}; \end{codeexample} - \end{key} + \end{key} \end{enumerate} \subsubsection{Info Labels} -Info labels are used to add text to a circuit symbol. Unlike normal -nodes like a rectangle, circuit symbols typically do not have text -``on'' them, but the text is placed next to them (like the text -``$3\,\Omega$'' next to a resistor). +Info labels are used to add text to a circuit symbol. Unlike normal nodes like +a rectangle, circuit symbols typically do not have text ``on'' them, but the +text is placed next to them (like the text ``$3\,\Omega$'' next to a resistor). -\tikzname\ already provides the |label| option for this purpose. The -|info| option is built on top of this option, but it comes in some -predefined variants that are especially useful in conjunction with -circuits. +\tikzname\ already provides the |label| option for this purpose. The |info| +option is built on top of this option, but it comes in some predefined variants +that are especially useful in conjunction with circuits. \begin{key}{/tikz/info=\opt{|[|\meta{options}|]|\meta{angle}|:|}\meta{text}} - This key has nearly the same effect as the |label| key, only the - following style is used additionally automatically: - \begin{stylekey}{/tikz/every info} - Set this style to configure the styling of info labels. Since this - key is \emph{not} used with normal labels, it provides an easy way - of changing the way info labels look without changing other - labels. - \end{stylekey} - The \meta{options} and \meta{angle} are passed directly to the - |label| command. + This key has nearly the same effect as the |label| key, only the following + style is used additionally automatically: + % + \begin{stylekey}{/tikz/every info} + Set this style to configure the styling of info labels. Since this + key is \emph{not} used with normal labels, it provides an easy way + of changing the way info labels look without changing other + labels. + \end{stylekey} + % + The \meta{options} and \meta{angle} are passed directly to the |label| + command. + % \begin{codeexample}[] \begin{tikzpicture}[circuit ee IEC,every info/.style=red] \node [resistor,info=$3\Omega$] {}; \end{tikzpicture} \end{codeexample} - You will find a detailed discussion of the |label| option on - page~\pageref{label-option}. + You will find a detailed discussion of the |label| option on + page~\pageref{label-option}. - Hint: To place some text \emph{on} the main node, use |center| as - the \meta{angle}: + Hint: To place some text \emph{on} the main node, use |center| as the + \meta{angle}: + % \begin{codeexample}[] \begin{tikzpicture}[circuit ee IEC,every info/.style=red] \node [resistor,info=center:$3\Omega$] {}; \node [resistor,point up,info=center:$R_1$] at (2,0) {}; \end{tikzpicture} \end{codeexample} + % \end{key} \begin{key}{/tikz/info'=\opt{|[|\meta{options}|]|\meta{angle}|:|}\meta{text}} - This key works exactly like the |info| key, only in case the - \meta{angle} is missing, it defaults to |below| instead of the - current value of |label position|, which is usually |above|. This - means that when you use |info|, you get a label above the node, - while when you use the |info'| key you get a label below the - node. In case the node has been rotated, the positions of the info - nodes are rotated accordingly. + This key works exactly like the |info| key, only in case the \meta{angle} + is missing, it defaults to |below| instead of the current value of + |label position|, which is usually |above|. This means that when you use + |info|, you get a label above the node, while when you use the |info'| key + you get a label below the node. In case the node has been rotated, the + positions of the info nodes are rotated accordingly. + % \begin{codeexample}[] \begin{tikzpicture}[circuit ee IEC,every info/.style=red] \draw (0,0) to[resistor={info={$3\Omega$},info'={$R_1$}}] (3,0) to[resistor={info={$4\Omega$},info'={$R_2$}}] (3,2); \end{tikzpicture} \end{codeexample} + % \end{key} \begin{key}{/tikz/info sloped=\opt{|[|\meta{options}|]|\meta{angle}|:|}\meta{text}} - This key works like |info|, only the |transform shape| option is set - when the label is drawn, causing it to follow the sloping of the - main node. + This key works like |info|, only the |transform shape| option is set when + the label is drawn, causing it to follow the sloping of the main node. + % \begin{codeexample}[] \begin{tikzpicture}[circuit ee IEC,every info/.style=red] \draw (0,0) to[resistor={info sloped={$3\Omega$}}] (3,0) to[resistor={info sloped={$4\Omega$}}] (3,2); \end{tikzpicture} \end{codeexample} + % \end{key} \begin{key}{/tikz/info' sloped=} - This is a combination of |info'| and |info sloped|. + This is a combination of |info'| and |info sloped|. + % \begin{codeexample}[] \begin{tikzpicture}[circuit ee IEC,every info/.style=red] \draw (0,0) to[resistor={info' sloped={$3\Omega$}}] (3,0) to[resistor={info' sloped={$4\Omega$}}] (3,2); \end{tikzpicture} \end{codeexample} + % \end{key} \begin{key}{/tikz/circuit declare unit=\marg{name}\marg{unit}} - This key is used to declare keys that make it easy to attach - physical units to nodes. The idea is that instead of - |info=$3\Omega$| you can write |ohm=3| or instead of - |info'=$5\mathrm{S}$| you can write |siemens'=5|. - - In detail, four keys are defined, namely |/tikz/|\meta{name}, - |/tikz/|\meta{name}|'|, |/tikz/|\meta{name} |sloped|, and - |/tikz/|\meta{name}|'| |sloped|. The arguments of all of these keys - are of the form - \opt{|[|\meta{options}|]|\meta{angle}|:|}\meta{value} and it is - passed (slightly modified) to the corresponding key |info|, |info'|, - |info| |sloped|, or |info'| |sloped|. The ``slight modification'' is the - following: The text that is passed to the, say, |info| key is not - \meta{value}, but rather |$\mathrm{|\meta{value}\meta{unit}|}$| - - This means that after you said |circuit declare unit={ohm}{\Omega}|, - then |ohm=5k| will have the same effect as - |info={[every ohm]$\mathrm{5k\Omega}$}|. Here, |every ohm| is a - style that allows you to configure the appearance of this unit. - Since the |info| key is used internally, by changing the - |every info| style, you can change the appearance of all units - infos. + This key is used to declare keys that make it easy to attach physical units + to nodes. The idea is that instead of |info=$3\Omega$| you can write + |ohm=3| or instead of |info'=$5\mathrm{S}$| you can write |siemens'=5|. + + In detail, four keys are defined, namely |/tikz/|\meta{name}, + |/tikz/|\meta{name}|'|, |/tikz/|\meta{name} |sloped|, and + |/tikz/|\meta{name}|'| |sloped|. The arguments of all of these keys are of + the form \opt{|[|\meta{options}|]|\meta{angle}|:|}\meta{value} and it is + passed (slightly modified) to the corresponding key |info|, |info'|, |info| + |sloped|, or |info'| |sloped|. The ``slight modification'' is the + following: The text that is passed to the, say, |info| key is not + \meta{value}, but rather |$\mathrm{|\meta{value}\meta{unit}|}$| + + This means that after you said |circuit declare unit={ohm}{\Omega}|, then + |ohm=5k| will have the same effect as + |info={[every ohm]$\mathrm{5k\Omega}$}|. Here, |every ohm| is a style that + allows you to configure the appearance of this unit. Since the |info| key + is used internally, by changing the |every info| style, you can change the + appearance of all units infos. + % \begin{codeexample}[] \begin{tikzpicture}[circuit ee IEC,circuit declare unit={my ohm}{O}] \draw (0,0) to[resistor={my ohm' sloped=3}] (3,2); \end{tikzpicture} \end{codeexample} + % \end{key} \subsubsection{Declaring and Using Annotations} -Annotations are quite similar to info labels. The main difference is -that they generally cause something to be drawn by default rather than -some text to be added (although an annotation might also add some -text). +Annotations are quite similar to info labels. The main difference is that they +generally cause something to be drawn by default rather than some text to be +added (although an annotation might also add some text). Annotations can be declared using the following key: \begin{key}{/tikz/circuit declare annotation=\marg{name}\marg{distance}\marg{path}} - This key is used to declare an annotation named \meta{name}. Once - declared, it can be used as an argument of a symbol and will add the - drawing in \meta{path} to the symbol. In detail, the following - happens: - - \textbf{The Main Keys.} - Two keys called \meta{name} and \meta{name}|'| are - defined. The second causes the annotation to be ``mirrored and - placed on the other side'' of the symbol. Both of these keys may - also take further keys as parameter like |info| keys. - Whenever the \meta{name} key is used, a local scope is opened and in - this scope the following things are done: - \begin{enumerate} - \item The style |every| \meta{name} is executed. - \item The following style is executed and then |arrows=->|: - \begin{stylekey}{/tikz/annotation arrow} - This style should set the |>| key to some desirable arrow tip. - \end{stylekey} - \item The coordinate system is shifted such that the origin is at - the north anchor of the symbol. (For the \meta{name}|'| key the - coordinate system is flipped and shifted such that the origin is - at the south anchor of the symbol.) - \item The |label distance| is locally set to \meta{distance}. - \item The parameter options given to the \meta{name} key are - executed. - \item The \meta{path} is executed. - \end{enumerate} - - \textbf{Usage.} - What all of the above amounts to is best explained by an - example. Suppose we wish to create an annotation that looks like a - little circular arrow (like \tikz \draw [->] (0,0) arc - (-270:80:1ex);). We could then say: + This key is used to declare an annotation named \meta{name}. Once declared, + it can be used as an argument of a symbol and will add the drawing in + \meta{path} to the symbol. In detail, the following happens: + + + \textbf{The Main Keys.} + Two keys called \meta{name} and \meta{name}|'| are defined. The second + causes the annotation to be ``mirrored and placed on the other side'' of + the symbol. Both of these keys may also take further keys as parameter like + |info| keys. Whenever the \meta{name} key is used, a local scope is opened + and in this scope the following things are done: + % + \begin{enumerate} + \item The style |every| \meta{name} is executed. + \item The following style is executed and then |arrows=->|: + % + \begin{stylekey}{/tikz/annotation arrow} + This style should set the |>| key to some desirable arrow tip. + \end{stylekey} + \item The coordinate system is shifted such that the origin is at the + north anchor of the symbol. (For the \meta{name}|'| key the + coordinate system is flipped and shifted such that the origin is at + the south anchor of the symbol.) + \item The |label distance| is locally set to \meta{distance}. + \item The parameter options given to the \meta{name} key are executed. + \item The \meta{path} is executed. + \end{enumerate} + + + \textbf{Usage.} + What all of the above amounts to is best explained by an example. Suppose + we wish to create an annotation that looks like a little circular arrow + (like \tikz \draw [->] (0,0) arc (-270:80:1ex);). We could then say: + % \begin{codeexample}[code only] \tikzset{circuit declare annotation= {circular annotation} @@ -684,7 +701,9 @@ Annotations can be declared using the following key: {(0pt,8pt) arc (-270:80:3.5pt)} } \end{codeexample} - We can then use it like this: + % + We can then use it like this: + % \tikzset{circuit declare annotation= {circular annotation} {8pt} @@ -694,11 +713,12 @@ Annotations can be declared using the following key: \tikz[circuit ee IEC] \draw (0,0) to [resistor={circular annotation}] (3,0); \end{codeexample} - Well, not very impressive since we do not see anything. This is due to - the fact that the \meta{path} becomes part of a path that contains - the symbol node an nothing else. This path is not drawn or filled, - so we do not see anything. What we must do is to use an |edge| path - operation: + % + Well, not very impressive since we do not see anything. This is due to the + fact that the \meta{path} becomes part of a path that contains the symbol + node an nothing else. This path is not drawn or filled, so we do not see + anything. What we must do is to use an |edge| path operation: + % \begin{codeexample}[] \tikzset{circuit declare annotation={circular annotation}{9pt} {(0pt,8pt) edge[to path={arc(-270:80:3.5pt)}] ()} @@ -707,13 +727,14 @@ Annotations can be declared using the following key: \draw (0,0) to [resistor={circular annotation}] (3,0) to [capacitor={circular annotation'}] (3,2); \end{codeexample} - The \meta{distance} is important for the correct placement of - additional |info| labels. When an annotation is present, the info - labels may need to be moved further away from the symbol, but not - always. For this reason, an annotation defines an additional - \meta{distance} that is applied to all info labels given - as parameters to the annotation. Here is an example, that shows the - difference: + % + The \meta{distance} is important for the correct placement of additional + |info| labels. When an annotation is present, the info labels may need to + be moved further away from the symbol, but not always. For this reason, an + annotation defines an additional \meta{distance} that is applied to all + info labels given as parameters to the annotation. Here is an example, that + shows the difference: + % \tikzset{circuit declare annotation={circular annotation}{9pt} {(0pt,8pt) edge[to path={arc (-270:80:3.5pt)}] ()} } @@ -722,28 +743,28 @@ Annotations can be declared using the following key: \draw (0,0) to [resistor={circular annotation,ohm=5}] (2,0) to [resistor={circular annotation={ohm=5}}] (4,0); \end{codeexample} + % \end{key} \subsubsection{Theming Symbols} \label{section-theming-symbols} -For each symbol, a certain graphical representation is chosen to -actually show the symbol. You can modify this graphical representation -in several ways: +For each symbol, a certain graphical representation is chosen to actually show +the symbol. You can modify this graphical representation in several ways: +% \begin{itemize} -\item You can select a different library and use a different - |circuit ...| key. This will change all graphics used for the - symbols. -\item You can generally change the size of graphic symbols by setting - |circuit size unit| to a different value or using a key like - |small circuit symbols|. -\item - You can add options to the graphics used by symbols either globally - by setting the |every circuit| |symbol| style or locally by setting the - |every| \meta{name} style, where \meta{name} is the name of a - symbol. For instance, in the following picture the symbols are - ridiculously thick and resistors are red. + \item You can select a different library and use a different |circuit ...| + key. This will change all graphics used for the symbols. + \item You can generally change the size of graphic symbols by setting + |circuit size unit| to a different value or using a key like + |small circuit symbols|. + \item You can add options to the graphics used by symbols either globally + by setting the |every circuit| |symbol| style or locally by setting the + |every| \meta{name} style, where \meta{name} is the name of a symbol. + For instance, in the following picture the symbols are ridiculously + thick and resistors are red. + % \begin{codeexample}[] \begin{tikzpicture} [circuit ee IEC, @@ -753,66 +774,78 @@ in several ways: \draw (0,0) to [inductor] ++(right:3) to [resistor] ++(up:2); \end{tikzpicture} \end{codeexample} -\item You can selectively change the graphic used for a symbol - by saying |set resistor graphic=|. -\item You can change one or more of the following styles: - \begin{stylekey}{/tikz/circuit symbol open (initially draw)} - This style is used with symbols that consist of lines that - surround some area. For instance, the IEC version of a resistor is - an open symbol. + % + \item You can selectively change the graphic used for a symbol by saying + |set resistor graphic=|. + \item You can change one or more of the following styles: + % + \begin{stylekey}{/tikz/circuit symbol open (initially draw)} + This style is used with symbols that consist of lines that surround + some area. For instance, the IEC version of a resistor is an open + symbol. + % \begin{codeexample}[] \tikz [circuit ee IEC, circuit symbol open/.style={thick,draw,fill=yellow}] \draw (0,0) to [inductor] ++(right:3) to [resistor] ++(up:2); \end{codeexample} - \end{stylekey} - \begin{stylekey}{/tikz/circuit symbol filled (initially {draw,fill=black})} - This style is used with symbols that are completely filled. For - instance, the variant IEC version of an inductor is a filled, - black rectangle. - \end{stylekey} - \begin{stylekey}{/tikz/circuit symbol lines (initially draw)} - This style is used with symbols that consist only of lines that do - not surround anything. Examples are a capacitor. + \end{stylekey} + % + \begin{stylekey}{/tikz/circuit symbol filled (initially {draw,fill=black})} + This style is used with symbols that are completely filled. For + instance, the variant IEC version of an inductor is a filled, black + rectangle. + \end{stylekey} + % + \begin{stylekey}{/tikz/circuit symbol lines (initially draw)} + This style is used with symbols that consist only of lines that do + not surround anything. Examples are a capacitor. + % \begin{codeexample}[] \tikz [circuit ee IEC, circuit symbol lines/.style={thick,draw=red}] \draw (0,0) to [capacitor] ++(right:3) to [resistor] ++(up:2); \end{codeexample} - \end{stylekey} - \begin{stylekey}{/tikz/circuit symbol wires (initially draw)} - This style is used for symbols that consist only of ``wires.'' The - difference to the previous style is that a symbol consisting of - wires will look strange when the lines are thicker than the lines - of normal wires, while for symbols consisting of lines (but not - wires) it may look nice to make them thicker. An example is the - |make contact| symbol. + \end{stylekey} + % + \begin{stylekey}{/tikz/circuit symbol wires (initially draw)} + This style is used for symbols that consist only of ``wires''. The + difference to the previous style is that a symbol consisting of + wires will look strange when the lines are thicker than the lines + of normal wires, while for symbols consisting of lines (but not + wires) it may look nice to make them thicker. An example is the + |make contact| symbol. - Compare + Compare + % \begin{codeexample}[] \tikz [circuit ee IEC,circuit symbol lines/.style={draw,very thick}] \draw (0,0) to [capacitor={near start}, make contact={near end}] (3,0); \end{codeexample} - to + % + to + % \begin{codeexample}[] \tikz [circuit ee IEC,circuit symbol wires/.style={draw,very thick}] \draw (0,0) to [capacitor={near start}, make contact={near end}] (3,0); \end{codeexample} - \end{stylekey} + \end{stylekey} \end{itemize} -All circuit environments like |circuit logic IEC| mainly use options -like |set and gate graphic=...| to set up the graphics used for a certain -symbol. It turns out that graphic hidden in the ``|...|'' part is also -always available as a separate style, whose name contains the -library's initials. For instance, the |circuit logic IEC| option -actually contains the following command: +All circuit environments like |circuit logic IEC| mainly use options like +|set and gate graphic=...| to set up the graphics used for a certain symbol. It +turns out that graphic hidden in the ``|...|'' part is also always available as +a separate style, whose name contains the library's initials. For instance, the +|circuit logic IEC| option actually contains the following command: +% \begin{codeexample}[code only] set and gate graphic = and gate IEC graphic, \end{codeexample} +% The |and gate IEC graphic| style, in turn, is defined as follows: +% \begin{codeexample}[code only] \tikzset{and gate IEC graphic/.style= { @@ -824,14 +857,13 @@ The |and gate IEC graphic| style, in turn, is defined as follows: } \end{codeexample} -Normally, you do not need to worry about this, since you will not need -to access a style like |and gate IEC graphic| directly; you will only -use the |and gate| key. However, sometimes libraries define -\emph{variants} of a graphic; for instance, there are two variants for -the resistor graphic in the IEC library. In this case you can set the -graphic for the resistor to this variant (or back to the original) by -saying |set resistor graphic| yourself: - +Normally, you do not need to worry about this, since you will not need to +access a style like |and gate IEC graphic| directly; you will only use the +|and gate| key. However, sometimes libraries define \emph{variants} of a +graphic; for instance, there are two variants for the resistor graphic in the +IEC library. In this case you can set the graphic for the resistor to this +variant (or back to the original) by saying |set resistor graphic| yourself: +% \begin{codeexample}[] \begin{tikzpicture}[circuit ee IEC] % Standard resistor @@ -849,65 +881,63 @@ saying |set resistor graphic| yourself: \end{codeexample} - \subsection{Logical Circuits} - \subsubsection{Overview} -A \emph{logical circuit} is a circuit that contains what we call -\emph{logical gates} like an |and gate| or an |xor gate|. The logical -libraries are intended to make it easy to draw such circuits. +A \emph{logical circuit} is a circuit that contains what we call \emph{logical +gates} like an |and gate| or an |xor gate|. The logical libraries are intended +to make it easy to draw such circuits. -In the following, we first have a look at the different libraries that -can be used in principle and how the symbols look like. Then we have a -more detailed look at how the symbols are used. Finally, we discuss -the implementation details. +In the following, we first have a look at the different libraries that can be +used in principle and how the symbols look like. Then we have a more detailed +look at how the symbols are used. Finally, we discuss the implementation +details. -There are different ways of depicting logical gates, which is why there -are different (sub-)libraries for drawing them. They provide the -necessary graphical representations of the symbols declared in the -following library: +There are different ways of depicting logical gates, which is why there are +different (sub-)libraries for drawing them. They provide the necessary +graphical representations of the symbols declared in the following library: \begin{tikzlibrary}{circuits.logic} - This library declares the logical gate symbols, but does not - provide the symbol graphics. - The library also defines the following key which, however, is also - only used indirectly, namely by other libraries: - \begin{key}{/tikz/circuit logic} - This style calls the keys |circuit| (which internally calls - |every circuit|, then it defines the |inputs| key and it calls the - |every circuit logic| key. - \begin{key}{/tikz/inputs=\meta{inputs}} - This key is defined only inside the scope of a - |circuit logic|. There, it has the same effect as - |logic gate inputs|, described on - page~\pageref{logic-gate-inputs}. + This library declares the logical gate symbols, but does not provide the + symbol graphics. The library also defines the following key which, however, + is also only used indirectly, namely by other libraries: + % + \begin{key}{/tikz/circuit logic} + This style calls the keys |circuit| (which internally calls + |every circuit|, then it defines the |inputs| key and it calls the + |every circuit logic| key. + % + \begin{key}{/tikz/inputs=\meta{inputs}} + This key is defined only inside the scope of a |circuit logic|. + There, it has the same effect as |logic gate inputs|, described on + page~\pageref{logic-gate-inputs}. + \end{key} + % + \begin{stylekey}{/tikz/every circuit logic} + Use this key to configure the appearance of logical circuits. + \end{stylekey} \end{key} - \begin{stylekey}{/tikz/every circuit logic} - Use this key to configure the appearance of logical circuits. - \end{stylekey} - \end{key} \end{tikzlibrary} -Since the |circuit.logic| library does not define any actual graphics, -you need to use one of the following libraries, instead: +Since the |circuit.logic| library does not define any actual graphics, you need +to use one of the following libraries, instead: \begin{pgflibrary}{circuits.logic.IEC} - This library provides graphics based on gates - recommended by the International Electrotechnical Commission. When - you include this library, you can use the following key to - set up a scope that contains a logical circuit where the gates are - shown in this style. + This library provides graphics based on gates recommended by the + International Electrotechnical Commission. When you include this library, + you can use the following key to set up a scope that contains a logical + circuit where the gates are shown in this style. - \begin{key}{/tikz/circuit logic IEC} - This key calls |circuit logic| and installs the IEC-like - graphics for the logical symbols like |and gate|. + \begin{key}{/tikz/circuit logic IEC} + This key calls |circuit logic| and installs the IEC-like graphics for + the logical symbols like |and gate|. - As explained in Section~\ref{section-theming-symbols}, for each - graphic symbol of the library there is also a style that stores this - particular appearance. These keys are called |and gate IEC graphic|, - |or gate IEC graphic|, and so on. + As explained in Section~\ref{section-theming-symbols}, for each graphic + symbol of the library there is also a style that stores this particular + appearance. These keys are called |and gate IEC graphic|, + |or gate IEC graphic|, and so on. + % \begin{codeexample}[] \begin{tikzpicture}[circuit logic IEC, every circuit symbol/.style={ @@ -930,21 +960,23 @@ you need to use one of the following libraries, instead: \draw (o.output) -- ++(right:3mm); \end{tikzpicture} \end{codeexample} - \end{key} + \end{key} \end{pgflibrary} \begin{pgflibrary}{circuits.logic.US} - This library provides graphics showing ``American'' logic - gates. It defines the following key: + This library provides graphics showing ``American'' logic gates. It defines + the following key: - \begin{key}{/tikz/circuit logic US} - This style calls |circuit logic| and installs US-like graphics - for the logical symbols like |and gate|. For instance, it says - \begin{codeexample}[code only] + \begin{key}{/tikz/circuit logic US} + This style calls |circuit logic| and installs US-like graphics for the + logical symbols like |and gate|. For instance, it says + % +\begin{codeexample}[code only] set and gate graphic = and gate US graphic - \end{codeexample} +\end{codeexample} - Here is an example: + Here is an example: + % \begin{codeexample}[] \begin{tikzpicture}[circuit logic CDH, tiny circuit symbols, @@ -967,37 +999,36 @@ set and gate graphic = and gate US graphic \draw (o.output) -- ++(right:3mm); \end{tikzpicture} \end{codeexample} - \end{key} + \end{key} \end{pgflibrary} \begin{pgflibrary}{circuits.logic.CDH} - This library provides graphics based on the logic symbols used in - A. Croft, R. Davidson, and M. Hargreaves (1992), \emph{Engineering - Mathematics}, Addison-Wesley, 82--95. They are identical to the - US-style symbols, except for the and- and nand-gates. - - \begin{key}{/tikz/circuit logic CDH} - This key calls |circuit logic US| and installs the two special - and- and nand-gates, that is, it uses |set and gate graphic| with - |and gate CDH graphic| and likewise for nand-gates. - \end{key} + This library provides graphics based on the logic symbols used in A. Croft, + R. Davidson, and M. Hargreaves (1992), \emph{Engineering Mathematics}, + Addison-Wesley, 82--95. They are identical to the US-style symbols, except + for the and- and nand-gates. + + \begin{key}{/tikz/circuit logic CDH} + This key calls |circuit logic US| and installs the two special and- and + nand-gates, that is, it uses |set and gate graphic| with + |and gate CDH graphic| and likewise for nand-gates. + \end{key} \end{pgflibrary} - Inside |circuit logic XYZ| scopes, you can now use the keys shown in -Section~\ref{section-logic-symbols}. We have a more detailed look at -one of them, all the other work the same way: +Section~\ref{section-logic-symbols}. We have a more detailed look at one of +them, all the other work the same way: \begin{key}{/tikz/and gate} - This key should be passed to a |node| command. It will cause the - node to ``look like'' an |and gate|, where the exact appearance of the - gate is dictated by the which circuit environment is used. To - further configure the appearance of the |and gate|, see - Section~\ref{section-theming-symbols}. - + This key should be passed to a |node| command. It will cause the node to + ``look like'' an |and gate|, where the exact appearance of the gate is + dictated by the which circuit environment is used. To further configure the + appearance of the |and gate|, see Section~\ref{section-theming-symbols}. + % \begin{codeexample}[] \tikz [circuit logic IEC] \node [and gate] {$A$}; \end{codeexample} + % \begin{codeexample}[] \tikz [circuit logic US] { @@ -1006,24 +1037,24 @@ one of them, all the other work the same way: } \end{codeexample} - \medskip\textbf{Inputs.} - Multiple inputs can be specified for a logic gate (provided they - support multiple inputs: a not gate---also known as an - inverter---does not). However, there is an upper limit for the - number of inputs which has been set to 1024, which should be \emph{way} - more than would ever be needed. + \medskip\textbf{Inputs.} + Multiple inputs can be specified for a logic gate (provided they support + multiple inputs: a not gate -- also known as an inverter -- does not). + However, there is an upper limit for the number of inputs which has been + set to 1024, which should be \emph{way} more than would ever be needed. - The following key is used to configure the inputs. It is available - only inside a |circuit logic| environment. + The following key is used to configure the inputs. It is available only + inside a |circuit logic| environment. - \begin{key}{/tikz/inputs=\meta{input list} (initially \char`\{normal,normal\char`\})} - If a gate has $n$ inputs, the \meta{input list} should consists of - $n$ letters, each being |i| for ``inverted'' or |n| for - ``normal.'' Inverted gates will be indicated by a little - circle. In any case the anchors for the inputs will be set - up appropriately, numbered from top to bottom |input 1|, |input 2|, - \ldots and so on. If the gate only supports one input the anchor - is simply called |input| with no numerical index. + \begin{key}{/tikz/inputs=\meta{input list} (initially \char`\{normal,normal\char`\})} + If a gate has $n$ inputs, the \meta{input list} should consists of $n$ + letters, each being |i| for ``inverted'' or |n| for ``normal''. + Inverted gates will be indicated by a little circle. In any case the + anchors for the inputs will be set up appropriately, numbered from top + to bottom |input 1|, |input 2|, \ldots and so on. If the gate only + supports one input the anchor is simply called |input| with no + numerical index. + % \begin{codeexample}[] \begin{tikzpicture}[circuit logic IEC] \node[and gate,inputs={inini}] (A) {}; @@ -1032,26 +1063,23 @@ one of them, all the other work the same way: \draw (A.output) -- ++(right:5mm); \end{tikzpicture} \end{codeexample} - \end{key} + \end{key} - (This key is just a shorthand for |logic gate inputs|, described - in detail on page~\pageref{logic-gate-inputs}. There you will also - find descriptions of how to configure the size of the inverted - circles and the way the symbol size increases when there are too - many inputs.) + (This key is just a shorthand for |logic gate inputs|, described in detail + on page~\pageref{logic-gate-inputs}. There you will also find descriptions + of how to configure the size of the inverted circles and the way the symbol + size increases when there are too many inputs.) - \textbf{Output.} - Every logic gate has one anchor called |output|. + \textbf{Output.} + Every logic gate has one anchor called |output|. \end{key} \subsubsection{Symbols: The Gates} - \label{section-logic-symbols} The following table shows which symbols are declared by the main -|circuits.logic| library and their appearance in the different -sublibraries. +|circuits.logic| library and their appearance in the different sublibraries. \medskip \def\gateexamples#1{% @@ -1077,37 +1105,34 @@ sublibraries. \subsubsection{Implementation: The Logic Gates Shape Library} -The previous sections described the \tikzname\ interface for creating -logical circuits. In this section we take a closer look at the -underlying \pgfname\ libraries. +The previous sections described the \tikzname\ interface for creating logical +circuits. In this section we take a closer look at the underlying \pgfname\ +libraries. Just as there are several \tikzname\ circuit libraries, there are two -underlying \pgfname\ shape libraries, one for creating US-style gates -and one for IEC-style gates. These libraries define \emph{shapes} -only. It is the job of the circuit libraries to ``theme'' them so that -they ``look nice.'' However, in principle, you can also use these -shapes directly. +underlying \pgfname\ shape libraries, one for creating US-style gates and one +for IEC-style gates. These libraries define \emph{shapes} only. It is the job +of the circuit libraries to ``theme'' them so that they ``look nice''. However, +in principle, you can also use these shapes directly. -Let us begin with the base library that defines the handling of -inputs. +Let us begin with the base library that defines the handling of inputs. \begin{pgflibrary}{shapes.gates.logic} - This library defines common keys used by all logical gate shapes. - -\begin{key}{/pgf/logic gate inputs=\meta{input list} (initially \char`\{normal,normal\char`\})} - \label{logic-gate-inputs}% - Specify the inputs for the logic gate. The keyword |inverted| - indicates an inverted input which will mean \pgfname{} will draw a - circle attached to the main shape of the logic gate. Any keyword - that is not |inverted| will be treated as a ``normal'' or - ``non-inverted'' input (however, for readability, you may wish to - use |normal| or |non-inverted|), and \pgfname{} will not draw the - circle. - In both cases the anchors for the inputs will be set - up appropriately, numbered from top to bottom |input 1|, |input 2|, - \ldots and so on. If the gate only supports one input the anchor - is simply called |input| with no numerical index. - + This library defines common keys used by all logical gate shapes. + + \begin{key}{/pgf/logic gate inputs=\meta{input list} (initially \char`\{normal,normal\char`\})} + \label{logic-gate-inputs}% + Specify the inputs for the logic gate. The keyword |inverted| indicates + an inverted input which will mean \pgfname{} will draw a circle + attached to the main shape of the logic gate. Any keyword that is not + |inverted| will be treated as a ``normal'' or ``non-inverted'' input + (however, for readability, you may wish to use |normal| or + |non-inverted|), and \pgfname{} will not draw the circle. In both cases + the anchors for the inputs will be set up appropriately, numbered from + top to bottom |input 1|, |input 2|, \ldots and so on. If the gate only + supports one input the anchor is simply called |input| with no + numerical index. + % \begin{codeexample}[] \begin{tikzpicture}[minimum height=0.75cm] \node[and gate IEC, draw, logic gate inputs={inverted, normal, inverted}] @@ -1118,13 +1143,13 @@ inputs. \end{tikzpicture} \end{codeexample} - For multiple inputs it may be somewhat unwieldy to specify a long - list, thus, the following ``shorthand'' is permitted (this is an - extension of ideas due to Juergen Werber and Christoph Bartoschek): - Using |i| for inverted and |n| for normal inputs, \meta{input list} - can be specified \emph{without the commas}. So, for example, - |ini| is equivalent to |inverted, normal, inverted|. - + For multiple inputs it may be somewhat unwieldy to specify a long list, + thus, the following ``shorthand'' is permitted (this is an extension of + ideas due to Jürgen Werber and Christoph Bartoschek): Using |i| for + inverted and |n| for normal inputs, \meta{input list} can be specified + \emph{without the commas}. So, for example, |ini| is equivalent to + |inverted, normal, inverted|. + % \begin{codeexample}[] \begin{tikzpicture}[minimum height=0.75cm] \node[or gate US, draw,logic gate inputs=inini] (A) {}; @@ -1133,27 +1158,24 @@ inputs. \draw (A.output) -- ([xshift=0.5cm]A.output); \end{tikzpicture} \end{codeexample} + \end{key} -\end{key} - -The height of the gate may be increased to accommodate the number -of inputs. In fact, it depends on three variables: -$n$, the number of inputs, $r$, the radius of the circle used -to indicate an inverted input and $s$, the distance between -the centers of the inputs. -The default height is then calculated according to the expression -$(n+1)\times\max(2r,s)$. This then may -be increased to accommodate the node contents or any -minimum size specifications. - -The radius of the inverted input circle and the distance between the -centers of the inputs can be customized using the following keys: + The height of the gate may be increased to accommodate the number of + inputs. In fact, it depends on three variables: $n$, the number of inputs, + $r$, the radius of the circle used to indicate an inverted input and $s$, + the distance between the centers of the inputs. The default height is then + calculated according to the expression $(n+1)\times\max(2r,s)$. This then + may be increased to accommodate the node contents or any minimum size + specifications. -\begin{key}{/pgf/logic gate inverted radius=\meta{length} (initially 2pt)} - Set the radius of the circle that is used to indicate inverted - inputs. This is also the radius of the circle used for the inverted - output of the |nand|, |nor|, |xnor| and |not| gates. + The radius of the inverted input circle and the distance between the + centers of the inputs can be customized using the following keys: + \begin{key}{/pgf/logic gate inverted radius=\meta{length} (initially 2pt)} + Set the radius of the circle that is used to indicate inverted inputs. + This is also the radius of the circle used for the inverted output of + the |nand|, |nor|, |xnor| and |not| gates. + % \begin{codeexample}[] \begin{tikzpicture}[minimum height=0.75cm] \tikzset{every node/.style={shape=nand gate CDH, draw, logic gate inputs=ii}} @@ -1161,12 +1183,13 @@ centers of the inputs can be customized using the following keys: \node[logic gate inverted radius=4pt] at (0,-1) {B}; \end{tikzpicture} \end{codeexample} -\end{key} - -\begin{key}{/pgf/logic gate input sep=\meta{length} (initially .125cm)} - Set the distance between the \emph{centers} of the inputs to the - logic gate. + % + \end{key} + \begin{key}{/pgf/logic gate input sep=\meta{length} (initially .125cm)} + Set the distance between the \emph{centers} of the inputs to the logic + gate. + % \begin{codeexample}[] \begin{tikzpicture}[minimum size=0.75cm] \draw [help lines] grid (3,2); @@ -1178,44 +1201,40 @@ centers of the inputs can be customized using the following keys: (B.input \a -| 2,0) -- (B.input \a); \end{tikzpicture} \end{codeexample} -\end{key} - - \pgfname{} will increase the size of the - logic gate to accommodate the number of inputs, and the size - of the inverted radius and the separation between the inputs. - However with all shapes in this library, any increase in size - (including any minimum size requirements) will be applied so that - the default aspect ratio is unaltered. This means that changing - the height will change the width and vice versa. + % + \end{key} + \pgfname{} will increase the size of the logic gate to accommodate the + number of inputs, and the size of the inverted radius and the separation + between the inputs. However with all shapes in this library, any increase + in size (including any minimum size requirements) will be applied so that + the default aspect ratio is unaltered. This means that changing the height + will change the width and vice versa. \end{pgflibrary} \subsubsection{Implementation: The US-Style Logic Gates Shape Library} \begin{pgflibrary}{shapes.gates.logic.US} - This library provides ``American'' logic gate shapes whose names are - suffixed with the identifier |US|. Additionally, - alternative |and| and |nand| gates are provided which are based on the - logic symbols used in A. Croft, R. Davidson, and M. Hargreaves (1992), - \emph{Engineering Mathematics}, Addison-Wesley, 82--95. These two - shapes are suffixed with |CDH|. - - The ``compass point'' anchors apply to the main part of the shape - and do not include any inverted inputs or outputs. This library - provides an additional feature to facilitate the relative positioning - of logic gates: - -\begin{key}{/pgf/logic gate anchors use bounding box=\meta{boolean} (initially false)} - When set to |true| this key will ensure that the - compass point anchors use the bounding rectangle of the - main shape, which, ignore any inverted inputs or outputs, but - includes any |outer sep|. - This \emph{only} affects the compass point anchors - and is not set on a shape by shape basis: whether the bounding - box is used is determined by value of this key when the anchor - is accessed. - + This library provides ``American'' logic gate shapes whose names are + suffixed with the identifier |US|. Additionally, alternative |and| and + |nand| gates are provided which are based on the logic symbols used in A. + Croft, R. Davidson, and M. Hargreaves (1992), \emph{Engineering + Mathematics}, Addison-Wesley, 82--95. These two shapes are suffixed with + |CDH|. + + The ``compass point'' anchors apply to the main part of the shape and do + not include any inverted inputs or outputs. This library provides an + additional feature to facilitate the relative positioning of logic gates: + + \begin{key}{/pgf/logic gate anchors use bounding box=\meta{boolean} (initially false)} + When set to |true| this key will ensure that the compass point anchors + use the bounding rectangle of the main shape, which, ignore any + inverted inputs or outputs, but includes any |outer sep|. This + \emph{only} affects the compass point anchors and is not set on a shape + by shape basis: whether the bounding box is used is determined by value + of this key when the anchor is accessed. + % \begin{codeexample}[] \begin{tikzpicture}[minimum height=1.5cm] \node[xnor gate US, draw, gray!50,line width=2pt] (A) {}; @@ -1226,35 +1245,35 @@ centers of the inputs can be customized using the following keys: (A.\a) circle(\z); \end{tikzpicture} \end{codeexample} + % + \end{key} -\end{key} - - The library defines a number of shapes. For each shape the allowed - number of inputs is also shown: - \begin{itemize} - \item |and gate US|, two or more inputs - \item |and gate CDH|, two or more inputs - \item |nand gate US|, two or more inputs - \item |nand gate CDH|, two or more inputs - \item |or gate US|, two or more inputs - \item |nor gate US|, two or more Inputs - \item |xor gate US|, two inputs - \item |xnor gate US|, two inputs - \item |not gate US|, one input - \item |buffer gate US|, one input - \end{itemize} - - In the following, we only have a detailed look at the anchors - defined by one of them. We choose the |nand gate US| because it - shows all the ``interesting'' anchors. - - \begin{shape}{nand gate US} - This shape is a nand gate, which supports two or more inputs. If - less than two inputs are specified an error will result. - The anchors for this gate with two - non-inverted inputs (using the normal compass point anchors) are - shown below. Anchor |30| is an example of a border anchor. - + The library defines a number of shapes. For each shape the allowed number + of inputs is also shown: + % + \begin{itemize} + \item |and gate US|, two or more inputs + \item |and gate CDH|, two or more inputs + \item |nand gate US|, two or more inputs + \item |nand gate CDH|, two or more inputs + \item |or gate US|, two or more inputs + \item |nor gate US|, two or more Inputs + \item |xor gate US|, two inputs + \item |xnor gate US|, two inputs + \item |not gate US|, one input + \item |buffer gate US|, one input + \end{itemize} + + In the following, we only have a detailed look at the anchors defined by + one of them. We choose the |nand gate US| because it shows all the + ``interesting'' anchors. + + \begin{shape}{nand gate US} + This shape is a nand gate, which supports two or more inputs. If less + than two inputs are specified an error will result. The anchors for + this gate with two non-inverted inputs (using the normal compass point + anchors) are shown below. Anchor |30| is an example of a border anchor. + % \begin{codeexample}[] \Huge \begin{tikzpicture} @@ -1273,97 +1292,93 @@ centers of the inputs can be customized using the following keys: \end{tikzpicture} \end{codeexample} - (For the definition of the |shape example| style, see - Section~\ref{section-libs-shapes}.) - \end{shape} + (For the definition of the |shape example| style, see + Section~\ref{section-libs-shapes}.) + \end{shape} \end{pgflibrary} - \subsubsection{Implementation: The IEC-Style Logic Gates Shape Library} \begin{pgflibrary}{shapes.gates.logic.IEC} - This library provides rectangular logic gate shapes. These shapes - are suffixed with |IEC| as they are based on gates recommended by - the International Electrotechnical Commission. - - By default each gate is drawn with a symbol, $\char`\&$ for |and| and - |nand| gates, $\geq1$ for |or| and |nor| gates, $1$ for |not| and - |buffer| gates, and $=1$ for |xor| and |xnor| gates. These symbols - are drawn automatically (internally they are drawn using the - ``foreground'' path), and are not strictly speaking part of the node - contents. However, the gate is enlarged to make sure the symbols are - within the border of the node. - It is possible to change - the symbols and their position within the node using the following - keys: - -\begin{key}{/pgf/and gate IEC symbol=\meta{text} (initially \char`\\char\char`\`\char`\\\char`\&)} - Set the symbol for the |and gate|. Note that if the node is filled, - this color will be used for the symbol, making it invisible, so - it will be necessary set \meta{text} to something like - |\color{black}\char`\&|. Alternatively, the - |logic gate IEC symbol color| key can be used to set the color - of all symbols simultaneously. - - In \tikzname, when the |use IEC style logic gates| key has been - used, this key can be replaced by |and gate symbol|. -\end{key} - -\begin{key}{/pgf/nand gate IEC symbol=\meta{text} (initially \char`\\char\char`\`\char`\\\char`\&)} - Set the symbol for the |nand gate|. - In \tikzname, when the |use IEC style logic gates| key has been - used, this key can be replaced by |nand gate symbol|. -\end{key} + This library provides rectangular logic gate shapes. These shapes are + suffixed with |IEC| as they are based on gates recommended by the + International Electrotechnical Commission. + + By default each gate is drawn with a symbol, $\char`\&$ for |and| and + |nand| gates, $\geq1$ for |or| and |nor| gates, $1$ for |not| and |buffer| + gates, and $=1$ for |xor| and |xnor| gates. These symbols are drawn + automatically (internally they are drawn using the ``foreground'' path), + and are not strictly speaking part of the node contents. However, the gate + is enlarged to make sure the symbols are within the border of the node. It + is possible to change the symbols and their position within the node using + the following keys: + + \begin{key}{/pgf/and gate IEC symbol=\meta{text} (initially \char`\\char\char`\`\char`\\\char`\&)} + Set the symbol for the |and gate|. Note that if the node is filled, + this color will be used for the symbol, making it invisible, so it will + be necessary set \meta{text} to something like |\color{black}\char`\&|. + Alternatively, the |logic gate IEC symbol color| key can be used to set + the color of all symbols simultaneously. + + In \tikzname, when the |use IEC style logic gates| key has been used, + this key can be replaced by |and gate symbol|. + \end{key} -\begin{key}{/pgf/or gate IEC symbol=\meta{text} (initially \char`\$\char`\\geq1\char`\$)} - Set the symbol for the |or gate|. - In \tikzname, when the |use IEC style logic gates| key has been - used, this key can be replaced by |or gate symbol|. -\end{key} + \begin{key}{/pgf/nand gate IEC symbol=\meta{text} (initially \char`\\char\char`\`\char`\\\char`\&)} + Set the symbol for the |nand gate|. In \tikzname, when the + |use IEC style logic gates| key has been used, this key can be replaced + by |nand gate symbol|. + \end{key} -\begin{key}{/pgf/nor gate IEC symbol=\meta{text} (initially \char`\$\char`\\geq1\char`\$)} - Set the symbol for the |nor gate|. - In \tikzname, when the |use IEC style logic gates| key has been - used, this key can be replaced by |nor gate symbol|. -\end{key} + \begin{key}{/pgf/or gate IEC symbol=\meta{text} (initially \char`\$\char`\\geq1\char`\$)} + Set the symbol for the |or gate|. In \tikzname, when the + |use IEC style logic gates| key has been used, this key can be replaced + by |or gate symbol|. + \end{key} -\begin{key}{/pgf/xor gate IEC symbol=\meta{text} (initially \char`\{\char`\$=1\char`\$\char`\})} - Set the symbol for the |xor gate|. Note the necessity for braces, - as the symbol contains |=|. - In \tikzname, when the |use IEC style logic gates| key has been - used, this key can be replaced by |xor gate symbol|. -\end{key} + \begin{key}{/pgf/nor gate IEC symbol=\meta{text} (initially \char`\$\char`\\geq1\char`\$)} + Set the symbol for the |nor gate|. In \tikzname, when the + |use IEC style logic gates| key has been used, this key can be replaced + by |nor gate symbol|. + \end{key} -\begin{key}{/pgf/xnor gate IEC symbol=\meta{text} (initially \char`\{\char`\$=1\char`\$\char`\})} - Set the symbol for the |xnor gate|. - In \tikzname, when the |use IEC style logic gates| key has been - used, this key can be replaced by |xnor gate symbol|. -\end{key} + \begin{key}{/pgf/xor gate IEC symbol=\meta{text} (initially \char`\{\char`\$=1\char`\$\char`\})} + Set the symbol for the |xor gate|. Note the necessity for braces, as + the symbol contains |=|. In \tikzname, when the + |use IEC style logic gates| key has been used, this key can be replaced + by |xor gate symbol|. + \end{key} -\begin{key}{/pgf/not gate IEC symbol=\meta{text} (initially 1)} - Set the symbol for the |not gate|. - In \tikzname, when the |use IEC style logic gates| key has been - used, this key can be replaced by |not gate symbol|. -\end{key} + \begin{key}{/pgf/xnor gate IEC symbol=\meta{text} (initially \char`\{\char`\$=1\char`\$\char`\})} + Set the symbol for the |xnor gate|. In \tikzname, when the + |use IEC style logic gates| key has been used, this key can be replaced + by |xnor gate symbol|. + \end{key} -\begin{key}{/pgf/buffer gate IEC symbol=\meta{text} (initially 1)} - Set the symbol for the |buffer gate|. - In \tikzname, when the |use IEC style logic gates| key has been - used, this key can be replaced by |buffer gate symbol|. -\end{key} + \begin{key}{/pgf/not gate IEC symbol=\meta{text} (initially 1)} + Set the symbol for the |not gate|. In \tikzname, when the + |use IEC style logic gates| key has been used, this key can be replaced + by |not gate symbol|. + \end{key} -\begin{key}{/pgf/logic gate IEC symbol align=\meta{align} (initially top)} - Set the alignment of the logic gate symbol (in \tikzname, when the - |use IEC style logic gates| key has been used, |IEC| can be omitted. - The specification in \meta{align} is a comma separated list from - |top|, |bottom|, |left| or |right|. The distance between the border - of the node and the outer edge of the symbol is determined by the values - of the |inner xsep| and |inner ysep|. + \begin{key}{/pgf/buffer gate IEC symbol=\meta{text} (initially 1)} + Set the symbol for the |buffer gate|. In \tikzname, when the + |use IEC style logic gates| key has been used, this key can be replaced + by |buffer gate symbol|. + \end{key} + \begin{key}{/pgf/logic gate IEC symbol align=\meta{align} (initially top)} + Set the alignment of the logic gate symbol (in \tikzname, when the + |use IEC style logic gates| key has been used, |IEC| can be omitted). + The specification in \meta{align} is a comma separated list from |top|, + |bottom|, |left| or |right|. The distance between the border of the + node and the outer edge of the symbol is determined by the values of + the |inner xsep| and |inner ysep|. + % \begin{codeexample}[] \begin{tikzpicture}[minimum size=1cm, use IEC style logic gates] - \tikzset{every node/.style={nor gate, draw}} + \tikzset{every node/.style={nor gate, draw}} \node (A) at (0,1.5) {}; \node [logic gate symbol align={bottom, right}] (B) at (0,0) {}; \foreach \g in {A, B}{ @@ -1373,37 +1388,36 @@ centers of the inputs can be customized using the following keys: } \end{tikzpicture} \end{codeexample} + % + \end{key} -\end{key} - - -\begin{key}{/pgf/logic gate IEC symbol color=\meta{color}} - This key sets the color for all symbols simultaneously. This color - can be overridden on a case by case basis by specifying a color - when setting the symbol text. -\end{key} - - The library defines the following shapes: - \begin{itemize} - \item |and gate IEC|, two or more inputs - \item |nand gate IEC|, two or more inputs - \item |or gate IEC|, two or more inputs - \item |nor gate IEC|, two or more inputs - \item |xor gate IEC|, two inputs - \item |xnor gate IEC|, two inputs - \item |not gate IEC|, one input - \item |buffer gate IEC|, one input - \end{itemize} - - Again, we only have a look at the nand-gate in more detail: - -\begin{shape}{nand gate IEC} - This shape is a nand gate. It supports two or more inputs. - If less than two inputs are specified an error will result. - The anchors for this gate with two - inverted inputs are - shown below. Anchor |30| is an example of a border anchor. + \begin{key}{/pgf/logic gate IEC symbol color=\meta{color}} + This key sets the color for all symbols simultaneously. This color can + be overridden on a case by case basis by specifying a color when + setting the symbol text. + \end{key} + The library defines the following shapes: + % + \begin{itemize} + \item |and gate IEC|, two or more inputs + \item |nand gate IEC|, two or more inputs + \item |or gate IEC|, two or more inputs + \item |nor gate IEC|, two or more inputs + \item |xor gate IEC|, two inputs + \item |xnor gate IEC|, two inputs + \item |not gate IEC|, one input + \item |buffer gate IEC|, one input + \end{itemize} + + Again, we only have a look at the nand-gate in more detail: + + \begin{shape}{nand gate IEC} + This shape is a nand gate. It supports two or more inputs. If less than + two inputs are specified an error will result. The anchors for this + gate with two inverted inputs are shown below. Anchor |30| is an + example of a border anchor. + % \begin{codeexample}[] \Huge \begin{tikzpicture} @@ -1423,100 +1437,100 @@ centers of the inputs can be customized using the following keys: node[\placement] {\scriptsize\texttt{(s.\anchor)}}; \end{tikzpicture} \end{codeexample} -\end{shape} + \end{shape} \end{pgflibrary} - - \subsection{Electrical Engineering Circuits} \subsubsection{Overview} -An \emph{electrical engineering circuit} contains symbols like -resistors or capacitors or voltage sources and annotations like the -two arrows pointing toward an element whose behaviour is light -dependent. The electrical engineering libraries, abbreviated -ee-libraries, provide such symbols and annotations. +An \emph{electrical engineering circuit} contains symbols like resistors or +capacitors or voltage sources and annotations like the two arrows pointing +toward an element whose behaviour is light dependent. The electrical +engineering libraries, abbreviated ee-libraries, provide such symbols and +annotations. -Just as for logical gates, there are different ways of drawing -ee-symbols. Currently, there is one main library for drawing circuits, -which uses the graphics from the International Electrotechnical -Commission, but you can add your own libs. This is why, just as for -logical gates, there is a base library and more specific libraries. +Just as for logical gates, there are different ways of drawing ee-symbols. +Currently, there is one main library for drawing circuits, which uses the +graphics from the International Electrotechnical Commission, but you can add +your own libs. This is why, just as for logical gates, there is a base library +and more specific libraries. \begin{tikzlibrary}{circuits.ee} - This library declares the ee symbols, but (mostly) does not - provide the symbol graphics, which is left to the sublibraries. - Just like the logical gates library, a key is defined that is - normally only used internally: - \begin{key}{/tikz/circuit ee} - This style calls the keys |circuit| (which internally calls - |every circuit| and the following style: - \begin{stylekey}{/tikz/every circuit ee} - Use this key to configure the appearance of logical circuits. - \end{stylekey} - \end{key} + This library declares the ee symbols, but (mostly) does not provide the + symbol graphics, which is left to the sublibraries. Just like the logical + gates library, a key is defined that is normally only used internally: + % + \begin{key}{/tikz/circuit ee} + This style calls the keys |circuit| (which internally calls + |every circuit| and the following style: + % + \begin{stylekey}{/tikz/every circuit ee} + Use this key to configure the appearance of logical circuits. + \end{stylekey} + \end{key} - The library also declares some standard annotations and units. + The library also declares some standard annotations and units. \end{tikzlibrary} -As for logical circuits, to draw a circuit the first step is to -include a library containing the symbols graphics. Currently, you have to -include |circuits.ee.IEC|. +As for logical circuits, to draw a circuit the first step is to include a +library containing the symbols graphics. Currently, you have to include +|circuits.ee.IEC|. \begin{tikzlibrary}{circuit.ee.IEC} - When this library is loaded, you can use the following style: - \begin{key}{/tikz/circuit ee IEC} - This style calls |circuit ee| and installs the IEC-like - graphics for the logical symbols like |resistor|. - \end{key} + When this library is loaded, you can use the following style: + % + \begin{key}{/tikz/circuit ee IEC} + This style calls |circuit ee| and installs the IEC-like graphics for + the logical symbols like |resistor|. + \end{key} \end{tikzlibrary} -Inside the |circuit ee IEC| scope, you can now use the keys for -symbols, units, and annotations listed in the later sections. We have -a more detailed look at one of each of them, all the others work the -same way. +Inside the |circuit ee IEC| scope, you can now use the keys for symbols, units, +and annotations listed in the later sections. We have a more detailed look at +one of each of them, all the others work the same way. -Let us start with an example of a symbol: the resistor symbol. The -other predefined symbols are listed in -Section~\ref{section-circuits-ee-symbols} and later sections. +Let us start with an example of a symbol: the resistor symbol. The other +predefined symbols are listed in Section~\ref{section-circuits-ee-symbols} and +later sections. \begin{key}{/tikz/resistor=\opt{\meta{options}}} - This key should be used with a |node| path command or with the |to| - path command. + This key should be used with a |node| path command or with the |to| path + command. - \medskip\textbf{Using the Key with Normal Nodes.} - When used with a node, it will cause this node to - ``look like'' a resistor (by default, in the IEC library, this is - just a simple rectangle). + \medskip\textbf{Using the Key with Normal Nodes.} + When used with a node, it will cause this node to ``look like'' a resistor + (by default, in the IEC library, this is just a simple rectangle). + % \begin{codeexample}[] \tikz [circuit ee IEC] \node [resistor] {}; \end{codeexample} - Unlike normal nodes, a resistor node generally should not take any - text (as in |node [resistor] {foo}|). Instead, the labeling of - resistors should be done using the |label|, |info| and |ohm| - options. + Unlike normal nodes, a resistor node generally should not take any text (as + in |node [resistor] {foo}|). Instead, the labeling of resistors should be + done using the |label|, |info| and |ohm| options. + % \begin{codeexample}[] \tikz [circuit ee IEC] \node [resistor,ohm=5] {}; \end{codeexample} - The \meta{options} make no real sense when the |resistor| option is - used with a normal node, you can just as well given them to the - |node| itself. Thus, the following has the same effect as the above - example: + The \meta{options} make no real sense when the |resistor| option is used + with a normal node, you can just as well given them to the |node| itself. + Thus, the following has the same effect as the above example: + % \begin{codeexample}[] \tikz [circuit ee IEC] \node [resistor={ohm=5}] {}; \end{codeexample} - In a circuit, you will often wish to rotate elements. For this, the - options |point up|, |point down|, |point left| or |point right| may - be especially useful. They are just shorthands for appropriate - rotations like |rotate=90|. + In a circuit, you will often wish to rotate elements. For this, the options + |point up|, |point down|, |point left| or |point right| may be especially + useful. They are just shorthands for appropriate rotations like + |rotate=90|. + % \begin{codeexample}[] \tikz [circuit ee IEC] { \node (R1) [resistor,point up,ohm=5] at (3,1) {}; @@ -1525,107 +1539,111 @@ Section~\ref{section-circuits-ee-symbols} and later sections. } \end{codeexample} - \medskip\textbf{Using the Key on a To Path.} - When the |resistor| key is used on a |to| path inside a - |circuit ee IEC|, the |circuit handle symbol| key is called - internally. This has a whole bunch of effects: - \begin{enumerate} - \item The path currently being constructed is cut up to make place - for a node. - \item This node will be a |resistor node| that is rotated so that it - points ``along'' the path (unless an option like |shift only| or - an extra rotation is used to change this). - \item The \meta{options} passed to the |resistor| key are passed on - to the node. - \item The \meta{options} are pre-parsed to identify a |pos| key or - a key like |at start| or |midway|. These keys are used to - determine where on the |to| path the node will lie. - \end{enumerate} - - Since the \meta{options} of the |resistor| key are passed on to the - resistor node on the path, you can use it to add labels to the - node. Here is a simple example: - + \medskip\textbf{Using the Key on a To Path.} + When the |resistor| key is used on a |to| path inside a |circuit ee IEC|, + the |circuit handle symbol| key is called internally. This has a whole + bunch of effects: + % + \begin{enumerate} + \item The path currently being constructed is cut up to make place for + a node. + \item This node will be a |resistor node| that is rotated so that it + points ``along'' the path (unless an option like |shift only| or an + extra rotation is used to change this). + \item The \meta{options} passed to the |resistor| key are passed on to + the node. + \item The \meta{options} are pre-parsed to identify a |pos| key or a + key like |at start| or |midway|. These keys are used to determine + where on the |to| path the node will lie. + \end{enumerate} + + Since the \meta{options} of the |resistor| key are passed on to the + resistor node on the path, you can use it to add labels to the node. Here + is a simple example: + % \begin{codeexample}[] \tikz [circuit ee IEC] \draw (0,0) to [resistor=red] (3,0) to [resistor={ohm=2\mu}] (3,2); \end{codeexample} - You can add multiple labels to a resistor and you can have multiple - resistors (or other elements) on a single path. + You can add multiple labels to a resistor and you can have multiple + resistors (or other elements) on a single path. - \medskip\textbf{Inputs, Outputs, and Anchors.} - Like the logical gates, all ee-symbols have an |input| - and an |output| anchor. Special-purpose-nodes may have even more - anchors of this type. Furthermore, the ee-symbols-nodes also have four - standard compass direction anchors. + \medskip\textbf{Inputs, Outputs, and Anchors.} + Like the logical gates, all ee-symbols have an |input| and an |output| + anchor. Special-purpose-nodes may have even more anchors of this type. + Furthermore, the ee-symbols-nodes also have four standard compass direction + anchors. - \medskip\textbf{Changing the Appearance.} - To configure the appearance of all |resistor|s, see - Section~\ref{section-theming-symbols}. You can use the - \meta{options} to locally change the appearance of a single - resistor. + \medskip\textbf{Changing the Appearance.} + To configure the appearance of all |resistor|s, see + Section~\ref{section-theming-symbols}. You can use the \meta{options} to + locally change the appearance of a single resistor. \end{key} -Let us now have a look at an example of a unit: the Ohm unit. The -other predefined units are listed in Section~\ref{section-circuits-units}. +Let us now have a look at an example of a unit: the Ohm unit. The other +predefined units are listed in Section~\ref{section-circuits-units}. \begin{key}{/tikz/ohm=\meta{value}} - This key is used to add an |info| label to a node with a special - text: |$\mathrm{|\meta{value}|\Omega}$|. In other words, the |ohm| - key can only be used with the options of a node and, when used, it - will cause the \meta{value} to be placed next to the node, followed - by $\Omega$. Since the \meta{value} is typeset inside a |\mathrm| - command, when you write |ohm=5k| you get $\mathrm{5k\Omega}$, - |ohm=5p| yields $\mathrm{5p\Omega}$, and |ohm=5.6\cdot 10^{2}\mu| - yields $\mathrm{5.6\cdot 10^{2}\mu\Omega}$. + This key is used to add an |info| label to a node with a special text: + |$\mathrm{|\meta{value}|\Omega}$|. In other words, the |ohm| key can only + be used with the options of a node and, when used, it will cause the + \meta{value} to be placed next to the node, followed by $\Omega$. Since the + \meta{value} is typeset inside a |\mathrm| command, when you write |ohm=5k| + you get $\mathrm{5k\Omega}$, |ohm=5p| yields $\mathrm{5p\Omega}$, and + |ohm=5.6\cdot 10^{2}\mu| yields $\mathrm{5.6\cdot 10^{2}\mu\Omega}$. + % \begin{codeexample}[] \tikz [circuit ee IEC] \draw (0,0) to [resistor={ohm=5M}] (0,2); \end{codeexample} - Instead of |ohm| you can also use |ohm'|, which places the label on - the other side. + Instead of |ohm| you can also use |ohm'|, which places the label on the + other side. + % \begin{codeexample}[] \tikz [circuit ee IEC] \draw (0,0) to [resistor={ohm'=5M}] (0,2); \end{codeexample} - Finally, there are also keys |ohm sloped| and |ohm' sloped| for - having the info label rotate together with the main node. + Finally, there are also keys |ohm sloped| and |ohm' sloped| for having the + info label rotate together with the main node. + % \begin{codeexample}[] \tikz [circuit ee IEC] \draw (0,0) to [resistor={ohm sloped=5M}] (0,2) (2,0) to [resistor={ohm' sloped=6f}] (2,2); \end{codeexample} - You can configure the appearance of an Ohm info label using the key - |every ohm|. + You can configure the appearance of an Ohm info label using the key + |every ohm|. \end{key} -Finally, let us have a look at an annotation: the |light emitting| -annotation. The other predefined units are listed in +Finally, let us have a look at an annotation: the |light emitting| annotation. +The other predefined units are listed in Section~\ref{section-circuits-annotations}. \begin{key}{/tikz/light emitting=\opt{\meta{options}}} - Like a unit, an annotation should be given as an additional option - to a node. It causes some drawings (in this case, two parallel - lines) to be placed next to the node. - + Like a unit, an annotation should be given as an additional option to a + node. It causes some drawings (in this case, two parallel lines) to be + placed next to the node. + % \begin{codeexample}[] \tikz [circuit ee IEC] \draw (0,0) to [diode=light emitting] (2,0); \end{codeexample} - The \meta{options} can be used for three different things: - \begin{enumerate} - \item You can use keys like |red| to change the appearance of this - annotation, locally. - \item You can use keys like |<-| or |-latex| to change the - direction and kinds of arrows used in the annotation. - \item You can use info labels like |ohm=5| or |info=foo| inside the - \meta{options}. These info labels will be added to the main node - (not to the annotation itself), but the label distance will have - been changed to accommodate for the space taken up by the - annotation. + The \meta{options} can be used for three different things: + % + \begin{enumerate} + \item You can use keys like |red| to change the appearance of this + annotation, locally. + \item You can use keys like |<-| or |-latex| to change the direction + and kinds of arrows used in the annotation. + \item You can use info labels like |ohm=5| or |info=foo| inside the + \meta{options}. These info labels will be added to the main node + (not to the annotation itself), but the label distance will have + been changed to accommodate for the space taken up by the + annotation. + % \begin{codeexample}[] \tikz [circuit ee IEC] { @@ -1634,27 +1652,25 @@ Section~\ref{section-circuits-annotations}. info'=also good}] (2,0); } \end{codeexample} - \end{enumerate} - - In addition to |light emitting| there is also a key called - |light emitting'|, which simply places the annotation on the other - side of the node. - - You can configure the appearance of annotations in three ways: - \begin{itemize} - \item You can set the |every circuit annotation| style. - \item You can set the |every light emitting| style. - \item You can set the following key: - \begin{stylekey}{/tikz/annotation arrow} - This style should set the default |>| arrow to some nice value. - \end{stylekey} - \end{itemize} + \end{enumerate} + + In addition to |light emitting| there is also a key called + |light emitting'|, which simply places the annotation on the other side of + the node. + + You can configure the appearance of annotations in three ways: + % + \begin{itemize} + \item You can set the |every circuit annotation| style. + \item You can set the |every light emitting| style. + \item You can set the following key: + % + \begin{stylekey}{/tikz/annotation arrow} + This style should set the default |>| arrow to some nice value. + \end{stylekey} + \end{itemize} \end{key} - - - - \def\eelineexample#1#2{% \texttt{#1}\indexkey{#1} & @@ -1693,19 +1709,19 @@ Section~\ref{section-circuits-annotations}. \subsubsection{Symbols: Indicating Current Directions} - \label{section-ee-symbols} \label{section-circuits-ee-symbols} -There are two symbols for indicating current directions. These symbols -are defined directly inside |circuit ee|. +There \todosp{why two labels? The first doesn't seem to be used.} are two +symbols for indicating current directions. These symbols are defined directly +inside |circuit ee|. \medskip \noindent \begin{tabular}{p{5cm}ll} - \emph{Key} & \emph{Appearance}\\[.25em] - \eelineexample{/tikz/current direction}{} - \eelineexample{/tikz/current direction'}{} + \emph{Key} & \emph{Appearance}\\[.25em] + \eelineexample{/tikz/current direction}{} + \eelineexample{/tikz/current direction'}{} \end{tabular} \medskip @@ -1716,22 +1732,21 @@ The examples have been produced by (in essence) \subsubsection{Symbols: Basic Elements} The following table show basic symbols as they are depicted inside the -|circuit ee IEC| environment. To install one of alternate graphics, -you have to say |set| \meta{symbol name} |graphic=var| \meta{symbol name} -|IEC graphic|. +|circuit ee IEC| environment. To install one of alternate graphics, you have to +say |set| \meta{symbol name} |graphic=var| \meta{symbol name} |IEC graphic|. \medskip \noindent \begin{tabular}{p{5cm}ll} - \emph{Key} & \emph{Appearance} & \emph{Alternate appearance} \\[.25em] - \eelineexample{/tikz/resistor}{resistor} - \eelineexample{/tikz/inductor}{inductor} - \eelineexample{/tikz/capacitor}{} - \eelineexample{/tikz/battery}{} - \eelineexample{/tikz/bulb}{} - \eelineexample{/tikz/current source}{} - \eelineexample{/tikz/voltage source}{} - \eeendexample{/tikz/ground}{} + \emph{Key} & \emph{Appearance} & \emph{Alternate appearance} \\[.25em] + \eelineexample{/tikz/resistor}{resistor} + \eelineexample{/tikz/inductor}{inductor} + \eelineexample{/tikz/capacitor}{} + \eelineexample{/tikz/battery}{} + \eelineexample{/tikz/bulb}{} + \eelineexample{/tikz/current source}{} + \eelineexample{/tikz/voltage source}{} + \eeendexample{/tikz/ground}{} \end{tabular} @@ -1761,15 +1776,14 @@ The following table shows contacts as they are depicted inside the \noindent \begin{tabular}{p{5cm}ll} - \emph{Key} & \emph{Appearance} & \emph{Alternate appearance} \\[.25em] - \eelineexample{/tikz/contact}{} - \eelineexample{/tikz/make contact}{make contact} - \eelineexample{/tikz/break contact}{} + \emph{Key} & \emph{Appearance} & \emph{Alternate appearance} \\[.25em] + \eelineexample{/tikz/contact}{} + \eelineexample{/tikz/make contact}{make contact} + \eelineexample{/tikz/break contact}{} \end{tabular} \subsubsection{Units} - \label{section-circuits-units} The |circuit.ee| library predefines the following unit keys: @@ -1777,23 +1791,21 @@ The |circuit.ee| library predefines the following unit keys: \noindent \begin{tabular}{p{5cm}c} - \emph{Key} & \emph{Appearance of $1$ unit} \\[.25em] - \unitexample{/tikz/ampere} - \unitexample{/tikz/volt} - \unitexample{/tikz/ohm} - \unitexample{/tikz/siemens} - \unitexample{/tikz/henry} - \unitexample{/tikz/farad} - \unitexample{/tikz/coulomb} - \unitexample{/tikz/voltampere} - \unitexample{/tikz/watt} - \unitexample{/tikz/hertz} + \emph{Key} & \emph{Appearance of $1$ unit} \\[.25em] + \unitexample{/tikz/ampere} + \unitexample{/tikz/volt} + \unitexample{/tikz/ohm} + \unitexample{/tikz/siemens} + \unitexample{/tikz/henry} + \unitexample{/tikz/farad} + \unitexample{/tikz/coulomb} + \unitexample{/tikz/voltampere} + \unitexample{/tikz/watt} + \unitexample{/tikz/hertz} \end{tabular} - \subsubsection{Annotations} - \label{section-circuits-annotations} The |circuit.ee.IEC| library defines the following annotations: @@ -1801,99 +1813,101 @@ The |circuit.ee.IEC| library defines the following annotations: \noindent \begin{tabular}{p{5cm}ll} - \emph{Key} & \emph{Appearance} \\[.25em] - \annotationexample{/tikz/light emitting} - \annotationexample{/tikz/light dependent} - \annotationexample{/tikz/direction info} - \annotationexample{/tikz/adjustable} + \emph{Key} & \emph{Appearance} \\[.25em] + \annotationexample{/tikz/light emitting} + \annotationexample{/tikz/light dependent} + \annotationexample{/tikz/direction info} + \annotationexample{/tikz/adjustable} \end{tabular} \medskip The lines have been produced using, in essence, +% \begin{codeexample}[code only] \draw (0,0) to [resistor=light emitting] (2,0) to [diode=light emitting'] (4,0); \end{codeexample} +% and similarly for the other annotations. \subsubsection{Implementation: The EE-Symbols Shape Library} -The \tikzname\ libraries depend on two shape libraries, which are -included automatically. Usually, you will not need to use these shapes -directly. +The \tikzname\ libraries depend on two shape libraries, which are included +automatically. Usually, you will not need to use these shapes directly. \begin{pgflibrary}{shapes.gates.ee} - This library defines basic shapes that can be used by all ee-circuit - libraries. Currently, it defines the following shapes: - \begin{itemize} - \item |rectangle ee| - \item |circle ee| - \item |direction ee| - \end{itemize} - Additionally, the library defines the following arrow tip: - The |direction ee| arrow tip is basically the same as a |triangle 45| - arrow tip with rounded joins. - - \begin{tabular}{ll} - \symarrow{direction ee} - \end{tabular} - - However, unlike normal arrow tips, its size does \emph{not} depend on - the current line width. Rather, it depends on the value of its - arrow options, which should be set to the desired size. Thus, you - should say something like |\pgfsetarrowoptions{direction ee}{5pt}| to - set the size of the arrow. + This library defines basic shapes that can be used by all ee-circuit + libraries. Currently, it defines the following shapes: + % + \begin{itemize} + \item |rectangle ee| + \item |circle ee| + \item |direction ee| + \end{itemize} + % + Additionally, the library defines the following arrow tip: The + |direction ee| arrow tip is basically the same as a |triangle 45| arrow tip + with rounded joins. + + \begin{tabular}{ll} + \symarrow{direction ee} + \end{tabular} + + However, unlike normal arrow tips, its size does \emph{not} depend on the + current line width. Rather, it depends on the value of its arrow options, + which should be set to the desired size. Thus, you should say something + like |\pgfsetarrowoptions{direction ee}{5pt}| to set the size of the arrow. \end{pgflibrary} \begin{shape}{rectangle ee} - This shape is completely identical to a normal |rectangle|, only - there are two additional anchors: The |input| anchor is an alias for - the |west| anchor, while the |output| anchor is an alias for the - |east| anchor. + This shape is completely identical to a normal |rectangle|, only there are + two additional anchors: The |input| anchor is an alias for the |west| + anchor, while the |output| anchor is an alias for the |east| anchor. \end{shape} \begin{shape}{circle ee} - Like the |rectangle ee| shape, only for circles. + Like the |rectangle ee| shape, only for circles. \end{shape} \begin{shape}{direction ee} - This shape is rather special. It is intended to be used to ``turn an - arrow tip into a shape.'' First, you should set the following key to - the name of an arrow tip: - \begin{key}{/pgf/direction ee arrow=\meta{right arrow tip name}} - The value of this key will be used for the arrow tip depicted in - an |direction ee| shape. - \end{key} - When a node of shape |direction ee| is created, several things - happen: - \begin{enumerate} - \item The size of the shape is computed according to the following - rules: The width of the shape is set up so that the left border of - the shape is at the left end of the arrow tip and the right border - is at the right end of the arrow tip. These left and right - ``ends'' of the arrow are the tip end and the back end specified - by the arrow itself (see Section~\ref{section-arrow-terminology} - for details). You usually need not worry about this width - setting. - - By comparison, the height of the arrow is given by the current - setting of |minimum height|. Thus, this key must have been set up - correctly to reflect the ``real'' height of the arrow tip. The - reason is that the height of an arrow is not specified when arrows - are declared and is, thus, not available, here. - - Possibly, the height computation will change in the future to - reflect the real height of the arrow, so you should generally - set up the |minimum height| to be the same as the real height. - \item A straight line from left to right inside the shape's - boundaries is added to the background path. - \item The arrow tip, pointing right, is drawn before the background - path. - \end{enumerate} - The anchors of this shape are just the compass anchors, which lie on - a rectangle whose width and height are the above-computed height and - width. - + This shape is rather special. It is intended to be used to ``turn an arrow + tip into a shape''. First, you should set the following key to the name of + an arrow tip: + % + \begin{key}{/pgf/direction ee arrow=\meta{right arrow tip name}} + The value of this key will be used for the arrow tip depicted in an + |direction ee| shape. + \end{key} + % + When a node of shape |direction ee| is created, several things happen: + % + \begin{enumerate} + \item The size of the shape is computed according to the following + rules: The width of the shape is set up so that the left border of + the shape is at the left end of the arrow tip and the right border + is at the right end of the arrow tip. These left and right ``ends'' + of the arrow are the tip end and the back end specified by the + arrow itself (see Section~\ref{section-arrow-terminology} for + details). You usually need not worry about this width setting. + + By comparison, the height of the arrow is given by the current + setting of |minimum height|. Thus, this key must have been set up + correctly to reflect the ``real'' height of the arrow tip. The + reason is that the height of an arrow is not specified when arrows + are declared and is, thus, not available, here. + + Possibly, the height computation will change in the future to + reflect the real height of the arrow, so you should generally set + up the |minimum height| to be the same as the real height. + \item A straight line from left to right inside the shape's boundaries + is added to the background path. + \item The arrow tip, pointing right, is drawn before the background + path. + \end{enumerate} + % + The anchors of this shape are just the compass anchors, which lie on a + rectangle whose width and height are the above-computed height and width. + % \begin{codeexample}[] \begin{tikzpicture} \pgfsetarrowoptions{direction ee}{6cm} @@ -1917,38 +1931,40 @@ directly. node[\placement] {\scriptsize\texttt{(s.\anchor)}}; \end{tikzpicture} \end{codeexample} + % \end{shape} \subsubsection{Implementation: The IEC-Style EE-Symbols Shape Library} \begin{pgflibrary}{shapes.gates.ee.IEC} - This library defines shapes for depicting ee symbols according to - the IEC recommendations. These shapes will typically be - used in conjunction with the graphic mechanism detailed earlier, but - you can also used them directly. + This library defines shapes for depicting ee symbols according to the IEC + recommendations. These shapes will typically be used in conjunction with + the graphic mechanism detailed earlier, but you can also used them + directly. \end{pgflibrary} \begin{shape}{generic circle IEC} - This shape inherits from |circle ee|, which in turn is just a normal - |circle| with additional |input| and |output| anchors at the left - and right ends. However, additionally, this shape allows you to - specify a path that should be added before the background path using - the following key: - \begin{key}{/pgf/generic circle IEC/before background=\meta{code}} - When a node of shape |generic circle IEC| is created, the current - setting of this key is used as the ``before background path.'' - This means that after the circle's background has been - drawn/filled/whatever, the \meta{code} is executed. - - When the \meta{code} is executed, the coordinate system will have - been transformed in such a way that the point - $(1\mathrm{pt},0\mathrm{pt})$ lies at the right end of the circle - and $(0\mathrm{pt},1\mathrm{pt})$ lies at the top of the - circle. (More precisely, these points will lie exactly on the - middle of the radial line.) - \end{key} - Here is an examples of how to use this shape: + This shape inherits from |circle ee|, which in turn is just a normal + |circle| with additional |input| and |output| anchors at the left and right + ends. However, additionally, this shape allows you to specify a path that + should be added before the background path using the following key: + % + \begin{key}{/pgf/generic circle IEC/before background=\meta{code}} + When a node of shape |generic circle IEC| is created, the current + setting of this key is used as the ``before background path''. This + means that after the circle's background has been + drawn/filled/whatever, the \meta{code} is executed. + + When the \meta{code} is executed, the coordinate system will have been + transformed in such a way that the point $(1\mathrm{pt},0\mathrm{pt})$ + lies at the right end of the circle and $(0\mathrm{pt},1\mathrm{pt})$ + lies at the top of the circle. (More precisely, these points will lie + exactly on the middle of the radial line.) + \end{key} + % + Here is an examples of how to use this shape: + % \begin{codeexample}[] \tikz \node [generic circle IEC, /pgf/generic circle IEC/before background={ @@ -1960,15 +1976,15 @@ directly. }, draw] {Hello world}; \end{codeexample} + % \end{shape} - \begin{shape}{generic diode IEC} - This shape is used to depict diodes. The main shape is taken up by a - ``right pointing'' triangle. The anchors are positioned on the border of - a rectangle around the diode, see the below example. The - diode's size is based on the current settings of |minimum width| and - |minimum height|. + This shape is used to depict diodes. The main shape is taken up by a + ``right pointing'' triangle. The anchors are positioned on the border of a + rectangle around the diode, see the below example. The diode's size is + based on the current settings of |minimum width| and |minimum height|. + % \begin{codeexample}[] \begin{tikzpicture} \node[name=s,shape=generic diode IEC,shape example,minimum size=6cm] {}; @@ -1982,22 +1998,23 @@ directly. \end{tikzpicture} \end{codeexample} - This shape, like the |generic circle IEC| shape, is generic in the - sense that there is a special key that is used for the before - background drawings: - \begin{key}{/pgf/generic diode IEC/before background=\meta{code}} - Similarly to the |generic circle IEC| shape, when a node of shape - |generic diode IEC| is created, the current setting of this key is - used as the ``before background path.'' - When the \meta{code} is executed, the coordinate system will have - been transformed in such a way that the origin is at the ``tip'' - of the diode's triangle, the point $(0\mathrm{pt},1\mathrm{pt})$ - is exactly half the diode's height above this origin, and - the point $(1\mathrm{pt},0\mathrm{pt})$ is half the diode's height - to the right of the origin. - - The idea is that you use this key to draw different kinds of diode - endings. + This shape, like the |generic circle IEC| shape, is generic in the sense + that there is a special key that is used for the before background + drawings: + % + \begin{key}{/pgf/generic diode IEC/before background=\meta{code}} + Similarly to the |generic circle IEC| shape, when a node of shape + |generic diode IEC| is created, the current setting of this key is used + as the ``before background path''. When the \meta{code} is executed, + the coordinate system will have been transformed in such a way that the + origin is at the ``tip'' of the diode's triangle, the point + $(0\mathrm{pt},1\mathrm{pt})$ is exactly half the diode's height above + this origin, and the point $(1\mathrm{pt},0\mathrm{pt})$ is half the + diode's height to the right of the origin. + + The idea is that you use this key to draw different kinds of diode + endings. + % \begin{codeexample}[] \tikz \node [minimum size=1cm,generic diode IEC, /pgf/generic diode IEC/before background={ @@ -2011,15 +2028,14 @@ directly. }, draw] {}; \end{codeexample} - \end{key} + \end{key} \end{shape} - - \begin{shape}{breakdown diode IEC} - This shape is used to depict a bidirectional breakdown diode. The - diode's size is based on the current settings of |minimum width| and - |minimum height|. + This shape is used to depict a bidirectional breakdown diode. The diode's + size is based on the current settings of |minimum width| and + |minimum height|. + % \begin{codeexample}[] \begin{tikzpicture} \node[name=s,shape=breakdown diode IEC,shape example,minimum width=6cm,minimum height=4cm] {}; @@ -2032,22 +2048,23 @@ directly. node[\placement] {\scriptsize\texttt{(s.\anchor)}}; \end{tikzpicture} \end{codeexample} + % \end{shape} \begin{shape}{var resistor IEC} - This shape is used to depict a variant version of a resistor. Its - size is computed as for a rectangle (thus, its size depends things - like the |minimum height|). Then, inside this rectangle, a - background path is set up according to the following rule: Starting - from the left end, zigzag segments are added to the path. Each - segment consists of a line at a 45 degree angle going up to the top - of the rectangle, then going down to the bottom, then going up to - mid height of the node. As many segments as possible are put inside - as possible. The last segment is then connected to the output anchor - via a straight line. - - All of this means that, in general, the shape should be much wider - than high. + This shape is used to depict a variant version of a resistor. Its size is + computed as for a rectangle (thus, its size depends things like the + |minimum height|). Then, inside this rectangle, a background path is set up + according to the following rule: Starting from the left end, zigzag + segments are added to the path. Each segment consists of a line at a 45 + degree angle going up to the top of the rectangle, then going down to the + bottom, then going up to mid height of the node. As many segments as + possible are put inside as possible. The last segment is then connected to + the output anchor via a straight line. + + All of this means that, in general, the shape should be much wider than + high. + % \begin{codeexample}[] \begin{tikzpicture} \node[name=s,shape=var resistor IEC,shape example,minimum width=7cm,minimum height=1cm] {}; @@ -2060,20 +2077,20 @@ directly. node[\placement] {\scriptsize\texttt{(s.\anchor)}}; \end{tikzpicture} \end{codeexample} + % \end{shape} - \begin{shape}{inductor IEC} - This shape is used to depict an inductor, using a bumpy line. Its - size is computed as follows: Any text and |inner sep| are ignored - (and should normally not be given). The |minimum height| plus - (twice) the |outer ysep| specify the distance between the |north| - and |south| anchors, similarly for the |minimum width| plus the - |outer xsep| for the |east| and |west|. - The bumpy line is drawn starting from the lower left corner to the - lower right corner with bumps being half-circles whose height is - exactly the |minimum height|. The |center| of the shape is just - above the |south| anchor, at a distance of the |outer ysep|. + This shape is used to depict an inductor, using a bumpy line. Its size is + computed as follows: Any text and |inner sep| are ignored (and should + normally not be given). The |minimum height| plus (twice) the |outer ysep| + specify the distance between the |north| and |south| anchors, similarly for + the |minimum width| plus the |outer xsep| for the |east| and |west|. The + bumpy line is drawn starting from the lower left corner to the lower right + corner with bumps being half-circles whose height is exactly the + |minimum height|. The |center| of the shape is just above the |south| + anchor, at a distance of the |outer ysep|. + % \begin{codeexample}[] \begin{tikzpicture} \node[name=s,shape=inductor IEC,shape example,minimum width=7cm,minimum height=1cm] {}; @@ -2086,15 +2103,16 @@ directly. node[\placement] {\scriptsize\texttt{(s.\anchor)}}; \end{tikzpicture} \end{codeexample} - Just as for a |var resistor IEC|, as many bumps as possible are - added and the last bump is connected to the output anchor via a - straight line. + % + Just as for a |var resistor IEC|, as many bumps as possible are added and + the last bump is connected to the output anchor via a straight line. \end{shape} \begin{shape}{capacitor IEC} - This shape is based on a |rectangle ee|. However, instead of a - rectangle as the background path, only the ``left and right lines'' - that make up the rectangle are drawn. + This shape is based on a |rectangle ee|. However, instead of a rectangle as + the background path, only the ``left and right lines'' that make up the + rectangle are drawn. + % \begin{codeexample}[] \begin{tikzpicture} \node[name=s,shape=capacitor IEC,shape example, @@ -2108,30 +2126,36 @@ directly. node[\placement] {\scriptsize\texttt{(s.\anchor)}}; \end{tikzpicture} \end{codeexample} + % \end{shape} \begin{shape}{battery IEC} - This shape is similar to a |capacitor IEC|, however, the right line is - only half the height of the left line. + This shape is similar to a |capacitor IEC|, however, the right line is only + half the height of the left line. + % \begin{codeexample}[] \tikz \node[shape=battery IEC,shape example,minimum size=2cm, inner sep=0pt] {}; \end{codeexample} + % \end{shape} \begin{shape}{ground IEC} - This shape is similar to a |batter IEC|, only three lines of - different heights are drawn. + This shape is similar to a |batter IEC|, only three lines of different + heights are drawn. + % \begin{codeexample}[] \tikz \node[shape=ground IEC,shape example,minimum size=2cm, inner sep=0pt] {}; \end{codeexample} + % \end{shape} \begin{shape}{make contact IEC} - This shape consists of a line going from the lower left corner to - the upper right corner. The size and anchors of this shape are - computed in the same way as for an |inductor IEC|. + This shape consists of a line going from the lower left corner to the upper + right corner. The size and anchors of this shape are computed in the same + way as for an |inductor IEC|. + % \begin{codeexample}[] \begin{tikzpicture} \node[name=s,shape=make contact IEC,shape example,minimum width=3cm,minimum height=1cm] {}; @@ -2144,25 +2168,28 @@ directly. node[\placement] {\scriptsize\texttt{(s.\anchor)}}; \end{tikzpicture} \end{codeexample} + % \end{shape} \begin{shape}{var make contact IEC} - This shape works like |make contact IEC|, only a little circle is - added to the path at the lower left corner. The radius of this - circle is one twelfth of the width of the node. + This shape works like |make contact IEC|, only a little circle is added to + the path at the lower left corner. The radius of this circle is one twelfth + of the width of the node. + % \begin{codeexample}[] \tikz \node[shape=var make contact IEC,shape example, minimum height=1cm,minimum width=3cm,inner sep=0pt] {}; \end{codeexample} + % \end{shape} \begin{shape}{break contact IEC} - This shape depicts a contact that can be broken. It works like - |make contact IEC|. + This shape depicts a contact that can be broken. It works like + |make contact IEC|. + % \begin{codeexample}[] \tikz \node[shape=break contact IEC,shape example, minimum height=1cm,minimum width=3cm,inner sep=0pt] {}; \end{codeexample} + % \end{shape} - -\endinput |