From 3096e54f272c662e1d3c9339395a1df3055e5b43 Mon Sep 17 00:00:00 2001 From: Karl Berry Date: Fri, 21 Dec 2012 00:14:00 +0000 Subject: tikz-cd (20dec12) git-svn-id: svn://tug.org/texlive/trunk@28588 c570f23f-e606-0410-a88d-b1316a301751 --- Master/texmf-dist/tex/latex/tikz-cd/tikz-cd.sty | 355 ++++++++++++------------ 1 file changed, 181 insertions(+), 174 deletions(-) (limited to 'Master/texmf-dist/tex/latex/tikz-cd') diff --git a/Master/texmf-dist/tex/latex/tikz-cd/tikz-cd.sty b/Master/texmf-dist/tex/latex/tikz-cd/tikz-cd.sty index 70839da0abb..e9879efa00b 100644 --- a/Master/texmf-dist/tex/latex/tikz-cd/tikz-cd.sty +++ b/Master/texmf-dist/tex/latex/tikz-cd/tikz-cd.sty @@ -1,21 +1,27 @@ % Copyright 2011, 2012 by FlorĂȘncio Neves % -% This file may be distributed and/or modified -% -% 1. under the LaTeX Project Public License and/or -% 2. under the GNU Public License. -% -\ProvidesPackage{tikz-cd}[2012/08/15 v0.3a Commutative diagrams with tikz.] -\RequirePackage{tikz}[2010/10/13] %pgf version 2.10 required +% This program is free software: you can redistribute it and/or modify +% it under the terms of the GNU General Public License as published by +% the Free Software Foundation, either version 3 of the License, or +% (at your option) any later version. + +% This program is distributed in the hope that it will be useful, +% but WITHOUT ANY WARRANTY; without even the implied warranty of +% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +% GNU General Public License for more details. + +% You should have received a copy of the GNU General Public License +% along with this program. If not, see . + +\ProvidesPackage{tikz-cd}[2012/12/19 v0.3b Commutative diagrams with tikz.] +\RequirePackage{tikz}[2010/10/13] % pgf version 2.10 required \usetikzlibrary{matrix} \newif\iftikzcd@mathmode -\newcount\tikzcd@targetrow -\newcount\tikzcd@targetcol \pgfqkeys{/tikz/commutative diagrams}{ - /tikz/commutative diagrams/.search also={/tikz}, + .search also={/tikz}, arrows/.style={ /tikz/commutative diagrams/every arrow/.append style={#1}}, labels/.style={ @@ -29,8 +35,7 @@ /tikz/preaction={ /tikz/draw=\pgfkeysvalueof{/tikz/commutative diagrams/background color}, /tikz/arrows=-, - /tikz/line width=% - \pgfkeysvalueof{/tikz/commutative diagrams/crossing over clearance}}}, + /tikz/line width=\pgfkeysvalueof{/tikz/commutative diagrams/crossing over clearance}}}, row sep/.code={\tikzcd@sep{row}{#1}}, column sep/.code={\tikzcd@sep{column}{#1}}, math mode/.is if=tikzcd@mathmode, @@ -39,18 +44,11 @@ /tikz/nodes={ execute at begin node=\iftikzcd@mathmode$\fi, %$ execute at end node=\iftikzcd@mathmode$\fi}}, %$ - start anchor/.code={% - \tikzcd@threefold{\tikzcd@setanchor{start}}{}% - {\tikzcd@setanchor{start}[]}#1\relax},% - end anchor/.code={% - \tikzcd@threefold{\tikzcd@setanchor{end}}{}% - {\tikzcd@setanchor{end}[]}#1\relax},% arrow style/.is choice} % generic arrow tip selection styles -\pgfqkeys{/tikz/commutative diagrams}{ - arrow style/generic/.style={ - /tikz/commutative diagrams/.cd, +\pgfkeysdef{/tikz/commutative diagrams/arrow style/generic}{% + \pgfqkeys{/tikz/commutative diagrams}{ rightarrow/.style={/tikz/arrows=-#1 to}, Rightarrow/.style={ /tikz/arrows=-#1 implies, @@ -63,56 +61,61 @@ Leftrightarrow/.style={ /tikz/arrows=#1 implies-#1 implies, /tikz/commutative diagrams/double line}, - mapsto/.style={/tikz/arrows=#1 |-#1 to}, - mapsfrom/.style={/tikz/arrows=#1 to-#1 |}, + mapsto/.style={/tikz/arrows=#1 |-#1 to},%| + mapsfrom/.style={/tikz/arrows=#1 to-#1 |},%| hookrightarrow/.style={/tikz/arrows=#1 right hook-#1 to}, hookleftarrow/.style={/tikz/arrows=#1 to-#1 left hook}, rightharpoonup/.style={/tikz/arrows=-#1 left to}, rightharpoondown/.style={/tikz/arrows=-#1 right to}, leftharpoonup/.style={/tikz/arrows=#1 right to-}, leftharpoondown/.style={/tikz/arrows=#1 left to-}, - dashrightarrow/.style={ - /tikz/arrows=-#1 to, - /tikz/commutative diagrams/dashed}, - dashleftarrow/.style={ - /tikz/arrows=#1 to-, - /tikz/commutative diagrams/dashed}, rightarrowtail/.style={/tikz/arrows=#1 to reversed-#1 to}, leftarrowtail/.style={/tikz/arrows=#1 to-#1 to reversed}, twoheadrightarrow/.style={/tikz/arrows=-#1 double to}, twoheadleftarrow/.style={/tikz/arrows=#1 double to-}, - dash/.style={/tikz/arrows=-}, - equal/.style={ - /tikz/arrows=-, - /tikz/commutative diagrams/double line}, - maps to/.code={\pgfsetarrowsstart{#1 |}}, + maps to/.code={\pgfsetarrowsstart{#1 |}},%| hook/.code={\pgfsetarrowsstart{#1 right hook}}, two heads/.code={\pgfsetarrowsend{#1 double to}}, - tail/.code={\pgfsetarrowsstart{#1 to reversed}}}, + tail/.code={\pgfsetarrowsstart{#1 to reversed}}}} + +\pgfqkeys{/tikz/commutative diagrams}{ + dash/.style={/tikz/arrows=-}, + dashrightarrow/.style={ + /tikz/commutative diagrams/rightarrow, + /tikz/commutative diagrams/dashed}, + dashleftarrow/.style={ + /tikz/commutative diagrams/leftarrow, + /tikz/commutative diagrams/dashed}, + equal/.style={ + /tikz/arrows=-, + /tikz/commutative diagrams/double line}, equals/.style={/tikz/commutative diagrams/equal}, rightsquigarrow/.style={ - /tikz/commutative diagrams/.cd,rightarrow,squiggly}, - leftsquigarrow/.style={/tikz/commutative diagrams/.cd,leftarrow,squiggly}, + /tikz/commutative diagrams/rightarrow, + /tikz/commutative diagrams/squiggly}, + leftsquigarrow/.style={ + /tikz/commutative diagrams/leftarrow, + /tikz/commutative diagrams/squiggly}, leftrightsquigarrow/.style={ - /tikz/commutative diagrams/.cd,leftrightarrow,squiggly}, + /tikz/commutative diagrams/leftrightarrow, + /tikz/commutative diagrams/squiggly}, squiggly/.code={% \expandafter\ifx\csname tikz@library@decorations.pathmorphing@loaded\endcsname\pgfutil@empty% \else\PackageError{tikz-cd}{You need to say % - \string\usetikzlibrary{decorations.pathmorphing} to use squiggly arrows}{}\fi}, - squiggly/.append style={ - decorate, - decoration={ - zigzag, - segment length=9.25\pgflinewidth, - amplitude=1.9\pgflinewidth, - post=lineto, post length=6\pgflinewidth, - pre=lineto, pre length=6\pgflinewidth, - #1}}} + \string\usetikzlibrary{decorations.pathmorphing} to use squiggly arrows}{}\fi% + \pgfkeysalso{ + /tikz/decorate, + /tikz/decoration={ + zigzag, + segment length=9.25\pgflinewidth, + amplitude=1.9\pgflinewidth, + post=lineto, post length=6\pgflinewidth, + pre=lineto, pre length=6\pgflinewidth, + #1}}}} % The Computer Modern arrow style -\pgfqkeys{/tikz/commutative diagrams/arrow style}{ - computer modern/.style={ - /tikz/commutative diagrams/.cd, +\pgfkeysdef{/tikz/commutative diagrams/arrow style/computer modern}{% + \pgfqkeys{/tikz/commutative diagrams}{ arrow style/generic={cm}, default arrow/.style={ /tikz/line join=round, @@ -124,50 +127,26 @@ dashed/.style={/tikz/dash pattern={on 7\pgflinewidth off 4\pgflinewidth}}}} % The tikz arrow style -\pgfqkeys{/tikz/commutative diagrams/arrow style}{ - tikz/.code={% - \expandafter\ifx\csname tikz@library@arrows@loaded\endcsname\pgfutil@empty% - \else\PackageError{tikz-cd}{You need to say \string\usetikzlibrary{arrows} % - to use the `tikz' arrow style}{}\fi}, - tikz/.append style={ - /tikz/commutative diagrams/.cd, - default arrow/.style={/tikz/arrows=->}, +\pgfkeysdef{/tikz/commutative diagrams/arrow style/tikz}{% + \expandafter\ifx\csname tikz@library@arrows@loaded\endcsname\pgfutil@empty% + \else\PackageError{tikz-cd}{You need to say \string\usetikzlibrary{arrows} % + to use the `tikz' arrow style}{}\fi, + \pgfqkeys{/tikz/commutative diagrams}{ + arrow style/generic={\pgfutil@firstofone}, + default arrow/.style={/tikz/commutative diagrams/rightarrow}, rightarrow/.style={/tikz/arrows=->}, - Rightarrow/.style={ - /tikz/arrows=-implies, - /tikz/commutative diagrams/double line}, leftarrow/.style={/tikz/arrows=<-}, - Leftarrow/.style={ - /tikz/arrows=implies-, - /tikz/commutative diagrams/double line}, leftrightarrow/.style={/tikz/arrows=<->}, - Leftrightarrow/.style={ - /tikz/arrows=implies-implies, - /tikz/commutative diagrams/double line}, - mapsto/.style={/tikz/arrows=|->}, - mapsfrom/.style={/tikz/arrows=<-|}, + mapsto/.style={/tikz/arrows=|->},%| + mapsfrom/.style={/tikz/arrows=<-|},%| hookrightarrow/.style={/tikz/arrows=right hook->}, hookleftarrow/.style={/tikz/arrows=<-left hook}, - rightharpoonup/.style={/tikz/arrows=-left to}, - rightharpoondown/.style={/tikz/arrows=-right to}, - leftharpoonup/.style={/tikz/arrows=right to-}, - leftharpoondown/.style={/tikz/arrows=left to-}, - dashrightarrow/.style={/tikz/arrows=->,/tikz/commutative diagrams/dashed}, - dashleftarrow/.style={/tikz/arrows=<-,/tikz/commutative diagrams/dashed}, rightarrowtail/.style={/tikz/arrows=>->}, leftarrowtail/.style={/tikz/arrows=<-<}, twoheadrightarrow/.style={/tikz/arrows=->>}, twoheadleftarrow/.style={/tikz/arrows=<<-}, %>> - dash/.style={/tikz/arrows=-}, - equal/.style={ - /tikz/arrows=-, - /tikz/commutative diagrams/double line}, - maps to/.code={\pgfsetarrowsstart{|}}, - hook/.code={\pgfsetarrowsstart{right hook}}, - two heads/.code={ - \pgfsetarrowsend{\csname tikz@special@arrow@end>>\endcsname}}, - tail/.code={ - \pgfsetarrowsstart{\csname tikz@special@arrow@start>\endcsname}}, + two heads/.code={\pgfsetarrowsend{\csname tikz@special@arrow@end>>\endcsname}}, + tail/.code={\pgfsetarrowsstart{\csname tikz@special@arrow@start>\endcsname}}, dashed/.style={/tikz/dashed}, double line/.style={ /tikz/double equal sign distance, @@ -176,16 +155,14 @@ % Default settings \pgfqkeys{/tikz/commutative diagrams}{ every arrow/.style={ - /handlers/first char syntax/the character "/.initial=\tikzcd@passquotes, - /tikz/edge quotes mean/.try={edge node={node [/tikz/commutative diagrams/every label,##2]{\tikzcd@mathmaybe{##1}}}}, /tikz/commutative diagrams/.cd, + @enablequotes, /tikz/draw, - /tikz/commutative diagrams/default arrow}, + default arrow}, every label/.style={ /tikz/commutative diagrams/.cd, /tikz/auto, /tikz/font=\everymath\expandafter{\the\everymath\scriptstyle}, - % replace by \everymath{\scriptstyle} for plain TeX /tikz/inner sep=0.5ex}, every diagram/.style={ /tikz/commutative diagrams/.cd, @@ -193,9 +170,9 @@ row sep=normal, column sep=normal, /tikz/baseline=0pt}, + 1-row diagram/.style={/tikz/baseline=(#1.base)}, math mode=true, center yshift/.initial=tikzcdaxis, - center shift/.style={/tikz/commutative diagrams/center yshift=#1}, % this has been renamed row sep/huge/.initial=10ex, row sep/large/.initial=7.5ex, row sep/normal/.initial=5ex, @@ -209,8 +186,6 @@ column sep/small/.initial=3ex, column sep/tiny/.initial=1.5ex, arrow style=computer modern, - description clearance/.code={% - \PackageWarning{tikz-cd}{The `description clearance' key has been deprecated}{}}, crossing over clearance/.initial=1.5ex, background color/.initial=white} @@ -293,67 +268,61 @@ }% }% -% Branch depending on whether the next character is [, { or none of those. -\def\tikzcd@threefold#1#2#3{% - \def\tikzcd@tempa{#1}% - \def\tikzcd@tempb{#2}% - \def\tikzcd@tempc{#3}% - \futurelet\next\tikzcd@@threefold} - -\def\tikzcd@@threefold{% - \ifx[\next\let\tikzcd@tempc\tikzcd@tempa% - \else\ifx\bgroup\next\let\tikzcd@tempc\tikzcd@tempb\fi\fi% - \tikzcd@tempc} - -%The arrow commands -\def\tikzcd@arrow{\tikzcd@threefold{\tikzcd@ar@getdir}{\tikzcd@ar@getdir[]}{}} +% The arrow commands +\def\tikzcd@arrow{% + \begingroup% + \pgfutil@ifnextchar[{\tikzcd@ar@getdir}{\tikzcd@ar@getdir[]}} \def\tikzcd@ar@getdir[#1]#2{% - \tikzcd@targetrow\pgfmatrixcurrentrow% - \tikzcd@targetcol\pgfmatrixcurrentcolumn% + \c@pgf@counta\pgfmatrixcurrentrow% + \c@pgf@countb\pgfmatrixcurrentcolumn% \tikzcd@parse#2\relax% \toks@\expandafter{\tikzcd@savedpaths\path[/tikz/commutative diagrams/every arrow,#1]}% - \global\edef\tikzcd@savedpaths{\the\toks@% - (\tikzmatrixname-\the\pgfmatrixcurrentrow-\the\pgfmatrixcurrentcolumn% - \noexpand\tikzcd@startanchor) to }% - \tikzcd@threefold{\tikzcd@ar@getlabel}{\tikzcd@ar@getlabel[]}{\tikzcd@ar@final}} + \global\edef\tikzcd@savedpaths{% + \the\toks@% + (\tikzmatrixname-\the\pgfmatrixcurrentrow-\the\pgfmatrixcurrentcolumn\noexpand\tikzcd@startanchor) to }% + \pgfutil@ifnextchar[{\tikzcd@ar@getlabel}{\pgfutil@ifnextchar\bgroup{\tikzcd@ar@getlabel[]}{\tikzcd@ar@final}}} \def\tikzcd@ar@getlabel[#1]#2{% \expandafter\global\expandafter\def\expandafter\tikzcd@savedpaths\expandafter{\tikzcd@savedpaths% node[/tikz/commutative diagrams/every label,#1]{\tikzcd@mathmaybe{#2}}}% - \tikzcd@threefold{\tikzcd@ar@getlabel}{\tikzcd@ar@getlabel[]}{\tikzcd@ar@final}} + \pgfutil@ifnextchar[{\tikzcd@ar@getlabel}{\pgfutil@ifnextchar\bgroup{\tikzcd@ar@getlabel[]}{\tikzcd@ar@final}}} \def\tikzcd@ar@final{% \toks@\expandafter{\tikzcd@savedpaths}% \global\edef\tikzcd@savedpaths{% \the\toks@% - (\tikzmatrixname-\the\tikzcd@targetrow-\the\tikzcd@targetcol% - \noexpand\tikzcd@endanchor); }} + (\tikzmatrixname-\the\c@pgf@counta-\the\c@pgf@countb\noexpand\tikzcd@endanchor); }% + \endgroup}% restore pgf counters -\def\tikzcd@xar#1{\tikzcd@threefold{\tikzcd@@xar{#1}}{\tikzcd@arrow[]{#1}}{\tikzcd@arrow[]{#1}}} +\def\tikzcd@xar#1{\pgfutil@ifnextchar[{\tikzcd@@xar{#1}}{\tikzcd@arrow[]{#1}}} \def\tikzcd@@xar#1[#2]{\tikzcd@arrow[#2]{#1}} \def\tikzcd@parse#1{% Parser for arrow direction argument - \def\tikzcd@tempa{\tikzcd@parse}% - \ifx#1r\advance\tikzcd@targetcol by1\else% - \ifx#1d\advance\tikzcd@targetrow by1\else% - \ifx#1l\advance\tikzcd@targetcol by-1\else% - \ifx#1u\advance\tikzcd@targetrow by-1\else% - \ifx#1\relax\let\tikzcd@tempa\empty% + \def\tikzcd@temp{\tikzcd@parse}% + \ifx#1r\advance\c@pgf@countb by1\else% + \ifx#1d\advance\c@pgf@counta by1\else% + \ifx#1l\advance\c@pgf@countb by-1\else% + \ifx#1u\advance\c@pgf@counta by-1\else% + \ifx#1\relax\let\tikzcd@temp\empty% \else\PackageError{tikz-cd}{Arrow direction argument must contain % - only the characters l, r, u or d}{}\fi\fi\fi\fi\fi% - \tikzcd@tempa} + only the characters u, d, l, r}{}\fi\fi\fi\fi\fi% + \tikzcd@temp} -% `quotes' library support (see also `every arrow' style) +% `quotes' library support \def\tikzcd@passquotes#1{\tikzset{every to/.append style={#1}}} -% start anchor, end anchor keys +\pgfqkeys{/tikz/commutative diagrams}{ + @enablequotes/.style={ + /handlers/first char syntax/the character "/.initial=\tikzcd@passquotes, + /tikz/edge quotes mean/.try={% + edge node={node [/tikz/commutative diagrams/every label,##2]{\tikzcd@mathmaybe{##1}}}}}} + +% `start anchor', `end anchor', and `shift' keys \def\tikzcd@setanchor#1[#2]#3\relax{% - \pgfkeysdef{/tikz/tikzcd@#1transform}{\tikzset{#2}}% \ifx\relax#2\relax\else% - \tikzset{to path={([tikzcd@starttransform]\tikztostart) % - -- ([tikzcd@endtransform]\tikztotarget) \tikztonodes}}% + \pgfqkeys{/tikz/commutative diagrams}{@#1transform/.append style={#2},@shiftabletopath}% \fi% \ifx\relax#3\relax% \expandafter\let\csname tikzcd@#1anchor\endcsname\empty% @@ -361,22 +330,56 @@ \expandafter\def\csname tikzcd@#1anchor\endcsname{.#3}% \fi} -\pgfqkeys{/tikz/commutative diagrams}{start anchor=,end anchor=} - -% The tikzcd environment -\def\tikzcd{\tikzcd@threefold{\tikzcd@}{\tikzcd@[]}{\tikzcd@[]}} +\pgfqkeys{/tikz/commutative diagrams}{ + @shiftabletopath/.style={ + /tikz/execute at begin to={% + \begingroup% + \def\tikz@tonodes{coordinate[pos=0,commutative diagrams/@starttransform/.try](tikzcd@nodea) % + coordinate[pos=1,commutative diagrams/@endtransform/.try](tikzcd@nodeb)}% + \path (\tikztostart) \tikz@to@path;% + \endgroup% + \def\tikztostart{tikzcd@nodea}% + \def\tikztotarget{tikzcd@nodeb}% + \toks@\expandafter{\tikz@to@path}% + \edef\tikz@to@path{(tikzcd@nodea) \the\toks@} + }, + /tikz/commutative diagrams/@shiftabletopath/.code={}}, + start anchor/.code={% + \pgfutil@ifnextchar[{\tikzcd@setanchor{start}}{\tikzcd@setanchor{start}[]}#1\relax},%] + end anchor/.code={% + \pgfutil@ifnextchar[{\tikzcd@setanchor{end}}{\tikzcd@setanchor{end}[]}#1\relax},%] + start anchor=, + end anchor=, + shift left/.style={ + /tikz/commutative diagrams/@shiftabletopath, + /tikz/execute at begin to={% + \pgfpointnormalised{% + \pgfpointdiff{\pgfpointanchor{tikzcd@nodeb}{center}}{\pgfpointanchor{tikzcd@nodea}{center}}}% + \pgfgetlastxy{\tikzcd@x}{\tikzcd@y}% + \pgfmathparse{(#1)/1pt}% + \coordinate (tikzcd@nodea) at ([shift={(\pgfmathresult*\tikzcd@y,-\pgfmathresult*\tikzcd@x)}]tikzcd@nodea);% + \coordinate (tikzcd@nodeb) at ([shift={(\pgfmathresult*\tikzcd@y,-\pgfmathresult*\tikzcd@x)}]tikzcd@nodeb);}}, + shift right/.style={ + /tikz/commutative diagrams/shift left={-(#1)}}, + transform nodes/.style={ + /tikz/commutative diagrams/@shiftabletopath, + /tikz/commutative diagrams/@starttransform/.append style={#1}, + /tikz/commutative diagrams/@endtransform/.append style={#1}}, + shift/.style={ + /tikz/shift={#1},% we need this for labels to receive a shift + /tikz/commutative diagrams/transform nodes={/tikz/shift={#1}}}, + xshift/.style={ + /tikz/xshift={#1}, + /tikz/commutative diagrams/transform nodes={/tikz/xshift={#1}}}, + yshift/.style={ + /tikz/yshift={#1}, + /tikz/commutative diagrams/transform nodes={/tikz/yshift={#1}}}} + +% The `tikzcd' environment +\def\tikzcd{\pgfutil@ifnextchar[{\tikzcd@}{\tikzcd@[]}} \def\tikzcd@[#1]{% \tikzpicture[/tikz/commutative diagrams/every diagram,#1]% - \tikzcd@initialize% - \matrix[/tikz/commutative diagrams/matrix of math nodes maybe]\bgroup} - -\def\endtikzcd{% - \pgfmatrixendrow\egroup;% - \tikzcd@finalize% - \endtikzpicture} - -\def\tikzcd@initialize{% \def\arrow{\tikzcd@arrow}% \def\ar{\tikzcd@arrow}% \def\rar{\tikzcd@xar{r}}% @@ -387,20 +390,26 @@ \def\ular{\tikzcd@xar{ul}}% \def\drar{\tikzcd@xar{dr}}% \def\dlar{\tikzcd@xar{dl}}% - \def\rowsep##1{\pgfkeysvalueof{/tikz/commutative diagrams/row sep/##1}}% - \def\colsep##1{\pgfkeysvalueof{/tikz/commutative diagrams/column sep/##1}}% - \global\let\tikzcd@savedpaths\empty} + \global\let\tikzcd@savedpaths\empty + \matrix[/tikz/commutative diagrams/matrix of math nodes maybe]\bgroup} -\def\tikzcd@finalize{\tikzcd@savedpaths} +\def\endtikzcd{% + \toks@\expandafter{\tikzcd@savedpaths}% + \global\edef\tikzcd@savedpaths{% + \noexpand\tikzset{commutative diagrams/\the\pgfmatrixcurrentrow-row diagram/.try=\tikzmatrixname}% + \the\toks@}% + \pgfmatrixendrow\egroup;% + \tikzcd@savedpaths% + \endtikzpicture} \def\tikzcd@mathmaybe#1{\iftikzcd@mathmode$\relax #1$\else#1\fi} \def\tikzcd@sep#1#2{ \pgfkeysifdefined{/tikz/commutative diagrams/#1 sep/#2}% - {\tikzset{#1 sep=\pgfkeysvalueof{/tikz/commutative diagrams/#1 sep/#2}}}% - {\tikzset{#1 sep=#2}}} + {\pgfkeysalso{/tikz/#1 sep=\pgfkeysvalueof{/tikz/commutative diagrams/#1 sep/#2}}}% + {\pgfkeysalso{/tikz/#1 sep=#2}}} -%Computer modern arrow tips +% Computer modern arrow tips \pgfarrowsdeclare{cm to}{cm to} { \pgfarrowsleftextend{-5.833\pgflinewidth} @@ -611,28 +620,26 @@ \pgfarrowsdeclaredouble{cm double to}{cm double to}{cm to}{cm to} \pgfarrowsdeclaredouble{cm double to reversed}{cm double to reversed}{cm to reversed}{cm to reversed} -%Font arrows (experimental) - -\tikzset{ - /tikz/commutative diagrams/enable font arrows/.code={% - % A little surgery on pgf's arrow selection commands - \pgfutil@ifundefined{tikzcd@orig@pgfsetarrowsend}% - {\let\tikzcd@orig@pgfsetarrowsend\pgfsetarrowsend - \let\tikzcd@orig@pgfsetarrowsstart\pgfsetarrowsstart - \def\pgfsetarrowsend##1{% - \pgfutil@ifundefined{tikzcd@arrows@cmd@##1}% - {\tikzcd@orig@pgfsetarrowsend{##1}} - {\tikzcd@arrowset{end}{##1}}}% - \def\pgfsetarrowsstart##1{% - \pgfutil@ifundefined{tikzcd@arrows@cmd@##1}% - {\tikzcd@orig@pgfsetarrowsstart{##1}} - {\tikzcd@arrowset{start}{##1}}}% - }{}}, - /tikz/commutative diagrams/font arrows/.cd, +% Font arrows (experimental) +\pgfkeysdef{/tikz/commutative diagrams/enable font arrows}{% + % A little surgery on pgf's arrow selection commands + \pgfutil@ifundefined{tikzcd@orig@pgfsetarrowsend}% + {\let\tikzcd@orig@pgfsetarrowsend\pgfsetarrowsend + \let\tikzcd@orig@pgfsetarrowsstart\pgfsetarrowsstart + \def\pgfsetarrowsend##1{% + \pgfutil@ifundefined{tikzcd@arrows@cmd@##1}% + {\tikzcd@orig@pgfsetarrowsend{##1}} + {\tikzcd@arrowset{end}{##1}}}% + \def\pgfsetarrowsstart##1{% + \pgfutil@ifundefined{tikzcd@arrows@cmd@##1}% + {\tikzcd@orig@pgfsetarrowsstart{##1}} + {\tikzcd@arrowset{start}{##1}}}}% + {}} + +\pgfqkeys{/tikz/commutative diagrams/font arrows}{ double distance/.store in={\tikzcdfontarrowsdoubledistance}, declare head/.code n args={4}{\tikzcd@arrowsdeclare{#1}{#2}{#3}{#4}{\iftrue}}, - declare tail/.code n args={4}{\tikzcd@arrowsdeclare{#1}{#2}{#3}{#4}{\iffalse}}, -} + declare tail/.code n args={4}{\tikzcd@arrowsdeclare{#1}{#2}{#3}{#4}{\iffalse}}} % #1 = name % #2 = command @@ -653,8 +660,8 @@ % printers to treat the resulting arrow tip as a graphic element % instead of text, making the transition between line and arrow tip % less noticeable. -\def\tikzcd@tempa{pgfsys-pdftex.def} -\ifx\pgfsysdriver\tikzcd@tempa +\def\tikzcd@temp{pgfsys-pdftex.def} +\ifx\pgfsysdriver\tikzcd@temp \def\tikzcd@arrowset{\tikzcd@arrowset@pdftex} \else \def\tikzcd@arrowset{\tikzcd@arrowset@generic} @@ -721,12 +728,12 @@ % the arrow tip, 2. TeX command corresponding to an arrow, 3. distance % from baseline to arrow stem, 4. width of the clip box, which should % be big enough to contain the whole tip. -\tikzset{/tikz/commutative diagrams/font arrows/.cd, +\pgfqkeys{/tikz/commutative diagrams/font arrows}{ double distance={3.8\pgflinewidth}, declare head={math to}{$\to$}{tikzcdaxis}{1ex}, declare head={math to reversed}{$\leftarrowtail$}{tikzcdaxis}{1ex}, declare tail={math cap}{$\to$}{tikzcdaxis}{1ex}, - declare tail={math |}{$\mapsto$}{tikzcdaxis}{1ex}, + declare tail={math |}{$\mapsto$}{tikzcdaxis}{1ex},%| declare head={math o}{$\multimap$}{tikzcdaxis}{1.4ex}, declare head={math implies}{$\Rightarrow$}{tikzcdaxis}{1.4ex}, declare tail={math implies cap}{$\Rightarrow$}{tikzcdaxis}{1ex}, -- cgit v1.2.3