summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/tex/latex/tikz-cd
diff options
context:
space:
mode:
authorKarl Berry <karl@freefriends.org>2012-12-21 00:14:00 +0000
committerKarl Berry <karl@freefriends.org>2012-12-21 00:14:00 +0000
commit3096e54f272c662e1d3c9339395a1df3055e5b43 (patch)
tree903bf8c42dc8f5479e46aa89fc429166b6a50fdb /Master/texmf-dist/tex/latex/tikz-cd
parent598cd56f95ad0cdb8689fcf2ca40910682504f9f (diff)
tikz-cd (20dec12)
git-svn-id: svn://tug.org/texlive/trunk@28588 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/tex/latex/tikz-cd')
-rw-r--r--Master/texmf-dist/tex/latex/tikz-cd/tikz-cd.sty355
1 files changed, 181 insertions, 174 deletions
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 <http://www.gnu.org/licenses/>.
+
+\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},