diff options
Diffstat (limited to 'Master')
-rw-r--r-- | Master/texmf-dist/doc/latex/tikz-karnaugh/tikzlibrarykarnaugh.code.tex | 470 |
1 files changed, 0 insertions, 470 deletions
diff --git a/Master/texmf-dist/doc/latex/tikz-karnaugh/tikzlibrarykarnaugh.code.tex b/Master/texmf-dist/doc/latex/tikz-karnaugh/tikzlibrarykarnaugh.code.tex deleted file mode 100644 index ad49dbd4284..00000000000 --- a/Master/texmf-dist/doc/latex/tikz-karnaugh/tikzlibrarykarnaugh.code.tex +++ /dev/null @@ -1,470 +0,0 @@ -%% This is file `tikzlibrarykarnaugh.code.tex' formerly known as `tikz-karnaugh.tex', -%% Version 1.1 of 10 January 2018 -%% -%% Copyright (C) 2017 by Luis Paulo Laus, laus@utfpr.edu.br -%% -%% This package can be redistributed and/or modified under the terms -%% of the LaTeX Project Public License distributed from CTAN -%% archives in directory macros/latex/base/lppl.txt; either -%% version 1 of the License, or (at your option) any later version, -%% with `The Package' referring to the software `tikzlibrarykarnaugh.code.tex' and its -%% accompanying documentation and `The Copyright Holder' referring to the -%% person Luis Paulo Laus. -%% -%% This software is based on Andreas W. Wieland's kvmacros.tex to whom -%% the author wished to express his gratitude. -%% -%% IMPORTANT NOTICE: -%% -%% For error reports, comments or suggestions in case of UNCHANGED -%% versions send mail to: -%% laus@utfpr.edu.br -%% -%% -\typeout{} -\typeout{Macros for typesetting Karnaugh maps} -\typeout{Version 1.1 of 10 January 2018} -\typeout{by Luis Paulo Laus, laus@utfpr.edu.br} -\typeout{} -%% -%% Change History: -%% 1.0: 22 December 2017: Original Version ported from kvmacros.tex -%% 1.1: 10 January 2018: new style for the map outer box. Support for -%% options in the identifiers and values lists. New vertical mode. -%% New keys to enable indices and disable bars. Macro file renamed -%% to proper tikz library file name. -%% -%% -%% -%% Setting up some TikZ parameters for Karnaugh Maps -%% -\tikzset{ - karnaugh/.style={ - kmbar/.style={black,|-|,thin}, - kmbar label/.style={black}, - bar sep/.style={kmbar sep={##1}}, - bar top sep/.style={kmbar top sep={##1}}, - bar left sep/.style={kmbar left sep={##1}}, - kmindex/.style={red,font=\tiny}, - karnaugh index/.style={kmindex/.style={##1}}, - kmcell/.style={black}, - kmvar/.style={black}, - kmbox/.style={thin}, - kmlines/.style={thin}, - every karnaugh/.try, - enable indices/.is if=enableindices, - disable bars/.is if=disablebars, - } -} - -\pgfkeys{/pgf/.cd, - kmbar sep/.initial=0.2\kmunitlength, - kmbar top sep/.initial=1\kmunitlength, - kmbar left sep/.initial=1\kmunitlength, -} - -%% -%% New ifs for the options above -%% -\newif\ifenableindices -\enableindicesfalse -\newif\ifdisablebars -\disablebarsfalse -%% -%% We need a fixed dimension for a single field in a Karnaugh map -%% and also an auxiliary dimension to place the bars. -%% -\newdimen\kmunitlength -\newdimen\kmtemplength -\kmunitlength=8mm -%% -%% First, we have to introduce some counters: -%% -%% \kmrecursiondepth is used to control the recursion of the -%% \karnaughmakemap. -%% -\newcount\kmrecursiondepth -%% -%% The \kmindexcounter is needed for the indices in the fields of the -%% diagrams. -%% -\newcount\kmindexcounter -%% -%% \kmxsize and \kmysize store the dimensions of an entire diagram. -%% -\newcount\kmxsize -\newcount\kmysize -%% -%% Some counters are necessary to compute the bars for the variable -%% identifiers: -%% -\newcount\kmvarno -\newcount\kmxvarno -\newcount\kmyvarno -\newcount\kmbarstart -\newcount\kmbarlength -\newcount\kmbarnum -\newcount\kmbarmove -\newcount\kmtemppos -%% -%% Single cells in a diagram should be indexed, which makes the map easier to -%% use (ok, not really, but it might be useful). -%% -\def\kmcurrentindex{% -\the\kmindexcounter\global\advance\kmindexcounter by 1}% -%% -%% We need a macro that computes the powers of two: -%% -\def\kmpoweroftwo#1#2{{% Computes #1=2^#2, both of which have to be counters - \ifnum#2>0 - \global\multiply#1 by 2 - \advance#2 by -1 - \kmpoweroftwo{#1}{#2} - \fi}} -%% -%% The macros \kmargumentstring and \kmsetoptstr are needed to -%% process the variable-length parameters in \karnaughmap: -%% -\def\kmargumentstring#1{\gdef\kmstringbuf{#1{}\noexpand\end}} -%% -%% The macro \kmsetoptstr reads one token from the list of parameters in -%% \karnaughmap in the form <[opt]>srt and sets the optional style kmtempsty -%% and saves its contents of the string srt in macro \kmstr -%% -\def\kmsetoptstr{\expandafter\kmgetonetok\kmstringbuf} -%% -%% The macros \kmgetonetok, \kmsplittok and \kmoptstrmake are -%% auxiliary macros used to split the token and save to contents -%% -\def\kmgetonetok#1#2\end{\expandafter\kmsplittok#1{}\end \gdef\kmstringbuf{#2\noexpand\end}} -\def\kmsplittok#1#2\end{\ifx#1[ \kmoptstrmake#2\end \else \kmoptstrmake]#1#2\end \fi} -\def\kmoptstrmake#1]#2\end{\tikzset{kmtempsty/.style={#1}} \edef\kmstr{#2}}%\typeout{Teste #1 e #2}} -%%\def\kmoptstrmake#1]#2\end{Test: #1 and #2.\par} -%% -%% The macro \karnaughmakemap calls itself recursively until the parameter #1 -%% equals 1, whereupon it draws one cell contents in a node and, if enabled, -%% another node with the index. -%% -\def\karnaughmakemap#1#2#3#4{{% - \kmrecursiondepth #1\relax - \ifnum\kmrecursiondepth>1 - \divide\kmrecursiondepth by 2 - \edef\tempx{#3} - \edef\tempy{#4} - \kmtemppos=\tempx\relax - \advance\kmtemppos by \kmrecursiondepth - \edef\tempxs{\the\kmtemppos} - \kmtemppos=\tempy\relax - \advance\kmtemppos by \kmrecursiondepth - \edef\tempys{\the\kmtemppos} - - \ifcase#2 -%% -%% The parameter #2 of \karnaughmakemap is needed because the inner Karnaugh -%% maps need to be mirrored. This is achieved by the following case-statement, -%% which orders the inner Karnaugh maps properly: -%% +---+---+ -%% | 0 | 1 | -%% +---+---+ -%% | 2 | 3 | -%% +---+---+ -%% -%% Case 0: top-left Karnaugh map - \karnaughmakemap{\kmrecursiondepth}{0}{\tempx}{\tempys}% - \karnaughmakemap{\kmrecursiondepth}{1}{\tempxs}{\tempys}% - \karnaughmakemap{\kmrecursiondepth}{2}{\tempx}{\tempy}% - \karnaughmakemap{\kmrecursiondepth}{3}{\tempxs}{\tempy}% - \or -%% Case 1: top-right Karnaugh map - \karnaughmakemap{\kmrecursiondepth}{1}{\tempxs}{\tempys}% - \karnaughmakemap{\kmrecursiondepth}{0}{\tempx}{\tempys}% - \karnaughmakemap{\kmrecursiondepth}{3}{\tempxs}{\tempy}% - \karnaughmakemap{\kmrecursiondepth}{2}{\tempx}{\tempy}% - \or -%% Case 2: bottom-left Karnaugh map - \karnaughmakemap{\kmrecursiondepth}{2}{\tempx}{\tempy}% - \karnaughmakemap{\kmrecursiondepth}{3}{\tempxs}{\tempy}% - \karnaughmakemap{\kmrecursiondepth}{0}{\tempx}{\tempys}% - \karnaughmakemap{\kmrecursiondepth}{1}{\tempxs}{\tempys}% - \or -%% Case 3: bottom-right Karnaugh map - \karnaughmakemap{\kmrecursiondepth}{3}{\tempxs}{\tempy}% - \karnaughmakemap{\kmrecursiondepth}{2}{\tempx}{\tempy}% - \karnaughmakemap{\kmrecursiondepth}{1}{\tempxs}{\tempys}% - \karnaughmakemap{\kmrecursiondepth}{0}{\tempx}{\tempys}% - \fi - \else - \ifenableindices - \node[kmindex,shift={(-0.3\kmunitlength,0.3\kmunitlength)}] - at (#3\kmunitlength,#4\kmunitlength) {\kmcurrentindex}; - \fi - \kmsetoptstr{} % reads argument as <[opt]>str - \node[kmcell,kmtempsty] at (#3\kmunitlength,#4\kmunitlength){\kmstr};% - \fi}}% -%% -%% \karnaughmaketopbar typesets the variable bars of a Karnaugh map that are -%% located on top of the diagram: -%% -\def\karnaughmaketopbar{% - \kmbarstart=1 - \kmpoweroftwo{\kmbarstart}{\kmxvarno} % \kmybarstart is the start -% position for the \foreach - \kmbarlength=\kmbarstart - \multiply\kmbarlength by 2 % \kmbarlength is the length of a bar - \kmbarmove=\kmbarstart - \multiply\kmbarmove by 4 % This is the move distance for the \draw. - \kmbarnum=\kmxsize - \divide\kmbarnum by \kmbarmove % This is the number of repetitions for -% the \foreach. -% The highest-order variable bar needs a special treatment: - \ifnum\kmbarnum=0\kmbarnum=1\divide\kmbarlength by 2\fi - \advance\kmbarmove by \kmbarstart - \kmtemplength=\pgfkeysvalueof{/pgf/kmbar top sep} - \multiply \kmtemplength by \kmxvarno - \advance \kmtemplength by \pgfkeysvalueof{/pgf/kmbar sep} - \advance \kmtemplength by \kmysize\kmunitlength - \kmsetoptstr % reads argument as <[opt]>str - \ifnum\kmbarnum=1 - \draw[kmbar,xshift=\kmbarstart\kmunitlength,yshift=\kmtemplength,kmtempsty] - (0,0) -- node[above, kmbar label,kmtempsty]{\kmstr} (\kmbarlength\kmunitlength,0); - \else - \foreach \x in {\kmbarstart,\kmbarmove,...,\kmxsize} - \draw[kmbar,xshift=\x\kmunitlength,yshift=\kmtemplength,kmtempsty] - (0,0) -- node[above, kmbar label,kmtempsty]{\kmstr} (\kmbarlength\kmunitlength,0); - \fi -} -%% -%% \karnaughmakeleftbar typesets the variable bars of a Karnaugh map that are -%% located on the left of the diagram: -%% -\def\karnaughmakeleftbar{% - \kmbarstart=1 - \kmpoweroftwo{\kmbarstart}{\kmyvarno} % \kmbarstart is the start -% position for the \foreach - \kmbarlength=\kmbarstart - \multiply\kmbarlength by 2 % \kmbarlength is the length of a bar - \kmbarmove=\kmbarstart - \multiply\kmbarmove by 4 % This now is the move distance for the -% \foreach. - \kmbarnum=\kmysize - \divide\kmbarnum by \kmbarmove % This now is the number of -% repetitions for the \draw. -%The highest-order variable bar needs a special treatment: - \ifnum\kmbarnum=0\kmbarstart=0\kmbarnum=1\divide\kmbarlength by 2\fi - \advance\kmbarmove by \kmbarstart - \kmtemplength=-\pgfkeysvalueof{/pgf/kmbar left sep} - \multiply \kmtemplength by \kmyvarno - \advance \kmtemplength by -\pgfkeysvalueof{/pgf/kmbar sep} - \kmsetoptstr % reads argument as <[opt]>str - \ifnum\kmbarnum=1 - \draw[kmbar,yshift=\kmbarstart\kmunitlength,xshift=\kmtemplength,kmtempsty] - (0,0) -- node[left,kmbar label,kmtempsty]{\kmstr} (0,\kmbarlength\kmunitlength); - \else - \foreach \y in {\kmbarstart,\kmbarmove,...,\kmysize} - \draw[kmbar,yshift=\y\kmunitlength,xshift=\kmtemplength,kmtempsty] - (0,0) -- node[left,kmbar label,kmtempsty]{\kmstr} (0,\kmbarlength\kmunitlength); - \fi -} -%% \karnaughmakebars calls \karnaughmaketopbar or \karnaughmakeleftbar -%% depending on whether \kmvarno is odd or even. -%% -\def\karnaughmakebars{% - \ifnum\kmvarno>0 - \let\next=\karnaughmakebars - \ifodd\kmvarno % We have to make a bar at the top - \advance\kmxvarno by -1 - \karnaughmaketopbar - \else % We have to make a bar at the left - \advance\kmyvarno by -1 - \karnaughmakeleftbar - \fi - \advance\kmvarno by -1 - \else - \let\next=\relax - \fi - \next -} -%% -%% \karnaughmap is the macro that a user calls if he wants to draw a -%% Karnaugh map: -%% -\def\karnaughmap#1#2#3#4#5{% -%% -%% #1 is the number of variables in the Karnaugh map -%% #2 is the identifier of the function -%% #3 is the list of identifiers of those variables -%% #4 is the list of tokens that have to be written into the map -%% #5 a possibly empty set of TikZ commands that will be drown before -%% the function values so the values will appear on top of them -%% - \kmvarno=#1 % \kmvarno is the total number of variables - \kmyvarno=#1 % \kmyvarno is the number of variable bars at the left - \divide\kmyvarno by 2 - \kmxvarno=#1 % \kmxvarno is the number of variable bars on top - \advance\kmxvarno by -\kmyvarno - \kmxsize=1 - \kmpoweroftwo{\kmxsize}{\kmxvarno} - \kmysize=1 - \kmpoweroftwo{\kmysize}{\kmyvarno} - \kmtemppos=\kmxsize - \advance\kmtemppos by -1 - \foreach \x in {1,...,\kmtemppos} - \draw[kmlines] (\x\kmunitlength,0) -- (\x\kmunitlength,\kmysize\kmunitlength); - \kmtemppos=\kmysize - \advance\kmtemppos by -1 - \ifnum\kmtemppos>0 - \foreach \y in {1,...,\kmtemppos} - \draw[kmlines] (0,\y\kmunitlength) -- (\kmxsize\kmunitlength,\y\kmunitlength); - \fi - \draw[kmbox] (0,0) rectangle (\kmxsize\kmunitlength,\kmysize\kmunitlength); - #5 - \ifdisablebars\relax\else - \node[kmvar,above left] at (0,\kmysize\kmunitlength){#2}; - \kmargumentstring{#3} - \karnaughmakebars - \fi - \pgftransformshift{\pgfpoint{0.5\kmunitlength}{0.5\kmunitlength}} - \kmvarno=#1 % \kmvarno is the total number of variables - \kmindexcounter=0 - \kmargumentstring{#4} - \karnaughmakemap{\the\kmysize}{0}{0}{0} - \ifodd\kmvarno - \divide\kmxsize by 2 - \karnaughmakemap{\the\kmysize}{1}{\the\kmxsize}{0} - \fi - \pgftransformreset -}% -%% Vertical Mode -%% The next three macros are similar to the ones for normal mode. -%% The macro \karnaughmakemapvert calls itself recursively until the parameter #1 -%% equals 1, whereupon it draws one cell contents in a node and, if enabled, -%% another node with the index. -%% -\def\karnaughmakemapvert#1#2#3#4{{% - \kmrecursiondepth #1\relax - \ifnum\kmrecursiondepth>1 - \divide\kmrecursiondepth by 2 - \edef\tempx{#3} - \edef\tempy{#4} - \kmtemppos=\tempx\relax - \advance\kmtemppos by \kmrecursiondepth - \edef\tempxs{\the\kmtemppos} - \kmtemppos=\tempy\relax - \advance\kmtemppos by \kmrecursiondepth - \edef\tempys{\the\kmtemppos} - - \ifcase#2 -%% -%% The parameter #2 of \karnaughmakemapvert is needed because the inner Karnaugh -%% maps need to be mirrored. This is achieved by the following case-statement, -%% which orders the inner Karnaugh maps properly: -%% +---+---+ -%% | 0 | 2 | -%% +---+---+ -%% | 1 | 3 | -%% +---+---+ -%% -%% Case 0: top-left Karnaugh map - \karnaughmakemapvert{\kmrecursiondepth}{0}{\tempx}{\tempys}% - \karnaughmakemapvert{\kmrecursiondepth}{1}{\tempx}{\tempy}% - \karnaughmakemapvert{\kmrecursiondepth}{2}{\tempxs}{\tempys}% - \karnaughmakemapvert{\kmrecursiondepth}{3}{\tempxs}{\tempy}% - \or -%% Case 1: bottom-left Karnaugh map - \karnaughmakemapvert{\kmrecursiondepth}{1}{\tempx}{\tempy}% - \karnaughmakemapvert{\kmrecursiondepth}{0}{\tempx}{\tempys}% - \karnaughmakemapvert{\kmrecursiondepth}{3}{\tempxs}{\tempy}% - \karnaughmakemapvert{\kmrecursiondepth}{2}{\tempxs}{\tempys}% - \or -%% Case 2: top-right Karnaugh map - \karnaughmakemapvert{\kmrecursiondepth}{2}{\tempxs}{\tempys}% - \karnaughmakemapvert{\kmrecursiondepth}{3}{\tempxs}{\tempy}% - \karnaughmakemapvert{\kmrecursiondepth}{0}{\tempx}{\tempys}% - \karnaughmakemapvert{\kmrecursiondepth}{1}{\tempx}{\tempy}% - \or -%% Case 3: bottom-right Karnaugh map - \karnaughmakemapvert{\kmrecursiondepth}{3}{\tempxs}{\tempy}% - \karnaughmakemapvert{\kmrecursiondepth}{2}{\tempxs}{\tempys}% - \karnaughmakemapvert{\kmrecursiondepth}{1}{\tempx}{\tempy}% - \karnaughmakemapvert{\kmrecursiondepth}{0}{\tempx}{\tempys}% - \fi - \else - \ifenableindices - \node[kmindex,shift={(-0.3\kmunitlength,0.3\kmunitlength)}] - at (#3\kmunitlength,#4\kmunitlength) {\kmcurrentindex};% - \fi - \kmsetoptstr{} % reads argument as <[opt]>str - \node[kmcell,kmtempsty] at (#3\kmunitlength,#4\kmunitlength){\kmstr};% - \fi}}% -%% -%% \karnaughmakebarsvert calls \karnaughmaketopbar or \karnaughmakeleftbar -%% depending on whether \kmvarno is odd or even. -%% -\def\karnaughmakebarsvert{% - \ifnum\kmvarno>0 - \let\next=\karnaughmakebarsvert - \ifodd\kmvarno % We have to make a bar at the left - \advance\kmyvarno by -1 - \karnaughmakeleftbar - \else % We have to make a bar at the top - \advance\kmxvarno by -1 - \karnaughmaketopbar - \fi - \advance\kmvarno by -1 - \else - \let\next=\relax - \fi - \next -} -%% -%% \karnaughmapvert is the macro that a user calls if he wants to draw a -%% Karnaugh map in vertical mode (not be confused with TeX vertical mode): -%% -\def\karnaughmapvert#1#2#3#4#5{% -%% -%% #1 is the number of variables in the Karnaugh map -%% #2 is the identifier of the function -%% #3 is the list of identifiers of those variables -%% #4 is the list of tokens that have to be written into the map -%% #5 a possibly empty set of TikZ commands that will be drown before -%% the function values so the values will appear on top of them -%% - \kmvarno=#1 % \kmvarno is the total number of variables - \kmxvarno=#1 % \kmxvarno is the number of variable bars on top - \divide\kmxvarno by 2 - \kmyvarno=#1 % \kmyvarno is the number of variable bars at the left - \advance\kmyvarno by -\kmxvarno - \kmxsize=1 - \kmpoweroftwo{\kmxsize}{\kmxvarno} - \kmysize=1 - \kmpoweroftwo{\kmysize}{\kmyvarno} - \kmtemppos=\kmxsize - \advance\kmtemppos by -1 - \ifnum\kmtemppos>0 - \foreach \x in {1,...,\kmtemppos} - \draw[kmlines] (\x\kmunitlength,0) -- (\x\kmunitlength,\kmysize\kmunitlength); - \fi - \kmtemppos=\kmysize - \advance\kmtemppos by -1 - \foreach \y in {1,...,\kmtemppos} - \draw[kmlines] (0,\y\kmunitlength) -- (\kmxsize\kmunitlength,\y\kmunitlength); - \draw[kmbox] (0,0) rectangle (\kmxsize\kmunitlength,\kmysize\kmunitlength); - #5 - \ifdisablebars\relax\else - \node[kmvar,above left] at (0,\kmysize\kmunitlength){#2}; - \kmargumentstring{#3} - \karnaughmakebarsvert - \fi - \pgftransformshift{\pgfpoint{0.5\kmunitlength}{0.5\kmunitlength}} - \kmvarno=#1 % \kmvarno is the total number of variables - \kmindexcounter=0 - \kmargumentstring{#4} - \ifodd\kmvarno - \divide\kmysize by 2 - \karnaughmakemapvert{\the\kmxsize}{0}{0}{\the\kmysize} - \karnaughmakemapvert{\the\kmxsize}{1}{0}{0} - \else - \karnaughmakemapvert{\the\kmxsize}{0}{0}{0} - \fi - \pgftransformreset -}% |