From d811e36dc59a626f32fe732ea5771b006a95a0d4 Mon Sep 17 00:00:00 2001 From: Karl Berry Date: Tue, 16 Jan 2018 22:44:45 +0000 Subject: tikz-sfc (16jan18) git-svn-id: svn://tug.org/texlive/trunk@46332 c570f23f-e606-0410-a88d-b1316a301751 --- .../tikz-sfc/tikzlibrarycircuits.plc.sfc.code.tex | 173 +++++++++++++++++++++ 1 file changed, 173 insertions(+) create mode 100644 Master/texmf-dist/tex/latex/tikz-sfc/tikzlibrarycircuits.plc.sfc.code.tex (limited to 'Master/texmf-dist/tex/latex/tikz-sfc') diff --git a/Master/texmf-dist/tex/latex/tikz-sfc/tikzlibrarycircuits.plc.sfc.code.tex b/Master/texmf-dist/tex/latex/tikz-sfc/tikzlibrarycircuits.plc.sfc.code.tex new file mode 100644 index 00000000000..23383ac0170 --- /dev/null +++ b/Master/texmf-dist/tex/latex/tikz-sfc/tikzlibrarycircuits.plc.sfc.code.tex @@ -0,0 +1,173 @@ +%% This is file `tikzlibrarycircuits.plc.sfc.code.tex' +%% Version: 1.0 +%% Version date: 2018-01-16 +%% +%% Copyright (C) 2018 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 `tikzlibraryladder.code.tex' and its +%% accompanying documentation and `The Copyright Holder' referring to the +%% person Luis Paulo Laus. +%% +%% +%% IMPORTANT NOTICE: +%% +%% For error reports, comments or suggestions in case of UNCHANGED +%% versions send mail to: +%% laus@utfpr.edu.br +%% +\usetikzlibrary{circuits} +\usepgflibrary{shapes.gates.ee} +\makeatletter +\newcount\sfc@act@pos +\def\tikz@lib@sfc@lct@plain[#1]#2\pgf@stop{\tikzset{label={[label position=center,every info/.try,#1]#2}}} +\def\tikz@lib@sfc@lrg@plain[#1]#2\pgf@stop{\tikzset{label={[label position=right,every info/.try,#1]#2}}} +\def\tikz@lib@sfc@llf@plain[#1]#2\pgf@stop{\tikzset{label={[label position=left,every info'/.try,#1]#2}}} +\def\tikz@lib@sfc@action@lrg@plain[#1]#2\pgf@stop{\tikzset{sfc@actcommentopt/.style={#1},sfc@actcomment=#2}} +\def\tikz@lib@sfc@action@lct@plain[#1]#2\pgf@stop{\tikzset{sfc@actnameopt/.style={#1},sfc@actname=#2}} + +\pgfdeclareshape{sfcstepi} +{ + \inheritsavedanchors[from=rectangle] + \inheritanchorborder[from=rectangle] + \inheritanchor[from=rectangle]{north} + \inheritanchor[from=rectangle]{north west} + \inheritanchor[from=rectangle]{north east} + \inheritanchor[from=rectangle]{center} + \inheritanchor[from=rectangle]{west} + \inheritanchor[from=rectangle]{east} + \inheritanchor[from=rectangle]{mid} + \inheritanchor[from=rectangle]{mid west} + \inheritanchor[from=rectangle]{mid east} + \inheritanchor[from=rectangle]{base} + \inheritanchor[from=rectangle]{base west} + \inheritanchor[from=rectangle]{base east} + \inheritanchor[from=rectangle]{south} + \inheritanchor[from=rectangle]{south west} + \inheritanchor[from=rectangle]{south east} + \inheritbackgroundpath[from=rectangle] + \behindbackgroundpath{ + \pgfpathrectanglecorners + {\pgfpointadd{\southwest}{\pgfpoint{6*\pgfkeysvalueof{/pgf/inner xsep}}{6*\pgfkeysvalueof{/pgf/inner ysep}}}} + {\pgfpointadd{\northeast}{\pgfpointscale{-1}{\pgfpoint{6*\pgfkeysvalueof{/pgf/inner xsep}}{6*\pgfkeysvalueof{/pgf/inner ysep}}}}} + } +} + +%% Really dirt trick to customize info and info' keys in an action. +\def\sfc@copycode#1#2{ + \pgfkeyssetvalue{/tikz/#1/.@cmd}{\expandafter\pgfkeysvalueof{/tikz/#2/.@cmd}}% + \pgfkeyssetvalue{/tikz/#1/.@body}{\expandafter\pgfkeysvalueof{/tikz/#2/.@body}}% +} + +\tikzset{ + circuit plc sfc/.style= + { + circuit, + circuit declare symbol=sfctransition, + sfc@actinfo/.code={\pgfutil@ifnextchar[\tikz@lib@sfc@action@lct@plain{\tikz@lib@sfc@action@lct@plain[]}##1\pgf@stop}, + sfc@actinfo'/.code={\pgfutil@ifnextchar[\tikz@lib@sfc@action@lrg@plain{\tikz@lib@sfc@action@lrg@plain[]}##1\pgf@stop}, + set sfctransition graphic={draw,fill,shape=rectangle,circuit symbol size=width 1 height 0, + info/.code={\pgfutil@ifnextchar[\tikz@lib@sfc@lrg@plain{\tikz@lib@sfc@lrg@plain[]}####1\pgf@stop}, + info'/.code={\pgfutil@ifnextchar[\tikz@lib@sfc@llf@plain{\tikz@lib@sfc@llf@plain[]}####1\pgf@stop}}, + sfcaqw/.initial=0\tikzcircuitssizeunit, % qualifier width + sfcanw/.initial=2.6\tikzcircuitssizeunit, % action name width + sfcah/.initial=2.6\tikzcircuitssizeunit, % action height + time/.initial=, % action duration to be used with qualifier D, L, DS, SD, LS + qualifier/.initial=, % action qualifier + sfc@actname/.initial=, % action name + sfc@actnameopt/.style=, % action name options + sfc@actcomment/.initial=, % action comment + sfc@actcommentopt/.style=, % action comment options + circuit declare symbol=sfcstep, + set sfcstep graphic={draw,shape=rectangle,minimum size=2.6\tikzcircuitssizeunit, + /utils/exec={\global\sfc@act@pos=0}, + info/.code={\pgfutil@ifnextchar[\tikz@lib@sfc@lct@plain{\tikz@lib@sfc@lct@plain[]}####1\pgf@stop}, + info'/.code={\pgfutil@ifnextchar[\tikz@lib@sfc@llf@plain{\tikz@lib@sfc@llf@plain[]}####1\pgf@stop}}, + circuit declare symbol=sfcstepi, + set sfcstepi graphic={draw,shape=sfcstepi,minimum size=2.6\tikzcircuitssizeunit, + /utils/exec={\global\sfc@act@pos=0}, + info/.code={\pgfutil@ifnextchar[\tikz@lib@sfc@lct@plain{\tikz@lib@sfc@lct@plain[]}####1\pgf@stop}, + info'/.code={\pgfutil@ifnextchar[\tikz@lib@sfc@llf@plain{\tikz@lib@sfc@llf@plain[]}####1\pgf@stop}}, + circuit declare symbol=sfcstar, + set sfcstar graphic={shape=circle,label={center:$*$},minimum size=1.2ex}, + sfcaction/.style={ + append after command={% + \bgroup + [current point is local=true] + [every circuit annotation/.try] + [annotation arrow,-] + [label distance=2\tikzcircuitssizeunit] + [/utils/exec={\sfc@copycode{info}{sfc@actinfo}\sfc@copycode{info'}{sfc@actinfo'}}] + [/utils/exec={\pgftransformresetnontranslations}] + edge[every sfcaction/.try, ##1, to path={% + \ifnum\sfc@act@pos=0% + (\tikzlastnode.east) -- ++(\tikz@label@distance,0) + \else% + ($(\tikzlastnode.east) + (\tikz@label@distance,-\the\sfc@act@pos*\pgfkeysvalueof{/tikz/sfcah})$) + \fi% + \pgfextra{\edef\pgf@testq{\pgfkeysvalueof{/tikz/qualifier}} \edef\pgf@testt{\pgfkeysvalueof{/tikz/time}} \edef\pgf@testc{\pgfkeysvalueof{/tikz/sfc@actcomment}}}% + \ifx\pgf@testq\pgfutil@empty + node[/utils/exec={\global\advance\sfc@act@pos by1\relax},##1,every sfcactionname/.try,sfc@actnameopt/.try,draw,right,minimum height=\pgfkeysvalueof{/tikz/sfcah}, + minimum width=\pgfkeysvalueof{/tikz/sfcaqw}+\pgfkeysvalueof{/tikz/sfcanw}]{\pgfkeysvalueof{/tikz/sfc@actname}} + \ifx\pgf@testc\pgfutil@empty \else + node[every info'/.try,sfc@actcommentopt/.try,right,xshift=\pgfkeysvalueof{/tikz/sfcaqw}+\pgfkeysvalueof{/tikz/sfcanw}]{\pgfkeysvalueof{/tikz/sfc@actcomment}} + \fi + \else + \ifx\pgf@testt\pgfutil@empty + node[/utils/exec={\global\advance\sfc@act@pos by1\relax},every sfcactionname/.try,##1,sfc@actnameopt/.try,draw,right,xshift=\pgfkeysvalueof{/tikz/sfcaqw}, + minimum height=\pgfkeysvalueof{/tikz/sfcah},minimum width=\pgfkeysvalueof{/tikz/sfcanw}]{\pgfkeysvalueof{/tikz/sfc@actname}} + node[every sfcqualifier/.try,##1,draw,right,minimum height=\pgfkeysvalueof{/tikz/sfcah}, + minimum width=\pgfkeysvalueof{/tikz/sfcaqw}]{\pgfkeysvalueof{/tikz/qualifier}} + \ifx\pgf@testc\pgfutil@empty \else + node[every info'/.try,sfc@actcommentopt/.try,right,xshift=\pgfkeysvalueof{/tikz/sfcaqw}+\pgfkeysvalueof{/tikz/sfcanw}]{\pgfkeysvalueof{/tikz/sfc@actcomment}} + \fi + \else + node[/utils/exec={\global\advance\sfc@act@pos by2\relax},##1,draw,right,yshift=-0.5*\pgfkeysvalueof{/tikz/sfcah}), + minimum height=2*\pgfkeysvalueof{/tikz/sfcah},minimum width=\pgfkeysvalueof{/tikz/sfcaqw}]{} + node[every sfcactionname/.try,##1,sfc@actnameopt/.try,draw,right,xshift=\pgfkeysvalueof{/tikz/sfcaqw},yshift=-0.5*\pgfkeysvalueof{/tikz/sfcah}, + minimum height=2*\pgfkeysvalueof{/tikz/sfcah},minimum width=\pgfkeysvalueof{/tikz/sfcanw}]{\pgfkeysvalueof{/tikz/sfc@actname}}% + node[every sfcqualifier/.try,right,minimum height=\pgfkeysvalueof{/tikz/sfcah}, + minimum width=\pgfkeysvalueof{/tikz/sfcaqw}]{\pgfkeysvalueof{/tikz/qualifier}} + node[every sfctime/.try,right,yshift=-\pgfkeysvalueof{/tikz/sfcah},minimum height=\pgfkeysvalueof{/tikz/sfcah}, + minimum width=\pgfkeysvalueof{/tikz/sfcaqw}]{\pgfkeysvalueof{/tikz/time}} + \ifx\pgf@testc\pgfutil@empty \else + node[every info'/.try,sfc@actcommentopt/.try,right,xshift=\pgfkeysvalueof{/tikz/sfcaqw}+\pgfkeysvalueof{/tikz/sfcanw}, + yshift=-0.5*\pgfkeysvalueof{/tikz/sfcah}]{\pgfkeysvalueof{/tikz/sfc@actcomment}} + \fi + \fi + \fi + }] () + \tikz@after@path% + \egroup% + } + }, + circuit declare symbol=flow direction, + circuit declare symbol=flow direction', + set flow direction graphic = flow direction sfc graphic, + set flow direction' graphic = flow direction' sfc graphic, + flow direction sfc graphic/.style = { + shape=direction ee, + circuit symbol filled, + flow direction arrow, + minimum width = .5*\the\tikzcircuitssizeunit+.3*\the\pgflinewidth, + minimum height = .5*\the\tikzcircuitssizeunit+.3*\the\pgflinewidth, + transform shape + }, + flow direction' sfc graphic/.style = { + flow direction sfc graphic, + rotate=180 + }, + flow direction arrow/.style = { + /utils/exec={\pgfsetarrowoptions{direction ee}{1.3065*.5*\the\tikzcircuitssizeunit+1.3065*.3*\the\pgflinewidth}}, + >=direction ee, + direction ee arrow = direction ee, + }, + every circuit plc sfc/.try + } +} +\makeatother + +\endinput \ No newline at end of file -- cgit v1.2.3