From 0c0e7fca5ebe5c8c56679fb314c851b880613073 Mon Sep 17 00:00:00 2001 From: Karl Berry Date: Fri, 13 Jan 2006 00:04:56 +0000 Subject: qsymbols git-svn-id: svn://tug.org/texlive/trunk@1263 c570f23f-e606-0410-a88d-b1316a301751 --- Master/texmf-dist/tex/latex/qsymbols/qsymbols.sty | 854 ++++++++++++++++++++++ 1 file changed, 854 insertions(+) create mode 100644 Master/texmf-dist/tex/latex/qsymbols/qsymbols.sty diff --git a/Master/texmf-dist/tex/latex/qsymbols/qsymbols.sty b/Master/texmf-dist/tex/latex/qsymbols/qsymbols.sty new file mode 100644 index 00000000000..a7af5a8acad --- /dev/null +++ b/Master/texmf-dist/tex/latex/qsymbols/qsymbols.sty @@ -0,0 +1,854 @@ +% $Id: qsymbols.sty,v 1.12 1997/01/07 23:56:44 krisrose Exp $ +% +% `Quoted math symbol abbreviations' package for LaTeX2e. +% Copyright © 1994 Kristoffer H. Rose +% +% This package 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 2 of the License, or (at your +% option) any later version. +% +% This package 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 package; if not, write to the Free Software Foundation, Inc., +% 675 Mass Ave, Cambridge, MA 02139, USA. +% +\NeedsTeXFormat{LaTeX2e} + +\def\tmp#1Revision: #2 $,#3Date: #4 #5 ${% + \ProvidesPackage{qsymbols}[#4 Quoted math symbol abbreviations v.#2] + \def\qsymbolsversion{#2}\def\qsymbolsdate{#4}} +\tmp$Revision: 1.12 $,$Date: 1997/01/07 23:56:44 $ + +% Process Options such that \xyloaded is indicator... + +\DeclareOption{noams}{\let\qsym@noams=\relax} +\DeclareOption{nostmary}{\let\qsym@nostmary=\relax} + +\DeclareOption{dvips}{\PassOptionsToPackage{dvips}{xy}} + +\newif\ifpurexy@ +\DeclareOption{xy}{\let\qsym@xy=\relax \purexy@false} +\DeclareOption{purexy}{\let\qsym@xy=\relax \purexy@true} + +\newif\ifoldcm@ +\DeclareOption{oldcm}{\oldcm@true} + +\def\qsymsmash@@{} +\DeclareOption{smash}{\gdef\qsymsmash@@{\ht\z@=\z@ \dp\z@=\z@}} + +\def\qW@@#1#2{} +\def\qW@debug#1#2{\begingroup#1\immediate\write16{#2}\endgroup} +\DeclareOption{debug}{\let\qW@@=\qW@debug} + +\DeclareOption*{% + \expandafter\PassOptionsToPackage\expandafter{\CurrentOption}{xy}} + +\ProcessOptions\relax + +% Import of symbols. + +\ifnum\the\catcode`\"=\active \def\restoredbl@{\catcode`\"=\active}% +\else \let\restoredbl@=\relax \fi + +\catcode`\"=12 + +\ifx\qsym@noams\undefined + \let\blacktriangle=\undefined % Sic. + \RequirePackage{amssymb,amsbsy} +\fi + +\ifx\qsym@nostmary\undefined + \RequirePackage{stmaryrd} +\fi + +\ifx\qsym@xy\relax + \ifx\xyloaded\undefined \RequirePackage[arrow,cmtip]{xy}% + \else \xyoption{arrow}\xyoption{cmtip}\makeatletter \fi +\fi + +\ifx\UseTips\undefined + \let\qTips=\UseComputerModernTips + \let\qTips=\NoComputerModernTips +\else + \let\qTips=\UseTips \let\qNoTips=\NoTips +\fi + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% SETUP. + +% Activate ` in math mode to look up qsymbol. + +\def\active@q{\futurelet\tmp\qsym@} +{\catcode`\`=\active \global\let`=\active@q} +\mathcode`\`="8000 + +% Definition commands. + +\def\qsym@#1{\ifx\bgroup\tmp \def\tmp{`{#1}}\else\def\tmp{`#1}\fi + \expandafter\let\expandafter\@tmp\csname\space\codeof\tmp\endcsname + \avoidrelax@\@tmp{\@warning{Unknown symbol \codeof\tmp}}} + +\def\avoidrelax@#1#2{\ifx#1\relax\def\av@id{#2}\else\let\av@id=#1\fi \av@id} + +\def\newqsymbol#1{\def\tmp{#1}\edef\tmp{\codeof\tmp}% + \expandafter\let\expandafter\@tmp\csname\space\tmp\endcsname + \ifx\@tmp\relax\else \@warning{Redefining qsymbol \tmp}\fi + \expandafter\def\csname\space\tmp\endcsname} + +\def\newqsymbol@#1#2{\def\tmp{#1}% + \expandafter\def\csname\space\codeof\tmp\endcsname{#2}} + +\def\newqsymbol@@#1#2{\ifx#2\undefined \else \newqsymbol@{#1}{#2}\fi} + +% Boxification...not really an optimisation anymore. + +\newcommand{\boxifyqsymbol}[2][]{\def\tmp{#2}\edef\tmp{\codeof\tmp}% + \edef\tmp{{\expandafter\noexpand\csname\space\tmp @box\endcsname}{\tmp}}% + \DN@##1##2{\AtBeginDocument{% + \newsavebox{##1}\sbox{##1}{$#2$}% + \expandafter\def\csname\space##2\endcsname{#1{\usebox{##1}}}}}% + \expandafter\next@\tmp} + +% Auxiliaries (from Xy-pic)... + +%\ifx\xyloaded\undefined +{\catcode`\:=12 \catcode`\>=12 % to ensure that all of :->< are other... + \gdef\codeof#1{\expandafter\codeof@\meaning#1<-:} + \gdef\codeof@#1:->#2<-:{#2}} + +\def\space@.{\futurelet\space@\relax}\space@. % +\def\DN@{\def\next@} +\def\DNii@{\def\nextii@} +%\fi + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% SINGLE SYMBOLS. + +% Letters: + +\newqsymbol@{`a}\alpha +\newqsymbol@{`b}\beta +\newqsymbol@{`c}\chi +\newqsymbol@{`d}\delta +\newqsymbol@{`D}\Delta +\newqsymbol@{`e}\epsilon +\newqsymbol@{`f}\phi +\newqsymbol@{`F}\Phi +\newqsymbol@{`g}\gamma +\newqsymbol@{`G}\Gamma +\newqsymbol@{`h}\eta +\newqsymbol@{`i}\iota +\newqsymbol@{`j}\psi +\newqsymbol@{`J}\Psi +\newqsymbol@{`k}\kappa +\newqsymbol@{`l}\lambda +\newqsymbol@{`L}\Lambda +\newqsymbol@{`m}\mu +\newqsymbol@{`n}\nu +\newqsymbol@{`p}\pi +\newqsymbol@{`P}\Pi +\newqsymbol@{`q}\theta +\newqsymbol@{`Q}\Theta +\newqsymbol@{`r}\rho +\newqsymbol@{`s}\sigma +\newqsymbol@{`S}\Sigma +\newqsymbol@{`t}\tau +\newqsymbol@{`u}\varrho +\newqsymbol@{`v}\varphi +\newqsymbol@{`w}\omega +\newqsymbol@{`W}\Omega +\newqsymbol@{`x}\xi +\newqsymbol@{`X}\Xi +\newqsymbol@{`y}\upsilon +\newqsymbol@{`Y}\Upsilon +\newqsymbol@{`z}\zeta + +% Symbols: + +\newqsymbol@{`+}\pm +\newqsymbol@{`*}\times +\newqsymbol@{`:}\in +\newqsymbol@{`;}\notin +\newqsymbol@{`/}\setminus +\newqsymbol@{`U}\cup +\newqsymbol@@{`C}\complement +\newqsymbol@{`_}\bot +\newqsymbol@{`T}\top +\newqsymbol@{`o}\circ +\newqsymbol@{`.}\cdot +\newqsymbol@{`=}\equiv +\newqsymbol@{`~}\simeq +\newqsymbol@{`E}\exists +\newqsymbol@{`A}\forall +\newqsymbol@{`!}\lnot +\newqsymbol@{`^}\land +\newqsymbol@{`V}\lor + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% CIRCLED & BOXED OPERATIONS. + +% Circled: + +\newqsymbol@{`(}{\oqsym@} + +\def\oqsym@#1){\def\tmp{`(#1)}% + \expandafter\let\expandafter\@tmp\csname\space\codeof\tmp\endcsname\relax + \avoidrelax@\@tmp{\encircle{#1}}} + +\ifx\varbigcirc\undefined \let\varbigcirc=\bigcirc \fi +\def\encircle#1{\ensuremath{% + \def\nextii@{\kern-.1em % + \ooalign{\hfil\hbox{$\mathstrut\scriptstyle#1$}\hfil\crcr + $\varbigcirc$}\kern-.1em}% + \mathchoice{\hbox{\nextii@}}{\hbox{\nextii@}}% + {\hbox{\scriptsize\nextii@}}{\hbox{\tiny\nextii@}}}} + +\newqsymbol@{`()}\bigcirc +\newqsymbol@{`(?)}\circ +\newqsymbol@{`(!)}\bullet +\newqsymbol@@{`(R)}\circledR +\newqsymbol@{`(C)}\copyright + +% Circled symbols overridden by stmaryrd (bold) variants if available. +\newqsymbol@{`(+)}\oplus \newqsymbol@@{`(+)}\varoplus +\newqsymbol@{`(-)}\ominus \newqsymbol@@{`(-)}\varominus +\newqsymbol@{`(`*)}\otimes \newqsymbol@@{`(`*)}\varotimes +\newqsymbol@@{`(/)}\oslash \newqsymbol@@{`(/)}\varoslash +\newqsymbol@@{`(|)}\obar \newqsymbol@@{`(|)}\varobar +\newqsymbol@@{`(`/)}\obslash \newqsymbol@@{`(`/)}\varobslash +\newqsymbol@{`(`.)}\odot \newqsymbol@@{`(`.)}\varodot +\newqsymbol@@{`(*)}\oast \newqsymbol@@{`(*)}\varoast +\newqsymbol@@{`(`o)}\ocircle \newqsymbol@@{`(`o)}\varocircle +\newqsymbol@@{`(`^)}\owedge \newqsymbol@@{`(`^)}\varowedge +\newqsymbol@@{`(`V)}\ovee \newqsymbol@@{`(`V)}\varovee +\newqsymbol@@{`(<)}\olessthan \newqsymbol@@{`(<)}\varolessthan +\newqsymbol@@{`(>)}\ogreaterthan \newqsymbol@@{`(>)}\varogreaterthan + +% Boxed: + +\newqsymbol@{`[}{\boxedqsym@} + +\def\boxedqsym@#1]{\def\tmp{`[#1]}% + \expandafter\let\expandafter\@tmp\csname\space\codeof\tmp\endcsname\relax + \avoidrelax@\@tmp{\enbox{#1}}} + +\def\enbox#1{\ensuremath{% + \def\nextii@{\kern-.1em \hbox{% + \ooalign{\hfil\raise.1em\hbox{$\scriptstyle#1$}\hfil\crcr + $\square$}\kern-.1em}}% + \mathchoice{\hbox{\nextii@}}{\hbox{\nextii@}}% + {\hbox{\scriptsize\nextii@}}{\hbox{\tiny\nextii@}}}} + +\newqsymbol@@{`[+]}\boxplus +\newqsymbol@@{`[-]}\boxminus +\newqsymbol@@{`[`*]}\boxtimes +\newqsymbol@@{`[/]}\boxslash +\newqsymbol@@{`[|]}\boxbar +\newqsymbol@@{`[`/]}\boxbslash +\newqsymbol@@{`[`.]}\boxdot +\newqsymbol@@{`[*]}\boxast +\newqsymbol@@{`[`o]}\boxcircle + +\def\bull{% + \mathbin{\vcenter{% + \setbox0=\hbox{\kern1pt \vrule height.4ex depth.4ex width.8ex }% + \ht0=.5ex \dp0=.5ex \wd0=1ex \box0}}} + +\def\whitebull{% + \mathbin{\vcenter{% + \setbox0=\hbox{\kern1pt % + \vrule height.4ex depth.4ex width.1ex % + \rlap{\vrule height.4ex depth -.3ex width.6ex }% + \vrule height-.3ex depth.4ex width.6ex % + \vrule height .4ex depth.4ex width .1ex }% + \ht0=.5ex \dp0=.5ex \wd0=1ex \box0}}} + +\newqsymbol@{`[]}\square +\newqsymbol@{`[?]}\whitebull +\newqsymbol@{`[!]}\bull + +% Angled: + +\newqsymbol@{`<}\angledqsym@ + +\def\angledqsym@#1>{\def\tmp{`<#1>}% + \csname\space\codeof\tmp\endcsname\relax} + +\newqsymbol@{`<>}\lozenge +\newqsymbol@{`}\diamond + +% Braced: + +\newqsymbol@{`{}}\emptyset \newqsymbol@@{`{}}\varnothing + +% Faces: + +\def\smiley{{\hbox{\rlap{$\varbigcirc$}\kern.13em$\scriptstyle\ddot\smile$}}} +\def\frowny{{\hbox{\rlap{$\varbigcirc$}\kern.13em$\scriptstyle\ddot\frown$}}} +\def\weeny{{\hbox{\rlap{$\varbigcirc$}\kern.20em$% + \scriptstyle\ddot{\mkern.5mu\smash{-}\mkern-.5mu}$}}} +\def\oopsy{{\hbox{\rlap{$\bigcirc$}\kern.5ex$\scriptstyle\ddot\sim$}}} + +\newqsymbol@{`(:-)}\smiley +\newqsymbol@{`[:-]}\frowny +\newqsymbol@{`<:->}\weeny +\newqsymbol@{`{:-}}\oopsy + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% BOLD SYMBOLS + +\newqsymbol@{`@}{\futurelet\tmp\boldqsymbol} + +\def\boldqsymbol{% + \ifx `\tmp \DN@`{\futurelet\tmp\boldqsymbol@}% + \else \let\next@=\boldsymbol \fi \next@} + +\def\boldqsymbol@{% + \ifx [\tmp \DN@[##1]{\boldsymbol{`[##1]}}%] + \else\ifx (\tmp \DN@(##1){\boldsymbol{`(##1)}}%) + \else\ifx <\tmp \DN@<##1>{\boldsymbol{`<##1>}}%> + \else\ifx \bgroup\tmp \DN@##1{\boldsymbol{`{##1}}}% + \else \DN@##1{\boldsymbol{`##1}}% + \fi\fi\fi\fi \next@} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% ORDERINGS. + +\newqsymbol@{``}{\qsymord@} + +\def\xqsym@@#1#2{% + \expandafter\let\expandafter\1\csname qsym@@#1\endcsname + \def\2{\expandafter\def\csname qsym@@#1\endcsname}% + \expandafter\2\expandafter{\1#2}} + +\def\qsymord@{\def\qsym@@@{``}% + \let\qsym@@=\empty\let\qsym@@x=\empty\let\qsym@@v=\empty\let\qsym@@m=\empty + \futurelet\tmp\qsymord@i} + +{\restoredbl@ + \gdef\qsymord@i{% + \ifx `\tmp \def\@tmp##1{\futurelet\tmp\qsymord@i}\xqsym@@{@}`\xqsym@@{x}x% + \else\ifx "\tmp + \def\@tmp"##1"{\xqsym@@{@}{"##1"}% + \mathbin{\vcenter{\hbox{% + $\let\undefinedarrow@=\undefinedarrowtrue@ + \def\qrightdirection@@{(0,-1):0}\qsymar##1 $}}}}% + \else\ifx\undefined\tmp \let\@tmp=\qsymord@ii + \else\ifcat A\tmp \def\@tmp##1{\csname##1@ord\endcsname}% + \else \let\@tmp=\qsymord@ii \fi\fi\fi\fi \@tmp}} + +\def\qsymord@ii{\def\@tmp##1{\xqsym@@{@}{##1}\futurelet\tmp\qsymord@ii}% + \ifx /\tmp \xqsym@@{x}n% + \else\ifx =\tmp \def\qsym@@m{eq}% + \else\ifx -\tmp \def\qsym@@v{dash}% + \else\ifx +\tmp \def\qsym@@v{plus}% + \else\ifx <\tmp \def\qsym@@{less}% + \else\ifx >\tmp \def\qsym@@{gtr}% + \else\ifx (\tmp \def\qsym@@{subset}% + \else\ifx )\tmp \def\qsym@@{supset}% + \else\ifx [\tmp \def\qsym@@{sqsubset}% + \else\ifx ]\tmp \def\qsym@@{sqsupset}% + \else\ifx \{\tmp\def\qsym@@{prec}% + \else\ifx \}\tmp\def\qsym@@{succ}% + \else\ifx \<\tmp\def\qsym@@{triangleleft}% + \else\ifx \>\tmp\def\qsym@@{triangleright}% + \else\ifx ~\tmp \def\qsym@@{sim}% + \else\ifx \~\tmp\def\qsym@@{backsim}% + \else \let\@tmp=\qsymord@x + \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi \@tmp} + +\def\qsymord@x{% + \expandafter\let\expandafter\@tmp\csname\qsym@@x\qsym@@\qsym@@v\qsym@@m\endcsname + \ifx\@tmp\relax \@warning{Undefined ordering \codeof\qsym@@@}% + \else\qW@@{}{Q \codeof\qsym@@@\space : + \expandafter\string\csname\qsym@@x\qsym@@\qsym@@v\qsym@@m\endcsname}\fi + \@tmp} + +\mathchardef\less="313C % < +\let\lesseq=\leq \let\nlesseq=\nleq +\def\xless{\mathrel{\wedge}} \let\xxless=\bigwedge + +\mathchardef\gtr="313E % > +\let\gtreq=\geq \let\ngtreq=\ngeq +\def\xgtr{\mathrel{\vee}} \let\xxgtr=\bigvee + +\let\subsetdash=\in % `set inclusion' relations +\def\nsubset{\not\subset} +\let\nsubsetdash=\notin +\def\nsubseteq{\not\subseteq} +\def\nsubsetplus{\not\subsetplus} +\def\nsubsetpluseq{\not\subsetpluseq} +\let\xsubset=\cap \let\xxsubset=\bigcap +\let\xsubsetplus=\nplus +\let\xxsubsetplus=\bignplus +\let\xsubsetdash=\pitchfork + +\let\supsetdash=\ni +\let\xsupset=\cup \let\xxsupset=\bigcup +\let\xsupsetplus=\uplus +\let\xxsupsetplus=\biguplus +\def\nsupset{\not\supset} +\def\nsupseteq{\not\supseteq} +\def\nsupsetplus{\not\supsetplus} +\def\nsupsetpluseq{\not\supsetpluseq} + +\def\nsqsubset{\not\sqsubset} % `open square' relations +\def\nsqsubseteq{\not\sqsubseteq} +\def\nsqsupset{\not\sqsupset} +\def\nsqsupseteq{\not\sqsupseteq} +\let\xsqsubset=\sqcap +\let\xsqsupset=\sqcup +\let\xxsqsubset=\bigsqcap +\let\xxsqsupset=\bigsqcup + +\let\xprec=\curlywedge % `curly' relations +\let\xsucc=\curlyvee +\let\xxprec=\bigcurlywedge +\let\xxsucc=\bigcurlyvee + +\let\triangleleft=\vartriangleleft % `triangle' relations +\let\triangleright=\vartriangleright +\let\xtriangleleft=\vartriangle +\let\xtriangleright=\triangledown +\let\xxtriangleleft=\bigtriangleup +\let\xxtriangleright=\bigtriangledown + +\def\nsim{\not\sim} % ~ +\def\nsimeq{\not\simeq} +\let\xsim=\wr +\def\nbacksim{\not\backsim} +\def\nbacksimeq{\not\backsimeq} +\def\xbacksim{\smallint} +\def\xxbacksim{\int} + +\def\U@ord{\bigcup} % Abbreviations... ``U +\expandafter\def\csname\string^@ord\endcsname{\bigwedge} % ``^ +\def\V@ord{\bigvee} % ``V +\def\S@ord{\sum} % ``S +\def\P@ord{\prod} % ``P + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% ARROWS. + +\newif\ifqsym@@conn +\newif\ifqsym@@not +\newif\ifqsym@@ss + +% Activate "..." in math mode to look up qsymbol arrow. + +{\restoredbl@ \gdef\active@dq#1"{\def\qsym@@@{"#1"}\qsymar#1 }} +{\catcode`\"=\active \global\let"=\active@dq} +\mathcode`\"="8000 + +\newqsymbol@{`"}{\active@dq} + +\def\qsymar{\let\qsym@@=\empty + \let\qsym@@v=\empty \let\qsym@@m=\empty \let\qsym@@x=\empty + \def\qsym@@w{{10.1pt}}% + \qsym@@connfalse \qsym@@notfalse + \setbox\qsymar@labelbox=\copy\voidb@x + \qsym@@sstrue \let\qsym@@sb=\empty \let\qsym@@sp=\empty + \futurelet\tmp\qsymar@} + +\newbox\qsymar@labelbox + +\def\qsymar@hasconn{% + \ifqsym@@conn \qsymar@expand \else \qsym@@conntrue \fi} + +{% REPAIR bug of the 2e version of AMS-LaTeX where \makeatother is broken... + \ifx\@ifpackageloaded\undefined \makeatother + \else \@ifpackageloaded{amstex}{\catcode`\@=\active}{\makeatother}\fi + \gdef\addATto#1{#1@}} + +\def\qsym@@labelmargin{\labelmargin{1pt}} +\def\qsymarv@#1{\def\qsym@@v{#1}\def\qsym@@labelmargin{\labelmargin{#1pt}}} + +\def\qsymar@{% + \DN@##1{\xqsym@@{}{##1}\xqsym@@{m}{##1}\futurelet\tmp\qsymar@}%default + \ifx\space@\tmp \expandafter\DN@\space{\qsymar@i}%terminate at space + \else\ifx2\tmp \qsymarv@{2}\xqsym@@{}2\DN@2{\futurelet\tmp\qsymar@}% + \else\ifx3\tmp \qsymarv@{3}\xqsym@@{}3\DN@3{\futurelet\tmp\qsymar@}% + \else\ifx^\tmp \def\qsym@@v{^}\xqsym@@{}^\DN@^{\futurelet\tmp\qsymar@}% + \else\ifx_\tmp \def\qsym@@v{_}\xqsym@@{}_\DN@_{\futurelet\tmp\qsymar@}% + \else\ifx<\tmp + \else\ifx>\tmp + \else\ifx|\tmp + \else\ifx-\tmp \qsymar@hasconn + \else\ifx=\tmp \qsymar@hasconn \xqsym@@{m}-\qsymarv@{2}% + \xqsym@@{}=\DN@={\futurelet\tmp\qsymar@}% + \else\ifx.\tmp \qsymar@hasconn + \else\ifx:\tmp \qsymar@hasconn\xqsym@@{m}.\qsymarv@{2}% + \xqsym@@{}:\DN@:{\futurelet\tmp\qsymar@}% + \else\ifx~\tmp \qsymar@hasconn \qsymar@expand + \else\ifx x\tmp + \else\ifx o\tmp + \else\ifx`\tmp + \else\ifx'\tmp + \else\ifx!\tmp + \qsymar@expand \DN@!{\futurelet\tmp\qsymar@}% + \else\ifx \bgroup\tmp \DN@##1{\futurelet\tmp\qsymar@group##1@@}% + \else\addATto\ifx\tmp + \DN@##1##2{\xqsym@@{x}{##1##2}\futurelet\tmp\qsymar@}% + \else\ifx (\tmp \qsymar@expand\qsymar@expand + \DN@(##1){\xqsym@@{}{(##1)}% + \xqsym@@{x}{|*=/2\R@c/\hbox{\encircle{##1}}}% + \futurelet\tmp\qsymar@}% + \else\ifx [\tmp \qsymar@expand\qsymar@expand + \DN@[##1]{\xqsym@@{}{[##1]}\xqsym@@{x}{|*\hbox{\enbox{##1}}}% + \futurelet\tmp\qsymar@}% + \else\ifx *\tmp \DN@*{\qsymar@star}% + \else\ifx /\tmp \xqsym@@{}{/}% + \ifqsym@@not + \DN@/{\xqsym@@{x}{|-/.7pt/*\dir2{/}}\futurelet\tmp\qsymar@}% + \else \DN@/{\xqsym@@{x}{|-/-.7pt/*\dir2{/}}\futurelet\tmp\qsymar@}% + \qsym@@nottrue \fi + \else\ifcat A\noexpand\tmp + \DN@##1{\expandafter\let\expandafter\next@\csname qac@##1\endcsname + \ifx\next@\relax \DN@{\qsymar@badescape{##1}}\fi \next@}% + \else\ifcat .\noexpand\tmp + \DN@##1{\expandafter\let\expandafter\next@\csname qac@##1\endcsname + \ifx\next@\relax \DN@{\qsymar@badescape{##1}}\fi \next@}% + \else \let\next@=\qsymar@i + \@warning{Ignored weird token in arrow: \meaning\tmp}% + \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi + \next@} + +\def\qsymar@badescape#1{\DN@{\futurelet\tmp\qsymar@}% + \@warning{Undefined qsymbol arrow macro #1}} + +\def\qsymar@expand{\DNii@##1{\dimen@=##1}\expandafter\nextii@\qsym@@w\relax + \ifdim\dimen@<11pt \def\qsym@@w{{15.1pt}}% + \else\ifdim\dimen@<16pt \def\qsym@@w{{20.1pt}}% + \else\ifdim\dimen@<21pt \def\qsym@@w{{25.1pt}}% + \else \advance\dimen@5pt \edef\qsym@@w{{\the\dimen@}}\fi\fi\fi} + +% Measure/keep label + +\def\qsymar@group#1@@{% + \ifx ^\tmp \let\next@=\qsymar@label + \else\ifx _\tmp \let\next@=\qsymar@label + \else \qsym@@ssfalse + \ifx |\tmp \let\next@=\qsymar@label \else \DN@##1@@{}\fi + \fi\fi \next@#1{}@@% + \xqsym@@{x}{#1}\futurelet\tmp\qsymar@} + +\def\qsymar@label#1#2#3@@{% + \DN@{#3}\ifx\next@\empty + \ifqsym@@ss \qsym@@ssfalse + \ifx ^\tmp \ifx\qsym@@sp\empty \qsym@@sstrue \def\qsym@@sp{#2}\fi + \else\ifx _\tmp \ifx\qsym@@sb\empty \qsym@@sstrue \def\qsym@@sb{#2}\fi + \fi\fi + \fi + \DN@{\qsymar@label@@{#2}}% + \else \qsym@@ssfalse \DN@{\qsymar@label@#3@@}\fi \next@} + +\def\qsymar@label@#1#2@@{\DN@{#2}% + \ifx\next@\empty \DN@{\qsymar@label@@{#1}}% + \else \DN@{\qsymar@label@#2@@}\fi \next@} + +\def\qsymar@label@@#1{\setbox\z@=\hbox{$\m@th\scriptstyle\;{#1}\;$}% + \DNii@##1{\dimen@=##1}\expandafter\nextii@\qsym@@w\relax + \loop\ifdim\dimen@<\wd\z@ \qsymar@expand \repeat} + +\def\qsymar@star#1#{\qsymar@star@{#1}} +\def\qsymar@star@#1#2{\xqsym@@{}{*#1{#2}}\xqsym@@{m}{*#1{#2}}% + \futurelet\tmp\qsymar@} + +\def\qsymar@i{% + \ifingraph@ \DN@{\ingraph@false \qsymar@x\GRAPHar@}% + \else\if\inxy@ \DN@{\qsymar@x\ar}% + \else + \edef\nextii@{\codeof\qsym@@}% + \expandafter\let\expandafter\tmp\csname\space"\nextii@"\endcsname + \if\undefinedarrow@\tmp + \ifx\xyloaded\undefined + \DN@{\@warning{arrow "\nextii@" undefined}}% + \else + \DNii@##1{\setboxz@h{\kern\p@\qTips\qsym@@labelmargin + $\expandafter\xy\qrightdirection@@ + \qsymar@x\ar*{}+/v(1,0)##1/*{}\relax + \endxy$\kern\p@}\mathrel{\qsymsmash@@\boxz@}}% + \DN@{\expandafter\nextii@\qsym@@w}% + \qW@@{}{Q \codeof\qsym@@@\space : Xy-pic}\fi + \else + \ifx\qsym@@sp\empty \ifx\qsym@@sb\empty \qsym@@ssfalse \fi\fi + \ifqsym@@ss \xqsym@@{}{@}% + \expandafter\let\expandafter\@tmp\csname\space"\codeof\qsym@@"\endcsname + \ifx\@tmp\relax + \expandafter\def\expandafter\tmp\expandafter{\expandafter$\tmp$}% + \else \let\tmp=\@tmp \fi + \let\next@=\qsymar@stretch + \qW@@{\DN@##1{\dimen@=##1}\expandafter\next@\qsym@@w}% + {Q \codeof\qsym@@@\space + : \codeof\tmp\space + FROM \the\dimen@\space + LIMITS \string_{\codeof\qsym@@sb} \string^{\codeof\qsym@@sp}}% + \else + \let\next@=\tmp + \qW@@{}{Q \codeof\qsym@@@\space : \codeof\tmp\space + LIMITS \string_{\codeof\qsym@@sb} \string^{\codeof\qsym@@sp}}% + \fi + \fi + \fi\fi \next@} + +\def\qrightdirection@@{} +\def\undefinedarrow@#1{\ifx#1\relax TT\else TF\fi} +\def\undefinedarrowtrue@#1{TT} + +\def\qsymar@x#1{% + %% Eval #1 @\qsym@@v{\qsym@@m}\qsym@@x ... + \DN@{\addAT@#1}% + \DNii@{\expandafter\expandafter\expandafter\next@ + \expandafter\qsym@@v\expandafter{\qsym@@m}}% + \expandafter\nextii@\qsym@@x}% + +% Automatic stretching to fit a label: +\def\qsymar@stretch{\mathrel{\m@th + \DN@##1{\dimen@=##1}\expandafter\next@\qsym@@w\relax + \setbox\z@=\hbox{\tmp}\ifdim\dimen@<\wd\z@ \dimen@=\wd\z@ \fi + \setbox2=\hbox{$\m@th\scriptstyle\;{\qsym@@sp}\;$}% + \ifdim\dimen@<\wd2 \dimen@=\wd2 \fi + \setbox4=\hbox{$\m@th\scriptstyle\;{\qsym@@sb}\;$}% + \ifdim\dimen@<\wd4 \dimen@=\wd4 \fi + \setbox\z@=\hbox to \dimen@{\hfil\tmp\hfil}% + \dimen@=\ht\z@ \advance\dimen@-.3ex \ht\z@=\dimen@ + \dimen@=\dp\z@ \advance\dimen@-.3ex \dp\z@=\dimen@ + \qsymsmash@@{\textstyle\mathop{\box\z@}\limits^{\box2}_{\box4}}}} + +%% User's additional constructions...and the two (only) original ones. + +\def\newqsymbolarrowcharxy#1#2{% + \DN@{#1}\expandafter\def\csname qac@\codeof\next@\endcsname{% + \futurelet\tmp\qsymar@group#2@@}} + +\newqsymbolarrowcharxy{?}{^-*-<3pt,1pt>{\scriptstyle=}} +\newqsymbolarrowcharxy{+}{^-*-<3pt,1pt>{\scriptstyle+}} + +\newif\ifingraph@ + +% `Canned' arrows; single arrows avoided when `oldcm' option specified (they +% were ugly before getting fixed -- this is *still* bad with Y&Ys PS fonts). + +\ifpurexy@\else + +\newqsymbol@{"-"}{-} +\newqsymbol@{"-@"}{\genericarrowfill---} +\newqsymbol@{"/-"}{\not-} + +\newqsymbol@{"="}{=} +\newqsymbol@{"=@"}{\genericarrowfill===} +\newqsymbol@{"/="}{\not=} + +\newqsymbol@{"3-"}\equiv +\newqsymbol@{"3-@"}{\genericarrowfill\equiv\equiv\equiv} +\newqsymbol@{"3/-"}{\not\equiv} + +\newqsymbol@{"~"}\sim +\newqsymbol@{"2~"}\approx + +\ifoldcm@\else +\newqsymbol@{"<-"}\leftarrow \newqsymbol@{"<-!"}\longleftarrow +\newqsymbol@{"<-@"}\leftarrowfill +\fi +\newqsymbol@{"<="}\Leftarrow \newqsymbol@{"<=!"}\Longleftarrow +\newqsymbol@{"<=@"}{\genericarrowfill\Leftarrow==} + +\newqsymbol@@{"<3"}\Lleftarrow +\ifx\Llefttarrow\undefined\else + \newqsymbol@{"<3@"}{\genericarrowfill\Lleftarrow\equiv\equiv}\fi + +\ifoldcm@\else +\newqsymbol@{""}\rightarrow \newqsymbol@{"-!>"}\longrightarrow +\newqsymbol@{"->@"}\rightarrowfill +\fi +\newqsymbol@{"=>"}\Rightarrow \newqsymbol@{"=!>"}\Longrightarrow +\newqsymbol@{"=>@"}{\genericarrowfill==\Rightarrow} + +\newqsymbol@@{"3>"}\Rrightarrow +\ifx\Rrightarrow\undefined\else + \newqsymbol@{"3>@"}{\genericarrowfill\equiv\equiv\Rrightarrow}\fi + +\ifoldcm@\else +\newqsymbol@@{"-/>"}\nrightarrow +\fi +\newqsymbol@@{"=/>"}\nRightarrow + +\ifoldcm@\else +\newqsymbol@{"<->"}\leftrightarrow \newqsymbol@{"<-!>"}\longleftrightarrow +\newqsymbol@{"<->@"}{\genericarrowfill\leftarrowfill-\rightarrowfill} +\fi +\newqsymbol@{"<=>"}\Leftrightarrow \newqsymbol@{"<=!>"}\Longleftrightarrow +\newqsymbol@{"<=>@"}{\genericarrowfill\Leftarrowfill=\Rightarrowfill} + +\ifoldcm@\else +\newqsymbol@@{""}\nleftrightarrow +\fi +\newqsymbol@@{""}\nLeftrightarrow + +\ifoldcm@\else +\newqsymbol@@{"<-|"}\mapsfrom \newqsymbol@@{"<-!|"}\longmapsfrom +\ifx\mapsfrom\undefined + \newqsymbol@{"<-|@"}{\genericarrowfill\leftarrow-\mapsfromchar}\fi +\fi +\newqsymbol@@{"<=|"}\Mapsfrom \newqsymbol@@{"<=!|"}\Longmapsfrom +\ifx\Mapsfrom\undefined + \newqsymbol@{"<=|@"}{\genericarrowfill\Leftarrow=\Mapsfromchar}\fi + +\ifoldcm@\else +\newqsymbol@{"|->"}\mapsto \newqsymbol@@{"|-!>"}\longmapsto +\newqsymbol@{"|->@"}{\genericarrowfill\mapstochar-\rightarrow} +\fi +\newqsymbol@@{"|=>"}\Mapsto \newqsymbol@@{"|=!>"}\Longmapsto +\ifx\Mapsto\undefined + \newqsymbol@{"|=>@"}{\genericarrowfill\Mapstochar=\Rightarrow}\fi + +\ifoldcm@\else +\newqsymbol@{"<-'"}\hookleftarrow +\newqsymbol@{"<-'@"}{\genericarrowfill\leftarrow-\rhook} + +\newqsymbol@{"`->"}\hookrightarrow +\newqsymbol@{"`->@"}{\genericarrowfill\lhook-\rightarrow} + +\newqsymbol@{"^<-"}\leftharpoonup \newqsymbol@{"^->"}\rightharpoonup +\newqsymbol@{"_<-"}\leftharpoondown \newqsymbol@{"_->"}\rightharpoondown +\fi + +\newqsymbol@@{"<--"}\dashleftarrow +\newqsymbol@@{"-->"}\dashrightarrow + +\ifoldcm@\else +\newqsymbol@{"<<-"}{\leftarrow\mkern-15mu\leftarrow} +\newqsymbol@{"<<-@"}{\genericarrowfill{\leftarrow\mkern-15mu\leftarrow}--} +\fi +\newqsymbol@{"<<="}{\Leftarrow\mkern-15mu\Leftarrow} +\newqsymbol@{"<<=@"}{\genericarrowfill{\Leftarrow\mkern-15mu\Leftarrow}==} + +\ifoldcm@\else +\newqsymbol@{"->>"}{\rightarrow\mkern-15mu\rightarrow} +\newqsymbol@{"->>@"}{\genericarrowfill--{\rightarrow\mkern-15mu\rightarrow}} +\fi +\newqsymbol@{"=>>"}{\Rightarrow\mkern-15mu\Rightarrow} +\newqsymbol@{"=>>@"}{\genericarrowfill=={\Rightarrow\mkern-15mu\Rightarrow}} + +\newqsymbol@@{"<~"}\leftsquigarrow \newqsymbol@@{"~>"}\rightsquigarrow +\newqsymbol@@{"<~>"}\leftrightsquigarrow + +\ifoldcm@\else +\newqsymbol@@{"<-<"}\leftarrowtail +\newqsymbol@@{">->"}\rightarrowtail +\fi + +\newqsymbol@@{"<|-"}\leftarrowtriangle +\newqsymbol@@{"<|-@"}{\genericarrowfill\leftarrowtriangle--} + +\newqsymbol@@{"-|>"}\rightarrowtriangle +\newqsymbol@@{"-|>@"}{\genericarrowfill--\rightarrowtriangle} + +\newqsymbol@@{"<|-|>"}\leftrightarrowtriangle +\newqsymbol@@{"<|-|>@"}{\genericarrowfill\leftarrowtriangle-\rightarrowtriangle} + +\newqsymbol@@{"-o"}\multimap +\newqsymbol@@{"-o@"}{\genericarrowfill--\multimap} + +\newqsymbol@@{"|-"}\vdash \newqsymbol@@{"|/-"}\nvdash +\newqsymbol@@{"||-"}\Vdash \newqsymbol@@{"||/-"}\nVdash +\newqsymbol@@{"|="}\vDash \newqsymbol@@{"|/="}\nvDash +\newqsymbol@@{"-|"}\dashv + +\def\genericarrowfill#1#2#3{$\m@th\mathord{#1}\mkern-6mu% + \cleaders\hbox{$\mkern-2mu\mathord{#2}\mkern-2mu$}\hfill + \mkern-6mu\mathord{#3}$} + +\fi + +% Xy-pic additions... + +\ifx\xyloaded\undefined \def\inxy@{TF}\else + +\newdir{|>}{!/+4.6pt/\dir{|}*:(1,-.2)\hbox{\qNoTips\dir^{>}}% + *:(1,+.2)\hbox{\qNoTips\dir_{>}}} + +\newdir{<|}{!/-4.6pt/\dir{|}*:(1,-.2)\hbox{\qNoTips\dir_{<}}% + *:(1,+.2)\hbox{\qNoTips\dir^{<}}} + +\newdir{`}{\dir^{(}} +\newdir{'}{\dir^{)}} + +\newdir{/}{:(1,-.3)\dir3{|}} + +% DIAGRAMS: make `... work in Xy-graphs also: + +\let\qsymbolsGRAPH@=\GRAPH@ + +\def\GRAPH@{% + \ifx `\next \DN@`{\ingraph@true\active@q}% + \else \let\next@=\qsymbolsGRAPH@ \fi \next@} + +\fi + +%% Restore possibly active " :-) + +\restoredbl@ + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% END. + +\endinput + +% $Log: qsymbols.sty,v $ +% Revision 1.12 1997/01/07 23:56:44 krisrose +% Spacing bug with debugging fixed. +% +% Revision 1.11 1997/01/06 18:55:01 krisrose +% Deactivate " after ``. +% +% Revision 1.10 1996/12/17 18:26:33 krisrose +% Fixed bugs with new stretchable arrows. +% +% Revision 1.9 1996/12/05 04:29:15 krisrose +% Handles sub/superscripts without Xy-pic. +% Cleaned up & ready for Xy-pic version 3.3. +% +% Revision 1.8 1995/05/09 17:27:33 kris +% Intermediate. +% Arrow group decorations now properly measured. +% Bug fixes. +% +% Revision 1.7 1994/12/12 01:29:28 kris +% Updates for Xy-pic v3 in progress... +% +% Revision 1.6 1994/11/16 14:05:40 kris +% Intermediate version fits internal Xy-pic... +% +% Revision 1.5 1994/10/28 18:19:36 kris +% Added '{..} and documented "...{...}..." . +% +% Revision 1.4 1994/10/28 15:08:17 kris +% Added boldsymbol support. +% +% Revision 1.3 1994/10/26 16:47:02 kris +% Fixed a few things :-) +% +% Revision 1.2 1994/10/26 02:10:17 kris +% Integrated qarrow; use Xy-pic is an option. +% +% Revision 1.1 1994/10/24 22:55:12 kris +% Initial revision +% +% Extracted from kris.sty 1.9. + +% Tell Emacs what this is... +% Local Variables: +% mode:latex +% fill-column:77 +% End: -- cgit v1.2.3