%% $Id: xydoc.sty,v 3.3 1996/12/19 03:31:56 krisrose Exp krisrose $ %% %% Style for Xy-pic documentation under LaTeX. %% Copyright (c) 1993-1996 Kristoffer H. Rose %% %% This file is part of the Xy-pic package for graphs and diagrams in TeX. %% See the companion README and INSTALL files for further information. %% Copyright (c) 1991-1996 Kristoffer H. Rose %% %% The Xy-pic 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. %% %% The Xy-pic 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. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Since the documentation files may have Danish ISO Characters... \input{latin1.sty} % ACTIVE CHARACTERS: "<|? are active (set before loading Xy-pic to make the % parsing work)...and redefine LaTeX \dospecials at the same time but do NOT % tell it to redefine ? because we want to use that in code! \catcode`\"=\active \let"=\relax \catcode`\<=\active \let<=\relax \catcode`\|=\active \let|=\relax \catcode`\?=\active \let?=\relax \def\dospecials{% \do\ \do\\\do\{\do\}\do\$\do\&\do\#\do\^\do\_\do\%\do\~\do\"\do\<\do\|} %\catcode9=10 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % LOAD Xy-pic... \makeatother \input xy \xyoption{all} \xyoption{knot} \xyoption{2cell} \xyoption{poly} \xyoption{web} \xyoption{arc} \input xydoc.back \CompileMatrices \UseCrayolaColors \xycatcodes \catcode`\"=12 \catcode`\<=12 \catcode`\|=12 \catcode`\?=12 \def\next{\RequirePackage[draft,dvips]{graphics}} % hack :-) \ifx\xydvipsloaded\undefined \ifx\xytexturesloaded\undefined \else\def\next{\RequirePackage[textures]{graphics}}\fi \else\def\next{\RequirePackage[dvips]{graphics}}\fi \next \xycatcodes \catcode`\"=\active \catcode`\<=\active \catcode`\|=\active \catcode`\?=\active \xyuncatcodes\makeatletter % be paranoid \def\PStest#1#2{\ifx\empty\whichPSspecials@#1\else#2\fi} \def\PStype{\dvitype@\unskip} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % TIME OF DAY \count@=\time \divide\count@ by 60\relax \count@@=\count@ \multiply\count@@ by -60 \advance\count@@ by \time \edef\now{\number\count@:\ifnum 10>\count@@ 0\fi \number\count@@} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % LOGOS: METAFONT logo uses the logo10 font; AMS logo uses the math % italic font; and others just use the default fonts. \font\logofont=logo10 \def\MF{{\logofont META}\-{\logofont FONT}} \def\AMS{{\the\textfont2 A\kern-.1667em\lower.5ex\hbox{M}\kern-.125emS}} \def\PiCTeX{P\kern-.12em\lower.5ex\hbox{I}\kern-.075emC\kern-.11em\TeX} \def\LaTeXe{{\LaTeX\kern.15em$2_{\textstyle\varepsilon}$}} \def\OzTeX{{O\kern-.03em z\kern-.15em\TeX}} \def\Textures{{\sc Textures}} \def\dvips{{\sc dvips}} \def\TPIC{{\sc tpic}} \def\xdvi{{\sc xdvi}} \def\dvitops{{\sc dvitops}} %...and PS, unix, and BNF with footnote inserted at the first use... \newif\ifPSuntold \PSuntoldtrue \def\PS{\protect\PS@} \def\PS@{{\sc Post\-Script}\xyFN@\PS@i} \def\PS@i{\let\next@=\PS@ii \ifx.\next \else\ifx,\next \else\ifx:\next \else\ifx;\next \else\ifx!\next \else\ifx?\next \else \let\next@=\PS@iii \fi\fi\fi\fi\fi\fi \next@} \def\PS@ii#1{#1\PS@iii} \def\PS@iii{% \ifPSuntold \global\PSuntoldfalse \footnote{{\sc Post\-Script} is a registered Trademark of Adobe, Inc.~\cite{ps}.}% \fi} \newif\ifunixuntold \unixuntoldtrue \def\unix{\protect\unix@} \def\unix@{{\sc unix}\xyFN@\unix@i} \def\unix@i{\let\next@=\unix@ii \ifx.\next \else\ifx,\next \else\ifx:\next \else\ifx;\next \else\ifx!\next \else\ifx?\next \else \let\next@=\unix@iii \fi\fi\fi\fi\fi\fi \next@} \def\unix@ii#1{#1\unix@iii} \def\unix@iii{% \ifunixuntold \global\unixuntoldfalse \footnote{{\sc Unix} is a trademark of Bell Labs.}% \fi} \newif\ifBNFuntold \BNFuntoldtrue \def\BNF{{\footnotesize BNF}% \ifBNFuntold \global\BNFuntoldfalse \footnote{{\footnotesize BNF} is the notation for ``meta-linguistic formulae'' first used in \cite{N60:ReportALA60} to describe the syntax of the Algol programming language. We use it with the conventions of the \TeX\-book~\cite{K84:TeXbook}: `\iss' is read ``is defined to be'', `\orr' is read ``or'', and `' denotes ``nothing''; furthermore, `' denotes anything that expands into a sequence of \TeX\ character tokens, `' and `' denote decimal numbers with, respective without, a dimension unit (like {\tt pt} and {\tt mm}), denotes possibly signed integers, and denotes \TeX\ text to be typeset in the appropriate mode. We have chosen to annotate the syntax with brief explanations of the `action' associated with each rule; here `$\from$' should be read `is copied from'.}% \fi} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % `OTHER' CHARACTERS: miscellaneous characters of category `other' ... it is % essential that space is done last! \begingroup \catcode`\"=12 \gdef\dq{"} \catcode`\<=12 \gdef\otherless{<} \catcode`\>=12 \gdef\othergreater{>} \catcode`\|=12 \gdef\otherbar{|} \catcode`\@=12 \gdef\otherat{@} \catcode`\|=0 \catcode`\<=1 \catcode`\>=2 |catcode`|\=12 |gdef|otherescape<\> |catcode`|{=12 |gdef|otherbgroup<{> |catcode`|}=12 |gdef|otheregroup<}> |catcode`|$=12 |gdef|othermath<$> |catcode`|&=12 |gdef|otherand<&> |catcode`|#=12 |gdef|otherparameter<#> |catcode`|^=12 |gdef|othersuper<^> |catcode`|_=12 |gdef|othersub<_> |catcode`|%=12 |gdef|othercomment<%> |catcode`| =12|gdef|otherspace< >|endgroup \def\ordinarybars{\catcode`\|=12} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % ABBREVIATIONS: \def\ie{{\it i}.{\it e}.} \def\Eg{{\it E}.{\it g}.} \def\eg{{\it e}.{\it g}.} \def\Ie{{\it I}.{\it e}.} \def\cf{{\it cf}.} \def\Cf{{\it Cf}.} \def\aka{{\it aka\/}} \def\etc{{\it etc}.} % LOCAL DEFINITIONS... % % \RSN, \TODO, and \DRAFT used wherever something is NOT FINISHED. % \def\RSN{Real Soon Now} \def\TODO#1{{\bf To Do#1}} \def\BUG#1{{\bf Bug#1}} \def\NOTE#1{{\bf Note#1}} \def\HACK#1{{\bf Hack#1}} \def\REMARK#1{{\bf Remark#1}} \def\DRAFT#1{\framebox{\it Draft #1}\vrule width0pt height 2em depth 1em\relax} \def\smiley{\hbox{\rlap{$\bigcirc$}\kern1.3\p@$\scriptstyle\ddot\smile$}} \def\frowny{\hbox{\rlap{$\bigcirc$}\kern1.3\p@$\scriptstyle\ddot\frown$}} \def\half{{\slashedfrac12}} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % HTML generation stuff. \let\DEF=\def \let\IMG=\relax \newenvironment{IMAGE}{}{} \newenvironment{CENTER}{}{\noindent\unskip\ignorespaces} %% Pretty hyperlinks :-) {\makeatletter \catcode`\~=\active \catcode`\/=\active \catcode`\_=\active \gdef\setupurl@{% \catcode`\~=\active \def~{\ensuremath{\sim}}% \catcode`\&=12 % \catcode`\_=\active \def_{\ensuremath{\sb-}}% \catcode`\/=\active \def/{\futurelet\next\urlslash@}} \gdef\url{\begingroup $\langle$\nobreak\textsc{url}: \setupurl@\futurelet\next\url@} \gdef\url@#1{\emph{#1}\nobreak$\rangle$\endgroup} \gdef\urlslash@{\ifx /\next \def\next@/{\string/\kern-.2em\string/}% \else \def\next@{\slash}\fi \next@} \gdef\newurl#1#{\begingroup\setupurl@\newurl@{#1}} \gdef\newurl@#1#2{\gdef#1{\url{#2}}\endgroup}} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % EMPHASISING: \def"#1"{{\relax \ifmmode \mathchoice {\hbox{\normalsize\it\relax#1\/}}% {\hbox{\normalsize\it\relax#1\/}}% {\hbox{\scriptsize\it\relax#1\/}}% {\hbox{\scriptsize\it\relax#1\/}}% \else\it#1\/\fi}} % Special `Notes' enumeration. \newcounter{note} \def\thenote{\thesection\alph{note}} \newif\ifnotes@ \def\notescontd{\ifnotes@ \@toodeep \fi \notes@true \subsubsection*{Notes}\nobreak\list{\thenote.}% {\leftmargin=1.5pc \labelwidth=1pc \labelsep=.5pc \usecounter{note}% \def\makelabel##1{\thenote.\hss}}% \expandafter\c@note\notescount@@} \def\endnotescontd{\xdef\notescount@@{\the\c@note}\endlist} \def\notes{\xdef\notescount@@{0}\notescontd} \let\note=\item \let\endnotes=\endnotescontd %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % DOCUMENT CLASSIFICATION... % Some options may prefer a ``\BIBLIOGRAPHY'' different from xydoc.bib in % plain style! \def\BIBLIOGRAPHY{% \bibliographystyle{plain} \bibliography{xydoc} \addtocontents{toc}{% \protect\contentsline{section}{References}{\protect\pageref{BIBLIOGRAPHY}}}} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % GENERIC MATH: \mathchardef\lt=\dq 313C \mathchardef\gt=\dq 313E \mathchardef\from=\dq 3220 \mathcode`\*=\dq 2202 \def\abs#1{\left\vert#1\right\vert} \def\sgn{\hbox{sgn}} \def\floor#1{\left\lfloor#1\right\rfloor} \def\ceil#1{\left\lceil#1\right\rceil} \def\Det#1{\left\otherbar {\arraycolsep=.2em \begin{array}{cc}#1\end{array}}\right\otherbar} % Some LaTeXs don't have this: \newbox\Boxbox@ \setbox\Boxbox@=\hbox{\vrule height 5pt depth 0pt width .4pt % \rlap{\vrule height 5pt depth -4.6pt width 4.2pt}% \vrule height .4pt depth 0pt width 4.2pt % \vrule height 5pt depth 0pt width .4pt} \def\Box{\relax\ifmmode\expandafter\vcenter\fi{\copy\Boxbox@}} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % BNF: {\setboxz@h{$^{\hbox{\small0}}$}% \xdef\histrut{\hbox{\vrule height\the\ht0 depth\the\dp0 width\z@}}} \def<#1>{\relax\ifmmode\histrut\expandafter\textrm\fi {\rm$\langle${\ignorespaces#1}$\rangle$}} \def\iss{\relax \ifmmode\histrut\expandafter\mathrel\fi{\hbox{$\longrightarrow$}}} \def\orr{\relax\ifmmode\histrut\expandafter\mathrel\fi{\hbox{$~\vert~$}}} \def\star{\hbox{*}} \def\plus{\ensuremath{^+}} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %% SHOULD USE \parbox... \leftmargin=0pt % LaTeX hack... \newenvironment{syntax}% {$$\tabskip=.5em plus1fil \dimen@=\hsize \advance\dimen@-\leftmargin \halign to\dimen@\bgroup \strut##\unskip\hfil&\hfil##\hfil &##\hfil&\hsize=.5\hsize\vtop{\noindent##}\hfil\cr \noalign{\nobreak\hrule\nobreak\smallskip}% \multispan{3}Syntax\hfil &Action \cr \noalign{\nobreak\smallskip\nobreak\hrule\nobreak\smallskip\nobreak}}% {\crcr\noalign{\nobreak\smallskip\nobreak\hrule\nobreak}\egroup$$% \ignorespaces} \def\topofdefs{\hrule\nobreak\smallskip} \def\bottomofdefs{\nobreak\smallskip\nobreak\hrule\nobreak} \newenvironment{defs}% {$$\tabskip=.5em plus1fil \dimen@=\hsize \advance\dimen@-\leftmargin \halign to\dimen@\bgroup \strut##\unskip\hfil \tabskip=.5em&\hsize=.5\hsize\vtop{\noindent##}\hfil \tabskip=.5em plus1fil\cr \noalign{\topofdefs}}% {\crcr\noalign{\bottomofdefs}\egroup$$\ignorespaces} \newenvironment{defs1}% {$$\tabskip=.5em plus1fil \dimen@=\hsize \advance\dimen@-\leftmargin \halign to\dimen@\bgroup \strut##\unskip\hfil\cr \noalign{\topofdefs}}% {\crcr\noalign{\bottomofdefs}\egroup$$\ignorespaces} \newenvironment{unformatteddefs}% {\vspace{\bigskipamount}\topofdefs}% {\bottomofdefs\vspace{\bigskipamount}\ignorespaces} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % INLINE VERBATIM: use |...| with || in ... for a single |. Almost not % ``fragile'' in the LaTeX sense: the ... must be a balanced token list when % ``moving'' and control sequences get an extra space except at the end... \newcount\barnest@ \def|{\leavevmode\hbox\bgroup \global\barnest@=\z@ \tt \let\do\@makeother\dospecials \frenchspacing \xyFN@\bar@} % Hack: we need to cater for both ordinary spaces (\space@) and space `other' % tokens (\otherspace)...all become simple spaces. \def\bar@{\ifx |\next \let\next@=\bar@x \else\expandafter\ifx\otherbar\next \let\next@=\bar@x \else\ifx \space@\next \expandafter\DN@\space{\space@\xyFN@\bar@}% \else\expandafter\ifx \otherspace\next \expandafter\DN@\otherspace{\space@\xyFN@\bar@}% \else \ifx \bgroup\next \global\advance\barnest@\@ne \fi \ifx \egroup\next \global\advance\barnest@\m@ne \fi \DN@{\expandafter\bar@@\string}% \fi\fi\fi\fi \next@} \def\bar@@#1{#1\xyFN@\bar@} \def\bar@x#1{\egroup \ifnum\z@=\barnest@\else \W@{Warning: Unbalanced \string|TEXT\string| where \string{\string}-count is \the\barnest@}\fi \xyFN@\rebar@} \def\rebar@{\ifx |\next \hbox{\tt\char124}\fi} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % INLINE AND DISPLAYED TeX CODE: \newwrite\thecode@ % Making the chunk is the most work...it goes into a temporary file that % lives while the chunk lives. \newenvironment{code}{% \begingroup \aftergroup\endcode@ \immediate\openout\thecode@=\jobname.tmp % \let\do\@makeother\dospecials \endlinechar=10 \futurelet\next\code@}{} \def\endcode@{\immediate\closeout\thecode@} % \code@* is the where the dirty work is done: it is called for each line in % the code chunk under construction and will finish it if that line contains % *exactly* "\end{code}". {\lccode`\0=`\\\lccode`\[=`\{\lccode`\]=`\}\lowercase{% \expandafter\gdef\expandafter\code@\space{\code@i} \gdef\code@i#1^^J{\code@ii#10end[code]\code@@} \gdef\code@ii#10end[code]#2\code@@{\def\1{#1}\def\2{#2}% \ifx\2\empty \immediate\write\thecode@{\codeof\1}\let\next@=\code@i \else \def\next@{\oldcodes@\endgroup\end{code}}% \fi \next@}}} \def\oldcodes@{\catcode`\\=0 \catcode`\{=1 \catcode`\}=2 \catcode`\#=6 % \catcode`\%=14\relax} % Setting the code is just reading it... \def\gdocode{\expandafter\@@input\jobname.tmp \ifhmode\unskip\fi} \newcount\frozeninputlineno % hack to keep right file/lineno... \ifx\inputlineno\undefined \def\docode{\unskip{\gdocode}} \else \def\docode{\unskip{\frozeninputlineno=\inputlineno \let\@@inputlineno=\inputlineno \def\inputlineno{\frozeninputlineno:\the\@@inputlineno}% \gdocode}} \fi % Showing the code is just putting TeX in verbatim mode before reading. \def\thecode{{\catcode``=13 \@noligs \let\do\@makeother \dospecials \catcode`\ =10 \let\par\space\obeylines \frenchspacing \tt \input\jobname.tmp \unskip}} \def\displaycode{{\inputdoc.{\jobname.tmp}}% \ignorespaces} % Writing the code to a(nother) file is a simple combination of \code and % \showcode. \def\writecode#1{{\let\do\@makeother\dospecials \endlinechar=10 % \def\next@{\immediate\write#1}\expandafter\writecode@\@@input\jobname.tmp }} \def\writecode@{\futurelet\next\writecode@i} \def\writecode@i{\ifx\next\egroup\else \expandafter\writecode@ii \fi} \def\writecode@ii#1^^J{\def\1{#1}\next@{\codeof\1}\futurelet\next\writecode@} \def\writecodecode#1{% \immediate\write#1{\string\begin\string{code\string}}% \writecode#1% \immediate\write#1{\string\end\string{code\string}}} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % EXERCISES & ANSWERS: accumulated as subsubsections on .ans file... \newif\ifExercises \Exercisesfalse \newwrite\answ@ \AtBeginDocument{% \immediate\openout\answ@=\jobname.ans \immediate\write\answ@{\othercomment\space\jobname.ans: \today, \now.} } \def\exerciseprefix{} \newcount\exercisenumber \exercisenumber=0 \def\restartexercises#1{\edef\exerciseprefix{#1}\exercisenumber=0 } \newenvironment{exercise}{\global\Exercisestrue \global\advance\exercisenumber by 1 % \edef\@currentlabel{\the\exercisenumber}% \edef\next@{\noexpand\label{Exercise-\exerciseprefix\the\exercisenumber}}% \next@ \paragraph*{Exercise~\exerciseprefix\the\exercisenumber:}\begingroup \def\IW@##1{\immediate\write\answ@{##1}}\IW@{}% \IW@{\otherescape xyuncatcodes}% \IW@{\otherescape paragraph*{Answer to exercise \exerciseprefix\the\exercisenumber\space (p.\string\pageref{Exercise-\exerciseprefix\the\exercisenumber}):}% \string\label{Answer-\exerciseprefix\the\exercisenumber}}% \IW@{\othercomment}}% {\IW@{}\endgroup} \def\answertext#1{{\DN@{#1}\DNii@##1:->##2<-:{{\IW@{##2}}}% \expandafter\nextii@\meaning\next@<-:}} \def\answercode{\writecodecode\answ@} \def\answerdisplaycode{\answertext\displaycode} \def\Answers{\ifExercises \Exercisesfalse \global\count1=\z@ \def\next{\immediate\closeout\answ@ \input\jobname.ans}% \expandafter\next\fi} \def\ANSWERS{\ifExercises \section{Answers to all exercises} \Answers \immediate\openout\answ@=\jobname.ans \immediate\write\answ@{\othercomment\space\jobname.ans: \today, \now.} \fi} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % PRINTING MACRO FILES AS DOCUMENTATION % \inputdoc {} will read .doc, extracting either % * a verbatim input file with line numbers if is 0 (ignoring \DOCMODE % commands in the file), % * the reference manual body if is the character 1, or % * the TeXnical documentation body if is the character 2. % For the second and third types to work, .doc must have the structure %
% \DOCMODE % % \DOCMODE % % : % : % \DOCMODE3 % % where each can be either of the characters % 0 to designate that the following should be ignored, % 1 to designate that the following is TeX source material to % be included only in the reference manual, % 2 to designate that the following is TeX source material to % be included only in the TeXnical documentation, % 3 to designate that the following is TeX source material to % be included in the reference manual and the TeXnical document, % . for unnumbered program file listing % : for numbered program file listing % ! for stuff in the same mode as the context % ( to designate that the following is code that is included in % .tex that should also be typeset verbatim in the TeXnical document, % or % ) to designate that the following is of the same kind as the % preceeding the most recent \DOCMODE). % Furthermore, the command \DOCHEADER is available after the first \DOCMODE2 % command to insert the
verbatim. The last command must be % \DOCMODE3 in order to ensure that the end of the file is seen by both % document types! % Finally the reference PREFIX is set to the file name so that `global' % references across files are possible... % The .tex to be distributed should include the
and all % between \DOCMODE( and \DOCMODE). \let\thedocmode@=0 % Default is for reference documentation... \let\originalxyprovide=\xyprovide \let\originalcurrentxydriver=\currentxydriver \def\specialxyprovide#1#2#3#4#5#6{% \let\xyprovide=\originalxyprovide \edef\OPROPER{#2}\edef\OVERSION{#3}% \def\OAUTHOR{#4}\def\OAUTHOREMAIL{#5}\def\OAUTHORADDRESS{#6}% \def\next{#1}\edef\xyoption@@{\codeof\next}% \expandafter\section\expandafter{\OPREFIX\OPROPER}??g=[#1]% \subsubsection*{\raggedright\small Vers. \OVERSION\ by~\OAUTHOR\ <\OAUTHOREMAIL>\LOADAS{#1}}% \DN@##1##2##3##4##5##6##7.{\CompilePrefix{xy##1##2##3##4##5##6}}% \next@#1-000.% \xyprovide{#1}{#2}{#3}{#4}{#5}{#6}} \def\specialxysubprovide#1#2#3#4#5#6{% \let\xyprovide=\originalxyprovide \edef\OPROPER{#2}\edef\OVERSION{#3}% \def\OAUTHOR{#4}\def\OAUTHOREMAIL{#5}\def\OAUTHORADDRESS{#6}% \def\next{#1}\edef\xyoption@@{\codeof\next}% \expandafter\subsection\expandafter{\OPREFIX\OPROPER}??g=[#1]% \subsubsection*{\raggedright\small Vers. \OVERSION\ by~\OAUTHOR\ <\OAUTHOREMAIL>\LOADAS{#1}}% \DN@##1##2##3##4##5##6##7.{\CompilePrefix{xy##1##2##3##4##5##6}}% \next@#1-000.% \xyprovide{#1}{#2}{#3}{#4}{#5}{#6}} \def\OSECTION#1{\let\xyprovide=\specialxyprovide \def\OPREFIX{}% \def\LOADAS##1{\\*Load as: {\tt\string\xyoption\string{##1\string}}}% \input{#1}\runxywith@ \inputdoc!{#1}} \def\DSECTION#1{\let\xyprovide=\specialxysubprovide \def\OPREFIX{}% \def\LOADAS##1{\\*Load as: {\tt\string\xyoption\string{##1\string}}}% \let\orignewdriver=\newdriver \let\origxyaddsupport=\xyaddsupport \def\newdriver##1{\orignewdriver{##1}\xyendinput}% \def\xyaddsupport##1##2{\expandafter\xyadddriversupport@\expandafter{% \xyoption@@}{##1}{\ignorespaces}}% \input{#1}% \let\newdriver=\orignewdriver \let\xyaddsupport=\origxyaddsupport \inputdoc!{#1}} \def\SQUEEZE{} \def\defaultdocmode@{\docmode@} % \inputdoc MODE {FILE} loads FILE in docmode MODE. ! means `current'. \gdef\inputdoc#1#2{% \mayshrinktt@true \if#1!\relax \let\DocMode@=\defaultdocmode@ \else\if#10\relax \numbercode@true \let\DocMode@=\docmode@@@ \else\if#11\relax \let\DocMode@=\docmode@ \else\if#12\relax \let\DocMode@=\docmode@@ \else\if#1:\relax \mayshrinktt@false\numbercode@true \let\DocMode@=\docmode@@@ \else\if#1.\relax \mayshrinktt@false\numbercode@false\let\DocMode@=\docmode@@@ \else\xyerror@{panic...unknown DOCMODE \string?!\string?}{}% \fi\fi\fi\fi\fi\fi {\questprefix{#2}\expandafter\let\csname DOCMODE\endcsname=\DocMode@ \endlinechar=`\^^J% \def\next@{\csname DOCMODE\endcsname @}\expandafter\next@\@@input#2 }% \ifmayshrinktt@\medbreak\fi} \let\^^J=\ % such that `\ ' works at end of line! % First variant is for the reference manual: ignore everything except lines % with MODE 1 or 3. \let\lastdocmode@=0 \def\docmode@#1{% \ifx#11\let\next@=\relax \let\lastdocmode@=1\relax \else\ifx#12\let\next@=\docs@ \let\lastdocmode@=2\relax \else\ifx#13\let\next@=\relax \let\lastdocmode@=3\relax \else\ifx#1@\let\next@=\docs@ \else\ifx#1(\let\next@=\docs@ \else\ifx#1)\DN@{\docmode@\lastdocmode@}% \else\let\next@=\docs@ \let\lastdocmode@=0\relax \fi\fi\fi\fi\fi\fi \next@} % Second variant is for the technical docs: typeset everything normally % except areas with MODE ( that are typeset verbatim, areas with MODE 0, % and 1 which are ignored, and areas with MODE @ which are stuffed into a % file (used for the \DOCHEADER feature): \def\docmode@@#1{% \ifx#11\let\next@=\docs@ \let\lastdocmode@=1\relax \else\ifx#12\let\next@=\relax \let\lastdocmode@=2\relax \else\ifx#13\let\next@=\relax \let\lastdocmode@=3\relax \else\ifx#1@\let\next@=\docc@ \else\ifx#1(\let\next@=\docv@ \else\ifx#1)\DN@{\docmode@@\lastdocmode@}% \else\let\next@=\docs@ \let\lastdocmode@=0\relax \fi\fi\fi\fi\fi\fi \next@} % Third is for verbatim... \def\docmode@@@#1{\docv@} % Here are the three interpretation macros: first one that skips... \def\docs@{% \begingroup\skipspecials@ \let\docm@=\docm@i \let\docecho@=\relax \def\docfinish@{\global\let\thedocmode@=\next \endgroup \xyuncatcodes \csname DOCMODE\endcsname\thedocmode@}% \docm@} % ..then the one that typesets verbatim: it needs a special hack to be able % to recognize the end of files when using \inputdoc0... \newif\ifnumbercode@ % number lines! \def\lineno@{\ifx\inputlineno\undefined\else\the\inputlineno\fi} \def\docv@{% \par\vspace{1ex}\begingroup \skipspecials@ \def\docm@{\xyFN@\docvm@}% \def\docvm@{\ifx\next\egroup \DN@{\endgroup\par\vspace{1ex}}% \else \let\next@\docm@i \fi \next@}% \parfillskip\@flushglue \parskip\z@ \def\par{}\obeylines\tt \catcode``=13 \@noligs \let\do\@makeother\dospecials % \catcode`\%=13 %make % act as ?... % \frenchspacing\@vobeyspaces \activateTABandFF@ \def\docecho@{\ifx\next\empty\vspace{1ex}\else \hbox{% \ifnumbercode@\hbox to 1.5pc{\tinyrm\lineno@\hss}% \else\hbox to\leftmargin{\hss}\fi \setbox0=\hbox\bgroup\next\egroup\box0}\fi}% \def\docfinish@{\global\let\thedocmode@=\next \endgroup \xyuncatcodes \par\vspace{1ex}\csname DOCMODE\endcsname\thedocmode@}% \docm@} \def\tinyrm{\tiny\rm} % ...with some trickery to get TABs interpreted right: \newdimen\tabw@ \def\activeTAB@{\egroup \dimen@=\wdz@ \divide\dimen@\tabw@ \multiply\dimen@\tabw@ \advance\dimen@\tabw@ \wdz@=\dimen@ \boxz@ \setboxz@h\bgroup}% \def\activeFF@{\egroup \dimen@=\hsize \advance\dimen@-\wdz@ \advance\dimen@-2pc % \boxz@ \raise.7ex\hbox to\dimen@{\hrulefill}\setboxz@h\bgroup} % They are activated by \activateTABandFF@ that also picks a \tt font size % that will allow 77 characters = 9.7 tabstops per line propvided the % conditional mayshrinktt@ is true... \newif\ifmayshrinktt@ {\catcode`\^^I=\active \catcode`\^^L=\active \let^^L=\par \gdef\activateTABandFF@{\setboxz@h{00000000}\tabw@=\wdz@ \dimen@=\hsize \ifnumbercode@ \advance\dimen@-1.5pc \fi \ifmayshrinktt@ \ifdim 9.7\tabw@>\dimen@\small\tt\setboxz@h{00000000}\tabw@=\wdz@\fi \ifdim 9.7\tabw@>\dimen@\footnotesize\tt\setboxz@h{00000000}\tabw@=\wdz@\fi \fi \catcode`\^^I=\active \let^^I=\activeTAB@ \catcode`\^^L=\active \let^^L=\activeFF@ }} % ...and finally one that makes code out of the block: \def\docc@{% \par\begingroup \skipspecials@ \let\docm@=\docm@i \def\par{}\obeylines \catcode``=13 \@noligs \let\do\@makeother \dospecials \@vobeyspaces \immediate\openout\thecode@=\jobname.tmp % \def\docecho@{{\immediate\write\thecode@{\codeof\next}}}% \def\docfinish@{\immediate\closeout\thecode@ \global\let\thedocmode@=\next \endgroup\xyuncatcodes \csname DOCMODE\endcsname\thedocmode@}% \docm@} \def\DOCHEADER{% \numbercode@true \inputdoc0{\jobname.tmp}} % Sic. \let\W=\W@ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % CROSS REFERENCES AND INDEXING AND SUCH % Use ?? as a cross reference code -- even in verbatim (because ? is excluded % from \dospecials in the header): % ?? [ ] % will create a reference and/or label and/or index entry and possibly even % typeset ---what is done depends on that should be a sequence of % characters selected from the following: % ! typeset % - do nothing* % : set PREFIX to and do \mylabel{PREFIX:}* % = as \mylabel{PREFIX:}* % ? as \myref{PREFIX:}* % ^ \myref{PREFIX:} lifted as superscript* % _ \myref{PREFIX:} in \tinyrm font* % g global: set PREFIX to null temporarily % p as \mypageref{PREFIX:}* % w as \index{} for words % c as \index{\string} for control sequences % C as \index{[\string]} for modifiers etc % * as \mylinelabel{} % If none of the letters was a *ed one then a \myref{PREFIX:} is % added automatically (so ??[] gives a simple reference). % NOTE: Use VERY PRIVATE names for *everything* because ??s may occur % *everywhere* !! Also before loading \Xy-pic because we need to bind ?. \def?{\relax\let\questchar@=\otherquest@ \futurelet\questnext@\quest@} \newif\ifquestdone@ {\catcode`\%=\active \gdef%{\let\questchar@=\otherpercent@ \futurelet\questnext@\quest@}} {\catcode`\?=12 \catcode`\%=12 \gdef\otherquest@{?}\gdef\otherpercent@{%}} \def\quest@{\ifx ?\questnext@ \def\questnext@?{\quest@@}% \else \let\questnext@=\questchar@ \fi \questnext@} \def\quest@@#1[#2]{\relax\questdone@false \let\questref@=\myref \let\questpageref@=\mypageref \let\questecho@@=\relax \def\doquest@##1{{##1{#2}}}\quest@@@#1@} \def\quest@@@#1{\relax \ifx @#1\def\questnext@{\ifquestdone@\else \doquest@\questref@ \fi}% \else\ifx !#1\def\questnext@{\doquest@\questecho@@ \quest@@@}% \else\ifx -#1\def\questnext@{\questdone@true \quest@@@}% \else\ifx :#1\def\questnext@{\doquest@\questprefix \questdone@true \quest@@@}% \else\ifx =#1\def\questnext@{\doquest@\mylabel \questdone@true \quest@@@}% \else\ifx ?#1\def\questnext@{\doquest@\questref@ \questdone@true \quest@@@}% \else\ifx g#1\def\questnext@{% \let\questref@=\globalref \let\questpageref@=\globalpageref \quest@@@}% \else\ifx ^#1\def\questnext@{\doquest@\liftedref@ \questdone@true \quest@@@}% \else\ifx _#1\def\questnext@{\doquest@\mylineref \questdone@true \quest@@@}% \else\ifx p#1\def\questnext@{\doquest@\questpageref@ \questdone@true \quest@@@}% \else\ifx w#1\def\questnext@{\doquest@\index \questdone@true \quest@@@}% \else\ifx c#1\def\questnext@{\doquest@{\index code}\questdone@true \let\questecho@@=\codeecho@ \quest@@@}% \else\ifx C#1\def\questnext@{\doquest@{\index Code}\questdone@true \let\questecho@@=\Codeecho@ \quest@@@}% \else\ifx *#1\def\questnext@{\doquest@\mylinelabel \questdone@true \quest@@@}% \else \def\questnext@##1{\xyerror@{\string?\string?\string##1 undefined}}% \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi \questnext@} \def\liftedref@#1{$^{\hbox{\small\questref@{#1}}}$} \def\questprefix#1{\def\questprefix@@{#1}} \def\questprefix@@{} \def\codeecho@#1{\relax \ifmmode\expandafter\hbox\fi{\DN@{#1}\tt\codeof\next@\unskip}} \def\Codeecho@#1{\relax \ifmmode\expandafter\hbox\fi{\DN@{#1}\tt[\codeof\next@\unskip]}} % REPLACEMENT for LaTeX cross reference macros...using \codeof... \def\mylabel#1{\@bsphack \if@filesw {% \expandafter\DN@\expandafter{\questprefix@@:#1}\let\thepage\relax \def\protect{\noexpand\noexpand\noexpand}% \xdef\@gtempa{\write\@auxout{\string \newlabel{\codeof\next@}{{\@currentlabel}{\thepage}}}}}\@gtempa \if@nobreak \ifvmode\nobreak\fi\fi\fi\@esphack} \def\mylinelabel#1{\@bsphack \if@filesw {% \expandafter\DN@\expandafter{\questprefix@@:#1}\let\thepage\relax \def\protect{\noexpand\noexpand\noexpand}% \xdef\@gtempa{\write\@auxout{\string \newlabel{\codeof\next@}{{l.\thelineno@}{\thepage}}}}}\@gtempa \if@nobreak \ifvmode\nobreak\fi\fi\fi\@esphack} %Was: %\def\label#1{\@bsphack\if@filesw {\let\thepage\relax % \def\protect{\noexpand\noexpand\noexpand}% %\xdef\@gtempa{\write\@auxout{\string % \newlabel{#1}{{\@currentlabel}{\thepage}}}}}\@gtempa % \if@nobreak \ifvmode\nobreak\fi\fi\fi\@esphack} \def\myref#1{\expandafter\globalref\expandafter{\questprefix@@:#1}} \def\mylineref#1{\hbox{\tinyrm\questref@{#1}}} \def\globalref#1{\DN@{#1}% \edef\next@{\codeof\next@}% \@ifundefined{r@\next@}{{\bf \string?\string?}% \@warning{Reference `\next@' on page \thepage\space undefined}}% {\edef\@tempa{\@nameuse{r@\next@}}\expandafter \@car\@tempa \@nil\null}} %Was: %\def\ref#1{\@ifundefined{r@#1}{{\bf ??}\@warning % {Reference `#1' on page \thepage \space % undefined}}{\edef\@tempa{\@nameuse{r@#1}}\expandafter % \@car\@tempa \@nil\null}} \def\mypageref#1{\expandafter\globalpageref\expandafter{\questprefix@@:#1}} \def\globalpageref#1{\DN@{#1}% \edef\next@{\codeof\next@}% \@ifundefined{r@\next@}{{\bf \string?\string?}% \@warning{Reference `\next@' on page \thepage\space undefined}}% {\edef\@tempa{\@nameuse{r@\next@}}\expandafter \@cdr\@tempa \@nil\null}} %Was: %\def\pageref#1{\@ifundefined{r@#1}{{\bf ??}\@warning % {Reference `#1' on page \thepage \space % undefined}}{\edef\@tempa{\@nameuse{r@#1}}\expandafter % \@cdr\@tempa\@nil\null}} % \newlabel *is* redefined because LaTeX plays tricks with it at % \end{document}. \def\newlabel#1#2{\DN@{#1}\edef\next@{\codeof\next@}% % \@ifundefined{r@\next@}{}{\@warning{Label `#1' multiply defined}}% \global\@namedef{r@\next@}{#2}} % Was: %\def\newlabel#1#2{\@ifundefined{r@#1}{}{\@warning{Label `#1' multiply % defined}}\global\@namedef{r@#1}{#2}} \def\@testdef #1#2#3{\DN@{#2}\edef\next@{\codeof\next@}% \def\@tempa{#3}\expandafter \ifx \csname #1@\next@\endcsname \@tempa \else \@tempswatrue \fi} % Was: %\def\@testdef #1#2#3{\def\@tempa{#3}\expandafter \ifx \csname #1@#2\endcsname % \@tempa \else \@tempswatrue \fi} % Here is our variant \index command: It is a hack... %Dummy eats pre-{} argument \def\index#1#{\@bsphack\begingroup \@sanitize\@index} %Real stuff uses pre-{} argument \def\@wrindex#1#{\csname @wrindex@#1\endcsname} \def\@wrindex@#1{\let\thepage\relax \DNii@{#1}\edef\nextii@{\codeof\nextii@}\DN@{}% \expandafter\futurelet\expandafter\next\expandafter\quoteidxentry@\nextii@ @% \expandafter\futurelet\expandafter\next\expandafter\@wrindex@beautify\next@\@wrindex@beautify \edef\next@{\codeof\next@}% \edef\@tempa{\write\@indexfile{% % \string\indexentry{\expandafter\shavebackslash@\next@ % \string @\next@}{\thepage}}}% \string\indexentry{\expandafter\shavebackslash@\next@}{\thepage}}}% \expandafter\endgroup\@tempa \if@nobreak \ifvmode\nobreak\fi\fi \@esphack} \def\@wrindex@code#1{\let\thepage\relax \DNii@{#1}\edef\nextii@{\codeof\nextii@}\DN@{}% \expandafter\futurelet\expandafter\next\expandafter\quoteidxentry@\nextii@ @% \edef\@tempa{\write\@indexfile{% \string\indexentry{\expandafter\shavebackslash@\next@ \string @\string\verb\string"\string"\next@\string"\string"}{\thepage}}}% \expandafter\endgroup\@tempa \if@nobreak \ifvmode\nobreak\fi\fi \@esphack} \def\@wrindex@Code#1{\let\thepage\relax \DNii@{[#1]}\edef\nextii@{\codeof\nextii@}\DN@{}% \expandafter\futurelet\expandafter\next\expandafter\quoteidxentry@\nextii@ @% \edef\@tempa{\write\@indexfile{% \string\indexentry{\expandafter\shavebackslash@\next@ \string @\string\verb\string"\string"\next@\string"\string"}{\thepage}}}% \expandafter\endgroup\@tempa \if@nobreak \ifvmode\nobreak\fi\fi \@esphack} \def\filelinedef#1#2{\def\theindexfile{#1}\def\theindexline{#2}} \def\@wrindex@def#1{\let\thepage\relax \DNii@{#1}\edef\nextii@{\codeof\nextii@}\DN@{}% \expandafter\futurelet\expandafter\next\expandafter\quoteidxentry@\nextii@ @% \edef\@tempa{\write\@indexfile{% \string\indexentry{\expandafter\shavebackslash@\next@ \string @\string\verb\string"\string"\next@\string"\string"% \string |seexyfile{\codeof\theindexfile}{\codeof\theindexline}}}}% \expandafter\endgroup\@tempa \if@nobreak \ifvmode\nobreak\fi\fi\@esphack} \expandafter\let\csname @wrindex@ def\endcsname=\@wrindex@def \def\shavebackslash@#1{\expandafter\ifx\otherescape#1\else#1\fi} \def\quoteidxentry@#1{\DNii@{\futurelet\next\quoteidxentry@}% \ifx !#1\edef\next@{\next@\dq#1}% \else\expandafter\ifx\otherat#1\edef\next@{\next@\dq#1}% \else\expandafter\ifx\dq#1\edef\next@{\next@\dq#1}% \else\expandafter\ifx\otherbar#1\edef\next@{\next@\dq#1}% \else\expandafter\ifx\otherescape#1\edef\next@{\next@#1}% \DNii@{\futurelet\next\quoteidxentry@escape}% \else\ifx\space@\next\edef\next@{\next@\space}% \DNii@{\futurelet\next\quoteidxentry@#1}% \else\ifx#1@\let\nextii@=\relax \else \edef\next@{\next@#1}\fi\fi\fi\fi\fi\fi\fi \nextii@} \def\quoteidxentry@escape#1{\DNii@{\futurelet\next\quoteidxentry@}% \expandafter\ifx\otherbgroup#1\edef\next@{\next@\otherbgroup}% \else\expandafter\ifx\otheregroup#1\edef\next@{\next@\otheregroup}% \else\ifx\space@\next\edef\next@{\next@\space}% \DNii@{\futurelet\next\quoteidxentry@#1}% \else \DNii@{\quoteidxentry@#1}\fi\fi\fi \nextii@} {\catcode`\$=12 \catcode`\<=12 \catcode`\"=12 \gdef\@wrindex@beautify{% \ifx $\next \let\next\@wrindex@extractdollar %$ \else\ifx <\next \let\next\@wrindex@extractsyntax \else\ifx "\next \let\next\@wrindex@extractemph \else \let\next\@wrindex@literal \fi\fi\fi \next} \gdef\@wrindex@extractdollar$#1$#2\@wrindex@beautify{% \def\next{#2}\ifx\next\empty \DN@{#1@$#1$}\fi} \gdef\@wrindex@extractsyntax<#1>#2\@wrindex@beautify{% \def\next{#2}\ifx\next\empty \DN@{#1@<#1>}\fi} \gdef\@wrindex@extractemph""#1""#2\@wrindex@beautify{% \def\next{#2}\ifx\next\empty \DN@{#1@\emph{#1}}\fi}} \def\@wrindex@literal#1\@wrindex@beautify{\DN@{#1@#1}} % After sorting the index it contains... \def\INDEX{% \let\PREINDEXtheindex=\theindex \def\theindex{\PREINDEXtheindex \addcontentsline{toc}{section}{Index}}% \let\PREINDEXtwocolumn=\twocolumn \if@twocolumn \def\twocolumn[##1]{##1\let\twocolumn=\PREINDEXtwocolumn}\fi \xyinputorelse@@{\jobname.ind}{(no index yet)}% \let\theindex=\PREINDEXtheindex \let\twocolumn=\PREINDEXtwocolumn} \def\indexspace{\vspace{1ex}} \def\seexyfile#1#2#3{{\tt#1}:{\tinyrm#2}} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Set page size to A4...with sligthly wider text when two columns \if@twocolumn \setlength{\oddsidemargin}{-0.56cm} \setlength{\evensidemargin}{-0.56cm} \setlength{\textwidth}{17cm} \else \setlength{\oddsidemargin}{0.46cm} \setlength{\evensidemargin}{0.46cm} \setlength{\textwidth}{15cm} \fi \setlength{\topmargin}{-1.4cm} \setlength{\headheight}{0.7cm} \setlength{\headsep}{0.7cm} \setlength{\textheight}{23.7cm} %\setlength{\footheight}{0.7cm} \setlength{\footskip}{1.1cm} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Tracing auxiliary \def\notracingall{\tracingonline\z@\tracingcommands\z@\tracingstats\z@ \tracingpages\z@\tracingoutput\z@\tracinglostchars\z@ \tracingmacros\z@\tracingparagraphs\z@\tracingrestores\z@ \showboxbreadth5 \showboxdepth5} % Show bad boxes as plain TeX! \hbadness=1000 % Show memory use! \tracingstats=1 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % RCS date... \def\printdate#1{\edef\next@{#1}\expandafter\printdate@\next@ @} \def\printdate@#1/#2/#3@{% \ifcase#2\or January\or February\or March\or April\or May\or June\or July\or August\or September\or October\or November\or December\fi\space \eatzero@#3, \ifnum100>#1\relax19\fi#1} \def\eatzero@#1{\ifx0#1\else#1\fi} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Font tables...from the standard testfont.tex: \newcount\m \newcount\n \newcount\p \newdimen\dim@ \newif\ifskipping {\xycatcodes \gdef\fontfigure#1{% \begin{figure}[tp] {\font\testfont=#1 \testfont \fonttable} \caption{Font table for \protect\texttt{#1}.} \label{f.#1} \end{figure}} \global\chardef\other=12 \catcode`\"=\other \global\font\eighttt = cmtt8 \gdef\twodigits#1{\ifnum #1<10 0\fi \number#1} \gdef\setbaselineskip{\setbox0=\hbox{\n=0 \loop\char\n \ifnum \n<255 \advance\n 1 \repeat} \baselineskip=6pt \advance\baselineskip\ht0 \advance\baselineskip\dp0 } \gdef\setchar#1{{\escapechar-1\message{\string#1 character = }% \def\do##1{\catcode`##1=\other}\dospecials \read-1 to\next \expandafter\finsetchar\next\next#1}} \gdef\finsetchar#1#2\next#3{\global\chardef#3=`#1 \ifnum #3=`\# \global\chardef#3=#2 \fi} \gdef\promptthree{\setchar\background \setchar\starting \setchar\ending} \gdef\oct#1{\hbox{\rm\'{}\kern-.2em\it#1\/\kern.05em}} % octal constant \gdef\hex#1{\hbox{\rm\H{}\tt#1}} % hexadecimal constant \gdef\setdigs#1"#2{\gdef\h{#2}% \h=hex prefix; \0\1=corresponding octal \m=\n \divide\m by 64 \xdef\0{\the\m}% \multiply\m by-64 \advance\m by\n \divide\m by 8 \xdef\1{\the\m}} \gdef\testrow{\setbox0=\hbox{\penalty 1\def\\{\char"\h}% \\0\\1\\2\\3\\4\\5\\6\\7\\8\\9\\A\\B\\C\\D\\E\\F% \global\p=\lastpenalty}} % \p=1 if none of the characters exist \gdef\oddline{\cr \noalign{\nointerlineskip} \multispan{19}\hrulefill& \setbox0=\hbox{\lower 2.3pt\hbox{\hex{\h x}}}\smash{\box0}\cr \noalign{\nointerlineskip}} \gdef\evenline{\loop\skippingfalse \ifnum\n<256 \m=\n \divide\m 16 \chardef\next=\m \expandafter\setdigs\meaning\next \testrow \ifnum\p=1 \skippingtrue \fi\fi \ifskipping \global\advance\n 16 \repeat \ifnum\n=256 \let\next=\endchart\else\let\next=\morechart\fi \next} \gdef\morechart{\cr\noalign{\hrule\penalty5000} \chartline \oddline \m=\1 \advance\m 1 \xdef\1{\the\m} \chartline \evenline} \gdef\chartline{&\oct{\0\1x}&&\Ch@&&\Ch@&&\Ch@&&\Ch@&&\Ch@&&\Ch@&&\Ch@&&\Ch@&&} \gdef\chartstrut{\lower4.5pt\vbox to14pt{}} \gdef\fonttable{$$\global\n=0 \halign to\hsize\bgroup \chartstrut##\tabskip0pt plus10pt& &\hfil##\hfil&\vrule##\cr \lower6.5pt\null &&&\oct0&&\oct1&&\oct2&&\oct3&&\oct4&&\oct5&&\oct6&&\oct7&\evenline} \gdef\endchart{\cr\noalign{\hrule} \raise11.5pt\null&&&\hex 8&&\hex 9&&\hex A&&\hex B& &\hex C&&\hex D&&\hex E&&\hex F&\cr\egroup$$\par} \gdef\Ch@{\setbox0=\hbox{\char\n}% \ifdim\ht0>7.5pt\reposition \else\ifdim\dp0>2.5pt\reposition\fi\fi \box0\global\advance\n 1 } \gdef\reposition{\setbox0=\vbox{\kern2pt\box0}\dim@=\dp0 \advance\dim@ 2pt \dp0=\dim@} \gdef\centerlargechars{ \def\reposition{\setbox0=\hbox{$\vcenter{\kern2pt\box0\kern2pt}$}}} } %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % END OF DEFINITIONS \endinput $Log: xydoc.sty,v $ Revision 3.3 1996/12/19 03:31:56 krisrose Maintenance release Revision 3.2 1995/09/19 18:22:27 kris Bug fix release. Revision 3.1 1995/09/05 20:31:32 kris Releasing! Revision 3.0 1995/07/07 20:14:21 kris Major release w/new User's Guide! Revision 2.14 1995/07/06 02:56:02 kris Buglets... Revision 2.13 1995/07/04 15:11:17 kris Ready to release v3? Revision 2.12 1994/10/25 11:34:25 kris Interim release just before v3 [works with AMS-LaTeX 1.2]... Revision 2.11 1994/07/05 10:37:32 kris Third 3beta release [bug fixes]. Experimental graph feature included (for ECCT-94 presentation). Revision 2.10 1994/06/15 12:55:07 kris Second 3beta release: bug fixes. Revision 2.9 1994/06/09 14:59:19 kris Release 3beta. Revision 2.8.3.8 1994/05/05 06:13:13 kris Compilation works and is documented. Matrix object outline bug fixed. Revision 2.8.3.7 1994/05/04 08:16:25 kris Also has option depedency list now. Revision 2.8.3.6 1994/05/04 07:14:13 kris Compiling matrices work :-) :-) !! Revision 2.8.3.5 1994/05/04 03:51:05 kris Efficient queueing *and* compilation of matrices *almost* there :-) !! Revision 2.8.3.4 1994/05/03 12:42:52 kris Compiling of matrices soon to follow :-) ... Revision 2.8.3.3 1994/05/03 11:01:35 kris Compiling to file finished in kernel... Revision 2.8.3.2 1994/05/03 07:37:06 kris Fiddling for 2.9... Revision 2.8.3.1 1994/04/19 08:15:02 kris Going on holiday... Revision 2.8.1.2 1994/04/13 11:44:13 kris PostScript update patch and various fixes... Revision 2.8 1994/04/08 04:30:00 kris Second (bug fix) 3alpha release. Revision 2.7.2.4 1994/03/28 10:58:05 kris Curve bugs fixed [Ross]. Edge logic overhauled...still shaky? PostScript added and maybe working! Revision 2.7.2.3 1994/03/28 04:07:38 kris Holiday is over :-) Revision 2.7.2.2 1994/03/13 07:54:52 kris Bug fixes and @@ `map over stack'. Revision 2.7.2.1 1994/03/11 11:47:11 kris Documentation prettyfied. Stacks added. Revision 2.7.1.1 1994/03/10 05:26:53 kris Date format fixed. Revision 2.7 1994/03/08 02:06:01 kris Release 3alpha. Revision 2.6.9.1 1994/03/07 04:22:46 kris Last internal 3alpha and pre-2.7 release. NEW for Xy-pic version 2.7.