% usual common sense conditions apply - see for example the LaTeX % public license - try to avoid editing this file; if you do edit it, % change the filename; comments, complaints, and suggestions to % % Jim.Davies@comlab.ox.ac.uk % % but all gratitude and appreciation to Mike Spivey. % This might be seen as a prototype; the functionality is there, but % the implementation and documentation leave something to be % desired---if anyone who _really_ knows what they are doing % w.r.t. 2e internals wants to suggest revisions, then please do. % The times option uses composite arrows (I mean, _really_ composite) % and doesn't give the upharpoon symbol for filter and project - you % get an \uparrow instead. If you want the AMS versions of the % symbols, then you'll need to define them yourself. % Actually, the mathtime fonts leave quite a lot to desired, if you're % setting Z documents. No disrespect intended, but the fontset is % clearly aimed at traditional textbook mathematics, not software % engineering. % changes: % % 14 July 2001: improved \surj in Lucida; removed \vcenter@enlarge % from arrow definitions; \where and other zskips now use hbox's to % handle color changes % -- interface --------------------------------------------------------- \def\fileversion{2.0} \def\filedate{2001/07/14} \NeedsTeXFormat{LaTeX2e} \ProvidesPackage{zed}[{\filedate\space\fileversion\space zed package}] % -- options ---------------------------------------------------------- \newif\if@cm@ \@cm@false \newif\if@lucida@ \@lucida@false \newif\if@times@ \@times@false \newif\if@color@ \@color@false \newif\if@zed@ \@zed@false \newif\if@csp@ \@csp@false \DeclareOption{cm}{\@cm@true\@lucida@false\@times@false} \DeclareOption{lucida}{\@cm@false\@lucida@true\@times@false} \DeclareOption{times}{\@cm@false\@lucida@false\@times@true} \DeclareOption{color}{\@color@true} \DeclareOption{zed}{\@zed@true} \DeclareOption{csp}{\@csp@true} \DeclareOption{nolines}{} \ExecuteOptions{cm} \ProcessOptions \newif\if@zedsyntax@ \@zedsyntax@true \@ifpackageloaded{csp}{% \if@zed@\else\@zedsyntax@false\fi }{% \if@csp@\RequirePackageWithOptions{csp}\fi } % -- color ------------------------------------------------------------- \if@color@ \@ifpackageloaded{color}{\relax}{% \RequirePackage[dvipsnames,usenames]{color}} % \definecolor{ZedBoxColor}{cmyk}{0.99,0,0.52,0} \definecolor{ZedBoxColor}{cmyk}{1,1,0,0} \definecolor{AnnotationColor}{cmyk}{0.98,0.13,0,0.43} \definecolor{ZedColor}{cmyk}{0.50,1,0,0} \else \@ifpackageloaded{color}{\relax}{\def\color#1{\relax}}% \fi % -- fonts ------------------------------------------------------------- \DeclareMathVersion{zed} \if@lucida@ \@ifpackageloaded{lucidabr}{% }{% \RequirePackage{texnansi} \RequirePackage[expert,altbullet]{lucidabr}} \fi \if@times@ \@ifpackageloaded{mathtime}{% }{% \RequirePackage{texnansi} \RequirePackage[LY1]{mathtime}} \SetSymbolFont{operators} {zed}{\operator@encoding}{ptm}{m}{n} \SetSymbolFont{letters} {zed}{MY1}{mtt}{m}{it} \SetSymbolFont{symbols} {zed}{MY2}{mtt}{m}{n} \SetSymbolFont{largesymbols}{zed}{MY3}{mtt}{m}{n} \SetMathAlphabet{\mathrm}{zed}{\encodingdefault}{\rmdefault}{m}{n}% \SetMathAlphabet{\mathbf}{zed}{\encodingdefault}{\rmdefault}{bx}{n}% \SetMathAlphabet{\mathsf}{zed}{\encodingdefault}{\sfdefault}{m}{n}% \SetMathAlphabet{\mathtt}{zed}{\encodingdefault}{\ttdefault}{m}{n} \let\mathbb=\mathbf \let\smallfrown\undefined \DeclareMathSymbol\smallfrown{\mathrel}{symbols}{065} \let\vartriangleright\triangleleft \let\vartriangleleft\triangleright \def\sqsubset{\setbox0=\hbox{$\sqsubseteq$}% \ooalign{\vrule width 0.4pt height \ht0 depth 0pt\hfil\cr% \vbox to \ht0{% \hrule width\wd0 height 0.2pt depth 0.2pt \vss \hrule width\wd0 height 0.2pt depth 0.2pt} \hfil\cr}} \fi \if@cm@ \DeclareSymbolFontAlphabet{\mathrm}{operators} \DeclareSymbolFontAlphabet{\mathit}{letters} \DeclareSymbolFontAlphabet{\mathcal}{symbols} \SetMathAlphabet{\mathrm}{zed}{\encodingdefault}{\rmdefault}{m}{n} \SetMathAlphabet{\mathbf}{zed}{\encodingdefault}{\rmdefault}{bx}{n} \SetMathAlphabet{\mathsf}{zed}{\encodingdefault}{\sfdefault}{m}{n} \SetMathAlphabet{\mathtt}{zed}{\encodingdefault}{\ttdefault}{m}{n} %% \DeclareSymbolFont{AMSa}{U}{msa}{m}{n} \DeclareSymbolFont{AMSb}{U}{msb}{m}{n} \DeclareSymbolFontAlphabet{\mathbb}{AMSb} \let\twoheadrightarrow\undefined \let\upharpoonright\undefined \let\upharpoonleft\undefined \let\rightarrowtail\undefined \let\sqsubset\undefined \let\smallfrown\undefined \let\vartriangleright\undefined \let\vartriangleleft\undefined \DeclareMathSymbol\twoheadrightarrow{\mathrel}{AMSa}{"10} \DeclareMathSymbol\upharpoonright{\mathrel}{AMSa}{"16} \DeclareMathSymbol\upharpoonleft{\mathrel}{AMSa}{"18} \DeclareMathSymbol\rightarrowtail{\mathrel}{AMSa}{"1A} \DeclareMathSymbol\sqsubset{\mathrel}{AMSa}{"40} \DeclareMathSymbol\smallfrown{\mathrel}{AMSa}{"61} \DeclareMathSymbol\vartriangleright{\mathrel}{AMSa}{"42} \DeclareMathSymbol\vartriangleleft{\mathrel}{AMSa}{"43} \fi \mathversion{zed} % -- math codes and symbol definitions --------------------------------- \DeclareSymbolFont{italics}{\encodingdefault}{\rmdefault}{m}{it} \def\@setmcodes#1#2#3{{\count0=#1 \count1=#3 \loop \global\mathcode\count0=\count1 \ifnum \count0<#2 \advance\count0 by1 \advance\count1 by1 \repeat}} \@setmcodes{`A}{`Z}{"7\hexnumber@\symitalics41}% \@setmcodes{`a}{`z}{"7\hexnumber@\symitalics61}% \def~{\ifmmode\,\else\penalty\@M\ \fi} \let\@mc=\mathchardef \mathcode`\;="8000 {\catcode`\;=\active \gdef;{\semicolon\;}} \@mc\semicolon="603B \def\_{\leavevmode \ifmmode\else\kern0.06em\fi \vbox{\hrule width0.5em}} \mathcode`\"="8000 \def\@kwote#1"{\hbox{\it #1}} {\catcode`\"=\active \global\let"=\@kwote} \mathchardef\spot="320F \mathcode`\@=\spot \mathcode`\|=\mid \def\simple@enlarge#1{\mathchoice{% \hbox{\large$#1$}}{\hbox{\large$#1$}}{\hbox{\small$#1$}% }{\hbox{\small$#1$}}} \def\simple@Enlarge#1{\mathchoice{% \hbox{\Large$#1$}}{\hbox{\Large$#1$}}{\hbox{\normalsize$#1$}% }{\hbox{\normalsize$#1$}}} \def\vcenter@enlarge#1{\mathchoice{% \vcenter{\hbox{\large$#1$}}}{\vcenter{\hbox{\large$#1$}}% }{\vcenter{\hbox{\small$#1$}}}{\vcenter{\hbox{\small$#1$}}}} \def\strut@op#1{\mathop{\mathstrut{#1}}\nolimits} \let\lambda@sym=\lambda \let\mu@sym=\mu \let\forall@sym=\forall \let\exists@sym=\exists \def\uminus@sym{\setbox0=\hbox{$\cup$}\rlap{\hbox to\wd0{\hss\raise0.3ex\hbox{$\scriptscriptstyle{-}$}\hss}}\box0} \if@cm@ \def\comp@sym{\raise 0.6ex\hbox{\small\oalign{\hfil% $\scriptscriptstyle\mathrm{o}$\hfil% \cr\hfil$\scriptscriptstyle\mathrm{9}$\hfil}}} \def\lbag@sym{{[}\mkern-2mu{[}} \def\rbag@sym{{]}\mkern-2mu{]}} \def\extract@sym{\upharpoonleft} \def\project@sym{\upharpoonright} \let\dres@sym\vartriangleleft \let\rres@sym\vartriangleright \def\ndres@sym{\rlap{\raise.05ex\hbox{$-$}}{\vartriangleleft}} \def\nrres@sym{\rlap{\raise.05ex\hbox{$-$}}{\vartriangleright}} \def\inv@sym{\sim} \def\cat@sym{\smash{\raise 0.8ex\hbox{$\smallfrown$}}} \def\inbag@sym{\rlap{\hbox{$-$}}{\sqsubset}} % \def\@p#1{\mathrel{\ooalign{\hfil$\mapstochar\mkern 5mu$\hfil\cr$#1$}}} \def\@f#1{\mathrel{\ooalign{\hfil$\mapstochar\mkern 3mu% \mapstochar\mkern 5mu$\hfil\cr$#1$}}} % \let\rel\leftrightarrow \let\fun\rightarrow \let\inj\rightarrowtail \def\surj{\mathrel{\ooalign{$\fun$\hfil\cr$\mkern4mu\fun$}}} \def\bij{\mathrel{\ooalign{$\inj$\hfil\cr$\mkern5mu\fun$}}} \def\pfun{\@p\fun} \def\pinj{\@p\inj} \def\psurj{\@p\surj} \def\pbij{\@p\bij} \def\ffun{\@f\fun} \def\finj{\@f\inj} \fi \if@times@ \def\comp@sym{\raise 0.6ex\hbox{\small\oalign{\hfil% $\scriptscriptstyle\mathrm{o}$\hfil% \cr\hfil$\scriptscriptstyle\mathrm{9}$\hfil}}} \def\lbag@sym{{[}\mkern-2mu{[}} \def\rbag@sym{{]}\mkern-2mu{]}} \def\extract@sym{\upharpoonleft} \def\project@sym{\upharpoonright} \def\dres@sym{\simple@Enlarge\vartriangleleft} \def\rres@sym{\simple@Enlarge\vartriangleright} \def\ndres@sym{% \rlap{\raise.08ex\hbox{$-$}}{\simple@Enlarge\vartriangleleft}} \def\nrres@sym{% \rlap{\raise.08ex\hbox{$-$}}{\simple@Enlarge\vartriangleright}} \def\inv@sym{\sim} \def\cat@sym{\mkern-6mu{\smallfrown}\mkern3mu} \def\inbag@sym{\setbox0=\hbox{$\sqsubseteq$}% \ooalign{\vrule width 0.4pt height \ht0 depth 0pt\hfil\cr% \vbox to \ht0{% \hrule width\wd0 height 0.2pt depth 0.2pt \vss \hrule width\wd0 height 0.2pt depth 0.2pt \vss \hrule width\wd0 height 0.2pt depth 0.2pt} \hfil\cr}} % \def\@p#1{\mathrel{\ooalign{$\mkern 16mu\mapstochar$\hfil\cr$#1$}}} \def\@f#1{\mathrel{\ooalign{$\mkern 15mu\mapstochar\mkern 2mu% \mapstochar$\hfil\cr$#1$}}} % \def\extract@sym{\simple@enlarge{\uparrow}} \def\project@sym{\simple@enlarge{\uparrow}} \def\long@line@sym{$\mkern 6mu$---$\mkern -10.5mu$---} \def\short@line@sym{$\mkern 11mu$---$\mkern -16mu$---} \def\rel{% \mathrel{\ooalign{\long@line@sym\hfil\cr% \raise0.1pt\hbox{${\prec}\mkern 10mu{\succ}$}}}} \def\fun{% \mathrel{\ooalign{\long@line@sym\hfil\cr% \raise0.1pt\hbox{$\mkern 24mu\succ$\hfil}}}} \def\inj{% \mathrel{\ooalign{\short@line@sym\hfil\cr% \raise0.1pt\hbox{${\succ}\mkern 10mu{\succ}$\hfil}}}} \def\surj{% \mathrel{\ooalign{\long@line@sym\hfil\cr% \raise0.1pt\hbox{$\mkern 21mu{\succ}\mkern -10mu{\succ}$\hfil}}}} \def\bij{% \mathrel{\ooalign{\short@line@sym\hfil\cr% \raise0.1pt\hbox{% ${\succ}\mkern 7mu{\succ}\mkern -10mu{\succ}$\hfil}}}} \def\pfun{\@p\fun} \def\pinj{\@p\inj} \def\psurj{\@p\surj} \def\pbij{\@p\bij} \def\ffun{\@f\fun} \def\finj{\@f\inj} \fi \if@lucida@ \def\@p#1{\ooalign{\hfil$\mapstochar\mkern 8mu$\hfil\cr$#1$}} \def\@f#1{\ooalign{\hfil$\mapstochar\mkern 2mu% \mapstochar\mkern 6mu$\hfil\cr$#1$}} \DeclareMathSymbol{\pinj@sym}{\mathbin}{arrows}{146} \def\surj@sym{\ooalign{$\rightarrow$\hfil\cr$\mkern 2.4mu\rightarrow$}} \def\bij@sym{\ooalign{$\rightarrowtail$\hfil\cr$\mkern 2.4mu\rightarrow$}} % \def\rel{\mathbin{\simple@enlarge{\leftrightarrow}}} \def\fun{\mathbin{\simple@enlarge{\rightarrow}}} \def\inj{\mathbin{\simple@enlarge{\rightarrowtail}}} \def\surj{\mathbin{\simple@enlarge{\surj@sym}}} \def\bij{\mathbin{\simple@enlarge{\bij@sym}}} \def\pinj{\mathbin{\simple@enlarge{\pinj@sym}}} \def\pfun{\mathbin{\simple@enlarge{\@p\rightarrow}}} \def\psurj{\mathbin{\simple@enlarge{\@p\surj@sym}}} \def\pbij{\mathbin{\simple@enlarge{\@p\bij@sym}}} \def\ffun{\mathbin{\simple@enlarge{\@f\rightarrow}}} \def\finj{\mathbin{\simple@enlarge{\@f\rightarrowtail}}} % \let\mapsto@sym\mapsto \def\mapsto{\mathbin{\simple@enlarge{\mapsto@sym}}} % \def\comp@sym{\raise 0.6ex\hbox{\oalign{\hfil% $\scriptscriptstyle\mathtt{o}$\hfil% \cr\hfil$\scriptscriptstyle\mathtt{9}$\hfil}}} \def\lbag@sym{\ldbrack} \def\rbag@sym{\rdbrack} \def\extract@sym{\simple@enlarge{\upharpoonleft}} \def\project@sym{\simple@enlarge{\upharpoonright}} \let\dres@sym\vartriangleleft \let\rres@sym\vartriangleright \DeclareMathSymbol{\ndres@sym}{\mathbin}{arrows}{17} \DeclareMathSymbol{\nrres@sym}{\mathbin}{arrows}{18} \def\cat@sym{\smash{\raise 0.8ex\hbox{$\smallfrown$}}} \def\inv@sym{^{\simple@enlarge{\sim}}} \def\inbag@sym{\rlap{\hbox{$-$}}{\sqsubset}} \fi % -- mathematical notation --------------------------------------------- \def\ELSE{\mathrel{\mathbf{else}}} \def\IF{{\mathbf{if}}\;} \def\IN{{\mathbf{in}}\;} \def\LET{{\mathbf{let}}\;} \def\THEN{\mathrel{\mathbf{then}}} \def\bag{\mathop{\mathrm{bag}}} \def\bcount{\mathbin{\sharp}} \def\cat{\mathbin{\cat@sym}} \def\comp{\mathrel{\comp@sym}} \def\cross{\mathrel{\times}} \def\dcat{\mathop{\cat/}} \def\defs{\mathrel{\widehat=}} \def\disjoint{{\mathsf{disjoint}}\;} \def\div{\mathbin{\mathsf{div}}} \def\dom{\mathop{\mathrm{dom}}} \def\dres{\mathbin{\dres@sym}} \def\exists{\strut@op{\exists@sym}} \def\extract{\mathrel{\extract@sym}} \def\filter{\mathbin{\project}} \def\finset{\strut@op{{\mathbb{F}}}} \def\forall{\strut@op{\forall@sym}} \def\hide{\mathrel{\backslash}} \def\id{\mathop{\mathrm{id}}} \def\iff{\mathrel{\Leftrightarrow}} \def\implies{\mathrel{\Rightarrow}} \def\inbag{\mathrel{\inbag@sym}} \def\inseq{\mathrel{\mathsf{in}}} \def\inv{^{\inv@sym}} \def\iseq{\mathop{\mathrm{iseq}}} \def\lambda{\strut@op{\lambda@sym}} \def\land{\mathrel{\wedge}} \def\lbag{\lbag@sym} \def\lblot{{\langle}\mkern -3.5mu{|}} \let\lbind\lblot \def\ldata{\langle\!\langle} \def\limg{(\mskip-4.5mu|} \def\lnot{\neg\;} \def\lor{\mathrel{\vee}} \def\mod{\mathbin{\mathsf{mod}}} \def\mu{\strut@op{\mu@sym}} \def\nat{{\mathbb{N}}} \def\ndres{\mathbin{\ndres@sym}} \def\nrres{\mathbin{\nrres@sym}} \def\num{{\mathbb{Z}}} \def\partition{\mathrel{\mathsf{partition}}} \def\pipe{\mathord>\!\!\mathord>} \def\plus{^+} \def\power{\strut@op{\mathbb{P}}} \def\prefix{\mathrel{\mathsf{prefix}}} \def\pre{{\mathrm{pre}}\;} \def\project{\mathrel{\project@sym}} \def\ran{\mathop{\mathrm{ran}}} \def\rbag{\rbag@sym} \def\rblot{{|}\mkern -3.5mu{\rangle}} \let\rbind\rblot \def\rdata{\rangle\!\rangle} \def\rimg{|\mskip-4.5mu)} \def\rres{\mathbin{\rres@sym}} \def\semi{\mathrel{\comp}} \def\seq{\mathop{\mathrm{seq}}} \def\shows{\mathrel{\vdash}} \def\star{^*} \def\subbageq{\mathrel{\sqsubseteq}} \def\suffix{\mathrel{\mathsf{suffix}}} \def\uminus{\mathrel{\uminus@sym}} \def\upto{\mathbin{\ldotp\ldotp}} % -- zed syntax -------------------------------------------------------- % any conditional _must_ be declared \newif\ifzt@p \zt@pfalse \if@zedsyntax@ \def\bsup#1 \esup{^{#1}} \def\inrel#1{\mathrel{\underline{#1}}} \newdimen\zedindent \zedindent=\leftmargini% \newdimen\zedleftsep \zedleftsep=1em% \newdimen\zedtab \zedtab=2em% \newdimen\zedbar \zedbar=6em% \newskip\zedskip \zedskip=0.5\baselineskip plus0.333333\baselineskip% minus0.333333\baselineskip% \def\zedsize{}% \newcount\interzedlinepenalty \interzedlinepenalty=10000% \newcount\preboxpenalty \preboxpenalty=0% \def\@jot{0.5\zedskip} \def\@narrow{\advance\linewidth by-\zedindent} \def\@zrulefill{\leaders\hrule height\arrayrulewidth\hfill} \def\@topline#1{\hbox to\linewidth{% \color{ZedBoxColor}% \vrule height\arrayrulewidth width\arrayrulewidth \vrule height0pt depth\@jot width0pt \hbox to\zedleftsep{\@zrulefill\thinspace}% {\color{ZedColor}#1}\thinspace\@zrulefill}} \def\@zedline{\omit\hbox to 0pt{\color{ZedBoxColor}\vrule height\arrayrulewidth width\linewidth\hss} \cr} \def\where{\@zskip\@jot \omit\hbox{\color{ZedBoxColor}\vrule height\arrayrulewidth width\zedbar} \cr \@zskip\@jot} \def\also{\crcr \noalign{\penalty\interdisplaylinepenalty \vskip\zedskip}} \def\@zskip#1{\crcr \omit \hbox{\color{ZedBoxColor}\vrule height#1 width\arrayrulewidth} \cr} \def\@zlign{\tabskip\z@skip\everycr{}} \let\tie=\t \def\t#1{\afterassignment\@t\count@=#1} \def\@t{\hskip\count@\zedtab} \def\@setzsize{\let\next=\@nomath\def\@nomath##1{}% \skip0=\abovedisplayskip\skip1=\belowdisplayskip \zedsize \let\@nomath=\next \abovedisplayskip=\skip0\belowdisplayskip=\skip1} \def\@zed{\ifvmode\@zleavevmode\fi% $$\global\zt@ptrue \@setzsize \advance\linewidth by-\zedindent \advance\displayindent by\zedindent \def\\{\crcr}% Must have \def and not \let for nested alignments. \let\par=\relax \tabskip=0pt} \def\zed{% \@zed\@znoskip\halign to\linewidth\bgroup% {\strut$\color{ZedColor}\@zlign##$}\hfil\tabskip=0pt plus1fil\cr}% \def\endzed{\crcr\egroup$$\global\@ignoretrue} \def\@znoskip{% \offinterlineskip \everycr={% \noalign{% \ifzt@p\relax\global\zt@pfalse% \ifdim\prevdepth>-1000pt\relax% \skip0=\normalbaselineskip% \advance\skip0by-\prevdepth% \advance\skip0by-\ht\strutbox% \ifdim\skip0<\normallineskiplimit\relax% \vskip\normallineskip% \else% \vskip\skip0% \fi% \fi% \else% \penalty\interzedlinepenalty% \fi% }}} \def\[{\begingroup\zed} \def\]{\crcr\egroup$$\endgroup\ignorespaces} \def\axdef{\def\also{\@zskip\zedskip}% \predisplaypenalty=\preboxpenalty% \@zed\@znoskip% \halign to\linewidth\bgroup% \strut{\color{ZedBoxColor}\vrule width\arrayrulewidth}\hskip\zedleftsep% {$\color{ZedColor}\@zlign##$}\hfil \tabskip=0pt plus1fil\cr} \let\endaxdef=\endzed \def\schema#1{\@ifnextchar[{\@schema{#1}}{\@nschema{#1}}} \def\@schema#1[#2]{\@nschema{#1[#2]}} \def\@nschema#1{\@narrow\axdef\omit\@topline{$\strut#1$}\cr} \def\endschema{\@zskip\@jot\@zedline\endzed} \@namedef{schema*}{\@narrow\axdef\@zedline\@zskip\@jot} \expandafter\let\csname endschema*\endcsname=\endschema \def\gendef{\@ifnextchar[{\@gendef}{\@ngendef}} \def\@gendef[#1]{\@narrow\axdef\omit \setbox0=\hbox{$\strut[#1]$}% \rlap{\raise\doublerulesep\@topline{\hskip\wd0}}\@topline{\box0}\cr} \def\@ngendef{\@narrow\axdef \@zedline \omit \hbox to\linewidth{\vrule height\doublerulesep width\arrayrulewidth \@zrulefill}\cr \@zskip\@jot } \let\endgendef=\endschema \def\argue{% \@zed\interzedlinepenalty=\interdisplaylinepenalty \openup\@jot \halign to\linewidth\bgroup \strut% $\color{ZedColor}\@zlign##$\hfil \tabskip=0pt plus1fil &\hbox to0pt{% \color{AnnotationColor}\hss[\@zlign##\unskip]}\tabskip=0pt\cr% \noalign{\vskip-\@jot}} \let\endargue=\endzed \def\because#1{\noalign{\vskip-\jot}&{\color{AnnotationColor}#1}\cr} \def\syntax{\@zed\@znoskip \halign\bgroup \strut$\color{ZedColor}\@zlign##$\hfil &\hfil$\color{ZedColor}\@zlign{}##{}$\hfil &$\color{ZedColor}\@zlign##$\hfil\cr} \let\endsyntax=\endzed \def\infrule{\@zed\@znoskip \halign\bgroup \strut\quad$\color{ZedColor}\@zlign##$\quad\hfil&\quad\@zlign##\hfil\cr} \let\endinfrule=\endzed \def\derive{\crcr \noalign{\vskip\@jot} \omit\@zrulefill \@ifnextchar[{\@xderive}{\@yderive}} \def\@xderive[#1]{% &$\smash{% \lower 0.5ex\hbox{% \color{AnnotationColor}$[\;#1\;]$}}$\cr\noalign{\vskip\@jot}} \def\@yderive{\cr \noalign{\vskip\@jot}} \def\@zleavevmode{\if@inlabel \indent \else\if@noskipsec \indent \else\if@nobreak \global\@nobreakfalse \everypar={}\abovedisplayskip=0pt\fi {\parskip=0pt\noindent}\fi\fi} \fi % finally, block \def\block{\@ifnextchar[{\@block}{\@block[t]}} \def\@block[#1]{\array[#1]{@{}l@{}}} \let\endblock=\endarray \endinput