diff options
Diffstat (limited to 'graphics/pgf/contrib/commutative-diagrams/tikzlibrarycommutative-diagrams.ramma.code.tex')
-rw-r--r-- | graphics/pgf/contrib/commutative-diagrams/tikzlibrarycommutative-diagrams.ramma.code.tex | 158 |
1 files changed, 158 insertions, 0 deletions
diff --git a/graphics/pgf/contrib/commutative-diagrams/tikzlibrarycommutative-diagrams.ramma.code.tex b/graphics/pgf/contrib/commutative-diagrams/tikzlibrarycommutative-diagrams.ramma.code.tex new file mode 100644 index 0000000000..1854abb67e --- /dev/null +++ b/graphics/pgf/contrib/commutative-diagrams/tikzlibrarycommutative-diagrams.ramma.code.tex @@ -0,0 +1,158 @@ +% +% CoDi: Commutative Diagrams for TeX +% Copyright (c) 2015-2020 Paolo Brasolin <paolo.brasolin@gmail.com> +% SPDX-License-Identifier: MIT +% +% This file is part of CoDi 1.0.0, released on 2020/06/06 under MIT license. +% + +% ράμμα • (rámma) +% 1. suture +% 2. catgut +% 3. stitch + +% Ramma ties together the lower level libraries to define +% the user level functionality. NOTE: strictly no aesthetics, see mandyas. + +\usetikzlibrary[commutative-diagrams.bapto] +\usetikzlibrary[commutative-diagrams.ektropi] +\usetikzlibrary[commutative-diagrams.katharizo] +\usetikzlibrary[commutative-diagrams.koinos] +\usetikzlibrary[commutative-diagrams.ozos] +\usetikzlibrary[commutative-diagrams.mitra] +\usetikzlibrary[commutative-diagrams.velos] + +%==[ core concept ]============================================================= + +\pgfqkeys{/codi}{% TODO: is this the best scope to put the key into? + self naming/.style={ + /tikz/node contents/.forward to=/bapto/input, + /bapto/trigger/.forward to=/katharizo/input, + /katharizo/output/.forward to=/bapto/dispatcher + } +} + +%==[ baseline setup ]=========================================================== + +% Some mischief with handlers and baseline math/labeling functionality. + +\pgfqkeys{/codi}{ + .search also=/bapto, + .search also=/katharizo, + every thing/.style={ + /ektropi/restore, + /ektropi/add=/codi, + /ektropi/add=/bapto, + /ektropi/add=/katharizo + }, + every diagram/.style={% NOTE: restore hopefully unnecessary + /codi/every thing, + /ektropi/add=/codi/diagrams + }, + every layout/.style={% NOTE: restore actually unnecessary + /codi/every thing, + /ektropi/add=/codi/layouts, + /mitra/every node/.append style={/codi/every object} + }, + every object/.style={% NOTE: needed when inside matrices + /codi/every thing, + /ektropi/add=/codi/objects, + execute at begin node=$,% + execute at end node=$,% + /codi/self naming + }, + every arrow/.style={% NOTE: restore unnecessary + /codi/every thing, + /ektropi/add=/codi/arrows + }, + every label/.style={% NOTE: restore needed because inside edge + /codi/every thing, + /ektropi/add=/codi/labels, + execute at begin node=$,% + execute at end node=$,% + /codi/self naming + } +} + +% The user level keys are bound to the underlying parsers. + +\pgfkeys{ + /mitra/every matrix/.append style=/codi/every layout, + /ozos/every node/.append style=/codi/every object, + /velos/every path/.append style={ + /tikz/every edge/.append style=/codi/every arrow, + /tikz/every edge quotes/.append style=/codi/every label + } +} + +% I merge the macro syntax for objects and matrices. Convenient! + +\newif\ifkDRammaObjIsMatrix + +\def\kDRammaObjDecideWhetherIsMatrixThen#1{% + \def\kDRammaObjDWIM{\kDRammaObjDWIMSightThen{\kDRammaObjDWIMGobThen{#1}}}% + \expandafter\kDRammaObjDWIM\the\kDGrpTok\\\kD} + +\def\kDRammaObjDWIMSightThen#1#2\\% + {\kDIfNextHardCh\kD + {\kDRammaObjIsMatrixfalse#1}% + {\kDRammaObjIsMatrixtrue#1}} + +\def\kDRammaObjDWIMGobThen#1#2\kD{#1} + +\def\kDRammaObjOutput + {\ifkDRammaObjIsMatrix + \kDMitraParseMatrixTableThen\kDMitraOutput\else + \kDOzosOutput\fi} + +\def\kDRammaObj + {\kDFetchOptAndGrpThen + {\kDRammaObjDecideWhetherIsMatrixThen + \kDRammaObjOutput}} + +% Just an identity. +\let\kDRammaMor\kDVelos + +%==[ TikZ/pgf layer ]=========================================================== + +% I envelope the CoDi main macros in a simple key for maximal flexibility. + +\tikzset{ + codi/.code={% + \ifConTeXt\catcode`\|=12\fi% TODO: is it sufficient? investigate + \let\obj\kDRammaObj + \let\mor\kDRammaMor + }, + codi/.append style={/codi/every diagram} +} + +%==[ main macro ]=============================================================== + +\def\kDRamma + {\kDRammaMaybeFetchOptionsThen + \kDRammaOutput} + +\let\kDRammaOpen\kDRamma +\let\kDRammaShut\endtikzpicture + +%==[ fetching routine ]========================================================= + +\newtoks\kDRammaOptTok +\newtoks\kDRammaTmpTok + +\def\kDRammaMaybeFetchOptionsThen#1{% + \kDRammaOptTok={}% + \kDIfNextHardCh[% + {\kDRammaFetchOptionsThen{#1}}% + {#1}} + +\def\kDRammaFetchOptionsThen#1[#2]{\kDRammaOptTok={#2}#1} + +%==[ output routine ]=========================================================== + +\def\kDRammaOutput{% + \edef\kDAct{% + \noexpand\kDRammaTmpTok={% + \noexpand\tikzpicture[codi, \the\kDRammaOptTok]}}% + \kDAct + \the\kDRammaTmpTok} |