diff options
author | Karl Berry <karl@freefriends.org> | 2010-09-07 00:38:17 +0000 |
---|---|---|
committer | Karl Berry <karl@freefriends.org> | 2010-09-07 00:38:17 +0000 |
commit | 50f3494b12ada52be9b302aa865453dcbbf5119c (patch) | |
tree | 3d1d31b4d3e4f92b3ac8a61e11730e789526ec3e /Master/texmf-dist/tex | |
parent | a79aae44637de232d489b3396e917453d37746cd (diff) |
knitting 2 (30aug10)
git-svn-id: svn://tug.org/texlive/trunk@19595 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/tex')
-rw-r--r-- | Master/texmf-dist/tex/latex/knitting/knitting.sty | 1054 | ||||
-rw-r--r-- | Master/texmf-dist/tex/latex/knitting/uknit.fd | 16 | ||||
-rw-r--r-- | Master/texmf-dist/tex/plain/knitting/knitting.tex | 1121 |
3 files changed, 1326 insertions, 865 deletions
diff --git a/Master/texmf-dist/tex/latex/knitting/knitting.sty b/Master/texmf-dist/tex/latex/knitting/knitting.sty index b6912d21c4b..7a8410c8791 100644 --- a/Master/texmf-dist/tex/latex/knitting/knitting.sty +++ b/Master/texmf-dist/tex/latex/knitting/knitting.sty @@ -22,127 +22,157 @@ % The complete list of files considered part of this work is in % the file `knitting-doc.pdf' and its source code `knitting-doc.tex'. % +% Version: 2 -\ProvidesPackage{knitting}[2010/01/17] +\ProvidesPackage{knitting}[2010/08/29] %\pdfmapfile{+knitfont.map} +\newif \ifchartsonly \chartsonlyfalse +\newif \ifgrid +\newif \ifresetrn \resetrntrue +\newif \ifleftrn@knit +\newif \ifshowrn@knit \showrn@knittrue +\newif \ifpdf@knit +\newif \ifcountingout@knit +\pdf@knittrue +\ifx \pdfoutput \undefined \pdf@knitfalse \fi +\ifx \pdfoutput \relax \pdf@knitfalse \fi + \RequirePackage{color} \definecolor{purlgray}{gray}{0.65} \definecolor{knitlinecolor}{rgb}{0.7,0,0} \definecolor{gridcolor}{gray}{0.3} +\definecolor{rncolor}{rgb}{0.6,0,0} +\definecolor{rnarrowcolor}{rgb}{0.45,0,0} -\newif\ifchartsonly\chartsonlyfalse \DeclareOption{chartsonly}{\chartsonlytrue} \ProcessOptions % Every dimension I could think of affecting the -% main page body. It's an environment instead of a command since I want +% main page body. It's an environment instead of a command since I want % a way to switch back to normal pages. Dimensions I don't change are % \marginparsep,\marginparwidth,\marginparpush,\paperheight,\paperwidth \newenvironment{fullpages}{ - \clearpage - \pagestyle{plain} - \setlength{\hoffset}{0pt} - \setlength{\voffset}{0pt} - \setlength{\oddsidemargin}{0pt} - \setlength{\evensidemargin}{0pt} - \setlength{\topmargin}{0pt} - \setlength{\headheight}{0pt} - \setlength{\headsep}{0pt} - \setlength{\textheight}{\paperheight} - \addtolength{\textheight}{-\footskip} - \addtolength{\textheight}{-2in} - \setlength{\textwidth}{\paperwidth} - \addtolength{\textwidth}{-2in} - % This bit is borrowed from Peter Wilson's chngpage.sty - % package. I didn't want to just \usepackage{chngpage} because it - % behaves like \addtolength and I wanted \setlength, and loading the - % whole package for one eight-line snippet of code just seemed - % needlessly complicated. - \setlength{\@colht}{\textheight}\setlength{\@colroom}{\textheight}% - \setlength{\vsize}{\textheight}\setlength{\columnwidth}{\textwidth}% - \if@twocolumn% - \advance\columnwidth-\columnsep \divide\columnwidth\tw@% - \@firstcolumntrue% - \fi% - \setlength{\hsize}{\columnwidth}% - \setlength{\linewidth}{\hsize}% - } - {\clearpage} - -\newif \ifpdf@knit -\pdf@knittrue -\ifx \pdfoutput \undefined \pdf@knitfalse \fi -\ifx \pdfoutput \relax \pdf@knitfalse \fi - -\newif \ifgrid -\newif \ifresetrn \resetrntrue -\newif \ifleftrn@knit - -\newlength\leftgap@knit -\newlength\bgshift@knit -\newlength\chartwidth@knit + \clearpage + \pagestyle{plain} + \setlength{\hoffset}{0pt} + \setlength{\voffset}{0pt} + \setlength{\oddsidemargin}{0pt} + \setlength{\evensidemargin}{0pt} + \setlength{\topmargin}{0pt} + \setlength{\headheight}{0pt} + \setlength{\headsep}{0pt} + \setlength{\textheight}{\paperheight} + \addtolength{\textheight}{-\footskip} + \addtolength{\textheight}{-2in} + \setlength{\textwidth}{\paperwidth} + \addtolength{\textwidth}{-2in} + % This bit is borrowed from Peter Wilson's chngpage.sty + % package. I didn't want to just \usepackage{chngpage} because it + % behaves like \addtolength and I wanted \setlength, and loading the + % whole package for one eight-line snippet of code just seemed + % needlessly complicated. + \setlength{\@colht}{\textheight}\setlength{\@colroom}{\textheight}% + \setlength{\vsize}{\textheight}\setlength{\columnwidth}{\textwidth}% + \if@twocolumn% + \advance\columnwidth-\columnsep \divide\columnwidth\tw@% + \@firstcolumntrue% + \fi% + \setlength{\hsize}{\columnwidth}% + \setlength{\linewidth}{\hsize}% + } + {\clearpage} + +\newlength \leftgap@knit +\newlength \bgshift@knit +\newlength \chartwidth@knit +\newlength \stitchcountwidth@knit +\newlength \rnleftwd@knit +\newlength \rnrightwd@knit \newbox\bgbox@knit \newbox\fgbox@knit \newbox\ggbox@knit -\newcounter{rownumber} -\newcounter{tempcounterknit} +\newcounter{rownumber} +\newcounter{tempcount@knit} \newcounter{rownumberskip} \setcounter{rownumberskip}{1} -\def\passnum@knit{2} - -\newcommand\stitchwd{\fontdimen6\csname U/knit/\series@knit/n/\f@size\endcsname} -\newcommand\stitchdp{\fontdimen8\csname U/knit/\series@knit/n/\f@size\endcsname} -\newcommand\stitchht{\fontdimen9\csname U/knit/\series@knit/n/\f@size\endcsname} -\newcommand\gridwidth{\fontdimen10\csname U/knit/\series@knit/n/\f@size\endcsname} -\newcommand\knitlinewd{\fontdimen11\csname U/knit/\series@knit/n/\f@size\endcsname} -\newcommand\narrowincraise@knit{\fontdimen12\the\font} % The rest of them aren't \the\font because I want them to still work outside of a chart -\newcommand\fontvoffset@knit{\fontdimen13\the\font} -\newcommand\purlextend@knit{\fontdimen14\csname U/knit/\series@knit/n/\f@size\endcsname} -\newcommand\rownumberwd{\fontdimen6\csname U/knit/\series@knit/n/10\endcsname} +\newcounter{stitchcountin} +\newcounter{stitchcountinprev} +\newcounter{stitchcountout} + +\newcommand \passnum@knit{2} +\newcommand \stitchwd{\fontdimen6\csname U/knit/\series@knit/n/\f@size\endcsname} +\newcommand \stitchdp{\fontdimen8\csname U/knit/\series@knit/n/\f@size\endcsname} +\newcommand \stitchht{\fontdimen9\csname U/knit/\series@knit/n/\f@size\endcsname} +\newcommand \gridwidth{\fontdimen10\csname U/knit/\series@knit/n/\f@size\endcsname} +\newcommand \knitlinewd{\fontdimen11\csname U/knit/\series@knit/n/\f@size\endcsname} +\newcommand \narrowincraise@knit{\fontdimen12\the\font} +\newcommand \fontvoffset@knit{\fontdimen13\the\font} +\newcommand \purlextend@knit{\fontdimen14\csname U/knit/\series@knit/n/\f@size\endcsname} +\newcommand \rownumberwd{\fontdimen6\csname U/knit/\series@knit/n/10\endcsname} +% The rest of them aren't \the\font because I want them to still work outside of a chart + +\newcommand \ff@knit{\fontencoding{U}\fontfamily{knit}\fontseries{\series@knit}\fontshape{n}\selectfont} +\newcommand \gf@knit{\fontencoding{U}\fontfamily{knit}\fontseries{\series@knit}\fontshape{g}\selectfont} +\newcommand \pf@knit{\fontencoding{U}\fontfamily{knit}\fontseries{\series@knit}\fontshape{p}\selectfont} \DeclareTextFontCommand {\knitsfsmall@knit}{\dimen0=\f@size pt\fontfamily{cmss}\fontseries{m}\fontshape{n}\fontsize{0.8\dimen0}{\f@baselineskip}\selectfont} \DeclareTextFontCommand {\cablesf@knit}{\dimen0=\f@size pt\fontfamily{cmss}\fontseries{m}\fontshape{n}\fontsize{0.8\dimen0}{\f@baselineskip}\selectfont} \DeclareTextFontCommand{\cablesfsmall@knit}{\dimen0=\f@size pt\fontfamily{cmss}\fontseries{m}\fontshape{n}\fontsize{0.6\dimen0}{\f@baselineskip}\selectfont} -\newcommand\knitnogrid{\gridfalse\def\series@knit{n}{\fontencoding{U}\fontfamily{knit}\fontseries{\series@knit}\fontshape{n}\selectfont}} -\newcommand \knitgrid{\gridtrue \def\series@knit{g}{\fontencoding{U}\fontfamily{knit}\fontseries{\series@knit}\fontshape{n}\selectfont}} -\newcommand \knitwide{\gridtrue \def\series@knit{w}{\fontencoding{U}\fontfamily{knit}\fontseries{\series@knit}\fontshape{n}\selectfont}} -% Some extra effort is made to make sure that the fonts actually exist. +\newcommand \purlpass[2][]{\ifnum\passnum@knit = 0 #2\else #1\fi} +\newcommand \gridpass[2][]{\ifnum\passnum@knit = 1 #2\else #1\fi} +\newcommand \mainpass[2][]{\ifnum\passnum@knit = 2 #2\else #1\fi} +\newcommand \countpass[2][]{\ifnum\passnum@knit = 3 #2\else #1\fi} + +% Some extra effort (the {\ff@knit}) is made to make sure that the fonts % actually exist. % This is done so that the fonts are defined before they are used, % which is necessary to make \gridwidth work - -\newcommand\purlpass[2][]{\ifnum\passnum@knit = 0 #2\else #1\fi} -\newcommand\gridpass[2][]{\ifnum\passnum@knit = 1 #2\else #1\fi} -\newcommand\mainpass[2][]{\ifnum\passnum@knit = 2 #2\else #1\fi} +\newcommand \knitnogrid{\gridfalse\def\series@knit{n}{\ff@knit}} +\newcommand \knitgrid{\gridtrue \def\series@knit{g}{\ff@knit}} +\newcommand \knitwide{\gridtrue \def\series@knit{w}{\ff@knit}} \knitgrid -\newcommand\textknit[1]{\mbox{\fontencoding{U}\fontfamily{knit}\fontseries{\series@knit}% - \rlap{\def\passnum@knit{0}\color{purlgray}\fontshape{n}\selectfont\fontshape{p}\selectfont#1}% - \ifgrid\rlap{\def\passnum@knit{1}\color{gridcolor}\fontshape{g}\selectfont#1}\fi - \def\passnum@knit{2}\fontshape{n}\selectfont#1}} +\newcommand \textknit[1]{\mbox{\ff@knit + \rlap{\pf@knit \color{purlgray}\def\passnum@knit{0}#1}% + \ifgrid\rlap{\gf@knit \color{gridcolor}\def\passnum@knit{1}#1}\fi + \def\passnum@knit{2}#1}} -\def\do@endofpar@knit#1{\def\par{#1\endgraf\let\par\endgraf}} +\newcommand \do@endofpar@knit[1]{\def\par{#1\endgraf\let\par\endgraf}} % Special symbols -\newcommand \narrowdecrease[1]{\char1\ifnum \passnum@knit = 2 \llap{\lower\stitchdp\vbox to\stitchht{\vss\vskip\fontvoffset@knit\hbox to \stitchwd{\hfil\knitsfsmall@knit{#1}\hfil}\vskip-\narrowincraise@knit\vss}}\fi} -\newcommand\pnarrowdecrease[1]{\char2\ifnum \passnum@knit = 2 \llap{\lower\stitchdp\vbox to\stitchht{\vss\vskip\fontvoffset@knit\hbox to \stitchwd{\hfil\knitsfsmall@knit{#1}\hfil}\vskip-\narrowincraise@knit\vss}}\fi} -\newcommand \narrowincrease[1]{\char3\ifnum \passnum@knit = 2 \llap{\lower\stitchdp\vbox to\stitchht{\vss\vskip\fontvoffset@knit\hbox to \stitchwd{\hfil\knitsfsmall@knit{#1}\hfil}\vskip \narrowincraise@knit\vss}}\fi} -\newcommand\pnarrowincrease[1]{\char4\ifnum \passnum@knit = 2 \llap{\lower\stitchdp\vbox to\stitchht{\vss\vskip\fontvoffset@knit\hbox to \stitchwd{\hfil\knitsfsmall@knit{#1}\hfil}\vskip \narrowincraise@knit\vss}}\fi} -\newcommand\bobble[1]{\char0 \ifnum \passnum@knit = 2 \llap{\lower\stitchdp\vbox to\stitchht{\vss\vskip\fontvoffset@knit\hbox to \stitchwd{\hfil\knitsfsmall@knit{#1}\hfil}\vss}}\fi} - -\newcommand\wideincrease[1]{\strut@knit% - \hbox to #1\stitchwd{\char25\leaders\hbox{\char22}\hfil\char29\leaders\hbox{\char22}\hfil\char26}} -\newcommand\widedecrease[1]{\strut@knit% - \ifnum #1 = 5 \char31\else - \hbox to #1\stitchwd{\char27\leaders\hbox{\char22}\hfil\char30\leaders\hbox{\char22}\hfil\char28}\fi} +\newcommand \narrowdecrease[1]{\genbobble@knit{#1}{1}{-\narrowincraise@knit}\adjuststitchcount[#1]{0}\adjuststitchcount[-1]{0}} +\newcommand \pnarrowdecrease[1]{\genbobble@knit{#1}{2}{-\narrowincraise@knit}\adjuststitchcount[#1]{0}\adjuststitchcount[-1]{0}} +\newcommand \narrowincrease[1]{\genbobble@knit{#1}{3}{\narrowincraise@knit}\adjuststitchcount[0]{#1}\adjuststitchcount[0]{-1}} +\newcommand \pnarrowincrease[1]{\genbobble@knit{#1}{4}{\narrowincraise@knit}\adjuststitchcount[0]{#1}\adjuststitchcount[0]{-1}} +\newcommand \bobble[1]{\genbobble@knit{#1}{0}{0pt}} + +\newcommand \genbobble@knit[3]{\char#2 \ifnum \passnum@knit = 2 + \llap{\lower\stitchdp\vbox to\stitchht{\vss \vskip\fontvoffset@knit \hbox to \stitchwd{\hfil\knitsfsmall@knit{#1}\hfil}\vskip #3\vss}}\fi} + + +\newcommand \wideincrease[1]{\strut@knit + \ifnum\passnum@knit = 3 \narrowincrease{#1}\else + \hbox to #1\stitchwd{\char25 + \hskip-0.1pt\leaders\hbox{\char22}\hfil\hskip-0.1pt + \char29 + \hskip-0.1pt\leaders\hbox{\char22}\hfil\hskip-0.1pt + \char26}\fi} +\newcommand \widedecrease[1]{\strut@knit + \ifnum #1 = 5 \char31 \else + \ifnum\passnum@knit = 3 \narrowdecrease{#1}\else + \hbox to #1\stitchwd{\char27 + \hskip-0.1pt\leaders\hbox{\char22}\hfil\hskip-0.1pt + \char30 + \hskip-0.1pt\leaders\hbox{\char22}\hfil\hskip-0.1pt + \char28}\fi\fi} % Standard chart commands @@ -151,381 +181,561 @@ {\catcode`\^^M = \active \catcode`\| = \active \global\def\commands@knit{% - \let\[\pnarrowincrease - \let\]\pnarrowdecrease - \let\<\narrowincrease - \let\>\narrowdecrease - \let\@\bobble - \let \! \barthin@knit - \let \| \bar@knit - \let | \bar@knit - \let\par\endgraf %Just in case someone's redefined it - \leftgap@knit=0pt - \def~{\ifvmode \advance \leftgap@knit by \stitchwd - \else \kern \stitchwd \fi}% - \def^^M{\par}% - \def\\{\par}% - \let\_\horizline@knit - \let\=\horizlinewide@knit - \let\-\horizlinenarrow@knit - \let\overline\overline@knit - \let\underline\underline@knit - \let\rn\rn@knit - \let\rnbox\rnbox@knit - \let\rnboxleft\rnboxleft@knit - \let\rnboxright\rnboxright@knit - \let\rnleft\rnleft@knit - \let\rnright\rnright@knit - \let\rncore@save@knit \rncore@knit - \let\nonumber\relax - }% + \setlength{\fboxsep}{0pt}% + \let\[\pnarrowincrease + \let\]\pnarrowdecrease + \let\<\narrowincrease + \let\>\narrowdecrease + \let\@\bobble + \let \! \barthin@knit + \let \| \bar@knit + \let | \bar@knit + \let \_ \horizline@knit + \let \= \horizlinewide@knit + \let \- \horizlinenarrow@knit + \let\overline\overline@knit + \let\underline\underline@knit + \let\rn\rn@knit + \let\rnbox\rnbox@knit + \let\rnboxleft\rnboxleft@knit + \let\rnboxright\rnboxright@knit + \let\rnleft\rnleft@knit + \let\rnright\rnright@knit + \let\nonumber\relax + \let\par\endgraf %Just in case someone's redefined it + \leftgap@knit=0pt + \def~{\ifnum\passnum@knit=3 \else \ifvmode \advance \leftgap@knit by \stitchwd + \else \kern \stitchwd \fi \fi}% + \def^^M{\par}% + \def\\{\par}% + }% } -\def\strut@knit{\rule[-\stitchdp]{0pt}{\stitchht}} +\newcommand \strut@knit{\rule[-\stitchdp]{0pt}{\stitchht}} % Drawing lines on the chart -\def \horizline@knit{\ifvmode\nonumber\leavevmode\fi \dimen0 = \stitchwd \advance \dimen0 \knitlinewd - \ifnum\passnum@knit = 2 - \hskip -0.5\knitlinewd\smash{{\color{knitlinecolor}\vrule width \dimen0 height 0.5\knitlinewd depth 0.5\knitlinewd}}\hskip -0.5\knitlinewd - \else\hskip \stitchwd \fi} -\def\horizlinenarrow@knit#1{\ifvmode\nonumber\leavevmode\fi \dimen0 = #1\stitchwd \advance \dimen0 \gridwidth - \ifnum\passnum@knit = 2 - \hskip -0.5\gridwidth \smash{{\color{knitlinecolor}\vrule width \dimen0 height 0.5\knitlinewd depth 0.5\knitlinewd}}\hskip -0.5\gridwidth - \else\hskip #1\stitchwd \fi} -\def \horizlinewide@knit#1{\ifvmode\nonumber\leavevmode\fi \dimen0 = #1\stitchwd \advance \dimen0 \knitlinewd - \ifnum\passnum@knit = 2 +\newcommand \horizline@knit{\ifnum\passnum@knit<3 \ifvmode\nonumber\leavevmode\fi \dimen0 = \stitchwd \advance \dimen0 \knitlinewd + \ifnum\passnum@knit = 2 + \hskip -0.5\knitlinewd\smash{{\color{knitlinecolor}\vrule width \dimen0 height 0.5\knitlinewd depth 0.5\knitlinewd}}\hskip -0.5\knitlinewd + \else\hskip \stitchwd \fi\fi} +\newcommand \horizlinenarrow@knit[1]{\ifnum\passnum@knit<3 \ifvmode\nonumber\leavevmode\fi \dimen0 = #1\stitchwd \advance \dimen0 \gridwidth + \ifnum\passnum@knit = 2 + \hskip -0.5\gridwidth \smash{{\color{knitlinecolor}\vrule width \dimen0 height 0.5\knitlinewd depth 0.5\knitlinewd}}\hskip -0.5\gridwidth + \else\hskip #1\stitchwd \fi\fi} +\newcommand \horizlinewide@knit[1]{\ifnum\passnum@knit<3 \ifvmode\nonumber\leavevmode\fi \dimen0 = #1\stitchwd \advance \dimen0 \knitlinewd + \ifnum\passnum@knit = 2 \smash{{\color{knitlinecolor}\vrule width \dimen0 height 0.5\knitlinewd depth 0.5\knitlinewd}} - \else\hskip \dimen0 \fi} - -\def\bar@knit{\ifvmode\leavevmode\fi\ifgrid - \ifnum \passnum@knit = 0 - \hbox{\color{knitlinecolor}\rule[-\stitchdp]{\knitlinewd}{\stitchht}}% - \else - \kern \knitlinewd - \fi - \else - \ifnum \passnum@knit = 2 - \hbox{\color{knitlinecolor}\rule[-\stitchdp]{\knitlinewd}{\stitchht}}% - \else - \kern \knitlinewd - \fi - \fi} - -\def\barthin@knit{\ifvmode\leavevmode\fi - \ifnum \passnum@knit = 2 - \hbox to 0pt{\hss\color{knitlinecolor}\rule[-\stitchdp]{\knitlinewd}{\stitchht}\hss}% - \else \strut@knit\fi} - -\def\overline@knit#1{\setbox0 = \hbox{#1}% - \leavevmode - \ifgrid - \ifnum \passnum@knit = 0 + \else\hskip \dimen0 \fi\fi} + +\newcommand \bar@knit{\ifnum\passnum@knit < 3 \leavevmode + \ifgrid + \ifnum \passnum@knit = 0 + \hbox{\color{knitlinecolor}\rule[-\stitchdp]{\knitlinewd}{\stitchht}}% + \else + \kern \knitlinewd + \fi + \else + \ifnum \passnum@knit = 2 + \hbox{\color{knitlinecolor}\rule[-\stitchdp]{\knitlinewd}{\stitchht}}% + \else + \kern \knitlinewd + \fi + \fi\fi} + +\newcommand \barthintop@knit{0pt} +\newcommand \barthinbot@knit{0pt} + +\newcommand \barthin@knit{\leavevmode\strut@knit + \ifnum \passnum@knit = 2 + \dimen2 = \stitchht \advance \dimen2 \barthintop@knit \advance \dimen2 \barthinbot@knit + \dimen3 = \stitchdp \advance \dimen3 \barthinbot@knit + \smash{\hbox to 0pt{\hss \color{knitlinecolor}\rule[-\dimen3]{\knitlinewd}{\dimen2}\hss}}% + \fi} + +\newcommand \overline@knit{\@ifstar \overlinestar@knit \overlinenostar@knit} +\newcommand \underline@knit{\@ifstar \underlinestar@knit \underlinenostar@knit} + +\newcommand \overlinenostar@knit[1]{\leavevmode{\def\barthintop@knit{\knitlinewd}% + \setbox0 = \hbox{#1}% + \ifgrid + \ifnum \passnum@knit = 0 + \dimen1=\wd0 \advance\dimen1 by \gridwidth + {\rlap{\hskip -0.5\gridwidth\color{knitlinecolor}\rule[\ht0]{\dimen1}{\knitlinewd}}} + \else + \rule[\ht0]{0pt}{\knitlinewd} + \fi + \else + \ifnum \passnum@knit = 2 + \dimen1=\wd0 \advance\dimen1 by \gridwidth + {\rlap{\hskip -0.5\gridwidth\color{knitlinecolor}\rule[\ht0]{\dimen1}{\knitlinewd}}}% + \else + \rule[\ht0]{0pt}{\knitlinewd} + \fi \fi + #1}} + +\newcommand \overlinestar@knit[1]{\leavevmode{\def\barthintop@knit{0.5\knitlinewd}% + \setbox0 = \hbox{#1}% + \ifnum \passnum@knit = 2 + \dimen1=\wd0 \advance\dimen1 by \gridwidth + \dimen2=\ht0 \advance\dimen2 by -0.5\knitlinewd + \smash{\rlap{\hskip -0.5\gridwidth\color{knitlinecolor}\rule[\dimen2]{\dimen1}{\knitlinewd}}}% + \fi + #1}} + +\newcommand \underlinenostar@knit[1]{\leavevmode{\def\barthinbot@knit{\knitlinewd}% + \setbox0 = \hbox{#1}% + \ifgrid + \ifnum \passnum@knit = 0 \dimen1=\wd0 \advance\dimen1 by \gridwidth - {\rlap{\hskip -0.5\gridwidth\color{knitlinecolor}\rule[\ht0]{\dimen1}{\knitlinewd}}} - \else - \rule[\ht0]{0pt}{\knitlinewd} - \fi - \else - \ifnum \passnum@knit = 2 + \rlap{\raisebox{-\dp0}{\hskip -0.5\gridwidth\color{knitlinecolor}\rule[-\knitlinewd]{\dimen1}{\knitlinewd}\hskip -0.5\gridwidth}}% + \else + \rlap{\raisebox{-\dp0}{\vrule width 0pt height 0pt depth \knitlinewd}}% + \fi + \else + \ifnum \passnum@knit = 2 \dimen1=\wd0 \advance\dimen1 by \gridwidth - {\rlap{\hskip -0.5\gridwidth\color{knitlinecolor}\rule[\ht0]{\dimen1}{\knitlinewd}}}% - \else - \rule[\ht0]{0pt}{\knitlinewd} - \fi - \fi - #1} - -\def\underline@knit#1{\setbox0 = \hbox{#1}% - \leavevmode - \dimen1=\wd0 \advance\dimen1 by \gridwidth - \ifgrid - \ifnum \passnum@knit = 0 - \rlap{\raisebox{-\dp0}{\hskip -0.5\gridwidth\color{knitlinecolor}\rule[-\knitlinewd]{\dimen1}{\knitlinewd}\hskip -0.5\gridwidth}}% - \else - \rlap{\raisebox{-\dp0}{\vrule width 0pt height 0pt depth \knitlinewd}}% - \fi - \else - \ifnum \passnum@knit = 2 - \rlap{\raisebox{-\dp0}{\hskip -0.5\gridwidth\color{knitlinecolor}\vrule width \dimen1 height 0pt depth \knitlinewd \hskip -0.5\gridwidth}}% - \else - \rlap{\raisebox{-\dp0}{\vrule width 0pt height 0pt depth \knitlinewd}}% - \fi - \fi - \copy0 - } + \rlap{\raisebox{-\dp0}{\hskip -0.5\gridwidth\color{knitlinecolor}\rule[-\knitlinewd]{\dimen1}{\knitlinewd}\hskip -0.5\gridwidth}}% + \else + \rlap{\raisebox{-\dp0}{\vrule width 0pt height 0pt depth \knitlinewd}}% + \fi \fi + #1}} + +\newcommand \underlinestar@knit[1]{\leavevmode{\def\barthinbot@knit{0.5\knitlinewd}% + \setbox0 = \hbox{#1}% + \ifnum \passnum@knit = 2 + \dimen1=\wd0 \advance\dimen1 by \gridwidth + \smash{\rlap{\raisebox{-\dp0}{\hskip -0.5\gridwidth\color{knitlinecolor}\rule[-0.5\knitlinewd]{\dimen1}{\knitlinewd}}\hskip -0.5\gridwidth}}% + \fi + #1}} % Fancy cabling -\def\overcableleft@knit#1{% - \setbox0=\hbox{#1}% - \rlap{#1}% - \hbox to \wd0{\leaders\hbox to \stitchwd{\hfil\char5}\hfil\hskip\stitchwd\char10}} -\def\undercableleft@knit#1{% - \setbox0=\hbox{#1}% - \rlap{#1}% - \hbox to \wd0{\leaders\hbox to \stitchwd{\hfil\char6}\hfil\hskip\stitchwd\char9}} -\def\undercableright@knit#1{% - \setbox0=\hbox{#1}% - \rlap{#1}% - \hbox to \wd0{\char13\char12\hskip\stitchwd\leaders\hbox to \stitchwd{\char8\hfil}\hfil}} -\def\overcableright@knit#1{% - \setbox0=\hbox{#1}% - \rlap{#1}% - \hbox to \wd0{\char14\char11\hskip\stitchwd\leaders\hbox to \stitchwd{\char7\hfil}\hfil}} - -\newcommand\cableleft[2]{{\def\series@knit{n}\fontencoding{U}\fontfamily{knit}\fontseries{n}\ifvmode\leavevmode\fi - \ifcase\passnum@knit - \hbox{\gridfalse \fontshape{p}\selectfont #1#2} - \or - \setbox0=\hbox{\gridfalse \fontshape{p}\selectfont #1#2} \rule{\wd0}{0pt} \vrule width 0pt height \ht0 depth \dp0 - \else - \hbox{\gridfalse \let \textsf \cablesf@knit \let \knitsfsmall@knit \cablesfsmall@knit {\fontshape{l}\selectfont \overcableleft@knit{#1}}{\fontshape{r}\selectfont \undercableright@knit{#2}}} - \fi}} -\newcommand\cableright[2]{{\def\series@knit{n}\fontencoding{U}\fontfamily{knit}\fontseries{n}\ifvmode\leavevmode\fi - \ifcase\passnum@knit - \hbox{\gridfalse \fontshape{p}\selectfont #1#2} - \or - \setbox0=\hbox{\gridfalse \fontshape{p}\selectfont #1#2} \rule{\wd0}{0pt} \vrule width 0pt height \ht0 depth \dp0 - \else - \hbox{\gridfalse \let \textsf \cablesf@knit \let \knitsfsmall@knit \cablesfsmall@knit {\fontshape{r}\selectfont \undercableleft@knit{#1}}{\fontshape{l}\selectfont \overcableright@knit{#2}}}\fi}} +\newcommand \overcableleft@knit[1]{% + \setbox0=\hbox{#1}% + \rlap{#1}% + \hbox to \wd0{\leaders\hbox to \stitchwd{\hfil\char5}\hfil\hskip\stitchwd\char10}} +\newcommand \undercableleft@knit[1]{% + \setbox0=\hbox{#1}% + \rlap{#1}% + \hbox to \wd0{\leaders\hbox to \stitchwd{\hfil\char6}\hfil\hskip\stitchwd\char9}} +\newcommand \undercableright@knit[1]{% + \setbox0=\hbox{#1}% + \rlap{#1}% + \hbox to \wd0{\char13\char12\hskip\stitchwd\leaders\hbox to \stitchwd{\char8\hfil}\hfil}} +\newcommand \overcableright@knit[1]{% + \setbox0=\hbox{#1}% + \rlap{#1}% + \hbox to \wd0{\char14\char11\hskip\stitchwd\leaders\hbox to \stitchwd{\char7\hfil}\hfil}} + +\newcommand \cableleft[2]{\leavevmode{\knitnogrid + \ifcase\passnum@knit + \hbox{\pf@knit #1#2} + \or + \setbox0=\hbox{\pf@knit #1#2} + \rule{\wd0}{0pt} \vrule width 0pt height \ht0 depth \dp0 + \or + \hbox{\let \textsf \cablesf@knit \let \knitsfsmall@knit \cablesfsmall@knit {\ff@knit\fontshape{l}\selectfont \overcableleft@knit{#1}}{\ff@knit\fontshape{r}\selectfont \undercableright@knit{#2}}} + \else + #1#2\fi}} +\newcommand \cableright[2]{\leavevmode{\knitnogrid + \ifcase\passnum@knit + \hbox{\pf@knit #1#2} + \or + \setbox0=\hbox{\pf@knit #1#2} \rule{\wd0}{0pt} \vrule width 0pt height \ht0 depth \dp0 + \or + \hbox{\let \textsf \cablesf@knit \let \knitsfsmall@knit \cablesfsmall@knit {\ff@knit\fontshape{r}\selectfont \undercableleft@knit{#1}}{\ff@knit\fontshape{l}\selectfont \overcableright@knit{#2}}} + \else + #1#2\fi}} % Knit, purl, knitboxes -\newcommand\knit[1]{\strut@knit\hbox to #1\stitchwd{\leaders\hbox{-}\hfil}} -\newcommand\purl[1]{\strut@knit\hbox to #1\stitchwd{\leaders\hbox{=}\hfil}} - -\newcommand\Knit[2]{\strut@knit% - \setbox0 = \vbox to\stitchht{\vss\hbox{\fontseries{m}\fontshape{n}\textsf{#1}}\vss} - \ifcase \passnum@knit - \rule{#2\stitchwd}{0pt}% - \or - \rlap{\hbox to #2\stitchwd{\leaders\hbox{\char5}\hfil}}% - \hbox to #2\stitchwd{\leaders\hbox to \stitchwd{\char6\hfil\char6}\hfil\hskip\wd0\leaders\hbox to \stitchwd{\char6\hfil\char6}\hfil}% - \or - \hbox to #2\stitchwd{\leaders\hbox{-}\hfil \lower\stitchdp\box0\leaders\hbox{-}\hfil} - \fi} -\newcommand\Purl[2]{\strut@knit% - \setbox0 = \vbox to\stitchht{\vss\hbox{\fontseries{m}\fontshape{n}\textsf{#1}}\vss} - \ifcase \passnum@knit - \purlbackground{\rule[-\stitchdp]{#2\stitchwd}{\stitchht}}% - \or - \rlap{\hbox to #2\stitchwd{\leaders\hbox{\char5}\hfil}}% - \hbox to #2\stitchwd{\leaders\hbox to \stitchwd{\char6\hfil\char6}\hfil\hskip\wd0\leaders\hbox to \stitchwd{\char6\hfil\char6}\hfil}% - \or - \hbox to #2\stitchwd{\leaders\hbox{=}\hfil \lower\stitchdp\box0\leaders\hbox{=}\hfil} - \fi} - -\newcommand\knitbox[2]{\strut@knit% - \ifcase \passnum@knit - \rule{#2\stitchwd}{0pt}% - \or - \hbox to #2\stitchwd{\char6\leaders\hbox{\char5}\hfil\char6}% - \or - \hbox to #2\stitchwd{\hfil \lower\stitchdp\vbox to\stitchht{\vss\vskip\fontvoffset@knit\hbox{\fontseries{m}\fontshape{n}\textsf{#1}}\vss}\hfil}% - \fi} -\newcommand\purlbox[2]{\strut@knit% - \ifcase \passnum@knit - \purlbackground{\rule[-\stitchdp]{#2\stitchwd}{\stitchht}}% - \or - \hbox to #2\stitchwd{\char6\leaders\hbox{\char5}\hfil\char6}% - \or - \hbox to #2\stitchwd{\hfil \lower\stitchdp\vbox to\stitchht{\vss\vskip\fontvoffset@knit\hbox{\fontseries{m}\fontshape{n}\textsf{#1}}\vss}\hfil}% - \fi} - -\newcommand\purlbackground[1]{\ifvmode\leavevmode\fi\setbox0=\hbox{#1}% - \dimen0 = \wd0 \advance\dimen0 2\purlextend@knit - \dimen1 = \stitchht \advance\dimen1 \purlextend@knit - \dimen2 = \stitchdp \advance\dimen2 \purlextend@knit - \ifnum \passnum@knit = 0 \kern-\purlextend@knit - \vrule width 0pt height \ht0 depth \dp0 - \smash{\rule[-\dimen2]{\dimen0}{\dimen1}}% - \kern-\purlextend@knit - \else\box0\fi} +\newcommand \knit[1]{\strut@knit\hbox to #1\stitchwd{\leaders\hbox{-}\hfil}} +\newcommand \purl[1]{\strut@knit\hbox to #1\stitchwd{\leaders\hbox{=}\hfil}} + +\newcommand \knitboxbackground{} +\newcommand \purlboxbackground{\color{purlgray}} +\newcommand \purlboxforeground{} +\newcommand \knitboxforeground{} + +\newcommand \Knit[3][0]{\strut@knit% + \setbox0 = \hbox{\fontseries{m}\fontshape{n}\textsf{#2}}% + \ifcase \passnum@knit + \ifx \empty@knit \knitboxbackground + \rule{#3\stitchwd}{0pt}% + \else + {\knitboxbackground \purlbackground{\rule[-\stitchdp]{#3\stitchwd}{\stitchht}}}\fi + \or + \rlap{\hbox to #3\stitchwd{\leaders\hbox{\char5}\hfil}}% + \hbox to #3\stitchwd{\leaders\hbox to \stitchwd{\char6\hfil\char6}\hskip #1\stitchwd plus 1fil \hskip\wd0\leaders\hbox to \stitchwd{\char6\hfil\char6}\hfil}% + \or + \hbox to #3\stitchwd{% + {\knitboxforeground\leaders\hbox{-}\hskip #1\stitchwd plus 1fil }% + \lower\stitchdp\vbox to\stitchht{\vss\vskip\fontvoffset@knit\hbox{\fontseries{m}\fontshape{n}\textsf{#2}}\vss} + {\knitboxforeground\leaders\hbox{-}\hfil}}% + \or + \hbox to #3\stitchwd{\hfil} + \fi} +\newcommand \Purl[3][0]{\strut@knit% + \setbox0 = \hbox{\fontseries{m}\fontshape{n}\textsf{#2}}% + \ifcase \passnum@knit + \ifx \empty@knit \purlboxbackground + \rule{#3\stitchwd}{0pt}% + \else + {\purlboxbackground \purlbackground{\rule[-\stitchdp]{#3\stitchwd}{\stitchht}}}\fi + \or + \rlap{\hbox to #3\stitchwd{\leaders\hbox{\char5}\hfil}}% + \hbox to #3\stitchwd{\leaders\hbox to \stitchwd{\char6\hfil\char6}\hskip #1\stitchwd plus 1fil \hskip\wd0\leaders\hbox to \stitchwd{\char6\hfil\char6}\hfil}% + \or + \hbox to #3\stitchwd{% + {\purlboxforeground\leaders\hbox{=}\hskip #1\stitchwd plus 1fil }% + \lower\stitchdp\vbox to\stitchht{\vss\vskip\fontvoffset@knit\hbox{\fontseries{m}\fontshape{n}\textsf{#2}}\vss} + {\purlboxforeground\leaders\hbox{=}\hfil}}% + \or + \hbox to #3\stitchwd{\hfil} + \fi} + +\newcommand \knitbox[3][0]{\strut@knit% + \ifcase \passnum@knit + \ifx \empty@knit \knitboxbackground + \rule{#3\stitchwd}{0pt}% + \else + {\knitboxbackground \purlbackground{\rule[-\stitchdp]{#3\stitchwd}{\stitchht}}}\fi + \or + \hbox to #3\stitchwd{\char6\leaders\hbox{\char5}\hfil\char6}% + \or + \hbox to #3\stitchwd{\hskip #1\stitchwd plus 1fil \lower\stitchdp\vbox to\stitchht{\vss\vskip\fontvoffset@knit\hbox{\fontseries{m}\fontshape{n}\textsf{#2}}\vss}\hfil}% + \or + \hbox to #3\stitchwd{\hfil} + \fi} +\newcommand \purlbox[3][0]{\strut@knit% + \ifcase \passnum@knit + \ifx \empty@knit \purlboxbackground + \rule{#3\stitchwd}{0pt}% + \else + {\purlboxbackground \purlbackground{\rule[-\stitchdp]{#3\stitchwd}{\stitchht}}}\fi + \or + \hbox to #3\stitchwd{\char6\leaders\hbox{\char5}\hfil\char6}% + \or + \hbox to #3\stitchwd{\hskip #1\stitchwd plus 1fil \lower\stitchdp\vbox to\stitchht{\vss\vskip\fontvoffset@knit\hbox{\fontseries{m}\fontshape{n}\textsf{#2}}\vss}\hfil}% + \or + \hbox to #3\stitchwd{\hfil}% + \fi} + +\newcommand \purlbackground[1]{\leavevmode\setbox0=\hbox{#1}% + \dimen0 = \wd0 \advance\dimen0 2\purlextend@knit + \dimen1 = \stitchht \advance\dimen1 \purlextend@knit + \dimen2 = \stitchdp \advance\dimen2 \purlextend@knit + \ifnum \passnum@knit = 0 \kern-\purlextend@knit + \vrule width 0pt height \ht0 depth \dp0 + \smash{\rule[-\dimen2]{\dimen0}{\dimen1}}% + \kern-\purlextend@knit + \else\box0\fi} % Row number commands -\newcommand\numberrow[3]{\ifvmode\nonumber\leavevmode\fi - \strut@knit - \count255=#1 - \hbox to \stitchwd{\hss\ifnum \passnum@knit = 2 \textnormal{#1}\fi\hss}% - \advance\count255 -1 - \loop \ifnum \count255>#3 - \c@tempcounterknit = \count255 - \divide\c@tempcounterknit #2 - \multiply \c@tempcounterknit #2 - \ifnum\c@tempcounterknit = \count255 - \hbox to \stitchwd{\hss\ifnum \passnum@knit = 2 \textnormal{\the\count255}\fi \hss}% - \else - \kern\stitchwd - \fi - \advance\count255 -1 - \repeat - \hbox to \stitchwd{\hss\ifnum \passnum@knit = 2 \textnormal{#3}\fi \hss}% - } - -\newcommand\rnoddonly{\def\rncore@knit{\ifnum \passnum@knit = 2 \ifodd\value{rownumber}\textnormal{\arabic{rownumber}}\fi\fi \rnstep@knit}} -\newcommand\rnevenonly{\def\rncore@knit{\ifnum \passnum@knit = 2 \ifodd\value{rownumber}\else\textnormal{\arabic{rownumber}}\fi\fi \rnstep@knit}} -\newcommand\rnnormal{\def\rncore@knit{\ifnum \passnum@knit = 2 \textnormal{\arabic{rownumber}}\fi \rnstep@knit}} - -\def\rncore@knit{\ifnum \passnum@knit = 2 \textnormal{\arabic{rownumber}}\fi \rnstep@knit} -\def\rnstep@knit{\ifnum \passnum@knit = 2 \addtocounter{rownumber}{-\value{rownumberskip}}\fi - \ifnum \passnum@knit = 0 \addtocounter{rownumber}{-\value{rownumberskip}}\fi} - -\def\rn@knit{\ifvmode\leavevmode\fi - \hbox to \rownumberwd{\hss\rncore@knit\hss}} -\def\rnleft@knit{\ifvmode\leavevmode\fi - \hbox to \rownumberwd{\hss\rnmiddle@knit\llap{\rncore@knit}\hss}} -\def\rnright@knit{\ifvmode\leavevmode\fi - \hbox to \rownumberwd{\hss\rlap{\rncore@knit}\rnmiddle@knit\hss}} -\def\rnbox@knit#1{\ifvmode\leavevmode\fi\hbox to \rownumberwd{\hss\mainpass{\textnormal{#1}}\hss}} -\def\rnboxleft@knit#1{\ifvmode\leavevmode\fi\hbox to \rownumberwd{\hss\rnmiddle@knit\llap{\mainpass{\textnormal{#1}}}\hss}} -\def\rnboxright@knit#1{\ifvmode\leavevmode\fi\hbox to \rownumberwd{\hss\rnmiddle@knit\llap{\mainpass{\textnormal{#1}}}\hss}} +\newcommand \numberrow[3]{\ifnum\passnum@knit=3 \ifvmode\vskip\stitchht\fi\else + \ifvmode\nonumber\leavevmode\fi + \strut@knit + \count255=#1 + \hbox to \stitchwd{\hss\ifnum \passnum@knit = 2 \color{rncolor}\textnormal{#1}\fi\hss}% + \ifnum #1 > #3 + \advance\count255 -1 + \loop \ifnum \count255>#3 + \c@tempcount@knit = \count255 + \divide\c@tempcount@knit #2 + \multiply \c@tempcount@knit #2 + \ifnum\c@tempcount@knit = \count255 + \hbox to \stitchwd{\hss\ifnum \passnum@knit = 2 \color{rncolor}\textnormal{\the\count255}\fi \hss}% + \else + \kern\stitchwd + \fi + \advance\count255 -1 + \repeat + \else + \advance\count255 1 + \loop \ifnum \count255<#3 + \c@tempcount@knit = \count255 + \divide\c@tempcount@knit #2 + \multiply \c@tempcount@knit #2 + \ifnum\c@tempcount@knit = \count255 + \hbox to \stitchwd{\hss\ifnum \passnum@knit = 2 \color{rncolor}\textnormal{\the\count255}\fi \hss}% + \else + \kern\stitchwd + \fi + \advance\count255 1 + \repeat + \fi + \hbox to \stitchwd{\hss\ifnum \passnum@knit = 2 \color{rncolor}\textnormal{#3}\fi \hss}% + \fi} + +\newcommand \rnoddonly{\def\rncore@knit##1{\ifshowrn@knit \ifodd\value{rownumber}\csname print##1rownumber\endcsname{\therownumber}\fi\fi}} +\newcommand \rnevenonly{\def\rncore@knit##1{\ifshowrn@knit \ifodd\value{rownumber}\else\csname print##1rownumber\endcsname{\therownumber}\fi\fi}} +\newcommand \rnnormal{\def\rncore@knit##1{\ifshowrn@knit \csname print##1rownumber\endcsname{\therownumber}\fi}} + +\newcommand \rncore@knit[1]{\ifshowrn@knit \csname print#1rownumber\endcsname{\therownumber}\fi} +\newcommand \rnstep@knit{\ifshowrn@knit + \ifnum \passnum@knit = 2 \addtocounter{rownumber}{-\value{rownumberskip}}\fi + \ifnum \passnum@knit = 0 \addtocounter{rownumber}{-\value{rownumberskip}}\fi + \else\global\showrn@knittrue\fi} + +\newcommand \printrownumber[1]{{\color{rncolor}\textnormal{#1}}} +\newcommand \printrightrownumber[1]{\knitleftarrowhead{\color{rncolor}\textnormal{#1}}} +\newcommand \printleftrownumber[1]{{\color{rncolor}\textnormal{#1}}\knitrightarrowhead} +\newcommand \knitrightarrowhead{{\color{rnarrowcolor}\char125}} +\newcommand \knitleftarrowhead{{\color{rnarrowcolor}\char123}} + +%\newcommand \therownumber{\arabic{rownumber}} +% \newcount automatically generates a \therownumber command + +\newcommand \rn@knit{\ifnum \passnum@knit < 3 \leavevmode + \hbox to \rownumberwd{\hss\ifnum \passnum@knit = 2 \rncore@knit{}\fi\rnstep@knit\hss}\fi} +\newcommand \rnleft@knit{\ifnum \passnum@knit < 3 \leavevmode + \setbox0 = \hbox{\ifnum \passnum@knit = 2 \rncore@knit{left}\fi\rnstep@knit} + \dimen0 = \wd0 %\advance \dimen0 -\rownumberwd + \ifchartsonly\advance \dimen0 1pt\fi + \ifdim \dimen0 > \rnleftwd@knit \global\rnleftwd@knit = \dimen0 \fi + \hbox to 0pt{\hss\box0}\fi} +\newcommand \rnright@knit{\ifnum \passnum@knit < 3 \leavevmode + \setbox0 = \hbox{\ifnum \passnum@knit = 2 \rncore@knit{right}\fi\rnstep@knit} + \dimen0 = \wd0 %\advance \dimen0 -\rownumberwd + \ifchartsonly\advance \dimen0 1pt\fi + \ifdim \dimen0 > \rnrightwd@knit \global\rnrightwd@knit = \dimen0 \fi + \hbox to 0pt{\box0\hss}\fi} + +\newcommand \rnbox@knit[1]{\ifnum \passnum@knit < 3 \leavevmode + \hbox to \rownumberwd{\hss\ifnum \passnum@knit = 2 {\printrownumber{#1}}\fi\hss}\fi} +\newcommand \rnboxleft@knit[1]{\ifnum \passnum@knit < 3 \leavevmode + \setbox0 = \hbox{\ifnum \passnum@knit = 2 {\printleftrownumber{#1}}\fi} + \dimen0 = \wd0 %\advance \dimen0 -\rownumberwd + \ifchartsonly\advance \dimen0 1pt\fi + \ifdim \dimen0 > \rnleftwd@knit \global\rnleftwd@knit = \dimen0 \fi + \hbox to 0pt{\hss\box0}\fi} +\newcommand \rnboxright@knit[1]{\ifnum \passnum@knit < 3 \leavevmode + \setbox0 = \hbox{\ifnum \passnum@knit = 2 {\printrightrownumber{#1}}\fi} + \dimen0 = \wd0 %\advance \dimen0 -\rownumberwd + \ifchartsonly \advance \dimen0 1pt \fi + \ifdim \dimen0 > \rnrightwd@knit \global\rnrightwd@knit = \dimen0 \fi + \hbox to 0pt{\box0\hss}\fi} % The chart commands -\newcommand\chart[1][]{\smallpage@knit\obeylines \catcode`\|=\active \chart@knit{#1}} +\newcommand \chart[1][]{\smallpage@knit\obeylines \catcode`\|=\active \chart@knit{#1}} % Some special stuff for chartsonly mode \let\extracommands@knit\relax -\def\smallpage@knit{\ifvmode\noindent\fi\hbox\bgroup} +\newcommand \smallpage@knit{\noindent\hbox\bgroup} \let\endsmallpage@knit\egroup % The chart command proper -\long\def\chart@knit#1#2{% - \global \chartwidth@knit = 0pt - \ifresetrn \setcounter{rownumber}{0}\else \setcounter{tempcounterknit}{\value{rownumber}}\fi - \setbox1=\hbox{\textnormal{5}}% - \edef\rnmiddle@knit{\hskip \the\wd1}% - \setbox\bgbox@knit=\vbox{\def\passnum@knit{0}\hsize=\maxdimen - \fontencoding{U}\fontfamily{knit}\fontseries{\series@knit}\fontshape{n}\selectfont % This is kind of silly, but to make \stitchht work, we need to be sure that the foreground font exists. - \fontencoding{U}\fontfamily{knit}\fontseries{\series@knit}\fontshape{p}\selectfont - \lineskip=0pt - \parskip=0pt - \baselineskip=0pt - \parindent=0pt - \emergencystretch = \stitchwd - \leftskip=0pt - \rightskip=0pt - \parfillskip = 0pt plus 1fil - \ifresetrn\else\let\rnstep@knit\relax\fi - \commands@knit\extracommands@knit - \global \bgshift@knit = \rownumberwd - \csname auto#1@knit\endcsname #2\par}% - \ifresetrn \setcounter{rownumber}{-\value{rownumber}}\else - \setcounter{rownumber}{\value{tempcounterknit}}\fi - \csname setbgshift#1@knit\endcsname - \ifgrid - \setbox\ggbox@knit=\vbox{\def\passnum@knit{1}\hsize=\maxdimen - \fontencoding{U}\fontfamily{knit}\fontseries{\series@knit}\fontshape{g}\selectfont - \lineskip=0pt - \parskip=0pt - \baselineskip=0pt - \parindent=0pt - \emergencystretch = \stitchwd - \leftskip=0pt - \rightskip=0pt - \parfillskip = 0pt plus 1fil - \commands@knit\extracommands@knit - \csname auto#1@knit\endcsname #2\par}% - \fi - \setbox\fgbox@knit=\vbox{\def\passnum@knit{2}\hsize=\maxdimen - \fontencoding{U}\fontfamily{knit}\fontseries{\series@knit}\fontshape{n}\selectfont - \lineskip=0pt - \parskip=0pt - \baselineskip=0pt - \parindent=0pt - \emergencystretch = \stitchwd - \leftskip=0pt - \rightskip=0pt - \parfillskip = 0pt plus 1fil - \commands@knit\extracommands@knit - \csname auto#1@knit\endcsname #2\par}% - \hbox to \chartwidth@knit{% - \rlap{\color{purlgray}\hskip -\bgshift@knit \box\bgbox@knit}% - \ifgrid\rlap{\color{gridcolor}\box\ggbox@knit}\fi - \box\fgbox@knit% - \hss}% - \ifchartsonly \vskip 0.5\gridwidth \fi \endsmallpage@knit - } +\newcommand \chart@knit[2]{% + \global \chartwidth@knit = 0pt + \ifresetrn \setcounter{rownumber}{0}\else \setcounter{tempcount@knit}{\value{rownumber}}\fi + \setbox\bgbox@knit=\vbox{\def\passnum@knit{0}\hsize=\maxdimen + \ff@knit % This is kind of silly, but to make \stitchht work, we need to be sure that the foreground font exists. + \pf@knit + \lineskip=0pt + \parskip=0pt + \baselineskip=0pt + \parindent=0pt + \emergencystretch = \stitchwd + \leftskip=0pt + \rightskip=0pt + \parfillskip=0pt plus 1fil + \ifresetrn\else\let\rnstep@knit\relax\fi + \commands@knit\extracommands@knit + \def\nonumber{\global\showrn@knitfalse}% + \csname auto#1@knit\endcsname #2\par}% + \ifresetrn \setcounter{tempcount@knit}{-\value{rownumber}}\fi + \ifgrid + \setbox\ggbox@knit=\vbox{\def\passnum@knit{1}\hsize=\maxdimen + \gf@knit + \lineskip=0pt + \parskip=0pt + \baselineskip=0pt + \parindent=0pt + \emergencystretch = \stitchwd + \leftskip=0pt + \rightskip=0pt + \parfillskip=0pt plus 1fil + \commands@knit\extracommands@knit + \def\nonumber{\global\showrn@knitfalse}% + \csname auto#1@knit\endcsname #2\par}% + \fi + \setcounter{rownumber}{\value{tempcount@knit}}% + \global \rnleftwd@knit = 0pt + \global \rnrightwd@knit = 0pt + \setbox\fgbox@knit=\vbox{\def\passnum@knit{2}\hsize=\maxdimen + \ff@knit + \lineskip=0pt + \parskip=0pt + \baselineskip=0pt + \parindent=0pt + \emergencystretch = \stitchwd + \leftskip=0pt + \rightskip=0pt + \parfillskip=0pt plus 1fil + \commands@knit\extracommands@knit + \def\nonumber{\global\showrn@knitfalse}% + \csname auto#1@knit\endcsname #2\par}% + \global\advance \chartwidth@knit \rnleftwd@knit + \global\advance \chartwidth@knit \rnrightwd@knit + \hbox to \chartwidth@knit{\hskip \rnleftwd@knit + \rlap{\color{purlgray}\box\bgbox@knit}% + \ifgrid\rlap{\color{gridcolor}\box\ggbox@knit}\fi + \ifchartsonly + \dimen2 = \dp \fgbox@knit \dimen3 = \ht \fgbox@knit + \advance\dimen2 0.5\gridwidth \advance\dimen3 0.5\gridwidth + \vrule width 0pt height \dimen3 depth \dimen2 + \fi + % If we are doing charts only, we want to enlarge things enough that + % we can see the grid on all sides. + % But if we aren't, we want adjacent charts to merge seamlessly + % because using separate charts is the only way to allow charts to + % break across pages. + \box\fgbox@knit% + \hss}% + \endsmallpage@knit + } % Special charts only macros \ifchartsonly - \ifpdf@knit\else\errmessage{\chartsonly should only be used with pdfTeX.}\fi% - \hoffset=-1in - \voffset=-1in - \oddsidemargin=0pt - \evensidemargin=0pt - \topmargin=0pt - \headheight=0pt - \headsep=0pt - \footskip=0pt - \textheight = 120in - \newenvironment{smallpage}{\clearpage \hsize=\textwidth \columnwidth = \textwidth - \global\chartwidth@knit=0pt \setbox0 = \vbox\bgroup} - {\egroup% - % - \ifdim\chartwidth@knit>0pt \pdfpagewidth = \chartwidth@knit \else - \pdfpagewidth=\wd0 \fi - % - \dimen0=\ht0 \advance \dimen0 by \dp0 - \pdfpageheight=\dimen0 - % - \ifdim\pdfpageheight>\textheight - \typeout{} - \typeout{You need to increase \string\textheight\space in the preamble.} - \typeout{What do you want such a big chart for, anyway?} - \typeout{} - \fi - % - \box0 - \vfil\break - } - \let\smallpage@knit\smallpage - \let\endsmallpage@knit\endsmallpage - \def\extracommands@knit{\hsize=\maxdimen - \leftskip = 0.5\gridwidth - \rightskip = 0.5\gridwidth - \vskip 0.5\gridwidth - } + \ifpdf@knit\else\errmessage{\chartsonly should only be used with pdfTeX.}\fi% + \hoffset=-1in + \voffset=-1in + \oddsidemargin=0pt + \evensidemargin=0pt + \topmargin=0pt + \headheight=0pt + \headsep=0pt + \footskip=0pt + \textheight=120in + \newenvironment{smallpage}{\clearpage + \hsize=\textwidth \columnwidth = \textwidth + \global\chartwidth@knit=0pt + \setbox0 = \vbox\bgroup + \def\smallpage@knit{\let\endsmallpage@knit\egroup \noindent \hbox\bgroup}% + } + {\egroup% + % + \pdfpagewidth=\wd0 + % + \dimen0=\ht0 \advance \dimen0 by \dp0 + \pdfpageheight=\dimen0 + % + \ifdim\pdfpageheight>\textheight + \typeout{} + \typeout{You need to increase \string\textheight\space in the preamble.} + \typeout{What do you want such a big chart for, anyway?} + \typeout{} + \fi + % + \box0 + \clearpage + } + \let\smallpage@knit\smallpage + \let\endsmallpage@knit\endsmallpage + \def\extracommands@knit{% + \leftskip = 0.5\gridwidth + \rightskip = 0.5\gridwidth + } \else - \let\smallpage\begingroup - \let\endsmallpage\endgroup + \let\smallpage\begingroup + \let\endsmallpage\endgroup \fi % Autonumbering macros -\def\everypar@knit{\hskip\leftgap@knit \leftgap@knit=0pt \relax} - -\def \auto@knit{\let\nonumber\relax \everypar={\everypar@knit\do@endofpar@knit{\adjustchartwidth@knit}}} -\def \autoleft@knit{\def\nonumber{\def\rncore@knit{\global\let\rncore@knit\rncore@save@knit}}\everypar={\everypar@knit\rnleft@knit\do@endofpar@knit{\adjustchartwidth@knit}}} -\def \autoright@knit{\def\nonumber{\def\rncore@knit{\global\let\rncore@knit\rncore@save@knit}}\everypar={\everypar@knit\do@endofpar@knit{\rnright@knit\adjustchartwidth@knit}}} -\def \autooddleft@knit{\def\nonumber{\def\rncore@knit{\global\let\rncore@knit\rncore@save@knit}}\everypar={\everypar@knit\ifodd \value{rownumber}\relax \rnleft@knit\do@endofpar@knit{\adjustchartwidth@knit}\else\do@endofpar@knit{\rnright@knit\adjustchartwidth@knit}\kern\rownumberwd\fi}} -\def\autooddright@knit{\def\nonumber{\def\rncore@knit{\global\let\rncore@knit\rncore@save@knit}}\everypar={\everypar@knit\ifodd \value{rownumber}\relax \do@endofpar@knit{\rnright@knit\adjustchartwidth@knit}\kern\rownumberwd\else\rnleft@knit\do@endofpar@knit{\adjustchartwidth@knit}\fi}} +\newcommand \everypar@knit{\hskip\leftgap@knit \leftgap@knit=0pt \relax} + +\newcommand \auto@knit{\let\nonumber\relax \everypar={\everypar@knit\do@endofpar@knit{\adjustchartwidth@knit}}} +\newcommand \autoleft@knit{\everypar={\everypar@knit\rnleft@knit\do@endofpar@knit{\adjustchartwidth@knit}}} +\newcommand \autoright@knit{\everypar={\everypar@knit\do@endofpar@knit{\rnright@knit\adjustchartwidth@knit}}} +\newcommand \autooddleft@knit{\everypar={\everypar@knit + \ifodd \value{rownumber}\relax + \rnleft@knit\do@endofpar@knit{\adjustchartwidth@knit}% + \else %\hskip\rownumberwd + \do@endofpar@knit{\rnright@knit\adjustchartwidth@knit}\fi}} +\newcommand \autooddright@knit{\everypar={\everypar@knit + \ifodd \value{rownumber}\relax %\hskip\rownumberwd + \do@endofpar@knit{\rnright@knit\adjustchartwidth@knit}% + \else\rnleft@knit\do@endofpar@knit{\adjustchartwidth@knit}\fi}} +\newcommand \autoboth@knit{\everypar={\everypar@knit\rnleft@knit\global\advance\rownumber 1 \do@endofpar@knit{\rnright@knit\adjustchartwidth@knit}}} \let\autoevenleft@knit\autooddright@knit \let\autoevenright@knit\autooddleft@knit -\def \setbgshift@knit{\leftrn@knitfalse \global \bgshift@knit = 0pt} -\def \setbgshiftleft@knit{\leftrn@knittrue \resetrnwidth@knit \global \advance \bgshift@knit -\rownumberwd} -\def \setbgshiftright@knit{\leftrn@knitfalse\resetrnwidth@knit \global \bgshift@knit = 0pt} -\def \setbgshiftoddleft@knit{\leftrn@knittrue \resetrnwidth@knit \global \advance \bgshift@knit -\rownumberwd} -\def \setbgshiftoddright@knit{\leftrn@knittrue \resetrnwidth@knit \global \advance \bgshift@knit -\rownumberwd} -\def \setbgshiftevenleft@knit{\leftrn@knittrue \resetrnwidth@knit \global \advance \bgshift@knit -\rownumberwd} -\def\setbgshiftevenright@knit{\leftrn@knittrue \resetrnwidth@knit \global \advance \bgshift@knit -\rownumberwd} - -% Make wider boxes if we've got autonumbered rows. -% We don't do this for \chart so that the rownumbers on the left -% can be aligned to with ~. -\def\resetrnwidth@knit{% - \setbox1=\hbox{\textnormal{5}}% - \setbox0=\hbox{\hskip \bgshift@knit \hskip -\wd1 \textnormal{\arabic{rownumber}}}% - \edef\rownumberwd{\the\wd0} - \setbox1=\hbox{\textnormal{\arabic{rownumber}}}% - \edef\rnmiddle@knit{\hskip\the\wd1}} - -\def\adjustchartwidth@knit{\endgraf - \ifnum \passnum@knit = 2 \setbox0=\lastbox - \setbox1=\hbox{\unhcopy0\unskip}% - \box0 - \ifdim\wd1 >\chartwidth@knit \global\chartwidth@knit=\wd1\fi\fi} +\newcommand \adjustchartwidth@knit{\endgraf + \ifnum \passnum@knit = 2 \setbox0=\lastbox + \setbox1=\hbox{\unhcopy0\unskip}% + \box0 + \ifdim\wd1 >\chartwidth@knit \global\chartwidth@knit=\wd1\fi\fi} + +% Stitch-counting macros + +\newcommand \adjuststitchcount[2][\temp@knit]{\def\temp@knit{#2}% + \leavevmode\ifnum\passnum@knit=3 \null + \ifcountingout@knit \kern #2\stitchwd \else \kern #1\stitchwd \fi \null\fi} + +\newcommand \stitchcountwarningbar{\ifnum \c@stitchcountinprev = \c@stitchcountout \else \vrule width \overfullrule \fi} + +\newcommand \countstitches[1]{% + \global\c@stitchcountinprev = \c@stitchcountin + \setbox0 = \hbox{\def\passnum@knit{3}\countingout@knittrue \fontshape{out}\selectfont #1}% + \c@stitchcountout = \wd0 + \dimen0 = 0.5\stitchwd \advance \c@stitchcountout \dimen0 + \global\divide \c@stitchcountout \stitchwd + \setbox1 = \hbox{\def\passnum@knit{3}\countingout@knitfalse \fontshape{in}\selectfont #1}% + \c@stitchcountin = \wd1 + \dimen1 = 0.5\stitchwd \advance \c@stitchcountin \dimen1 + \global\divide \c@stitchcountin \stitchwd + \ifnum\c@stitchcountinprev < -99 + \global\c@stitchcountinprev = \c@stitchcountout + \fi + } + +\newcommand \stitchcountchart[1][]{\begingroup \catcode`\|=\active \def\chartrn@knit{#1}\obeylines \afterassignment \printstitchcountchart@knit \toks0 =} + +\newcommand \printstitchcountchart@knit{\smallpage@knit\hbox{% + \ifx\relax\printleftstitchcount\else\ifx \empty@knit \printleftstitchcount\else + \let\printstitchcount@knit\printleftstitchcount \def\stitchcountside@knit{0}\makestitchcounts@knit \fi\fi + \chart[\chartrn@knit]{\the\toks0}% + \ifx\relax\printrightstitchcount\else\ifx \empty@knit \printrightstitchcount\else + \let\printstitchcount@knit\printrightstitchcount + \def\stitchcountside@knit{1}\makestitchcounts@knit\fi\fi + }\endsmallpage@knit + \endgroup} + +{\obeylines +\gdef\countstitcheseachrow@knit#1^^M{% + \countstitches{#1}% + \setbox0=\hbox{\def\passnum@knit{2}\strut@knit \printstitchcount@knit\stitchcountwarningbar}% + \setbox1=\hbox{#1}% + \ifdim \wd0 > \stitchcountwidth@knit \global\stitchcountwidth@knit = \wd0 \fi + \hbox to 0pt{\ifnum\stitchcountside@knit = 0 \hss\fi + \vrule width 0pt height \ht1 depth \dp1 \smash{\box0}% + \ifnum\stitchcountside@knit = 1 \hss\fi}% + \par}} + +\def\makestitchcounts@knit{\hbox{\setbox1=\vbox{\c@stitchcountin = -1001 \global\stitchcountwidth@knit=0pt + \parindent=0pt + \def\passnum@knit{3} + \ff@knit + \commands@knit + \everypar={\countstitcheseachrow@knit} \offinterlineskip + \the\toks0 + }% + \ifnum\stitchcountside@knit = 0 + \hskip \stitchcountwidth@knit\rlap{\box1}% + \else + \rlap{\box1}\hskip \stitchcountwidth@knit + \fi +}} + +\newcommand \empty@knit{} +% This is needed because the plain TeX \empty is +% defined with \def and not \newcommand + +\newcommand \printleftstitchcount{{\color{rncolor}\textnormal{(\thestitchcountout\ sts) }}} +\newcommand \printrightstitchcount{} + diff --git a/Master/texmf-dist/tex/latex/knitting/uknit.fd b/Master/texmf-dist/tex/latex/knitting/uknit.fd index 31f05b0dd6d..4291ea68280 100644 --- a/Master/texmf-dist/tex/latex/knitting/uknit.fd +++ b/Master/texmf-dist/tex/latex/knitting/uknit.fd @@ -1,16 +1,22 @@ -\ProvidesFile{T1knit.fd}[2010/1/17 Knit fonts] +\ProvidesFile{T1knit.fd}[2010/08/09 Knit fonts] \DeclareFontFamily{U}{knit}{} -\DeclareFontShape{U}{knit}{g}{n}{<-> knitgn}{} -\DeclareFontShape{U}{knit}{g}{p}{<-> knitgp}{} -\DeclareFontShape{U}{knit}{g}{g}{<-> knitgg}{} - \DeclareFontShape{U}{knit}{n}{n}{<-> knitnn}{} \DeclareFontShape{U}{knit}{n}{p}{<-> knitnp}{} \DeclareFontShape{U}{knit}{n}{r}{<-> knitnr}{} \DeclareFontShape{U}{knit}{n}{l}{<-> knitnl}{} +\DeclareFontShape{U}{knit}{n}{in}{<-> knitn_sc_in}{} +\DeclareFontShape{U}{knit}{n}{out}{<-> knitn_sc_out}{} + +\DeclareFontShape{U}{knit}{g}{n}{<-> knitgn}{} +\DeclareFontShape{U}{knit}{g}{p}{<-> knitgp}{} +\DeclareFontShape{U}{knit}{g}{g}{<-> knitgg}{} +\DeclareFontShape{U}{knit}{g}{in}{<-> knitg_sc_in}{} +\DeclareFontShape{U}{knit}{g}{out}{<-> knitg_sc_out}{} \DeclareFontShape{U}{knit}{w}{n}{<-> knitwn}{} \DeclareFontShape{U}{knit}{w}{p}{<-> knitwp}{} \DeclareFontShape{U}{knit}{w}{g}{<-> knitwg}{} +\DeclareFontShape{U}{knit}{w}{in}{<-> knitw_sc_in}{} +\DeclareFontShape{U}{knit}{w}{out}{<-> knitw_sc_out}{} diff --git a/Master/texmf-dist/tex/plain/knitting/knitting.tex b/Master/texmf-dist/tex/plain/knitting/knitting.tex index a78175d7935..509d291a7ca 100644 --- a/Master/texmf-dist/tex/plain/knitting/knitting.tex +++ b/Master/texmf-dist/tex/plain/knitting/knitting.tex @@ -20,8 +20,9 @@ % The complete list of files considered part of this work is in % the file `knitting-doc.pdf' and its source code `knitting-doc.tex'. % +% Version: 2 -% Date: 2010/01/17 +% Date: 2010/08/29 %\pdfmapfile{+knitfont.map} @@ -31,8 +32,12 @@ \fi \newif \ifchartsonly \chartsonlyfalse - +\newif \ifgrid +\newif \ifresetrn \resetrntrue +\newif \ifleftrn@knit +\newif \ifshowrn@knit \showrn@knittrue \newif \ifpdf@knit +\newif \ifcountingout@knit \pdf@knittrue \ifx \pdfoutput \undefined \pdf@knitfalse \fi \ifx \pdfoutput \relax \pdf@knitfalse \fi @@ -41,128 +46,164 @@ % Change them to use your driver's syntax if you insist on % not using pdfTeX. -% For black lines, just say \let\knitlinecolor\relax -\ifpdf - \ifnum \pdftexversion < 140 - \def\purlgray{\pdfliteral {0.65 g 0.65 G}\aftergroup\makenormal@knit} - \def\gridcolor{\pdfliteral {0.3 g 0.3 G}\aftergroup\makenormalkp@knit} - \def\knitlinecolor{\pdfliteral {0.7 0 0 rg 0.7 0 0 RG}\aftergroup\makenormalkp@knit} - \def\makenormal@knit{\pdfliteral {0 g 0 G}} - \def\makenormalkp@knit{\ifnum \passnum@knit = 0 \pdfliteral {0.65 g 0.65 G}\else\pdfliteral {0 g 0 G}\fi} - \else - \def\purlgray{\pdfcolorstack 0 push {0.65 g 0.65 G}\aftergroup\makenormal@knit} - \def\gridcolor{\pdfcolorstack 0 push {0.3 g 0.3 G}\aftergroup\makenormal@knit} - \def\knitlinecolor{\pdfcolorstack 0 push {0.7 0 0 rg 0.7 0 0 RG}\aftergroup\makenormal@knit} - \def\makenormal@knit{\pdfcolorstack 0 pop} - \fi +% For black lines, just say \let\knitlinecolor \relax +\ifpdf@knit + \ifnum \pdftexversion < 140 + \def\purlgray {\pdfliteral {0.65 g 0.65 G}\aftergroup\makenormalcolorknit} + \def\gridcolor {\pdfliteral {0.3 g 0.3 G}\aftergroup\makenormalcolorknit} + \def\knitlinecolor {\pdfliteral {0.7 0 0 rg 0.7 0 0 RG}\aftergroup\makenormalcolorknit} + \def\rncolor{\pdfliteral {0.55 0 0 rg 0.55 0 0 RG}\aftergroup\makenormalcolorknit} + \def\rnarrowcolor{\pdfliteral {0.35 0 0 rg 0.35 0 0 RG}\aftergroup\makenormalcolorknit} + \def\makenormalcolorknit{\ifcase \passnum@knit \pdfliteral {0.65 g 0.65 G}\or \pdfliteral {0.3 g 0.3 G}\else \pdfliteral {0 g 0 G}\fi} + \else + \def\purlgray {\pdfcolorstack 0 push {0.65 g 0.65 G}\aftergroup\makenormalcolorknit} + \def\gridcolor {\pdfcolorstack 0 push {0.3 g 0.3 G}\aftergroup\makenormalcolorknit} + \def\knitlinecolor {\pdfcolorstack 0 push {0.7 0 0 rg 0.7 0 0 RG}\aftergroup\makenormalcolorknit} + \def\rncolor{\pdfcolorstack 0 push {0.55 0 0 rg 0.55 0 0 RG}\aftergroup\makenormalcolorknit} + \def\rnarrowcolor{\pdfcolorstack 0 push {0.35 0 0 rg 0.35 0 0 RG}\aftergroup\makenormalcolorknit} + \def\makenormalcolorknit{\pdfcolorstack 0 pop} + \fi \else - \def\purlgray{\special{color push gray 0.65}\aftergroup\makenormal@knit} - \def\gridcolor{\special{color push gray 0.3}\aftergroup\makenormal@knit} - \def\knitlinecolor{\special{color push rgb 0.7 0 0}\aftergroup\makenormal@knit} - \def\makenormal@knit{\special{color pop}} + \def\purlgray {\special{color push gray 0.65}\aftergroup\makenormalcolorknit} + \def\gridcolor {\special{color push gray 0.3}\aftergroup\makenormalcolorknit} + \def\knitlinecolor {\special{color push rgb 0.7 0 0}\aftergroup\makenormalcolorknit} + \def\rncolor{\special{color push rgb 0.55 0 0}\aftergroup\makenormalcolorknit} + \def\rnarrowcolor{\special{color push rgb 0.35 0 0}\aftergroup\makenormalcolorknit} + \def\makenormalcolorknit{\special{color pop}} \fi % If grayscale really just isn't working at all, % go down and redefine \changeknitsize -\newif \ifgrid -\newif \ifresetrn \resetrntrue -\newif \ifleftrn@knit - -\newdimen\leftgap@knit -\newdimen\bgshift@knit -\newdimen\chartwidth@knit - -\newdimen\fontsize@knit +\newdimen \leftgap@knit +\newdimen \bgshift@knit +\newdimen \chartwidth@knit +\newdimen \stitchcountwidth@knit +\newdimen \rnleftwd@knit +\newdimen \rnrightwd@knit +\newdimen \fontsize@knit \newbox\bgbox@knit \newbox\fgbox@knit \newbox\ggbox@knit -\newcount\rownumber -\newcount\tempcount@knit -\newcount\rownumberskip \rownumberskip = 1 -\def\passnum@knit{2} - -\def\stitchwd{\fontdimen6\ff@knit} -\def\stitchht{\fontdimen5\ff@knit} -\def\stitchdp{\fontdimen8\ff@knit} +\newcount \rownumber +\newcount \tempcount@knit +\newcount \rownumberskip \rownumberskip = 1 +\newcount \stitchcountin +\newcount \stitchcountinprev +\newcount \stitchcountout + +\def \passnum@knit{2} +\def \stitchwd{\fontdimen6\ff@knit} +\def \stitchht{\fontdimen5\ff@knit} +\def \stitchdp{\fontdimen8\ff@knit} % fontdimen9 is the LaTeX stitch height -\def\gridwidth{\fontdimen10\ff@knit} -\def\knitlinewd{\fontdimen11\ff@knit} -\def\narrowincraise@knit{\fontdimen12\the\font} -\def\fontvoffset@knit{\fontdimen13\the\font} -\def\purlextend@knit{\fontdimen14\ff@knit} -\def\rownumberwd{\fontdimen6\ff@knit} - -\def\changeknitsize#1{\fontsize@knit = #1 - \font\knitsf = cmss10 at \fontsize@knit - \font\rmten@knit = cmr10 at \fontsize@knit - \font\knitsfsmall@knit = cmss8 at 0.8\fontsize@knit - \font\cablesf@knit = cmss8 at 0.8\fontsize@knit - \font\cablesfsmall@knit = ecss0600 at 0.6\fontsize@knit - % I would use cmss as the sans serif font here, - % but cmss6 doesn't exist. - % - \font\gridff@knit = knitgn at \fontsize@knit - \font\wideff@knit = knitwn at \fontsize@knit - \font\nogridff@knit = knitnn at \fontsize@knit - % - \font\gridgf@knit = knitgg at \fontsize@knit - \font\widegf@knit = knitwg at \fontsize@knit - \font\raiseff@knit = knitnr at \fontsize@knit - \font\lowerff@knit = knitnl at \fontsize@knit - % - \font\gridpf@knit = knitgp at \fontsize@knit - \font\widepf@knit = knitwp at \fontsize@knit - \font\nogridpf@knit = knitnp at \fontsize@knit - % - %%% Use if you can't get the grays to work. - %%% In this case, don't use \Purl or \purlbox. - % \let \gridpf@knit \nullfont - % \let \widepf@knit \nullfont - % \let \nogridpf@knit \nullfont - % \let \purlgray \relax +\def \gridwidth{\fontdimen10\ff@knit} +\def \knitlinewd{\fontdimen11\ff@knit} +\def \narrowincraise@knit{\fontdimen12\the\font} +\def \fontvoffset@knit{\fontdimen13\the\font} +\def \purlextend@knit{\fontdimen14\ff@knit} +\def \rownumberwd{\fontdimen6\ff@knit} + +\def \changeknitsize#1{\fontsize@knit = #1 + \font\knitsf = cmss10 at \fontsize@knit + \font\knitrm = cmr10 at \fontsize@knit + \font\knitsfsmall@knit = cmss8 at 0.8\fontsize@knit + \font\cablesf@knit = cmss8 at 0.8\fontsize@knit + \font\cablesfsmall@knit = ecss0600 at 0.6\fontsize@knit + % I would use cmss as the sans serif font here, + % but cmss6 doesn't exist. + % + \font\gff@knit = knitgn at \fontsize@knit + \font\wff@knit = knitwn at \fontsize@knit + \font\nff@knit = knitnn at \fontsize@knit + % + \font\ggf@knit = knitgg at \fontsize@knit + \font\wgf@knit = knitwg at \fontsize@knit + \font\raiseff@knit = knitnr at \fontsize@knit + \font\lowerff@knit = knitnl at \fontsize@knit + % + \font\gpf@knit = knitgp at \fontsize@knit + \font\wpf@knit = knitwp at \fontsize@knit + \font\npf@knit = knitnp at \fontsize@knit + % + \font \nstsout@knit = knitn_sc_out at \fontsize@knit + \font \nstsin@knit = knitn_sc_in at \fontsize@knit + \font \gstsout@knit = knitg_sc_out at \fontsize@knit + \font \gstsin@knit = knitg_sc_in at \fontsize@knit + \font \wstsout@knit = knitw_sc_out at \fontsize@knit + \font \wstsin@knit = knitw_sc_in at \fontsize@knit + % + %%% Use the following if you can't get the grays to work. + %%% In this case, don't use \Purl or \purlbox. + % \let \gridpf@knit \nullfont + % \let \widepf@knit \nullfont + % \let \nogridpf@knit \nullfont + % \let \purlgray \relax } - -\def\knitnogrid{\gridfalse\def\ff@knit{\nogridff@knit}\def\pf@knit{\nogridpf@knit}\def\gf@knit{\nullfont }} -\def\knitgrid{\gridtrue \def\ff@knit{\gridff@knit }\def\pf@knit{\gridpf@knit }\def\gf@knit{\gridgf@knit}} -\def\knitwide{\gridtrue \def\ff@knit{\wideff@knit }\def\pf@knit{\widepf@knit }\def\gf@knit{\widegf@knit}} - -\def\purlpass{\futurelet\next@knit\purlpass@@knit} -\def\gridpass{\futurelet\next@knit\gridpass@@knit} -\def\mainpass{\futurelet\next@knit\mainpass@@knit} -\def\purlpass@@knit{\ifx\next@knit[\def\nextstep@knit{\purlpass@knit}\else\def\nextstep@knit{\purlpass@knit[]}\fi\nextstep@knit} -\def\gridpass@@knit{\ifx\next@knit[\def\nextstep@knit{\gridpass@knit}\else\def\nextstep@knit{\gridpass@knit[]}\fi\nextstep@knit} -\def\mainpass@@knit{\ifx\next@knit[\def\nextstep@knit{\mainpass@knit}\else\def\nextstep@knit{\mainpass@knit[]}\fi\nextstep@knit} -\def\purlpass@knit[#1]#2{\ifnum\passnum@knit = 0 #2\else #1\fi} -\def\gridpass@knit[#1]#2{\ifnum\passnum@knit = 1 #2\else #1\fi} -\def\mainpass@knit[#1]#2{\ifnum\passnum@knit = 2 #2\else #1\fi} +\let \ngf@knit \nullfont + +\def \ff@knit{\csname \series@knit ff@knit\endcsname} +\def \gf@knit{\csname \series@knit gf@knit\endcsname} +\def \pf@knit{\csname \series@knit pf@knit\endcsname} +\def \stsout@knit{\csname \series@knit stsout@knit\endcsname} +\def \stsin@knit{\csname \series@knit stsin@knit\endcsname} + +\def \purlpass{\futurelet\next@knit\purlpass@@knit} +\def \gridpass{\futurelet\next@knit\gridpass@@knit} +\def \mainpass{\futurelet\next@knit\mainpass@@knit} +\def \countpass{\futurelet\next@knit\mainpass@@knit} +\def \purlpass@@knit{\ifx\next@knit[\def\nextstep@knit{\purlpass@knit}\else\def\nextstep@knit{\purlpass@knit[]}\fi\nextstep@knit} +\def \gridpass@@knit{\ifx\next@knit[\def\nextstep@knit{\gridpass@knit}\else\def\nextstep@knit{\gridpass@knit[]}\fi\nextstep@knit} +\def \mainpass@@knit{\ifx\next@knit[\def\nextstep@knit{\mainpass@knit}\else\def\nextstep@knit{\mainpass@knit[]}\fi\nextstep@knit} +\def \countpass@@knit{\ifx\next@knit[\def\nextstep@knit{\countpass@knit}\else\def\nextstep@knit{\countpass@knit[]}\fi\nextstep@knit} +\def \purlpass@knit[#1]#2{\ifnum\passnum@knit = 0 #2\else #1\fi} +\def \gridpass@knit[#1]#2{\ifnum\passnum@knit = 1 #2\else #1\fi} +\def \mainpass@knit[#1]#2{\ifnum\passnum@knit = 2 #2\else #1\fi} +\def \countpass@knit[#1]#2{\ifnum\passnum@knit = 3 #2\else #1\fi} \changeknitsize{10pt} +\def \knitnogrid{\gridfalse\def\series@knit{n}} +\def \knitgrid{\gridtrue \def\series@knit{g}} +\def \knitwide{\gridtrue \def\series@knit{w}} + \knitgrid -\def\textknit#1{\ifvmode\leavevmode\fi\hbox{% - \rlap{\pf@knit\purlgray\def\passnum@knit{0}#1}% - \ifgrid\rlap{\gf@knit\gridcolor\def\passnum@knit{1}#1}\fi - \ff@knit\def\passnum@knit{2}#1}} +\def \textknit#1{\leavevmode\hbox{\ff@knit + \rlap{\pf@knit \purlgray \def\passnum@knit{0}#1}% + \ifgrid\rlap{\gf@knit \gridcolor \def\passnum@knit{1}#1}\fi + \def\passnum@knit{2}#1}} -\def\do@endofpar@knit#1{\def\par{#1\endgraf\let\par\endgraf}} +\def \do@endofpar@knit#1{\def\par{#1\endgraf\let\par\endgraf}} % Special symbols -\def \narrowdecrease#1{\char1\ifnum \passnum@knit = 2 \llap{\vbox to\stitchht{\vss\vskip\stitchdp\vskip\fontvoffset@knit\hbox to \stitchwd{\hfil\knitsfsmall@knit #1\hfil}\vskip-\narrowincraise@knit\vss}}\fi} -\def\pnarrowdecrease#1{\char2\ifnum \passnum@knit = 2 \llap{\vbox to\stitchht{\vss\vskip\stitchdp\vskip\fontvoffset@knit\hbox to \stitchwd{\hfil\knitsfsmall@knit #1\hfil}\vskip-\narrowincraise@knit\vss}}\fi} -\def \narrowincrease#1{\char3\ifnum \passnum@knit = 2 \llap{\vbox to\stitchht{\vss\vskip\stitchdp\vskip\fontvoffset@knit\hbox to \stitchwd{\hfil\knitsfsmall@knit #1\hfil}\vskip \narrowincraise@knit\vss}}\fi} -\def\pnarrowincrease#1{\char4\ifnum \passnum@knit = 2 \llap{\vbox to\stitchht{\vss\vskip\stitchdp\vskip\fontvoffset@knit\hbox to \stitchwd{\hfil\knitsfsmall@knit #1\hfil}\vskip \narrowincraise@knit\vss}}\fi} -\def\bobble#1{\char0 \ifnum \passnum@knit = 2 \llap{\vbox to\stitchht{\vss\vskip\stitchdp\vskip\fontvoffset@knit\hbox to \stitchwd{\hfil\knitsfsmall@knit #1\hfil}\vss}}\fi} - -\def\wideincrease#1{\strut@knit - \hbox to #1\stitchwd{\char25\leaders\hbox{\char22}\hfil\char29\leaders\hbox{\char22}\hfil\char26}} -\def\widedecrease#1{\strut@knit\ifnum #1 = 5 - \char31\else - \hbox to #1\stitchwd{\char27\leaders\hbox{\char22}\hfil\char30\leaders\hbox{\char22}\hfil\char28}\fi} +\def \narrowdecrease#1{\genbobble@knit{#1}{1}{-\narrowincraise@knit}\adjuststitchcount[#1]{0}\adjuststitchcount[-1]{0}} +\def \pnarrowdecrease#1{\genbobble@knit{#1}{2}{-\narrowincraise@knit}\adjuststitchcount[#1]{0}\adjuststitchcount[-1]{0}} +\def \narrowincrease#1{\genbobble@knit{#1}{3}{\narrowincraise@knit}\adjuststitchcount[0]{#1}\adjuststitchcount[0]{-1}} +\def \pnarrowincrease#1{\genbobble@knit{#1}{4}{\narrowincraise@knit}\adjuststitchcount[0]{#1}\adjuststitchcount[0]{-1}} +\def \bobble#1{\genbobble@knit{#1}{0}{0pt}} + +\def\genbobble@knit#1#2#3{\char#2 \ifnum \passnum@knit = 2 + \llap{\vbox to\stitchht{\vss \vskip\stitchdp \vskip\fontvoffset@knit \hbox to \stitchwd{\hfil\knitsfsmall@knit #1\hfil}\vskip #3\vss}}\fi} + +\def \wideincrease#1{\strut@knit + \ifnum\passnum@knit = 3 \narrowincrease{#1}\else + \hbox to #1\stitchwd{\char25 + \hskip-0.1pt\leaders\hbox{\char22}\hfil\hskip-0.1pt + \char29 + \hskip-0.1pt\leaders\hbox{\char22}\hfil\hskip-0.1pt + \char26}\fi} +\def \widedecrease#1{\strut@knit + \ifnum #1 = 5 \char31 \else + \ifnum\passnum@knit = 3 \narrowdecrease{#1}\else + \hbox to #1\stitchwd{\char27 + \hskip-0.1pt\leaders\hbox{\char22}\hfil\hskip-0.1pt + \char30 + \hskip-0.1pt\leaders\hbox{\char22}\hfil\hskip-0.1pt + \char28}\fi\fi} % Standard chart commands @@ -171,378 +212,582 @@ {\catcode`\^^M = \active \catcode`\| = \active \global\def\commands@knit{% - \let\[\pnarrowincrease - \let\]\pnarrowdecrease - \let\<\narrowincrease - \let\>\narrowdecrease - \let\@\bobble - \let \! \barthin@knit - \let \| \bar@knit - \let | \bar@knit - \let\par\endgraf %Just in case someone's redefined it - \leftgap@knit=0pt - \def~{\ifvmode \advance \leftgap@knit by \stitchwd - \else \kern \stitchwd \fi}% - \def^^M{\par}% - \def\\{\par}% - \let\_\horizline@knit - \let\=\horizlinewide@knit - \let\-\horizlinenarrow@knit - \let\overline\overline@knit - \let\underline\underline@knit - \let\rn\rn@knit - \let\rnbox\rnbox@knit - \let\rnboxleft\rnboxleft@knit - \let\rnboxright\rnboxright@knit - \let\rnleft\rnleft@knit - \let\rnright\rnright@knit - \let\rncore@save@knit \rncore@knit - \let\nonumber\relax - }% + \let\[\pnarrowincrease + \let\]\pnarrowdecrease + \let\<\narrowincrease + \let\>\narrowdecrease + \let\@\bobble + \let \! \barthin@knit + \let \| \bar@knit + \let | \bar@knit + \let \_ \horizline@knit + \let \= \horizlinewide@knit + \let \- \horizlinenarrow@knit + \let\overline\overline@knit + \let\underline\underline@knit + \let\rn\rn@knit + \let\rnbox\rnbox@knit + \let\rnboxleft\rnboxleft@knit + \let\rnboxright\rnboxright@knit + \let\rnleft\rnleft@knit + \let\rnright\rnright@knit + \let\nonumber\relax + \let\par\endgraf %Just in case someone's redefined it + \leftgap@knit=0pt + \def~{\ifnum\passnum@knit=3 \else \ifvmode \advance \leftgap@knit by \stitchwd + \else \kern \stitchwd \fi \fi}% + \def^^M{\par}% + \def\\{\par}% + }% } -\def\strut@knit{\vrule width 0pt height \stitchht depth \stitchdp} +\def \strut@knit{\vrule width 0pt height \stitchht depth \stitchdp} % Drawing lines on the chart -\def \horizline@knit{\ifvmode\nonumber\leavevmode\fi \dimen0 = \stitchwd \advance \dimen0 \knitlinewd - \ifnum\passnum@knit = 2 - \hskip -0.5\knitlinewd\smash{{\knitlinecolor\vrule width \dimen0 height 0.5\knitlinewd depth 0.5\knitlinewd}}\hskip -0.5\knitlinewd - \else\hskip \stitchwd \fi} -\def\horizlinenarrow@knit#1{\ifvmode\nonumber\leavevmode\fi \dimen0 = #1\stitchwd \advance \dimen0 \gridwidth - \ifnum\passnum@knit = 2 - \hskip -0.5\gridwidth \smash{{\knitlinecolor\vrule width \dimen0 height 0.5\knitlinewd depth 0.5\knitlinewd}}\hskip -0.5\gridwidth - \else\hskip #1\stitchwd \fi} -\def \horizlinewide@knit#1{\ifvmode\nonumber\leavevmode\fi \dimen0 = #1\stitchwd \advance \dimen0 \knitlinewd - \ifnum\passnum@knit = 2 - \smash{{\knitlinecolor\vrule width \dimen0 height 0.5\knitlinewd depth 0.5\knitlinewd}} - \else\hskip \dimen0 \fi} - -\def\bar@knit{\ifvmode\leavevmode\fi\ifgrid - \ifnum \passnum@knit = 0 - \hbox{\knitlinecolor\vrule width \knitlinewd depth \stitchdp height \stitchht}% - \else - \kern \knitlinewd - \fi - \else - \ifnum \passnum@knit = 2 - \hbox{\knitlinecolor\vrule width \knitlinewd depth \stitchdp height \stitchht}% - \else - \kern \knitlinewd - \fi - \fi} - -\def\barthin@knit{\ifvmode\leavevmode\fi - \ifnum \passnum@knit = 2 - \hbox to 0pt{\hss\knitlinecolor\vrule width \knitlinewd depth \stitchdp height \stitchht\hss}% - \else \strut@knit\fi} - -\def\overline@knit#1{\setbox0 = \hbox{#1}% - \leavevmode - \ifgrid - \ifnum \passnum@knit = 0 - \dimen1=\wd0 \advance\dimen1 by \gridwidth - {\rlap{\raise\ht0\hbox{\hskip -0.5\gridwidth\knitlinecolor\vrule width \dimen1 height \knitlinewd depth 0pt}}}% - \else - \raise\ht0\hbox{\vrule width 0pt height \knitlinewd depth 0pt}% - \fi - \else - \ifnum \passnum@knit = 2 - \dimen1=\wd0 \advance\dimen1 by \gridwidth - {\rlap{\raise\ht0\hbox{\hskip -0.5\gridwidth\knitlinecolor\vrule width \dimen1 height \knitlinewd depth 0pt}}}% - \else - \dimen0=\ht0 \advance \dimen0 \knitlinewd - \vrule width 0pt height \dimen0 depth 0pt - \fi - \fi - #1} - -\def\underline@knit#1{\setbox0 = \hbox{#1}% - \leavevmode - \dimen1=\wd0 \advance\dimen1 by \gridwidth - \ifgrid - \ifnum \passnum@knit = 0 - \rlap{\raise-\dp0\hbox{\hskip -0.5\gridwidth\knitlinecolor\vrule width \dimen1 height 0pt depth \knitlinewd \hskip -0.5\gridwidth}}% - \else - \rlap{\raise-\dp0\hbox{\vrule width 0pt height 0pt depth \knitlinewd}}% - \fi - \else - \ifnum \passnum@knit = 2 - \rlap{\raise-\dp0\hbox{\hskip -0.5\gridwidth\knitlinecolor\vrule width \dimen1 height 0pt depth \knitlinewd \hskip -0.5\gridwidth}}% - \else - \rlap{\raise-\dp0\hbox{\vrule width 0pt height 0pt depth \knitlinewd}}% - \fi - \fi - \copy0 - } +\def \horizline@knit{\ifnum\passnum@knit<3 \ifvmode\nonumber\leavevmode\fi \dimen0 = \stitchwd \advance \dimen0 \knitlinewd + \ifnum\passnum@knit = 2 + \hskip -0.5\knitlinewd\smash{{\knitlinecolor \vrule width \dimen0 height 0.5\knitlinewd depth 0.5\knitlinewd}}\hskip -0.5\knitlinewd + \else\hskip \stitchwd \fi\fi} +\def \horizlinenarrow@knit#1{\ifnum\passnum@knit<3 \ifvmode\nonumber\leavevmode\fi \dimen0 = #1\stitchwd \advance \dimen0 \gridwidth + \ifnum\passnum@knit = 2 + \hskip -0.5\gridwidth \smash{{\knitlinecolor \vrule width \dimen0 height 0.5\knitlinewd depth 0.5\knitlinewd}}\hskip -0.5\gridwidth + \else\hskip #1\stitchwd \fi\fi} +\def \horizlinewide@knit#1{\ifnum\passnum@knit<3 \ifvmode\nonumber\leavevmode\fi \dimen0 = #1\stitchwd \advance \dimen0 \knitlinewd + \ifnum\passnum@knit = 2 + \smash{{\knitlinecolor \vrule width \dimen0 height 0.5\knitlinewd depth 0.5\knitlinewd}} + \else\hskip \dimen0 \fi\fi} + +\def \bar@knit{\ifnum\passnum@knit < 3 \leavevmode + \ifgrid + \ifnum \passnum@knit = 0 + \hbox{\knitlinecolor \vrule width \knitlinewd depth \stitchdp height \stitchht}% + \else + \kern \knitlinewd + \fi + \else + \ifnum \passnum@knit = 2 + \hbox{\knitlinecolor \vrule width \knitlinewd depth \stitchdp height \stitchht}% + \else + \kern \knitlinewd + \fi + \fi\fi} + +\def \barthintop@knit{0pt} +\def \barthinbot@knit{0pt} + +\def \barthin@knit{\leavevmode\strut@knit + \ifnum \passnum@knit = 2 + \dimen2 = \stitchht \advance \dimen2 \barthintop@knit + \dimen3 = \stitchdp \advance \dimen3 \barthinbot@knit + \smash{\hbox to 0pt{\hss \knitlinecolor \vrule width \knitlinewd depth \dimen3 height \dimen2\hss}}% + \fi} + +\def \overline@knit{\futurelet\next@knit\overline@@knit} +\def \overline@@knit{\ifx\next@knit*% + \def\nextstep@knit{\overlinestar@knit}\else + \def\nextstep@knit{\overlinenostar@knit}\fi\nextstep@knit} + +\def \overlinenostar@knit#1{\leavevmode{\def\barthintop@knit{\knitlinewd}% + \setbox0 = \hbox{#1}% + \ifgrid + \ifnum \passnum@knit = 0 + \dimen1=\wd0 \advance\dimen1 by \gridwidth + {\rlap{\raise\ht0\hbox{\hskip -0.5\gridwidth\knitlinecolor \vrule width \dimen1 height \knitlinewd depth 0pt}}}% + \else + \raise\ht0\hbox{\vrule width 0pt height \knitlinewd depth 0pt}% + \fi + \else + \ifnum \passnum@knit = 2 + \dimen1=\wd0 \advance\dimen1 by \gridwidth + {\rlap{\raise\ht0\hbox{\hskip -0.5\gridwidth\knitlinecolor \vrule width \dimen1 height \knitlinewd depth 0pt}}}% + \else + \dimen0=\ht0 \advance \dimen0 \knitlinewd + \vrule width 0pt height \dimen0 depth 0pt + \fi \fi + #1}} + +\def \overlinestar@knit#1#2{\leavevmode{\def\barthintop@knit{0.5\knitlinewd}% The #1 is to eat the * + \setbox0 = \hbox{#2}% + \ifnum \passnum@knit = 2 + \dimen1=\wd0 \advance\dimen1 by \gridwidth + \smash{\rlap{\raise\ht0\hbox{\hskip -0.5\gridwidth\knitlinecolor \vrule width \dimen1 height 0.5\knitlinewd depth 0.5\knitlinewd}}}% + \fi + #2}} + +\def \underline@knit{\futurelet\next@knit\underline@@knit} +\def \underline@@knit{\ifx\next@knit*% + \def\nextstep@knit{\underlinestar@knit}\else + \def\nextstep@knit{\underlinenostar@knit}\fi\nextstep@knit} + +\def \underlinenostar@knit#1{\leavevmode{\def\barthinbot@knit{\knitlinewd}% + \setbox0 = \hbox{#1}% + \ifgrid + \ifnum \passnum@knit = 0 + \dimen1=\wd0 \advance\dimen1 by \gridwidth + \rlap{\raise-\dp0\hbox{\hskip -0.5\gridwidth\knitlinecolor \vrule width \dimen1 height 0pt depth \knitlinewd \hskip -0.5\gridwidth}}% + \else + \rlap{\raise-\dp0\hbox{\vrule width 0pt height 0pt depth \knitlinewd}}% + \fi + \else + \ifnum \passnum@knit = 2 + \dimen1=\wd0 \advance\dimen1 by \gridwidth + \rlap{\raise-\dp0\hbox{\hskip -0.5\gridwidth\knitlinecolor \vrule width \dimen1 height 0pt depth \knitlinewd \hskip -0.5\gridwidth}}% + \else + \rlap{\raise-\dp0\hbox{\vrule width 0pt height 0pt depth \knitlinewd}}% + \fi \fi + #1}} + +\def \underlinestar@knit#1#2{\leavevmode{\def\barthinbot@knit{0.5\knitlinewd}% + \setbox0 = \hbox{#2}% + \ifnum \passnum@knit = 2 + \dimen1=\wd0 \advance\dimen1 by \gridwidth + \smash{\rlap{\raise-\dp0\hbox{\hskip -0.5\gridwidth\knitlinecolor \vrule width \dimen1 height 0.5\knitlinewd depth 0.5\knitlinewd \hskip -0.5\gridwidth}}}% + \fi + #2}} % Fancy cabling -\def\overcableleft@knit#1{% - \setbox0=\hbox{#1}% - \rlap{#1}% - \hbox to \wd0{\leaders\hbox to \stitchwd{\hfil\char5}\hfil\hskip\stitchwd\char10}} -\def\undercableleft@knit#1{% - \setbox0=\hbox{#1}% - \rlap{#1}% - \hbox to \wd0{\leaders\hbox to \stitchwd{\hfil\char6}\hfil\hskip\stitchwd\char9}} -\def\undercableright@knit#1{% - \setbox0=\hbox{#1}% - \rlap{#1}% - \hbox to \wd0{\char13\char12\hskip\stitchwd\leaders\hbox to \stitchwd{\char8\hfil}\hfil}} -\def\overcableright@knit#1{% - \setbox0=\hbox{#1}% - \rlap{#1}% - \hbox to \wd0{\char14\char11\hskip\stitchwd\leaders\hbox to \stitchwd{\char7\hfil}\hfil}} - -\def\cableleft#1#2{\ifvmode\leavevmode\fi - \ifcase\passnum@knit - \hbox{\gridfalse \nogridpf@knit #1#2} - \or - \setbox0=\hbox{\gridfalse \nogridpf@knit #1#2} \vrule width \wd0 height 0pt depth 0pt \vrule width 0pt height \ht0 depth \dp0 - \else - \hbox{\def\ff@knit{\nogridff@knit}\gridfalse \let\knitsf \cablesf@knit \let \knitsfsmall@knit \cablesfsmall@knit {\lowerff@knit\overcableleft@knit{#1}}{\raiseff@knit\undercableright@knit{#2}}}\fi} -\def\cableright#1#2{\ifvmode\leavevmode\fi - \ifcase\passnum@knit - \hbox{\gridfalse \nogridpf@knit #1#2} - \or - \setbox0=\hbox{\gridfalse \nogridpf@knit #1#2} \vrule width \wd0 height 0pt depth 0pt \vrule width 0pt height \ht0 depth \dp0 - \else - \hbox{\def\ff@knit{\nogridff@knit}\gridfalse \let\knitsf \cablesf@knit \let \knitsfsmall@knit \cablesfsmall@knit {\raiseff@knit\undercableleft@knit{#1}}{\lowerff@knit\overcableright@knit{#2}}}\fi} +\def \overcableleft@knit#1{% + \setbox0=\hbox{#1}% + \rlap{#1}% + \hbox to \wd0{\leaders\hbox to \stitchwd{\hfil\char5}\hfil\hskip\stitchwd\char10}} +\def \undercableleft@knit#1{% + \setbox0=\hbox{#1}% + \rlap{#1}% + \hbox to \wd0{\leaders\hbox to \stitchwd{\hfil\char6}\hfil\hskip\stitchwd\char9}} +\def \undercableright@knit#1{% + \setbox0=\hbox{#1}% + \rlap{#1}% + \hbox to \wd0{\char13\char12\hskip\stitchwd\leaders\hbox to \stitchwd{\char8\hfil}\hfil}} +\def \overcableright@knit#1{% + \setbox0=\hbox{#1}% + \rlap{#1}% + \hbox to \wd0{\char14\char11\hskip\stitchwd\leaders\hbox to \stitchwd{\char7\hfil}\hfil}} + +\def \cableleft#1#2{\leavevmode{\knitnogrid + \ifcase\passnum@knit + \hbox{\pf@knit #1#2} + \or + \setbox0=\hbox{\pf@knit #1#2} + \vrule width \wd0 height 0pt depth 0pt \vrule width 0pt height \ht0 depth \dp0 + \or + \hbox{\let\knitsf \cablesf@knit \let \knitsfsmall@knit \cablesfsmall@knit {\lowerff@knit \overcableleft@knit{#1}}{\raiseff@knit \undercableright@knit{#2}}} + \else + #1#2\fi}} +\def \cableright#1#2{\leavevmode{\knitnogrid + \ifcase\passnum@knit + \hbox{\pf@knit #1#2} + \or + \setbox0=\hbox{\pf@knit #1#2} \vrule width \wd0 height 0pt depth 0pt \vrule width 0pt height \ht0 depth \dp0 + \or + \hbox{\let \knitsf \cablesf@knit \let \knitsfsmall@knit \cablesfsmall@knit {\raiseff@knit \undercableleft@knit{#1}}{\lowerff@knit \overcableright@knit{#2}}} + \else + #1#2\fi}} % Knit, purl, knitboxes -\def\knit#1{\strut@knit\hbox to #1\stitchwd{\leaders\hbox{-}\hfil}} -\def\purl#1{\strut@knit\hbox to #1\stitchwd{\leaders\hbox{=}\hfil}} - -\def\Knit#1#2{\strut@knit - \setbox0 = \vbox to\stitchht{\vss\hbox{\knitsf #1}\vss\vskip\stitchdp} - \ifcase \passnum@knit - \vrule width #2\stitchwd height 0pt depth 0pt - \or - \rlap{\hbox to #2\stitchwd{\leaders\hbox{\char5}\hfil}}% - \hbox to #2\stitchwd{\leaders\hbox to \stitchwd{\char6\hfil\char6}\hfil\hskip\wd0\leaders\hbox to \stitchwd{\char6\hfil\char6}\hfil}% - \or - \hbox to #2\stitchwd{\leaders\hbox{-}\hfil \lower\stitchdp\box0\leaders\hbox{-}\hfil} - \fi} -\def\Purl#1#2{\strut@knit - \setbox0 = \vbox to\stitchht{\vss\hbox{\knitsf #1}\vss\vskip\stitchdp}% - \ifcase \passnum@knit - \purlbackground{\vrule width #2\stitchwd depth \stitchdp height \stitchht}% - \or - \rlap{\hbox to #2\stitchwd{\leaders\hbox{\char5}\hfil}}% - \hbox to #2\stitchwd{\leaders\hbox to \stitchwd{\char6\hfil\char6}\hfil\hskip\wd0\leaders\hbox to \stitchwd{\char6\hfil\char6}\hfil}% - \or - \hbox to #2\stitchwd{\leaders\hbox{=}\hfil \lower\stitchdp\box0\leaders\hbox{=}\hfil} - \fi} - -\def\knitbox#1#2{\strut@knit - \ifcase \passnum@knit - \vrule width #2\stitchwd height 0pt depth 0pt - \or - \hbox to #2\stitchwd{\char6\leaders\hbox{\char5}\hfil\char6}% - \or - \hbox to #2\stitchwd{\hfil \lower\stitchdp\vbox to\stitchht{\vss\vskip\fontvoffset@knit\hbox{\knitsf #1}\vss\vskip\stitchdp}\hfil} - \fi} -\def\purlbox#1#2{\strut@knit - \ifcase \passnum@knit - \purlbackground{\vrule width #2\stitchwd height \stitchht depth \stitchdp} - \or - \hbox to #2\stitchwd{\char6\leaders\hbox{\char5}\hfil\char6}% - \or - \hbox to #2\stitchwd{\hfil \lower\stitchdp\vbox to\stitchht{\vss\vskip\fontvoffset@knit\hbox{\knitsf #1}\vss\vskip\stitchdp}\hfil} - \fi} - -\def\purlbackground#1{\ifvmode\leavevmode\fi\setbox0=\hbox{#1}% - \dimen0 = \wd0 \advance\dimen0 2\purlextend@knit - \dimen1 = \stitchht \advance\dimen1 \purlextend@knit - \dimen2 = \stitchdp \advance\dimen2 \purlextend@knit - \ifnum \passnum@knit = 0 \kern-\purlextend@knit - \vrule width 0pt height \ht0 depth \dp0 - \smash{\vrule width \dimen0 height \dimen1 depth \dimen2}% - \kern-\purlextend@knit - \else\box0\fi} +\def \knit#1{\strut@knit\hbox to #1\stitchwd{\leaders\hbox{-}\hfil}} +\def \purl#1{\strut@knit\hbox to #1\stitchwd{\leaders\hbox{=}\hfil}} + +\def \knitboxbackground{} +\def \purlboxbackground{\purlgray } +\def \purlboxforeground{} +\def \knitboxforeground{} + +\def \Knit{\futurelet\next@knit\Knit@knit} +\def \Knit@knit{\ifx\next@knit[% + \def\nextstep@knit{\Knit@@knit}\else + \def\nextstep@knit{\Knit@@knit[0]}\fi\nextstep@knit} +\def \Knit@@knit[#1]#2#3{\strut@knit + \setbox0 = \hbox{\knitsf #2}% + \ifcase \passnum@knit + \ifx \empty \knitboxbackground + \vrule width #3\stitchwd height 0pt depth 0pt + \else + {\knitboxbackground \purlbackground{\vrule width #3\stitchwd depth \stitchdp height \stitchht}}\fi + \or + \rlap{\hbox to #3\stitchwd{\leaders\hbox{\char5}\hfil}}% + \hbox to #3\stitchwd{\leaders\hbox to \stitchwd{\char6\hfil\char6}\hskip #1\stitchwd plus 1fil \hskip\wd0\leaders\hbox to \stitchwd{\char6\hfil\char6}\hfil}% + \or + \hbox to #3\stitchwd{% + {\knitboxforeground\leaders\hbox{-}\hskip #1\stitchwd plus 1fil }% + \lower\stitchdp\vbox to\stitchht{\vss\vskip\fontvoffset@knit\hbox{\knitsf #2}\vss\vskip\stitchdp} + {\knitboxforeground\leaders\hbox{-}\hfil}}% + \or + \hbox to #3\stitchwd{\hfil} + \fi} +\def \Purl{\futurelet\next@knit\Purl@knit} +\def \Purl@knit{\ifx\next@knit[% + \def\nextstep@knit{\Purl@@knit}\else + \def\nextstep@knit{\Purl@@knit[0]}\fi\nextstep@knit} +\def \Purl@@knit[#1]#2#3{\strut@knit + \setbox0 = \hbox{\knitsf #2}% + \ifcase \passnum@knit + \ifx \empty \purlboxbackground + \vrule width #3\stitchwd height 0pt depth 0pt + \else + {\purlboxbackground \purlbackground{\vrule width #3\stitchwd depth \stitchdp height \stitchht}}\fi + \or + \rlap{\hbox to #3\stitchwd{\leaders\hbox{\char5}\hfil}}% + \hbox to #3\stitchwd{\leaders\hbox to \stitchwd{\char6\hfil\char6}\hskip #1\stitchwd plus 1fil \hskip\wd0\leaders\hbox to \stitchwd{\char6\hfil\char6}\hfil}% + \or + \hbox to #3\stitchwd{% + {\purlboxforeground\leaders\hbox{=}\hskip #1\stitchwd plus 1fil }% + \lower\stitchdp\vbox to\stitchht{\vss\vskip\fontvoffset@knit\hbox{\knitsf #2}\vss\vskip\stitchdp} + {\purlboxforeground\leaders\hbox{=}\hfil}}% + \or + \hbox to #3\stitchwd{\hfil} + \fi} + +\def \knitbox{\futurelet\next@knit\knitbox@knit} +\def \knitbox@knit{\ifx\next@knit[% + \def\nextstep@knit{\knitbox@@knit}\else + \def\nextstep@knit{\knitbox@@knit[0]}\fi\nextstep@knit} +\def \knitbox@@knit[#1]#2#3{\strut@knit + \ifcase \passnum@knit + \ifx \empty \knitboxbackground + \vrule width #3\stitchwd height 0pt depth 0pt + \else + {\knitboxbackground \purlbackground{\vrule width #3\stitchwd depth \stitchdp height \stitchht}}\fi + \or + \hbox to #3\stitchwd{\char6\leaders\hbox{\char5}\hfil\char6}% + \or + \hbox to #3\stitchwd{\hskip #1\stitchwd plus 1fil \lower\stitchdp\vbox to\stitchht{\vss\vskip\fontvoffset@knit\hbox{\knitsf #2}\vss\vskip\stitchdp}\hfil} + \or + \hbox to #3\stitchwd{\hfil} + \fi} +\def \purlbox{\futurelet\next@knit\purlbox@knit} +\def \purlbox@knit{\ifx\next@knit[% + \def\nextstep@knit{\purlbox@@knit}\else + \def\nextstep@knit{\purlbox@@knit[0]}\fi\nextstep@knit} +\def \purlbox@@knit[#1]#2#3{\strut@knit + \ifcase \passnum@knit + \ifx \empty \purlboxbackground + \vrule width #3\stitchwd height 0pt depth 0pt + \else + {\purlboxbackground \purlbackground{\vrule width #3\stitchwd depth \stitchdp height \stitchht}}\fi + \or + \hbox to #3\stitchwd{\char6\leaders\hbox{\char5}\hfil\char6}% + \or + \hbox to #3\stitchwd{\hskip #1\stitchwd plus 1fil \lower\stitchdp\vbox to\stitchht{\vss\vskip\fontvoffset@knit\hbox{\knitsf #2}\vss\vskip\stitchdp}\hfil}% + \or + \hbox to #3\stitchwd{\hfil}% + \fi} + +\def \purlbackground#1{\leavevmode\setbox0=\hbox{#1}% + \dimen0 = \wd0 \advance\dimen0 2\purlextend@knit + \dimen1 = \stitchht \advance\dimen1 \purlextend@knit + \dimen2 = \stitchdp \advance\dimen2 \purlextend@knit + \ifnum \passnum@knit = 0 \kern-\purlextend@knit + \vrule width 0pt height \ht0 depth \dp0 + \smash{\vrule width \dimen0 height \dimen1 depth \dimen2}% + \kern-\purlextend@knit + \else\box0\fi} % Row number commands -\def\numberrow#1#2#3{\ifvmode\nonumber\leavevmode\fi - \strut@knit - \count255=#1 - \hbox to \stitchwd{\hss\ifnum \passnum@knit = 2 \rmten@knit#1\fi\hss}% - \advance\count255 -1 - \loop \ifnum \count255>#3 - \tempcount@knit = \count255 - \divide\tempcount@knit #2 - \multiply \tempcount@knit #2 - \ifnum\tempcount@knit = \count255 - \hbox to \stitchwd{\hss\ifnum \passnum@knit = 2 \rmten@knit\the\count255 \fi \hss}% - \else - \kern\stitchwd - \fi - \advance\count255 -1 - \repeat - \hbox to \stitchwd{\hss\ifnum \passnum@knit = 2 \rmten@knit#3\fi \hss}% - } - -\def\rnoddonly{\def\rncore@knit{\ifnum \passnum@knit = 2 \ifodd\rownumber\rmten@knit\the\rownumber\fi\fi \rnstep@knit}} -\def\rnevenonly{\def\rncore@knit{\ifnum \passnum@knit = 2 \ifodd\rownumber\else\rmten@knit\the\rownumber\fi\fi \rnstep@knit}} -\def\rnnormal{\def\rncore@knit{\ifnum \passnum@knit = 2 \rmten@knit\the\rownumber\fi \rnstep@knit}} - -\def\rncore@knit{\ifnum \passnum@knit = 2 \rmten@knit\the\rownumber\fi \rnstep@knit} -\def\rnstep@knit{\ifnum \passnum@knit = 2 \global\advance\rownumber -\rownumberskip\relax\fi - \ifnum \passnum@knit = 0 \global\advance\rownumber -\rownumberskip\relax\fi} - -\def\rn@knit{\ifvmode\leavevmode\fi - \hbox to \rownumberwd{\hss\rncore@knit\hss}} -\def\rnleft@knit{\ifvmode\leavevmode\fi - \hbox to \rownumberwd{\hss\rnmiddle@knit\llap{\rncore@knit}\hss}} -\def\rnright@knit{\ifvmode\leavevmode\fi - \hbox to \rownumberwd{\hss\rlap{\rncore@knit}\rnmiddle@knit\hss}} -\def\rnbox@knit#1{\ifvmode\leavevmode\fi\hbox to \rownumberwd{\hss\mainpass{\rmten@knit #1}\hss}} -\def\rnboxleft@knit#1{\ifvmode\leavevmode\fi\hbox to \rownumberwd{\hss\rnmiddle@knit\llap{\mainpass{\rmten@knit #1}}\hss}} -\def\rnboxright@knit#1{\ifvmode\leavevmode\fi\hbox to \rownumberwd{\hss\rnmiddle@knit\llap{\mainpass{\rmten@knit #1}}\hss}} +\def \numberrow#1#2#3{\ifnum\passnum@knit=3 \ifvmode\vskip\stitchht\fi\else + \ifvmode\nonumber\leavevmode\fi + \strut@knit + \count255=#1 + \hbox to \stitchwd{\hss\ifnum \passnum@knit = 2 \rncolor \knitrm#1\fi\hss}% + \ifnum #1 > #3 + \advance\count255 -1 + \loop \ifnum \count255>#3 + \tempcount@knit = \count255 + \divide\tempcount@knit #2 + \multiply \tempcount@knit #2 + \ifnum\tempcount@knit = \count255 + \hbox to \stitchwd{\hss\ifnum \passnum@knit = 2 \rncolor \knitrm\the\count255 \fi \hss}% + \else + \kern\stitchwd + \fi + \advance\count255 -1 + \repeat + \else + \advance\count255 1 + \loop \ifnum \count255<#3 + \tempcount@knit = \count255 + \divide\tempcount@knit #2 + \multiply \tempcount@knit #2 + \ifnum\tempcount@knit = \count255 + \hbox to \stitchwd{\hss\ifnum \passnum@knit = 2 \rncolor \knitrm\the\count255 \fi \hss}% + \else + \kern\stitchwd + \fi + \advance\count255 1 + \repeat + \fi + \hbox to \stitchwd{\hss\ifnum \passnum@knit = 2 \rncolor \knitrm#3\fi \hss}% + \fi} + +\def \rnoddonly{\def\rncore@knit##1{\ifshowrn@knit \ifodd\rownumber\csname print##1rownumber\endcsname{\therownumber}\fi\fi}} +\def \rnevenonly{\def\rncore@knit##1{\ifshowrn@knit \ifodd\rownumber\else\csname print##1rownumber\endcsname{\therownumber}\fi\fi}} +\def \rnnormal{\def\rncore@knit##1{\ifshowrn@knit \csname print##1rownumber\endcsname{\therownumber}\fi}} + +\def \rncore@knit#1{\ifshowrn@knit \csname print#1rownumber\endcsname{\therownumber}\fi} +\def \rnstep@knit{\ifshowrn@knit + \ifnum \passnum@knit = 2 \global\advance\rownumber -\rownumberskip\relax\fi + \ifnum \passnum@knit = 0 \global\advance\rownumber -\rownumberskip\relax\fi + \else\global\showrn@knittrue\fi} + +\def \printrownumber#1{{\rncolor \knitrm #1}} +\def \printrightrownumber#1{\knitleftarrowhead{\rncolor \knitrm #1}} +\def \printleftrownumber#1{{\rncolor \knitrm #1}\knitrightarrowhead} +\def \knitrightarrowhead{{\rnarrowcolor \char125}} +\def \knitleftarrowhead{{\rnarrowcolor \char123}} + +\def \therownumber{\number\rownumber} + +\def \rn@knit{\ifnum \passnum@knit < 3 \leavevmode + \hbox to \rownumberwd{\hss\ifnum \passnum@knit = 2 \rncore@knit{}\fi\rnstep@knit\hss}\fi} +\def \rnleft@knit{\ifnum \passnum@knit < 3 \leavevmode + \setbox0 = \hbox{\ifnum \passnum@knit = 2 \rncore@knit{left}\fi\rnstep@knit} + \dimen0 = \wd0 %\advance \dimen0 -\rownumberwd + \ifchartsonly\advance \dimen0 1pt\fi + \ifdim \dimen0 > \rnleftwd@knit \global\rnleftwd@knit = \dimen0 \fi + \hbox to 0pt{\hss\box0}\fi} +\def \rnright@knit{\ifnum \passnum@knit < 3 \leavevmode + \setbox0 = \hbox{\ifnum \passnum@knit = 2 \rncore@knit{right}\fi\rnstep@knit} + \dimen0 = \wd0 %\advance \dimen0 -\rownumberwd + \ifchartsonly\advance \dimen0 1pt\fi + \ifdim \dimen0 > \rnrightwd@knit \global\rnrightwd@knit = \dimen0 \fi + \hbox to 0pt{\box0\hss}\fi} + +\def \rnbox@knit#1{\ifnum \passnum@knit < 3 \leavevmode + \hbox to \rownumberwd{\hss\ifnum \passnum@knit = 2 {\printrownumber{#1}}\fi\hss}\fi} +\def \rnboxleft@knit#1{\ifnum \passnum@knit < 3 \leavevmode + \setbox0 = \hbox{\ifnum \passnum@knit = 2 {\printleftrownumber{#1}}\fi} + \dimen0 = \wd0 %\advance \dimen0 -\rownumberwd + \ifchartsonly\advance \dimen0 1pt\fi + \ifdim \dimen0 > \rnleftwd@knit \global\rnleftwd@knit = \dimen0 \fi + \hbox to 0pt{\hss\box0}\fi} +\def \rnboxright@knit#1{\ifnum \passnum@knit < 3 \leavevmode + \setbox0 = \hbox{\ifnum \passnum@knit = 2 {\printrightrownumber{#1}}\fi} + \dimen0 = \wd0 %\advance \dimen0 -\rownumberwd + \ifchartsonly \advance \dimen0 1pt \fi + \ifdim \dimen0 > \rnrightwd@knit \global\rnrightwd@knit = \dimen0 \fi + \hbox to 0pt{\box0\hss}\fi} % The chart commands -\def\chart{\futurelet\next@knit\chart@@knit} -\def\chart@@knit{\ifx\next@knit[% - \def\nextstep@knit{\smallpage@knit\obeylines \catcode`\|=\active \chart@knit}\else - \def\nextstep@knit{\smallpage@knit\obeylines \catcode`\|=\active \chart@knit[]}\fi\nextstep@knit} +\def \chart{\futurelet\next@knit\chart@@knit} +\def \chart@@knit{\ifx\next@knit[% + \def\nextstep@knit{\smallpage@knit\obeylines \catcode`\|=\active \chart@knit}\else + \def\nextstep@knit{\smallpage@knit\obeylines \catcode`\|=\active \chart@knit[]}\fi\nextstep@knit} % Some special stuff for chartsonly mode \let\extracommands@knit\relax -\def\smallpage@knit{\ifvmode\noindent\fi\hbox\bgroup} +\def \smallpage@knit{\noindent\hbox\bgroup} \let\endsmallpage@knit\egroup % The chart command proper \long\def\chart@knit[#1]#2{% - \global \chartwidth@knit = 0pt - \ifresetrn \rownumber = 0 \else \tempcount@knit = \rownumber \fi - \setbox1=\hbox{\rmten@knit 5}% - \edef\rnmiddle@knit{\hskip \the\wd1}% - \setbox\bgbox@knit=\vbox{\def\passnum@knit{0}\hsize=\maxdimen - \pf@knit - \lineskip=0pt - \parskip=0pt - \baselineskip=0pt - \parindent=0pt - \emergencystretch = \stitchwd - \leftskip=0pt - \rightskip=0pt - \parfillskip = 0pt plus 1fil - \ifresetrn\else\let\rnstep@knit\relax\fi - \commands@knit\extracommands@knit - \global \bgshift@knit = \rownumberwd - \csname auto#1@knit\endcsname #2\par}% - \ifresetrn \rownumber = -\rownumber \else - \rownumber = \tempcount@knit \fi - \csname setbgshift#1@knit\endcsname - \ifgrid - \setbox\ggbox@knit=\vbox{\def\passnum@knit{1}\hsize=\maxdimen - \gf@knit - \lineskip=0pt - \parskip=0pt - \baselineskip=0pt - \parindent=0pt - \emergencystretch = \stitchwd - \leftskip=0pt - \rightskip=0pt - \parfillskip = 0pt plus 1fil - \commands@knit\extracommands@knit - \csname auto#1@knit\endcsname #2\par}% - \fi - \setbox\fgbox@knit=\vbox{\def\passnum@knit{2}\hsize=\maxdimen - \ff@knit - \lineskip=0pt - \parskip=0pt - \baselineskip=0pt - \parindent=0pt - \emergencystretch = \stitchwd - \leftskip=0pt - \rightskip=0pt - \parfillskip = 0pt plus 1fil - \commands@knit\extracommands@knit - \csname auto#1@knit\endcsname #2\par}% - \hbox to \chartwidth@knit{% - \rlap{\purlgray\hskip -\bgshift@knit \box\bgbox@knit}% - \ifgrid\rlap{\gridcolor\box\ggbox@knit}\fi - \box\fgbox@knit% - \hss}% - \ifchartsonly \vskip 0.5\gridwidth \fi \endsmallpage@knit - } + \global \chartwidth@knit = 0pt + \ifresetrn \rownumber = 0 \else \tempcount@knit = \rownumber \fi + \setbox\bgbox@knit=\vbox{\def\passnum@knit{0}\hsize=\maxdimen + \pf@knit + \lineskip=0pt + \parskip=0pt + \baselineskip=0pt + \parindent=0pt + \emergencystretch = \stitchwd + \leftskip=0pt + \rightskip=0pt + \parfillskip=0pt plus 1fil + \ifresetrn\else\let\rnstep@knit\relax\fi + \commands@knit\extracommands@knit + \def\nonumber{\global\showrn@knitfalse}% + \csname auto#1@knit\endcsname #2\par}% + \ifresetrn \tempcount@knit = -\rownumber \fi + \ifgrid + \setbox\ggbox@knit=\vbox{\def\passnum@knit{1}\hsize=\maxdimen + \gf@knit + \lineskip=0pt + \parskip=0pt + \baselineskip=0pt + \parindent=0pt + \emergencystretch = \stitchwd + \leftskip=0pt + \rightskip=0pt + \parfillskip=0pt plus 1fil + \commands@knit\extracommands@knit + \def\nonumber{\global\showrn@knitfalse}% + \csname auto#1@knit\endcsname #2\par}% + \fi + \rownumber = \tempcount@knit + \global \rnleftwd@knit = 0pt + \global \rnrightwd@knit = 0pt + \setbox\fgbox@knit=\vbox{\def\passnum@knit{2}\hsize=\maxdimen + \ff@knit + \lineskip=0pt + \parskip=0pt + \baselineskip=0pt + \parindent=0pt + \emergencystretch = \stitchwd + \leftskip=0pt + \rightskip=0pt + \parfillskip=0pt plus 1fil + \commands@knit\extracommands@knit + \def\nonumber{\global\showrn@knitfalse}% + \csname auto#1@knit\endcsname #2\par}% + \global\advance \chartwidth@knit \rnleftwd@knit + \global\advance \chartwidth@knit \rnrightwd@knit + \hbox to \chartwidth@knit{\hskip \rnleftwd@knit + \rlap{\purlgray \box\bgbox@knit}% + \ifgrid\rlap{\gridcolor \box\ggbox@knit}\fi + \ifchartsonly + \dimen2 = \dp \fgbox@knit \dimen3 = \ht \fgbox@knit + \advance\dimen2 0.5\gridwidth \advance\dimen3 0.5\gridwidth + \vrule width 0pt height \dimen3 depth \dimen2 + \fi + % If we are doing charts only, we want to enlarge things enough that + % we can see the grid on all sides. + % But if we aren't, we want adjacent charts to merge seamlessly + % because using separate charts is the only way to allow charts to + % break across pages. + \box\fgbox@knit% + \hss}% + \endsmallpage@knit + } % Special charts only macros -\def\chartsonly{\chartsonlytrue - \ifpdf@knit\else\errmessage{\chartsonly should only be used with pdfTeX.}\fi% - \hoffset=-1in - \voffset=-1in - \vsize = 120in - \def\smallpage{\vfil\break - \global\chartwidth@knit=0pt \setbox0 = \vbox\bgroup} - \def\endsmallpage{\egroup% - % - \ifdim\chartwidth@knit>0pt \pdfpagewidth = \chartwidth@knit \else - \pdfpagewidth=\wd0 \fi - % - \dimen0=\ht0 \advance \dimen0 by \dp0 - \pdfpageheight=\dimen0 - % - \ifdim \pdfpageheight > \vsize - {\newlinechar=`| - \message{||You need to increase \string\vsize.} - \message{What do you want such a big chart for, anyway?0||}} - \fi - % - \box0 - \vfil\break - } - \let\smallpage@knit\smallpage - \let\endsmallpage@knit\endsmallpage - \def\extracommands@knit{\hsize=\maxdimen - \leftskip = 0.5\gridwidth - \rightskip = 0.5\gridwidth - \vskip 0.5\gridwidth - } +\def \chartsonly{\chartsonlytrue + \ifpdf@knit\else\errmessage{\chartsonly should only be used with pdfTeX.}\fi% + \hoffset=-1in + \voffset=-1in + \vsize = 120in + \def\smallpage{\vfil\break + \global\chartwidth@knit=0pt + \setbox0 = \vbox\bgroup + \def\smallpage@knit{\let\endsmallpage@knit\egroup \noindent \hbox\bgroup}% + } + \def\endsmallpage{\egroup% + % + \pdfpagewidth=\wd0 + % + \dimen0=\ht0 \advance \dimen0 by \dp0 + \pdfpageheight=\dimen0 + % + \ifdim \pdfpageheight > \vsize + {\newlinechar=`| + \message{||You need to increase \string\vsize.} + \message{What do you want such a big chart for, anyway?||}} + \fi + % + \box0 + \vfil\break + } + \let\smallpage@knit\smallpage + \let\endsmallpage@knit\endsmallpage + \def\extracommands@knit{% + \leftskip = 0.5\gridwidth + \rightskip = 0.5\gridwidth + } } \let\smallpage\begingroup \let\endsmallpage\endgroup % Autonumbering macros -\def\everypar@knit{\hskip\leftgap@knit \leftgap@knit=0pt \relax} - -\def \auto@knit{\let\nonumber\relax \everypar={\everypar@knit\do@endofpar@knit{\adjustchartwidth@knit}}} -\def \autoleft@knit{\def\nonumber{\def\rncore@knit{\global\let\rncore@knit\rncore@save@knit}}\everypar={\everypar@knit\rnleft@knit\do@endofpar@knit{\adjustchartwidth@knit}}} -\def \autoright@knit{\def\nonumber{\def\rncore@knit{\global\let\rncore@knit\rncore@save@knit}}\everypar={\everypar@knit\do@endofpar@knit{\rnright@knit\adjustchartwidth@knit}}} -\def \autooddleft@knit{\def\nonumber{\def\rncore@knit{\global\let\rncore@knit\rncore@save@knit}}\everypar={\everypar@knit\ifodd \rownumber \rnleft@knit\do@endofpar@knit{\adjustchartwidth@knit}\else\do@endofpar@knit{\rnright@knit\adjustchartwidth@knit}\kern\rownumberwd\fi}} -\def\autooddright@knit{\def\nonumber{\def\rncore@knit{\global\let\rncore@knit\rncore@save@knit}}\everypar={\everypar@knit\ifodd \rownumber \do@endofpar@knit{\rnright@knit\adjustchartwidth@knit}\kern\rownumberwd\else\rnleft@knit\do@endofpar@knit{\adjustchartwidth@knit}\fi}} +\def \everypar@knit{\hskip\leftgap@knit \leftgap@knit=0pt \relax} + +\def \auto@knit{\let\nonumber\relax \everypar={\everypar@knit\do@endofpar@knit{\adjustchartwidth@knit}}} +\def \autoleft@knit{\everypar={\everypar@knit\rnleft@knit\do@endofpar@knit{\adjustchartwidth@knit}}} +\def \autoright@knit{\everypar={\everypar@knit\do@endofpar@knit{\rnright@knit\adjustchartwidth@knit}}} +\def \autooddleft@knit{\everypar={\everypar@knit + \ifodd \rownumber + \rnleft@knit\do@endofpar@knit{\adjustchartwidth@knit}% + \else %\hskip\rownumberwd + \do@endofpar@knit{\rnright@knit\adjustchartwidth@knit}\fi}} +\def \autooddright@knit{\everypar={\everypar@knit + \ifodd \rownumber %\hskip\rownumberwd + \do@endofpar@knit{\rnright@knit\adjustchartwidth@knit}% + \else\rnleft@knit\do@endofpar@knit{\adjustchartwidth@knit}\fi}} +\def \autoboth@knit{\everypar={\everypar@knit\rnleft@knit\global\advance\rownumber 1 \do@endofpar@knit{\rnright@knit\adjustchartwidth@knit}}} \let\autoevenleft@knit\autooddright@knit \let\autoevenright@knit\autooddleft@knit -\def \setbgshift@knit{\leftrn@knitfalse \global \bgshift@knit = 0pt} -\def \setbgshiftleft@knit{\leftrn@knittrue \resetrnwidth@knit \global \advance \bgshift@knit -\rownumberwd} -\def \setbgshiftright@knit{\leftrn@knitfalse\resetrnwidth@knit \global \bgshift@knit = 0pt} -\def \setbgshiftoddleft@knit{\leftrn@knittrue \resetrnwidth@knit \global \advance \bgshift@knit -\rownumberwd} -\def \setbgshiftoddright@knit{\leftrn@knittrue \resetrnwidth@knit \global \advance \bgshift@knit -\rownumberwd} -\def \setbgshiftevenleft@knit{\leftrn@knittrue \resetrnwidth@knit \global \advance \bgshift@knit -\rownumberwd} -\def\setbgshiftevenright@knit{\leftrn@knittrue \resetrnwidth@knit \global \advance \bgshift@knit -\rownumberwd} - -% Make wider boxes if we've got autonumbered rows. -% We don't do this for \chart so that the rownumbers on the left -% can be aligned to with ~. -\def\resetrnwidth@knit{% - \setbox1=\hbox{\rmten@knit 5}% - \setbox0=\hbox{\hskip \bgshift@knit \hskip -\wd1 \rmten@knit \the\rownumber}% - \edef\rownumberwd{\the\wd0} - \setbox1=\hbox{\rmten@knit \the\rownumber}% - \edef\rnmiddle@knit{\hskip\the\wd1}} - -\def\adjustchartwidth@knit{\endgraf - \ifnum \passnum@knit = 2 \setbox0=\lastbox - \setbox1=\hbox{\unhcopy0\unskip}% - \box0 - \ifdim\wd1 >\chartwidth@knit \global\chartwidth@knit=\wd1\fi\fi} +\def \adjustchartwidth@knit{\endgraf + \ifnum \passnum@knit = 2 \setbox0=\lastbox + \setbox1=\hbox{\unhcopy0\unskip}% + \box0 + \ifdim\wd1 >\chartwidth@knit \global\chartwidth@knit=\wd1\fi\fi} + +% Stitch-counting macros + +\def \adjuststitchcount{\futurelet\next@knit\adjuststitchcount@knit} +\def \adjuststitchcount@knit{\ifx\next@knit[% + \def\nextstep@knit{\adjuststitchcount@@knit}\else + \def\nextstep@knit{\adjuststitchcount@@knit[\relax]}\fi\nextstep@knit} +\def \adjuststitchcount@@knit[#1]#2{% + \leavevmode\ifnum\passnum@knit=3 \null + \ifcountingout@knit \kern #2\stitchwd \else \ifx#1\relax \kern#2\stitchwd \else \kern #1\stitchwd \fi \fi \null\fi} + +\def \stitchcountwarningbar{\ifnum \stitchcountinprev = \stitchcountout \else \vrule width \overfullrule \fi} + +\def \countstitches#1{% + \global\stitchcountinprev = \stitchcountin + \setbox0 = \hbox{\def\passnum@knit{3}\countingout@knittrue \stsout@knit #1}% + \stitchcountout = \wd0 + \dimen0 = 0.5\stitchwd \advance \stitchcountout \dimen0 + \global\divide \stitchcountout \stitchwd + \setbox1 = \hbox{\def\passnum@knit{3}\countingout@knitfalse \stsin@knit #1}% + \stitchcountin = \wd1 + \dimen1 = 0.5\stitchwd \advance \stitchcountin \dimen1 + \global\divide \stitchcountin \stitchwd + \ifnum\stitchcountinprev < -99 + \global\stitchcountinprev = \stitchcountout + \fi + } + +\def \stitchcountchart{\futurelet\next@knit\stitchcountchart@knit} +\def \stitchcountchart@knit{\ifx\next@knit[% + \def\nextstep@knit{\stitchcountchart@@knit}\else + \def\nextstep@knit{\stitchcountchart@@knit[]}\fi\nextstep@knit} +\def \stitchcountchart@@knit[#1]{\begingroup \catcode`\|=\active \def\chartrn@knit{#1}\obeylines \afterassignment \printstitchcountchart@knit \toks0 =} + +\def \printstitchcountchart@knit{\smallpage@knit\hbox{% + \ifx\relax\printleftstitchcount\else\ifx \empty \printleftstitchcount\else + \let\printstitchcount@knit\printleftstitchcount + \def\stitchcountside@knit{0}\makestitchcounts@knit \fi\fi + \chart[\chartrn@knit]{\the\toks0}% + \ifx\relax\printrightstitchcount\else\ifx \empty \printrightstitchcount\else + \let\printstitchcount@knit\printrightstitchcount + \def\stitchcountside@knit{1}\makestitchcounts@knit\fi\fi + }\endsmallpage@knit + \endgroup} + +{\obeylines +\gdef\countstitcheseachrow@knit#1^^M{% + \countstitches{#1}% + \setbox0=\hbox{\def\passnum@knit{2}\strut@knit \printstitchcount@knit\stitchcountwarningbar}% + \setbox1=\hbox{#1}% + \ifdim \wd0 > \stitchcountwidth@knit \global\stitchcountwidth@knit = \wd0 \fi + \hbox to 0pt{\ifnum\stitchcountside@knit = 0 \hss\fi + \vrule width 0pt height \ht1 depth \dp1 \smash{\box0}% + \ifnum\stitchcountside@knit = 1 \hss\fi}% + \par}} + +\def\makestitchcounts@knit{\hbox{\setbox1=\vbox{\stitchcountin = -1001 \global\stitchcountwidth@knit=0pt + \parindent=0pt + \def\passnum@knit{3} + \ff@knit + \commands@knit + \everypar={\countstitcheseachrow@knit} \offinterlineskip + \the\toks0 + }% + \ifnum\stitchcountside@knit = 0 + \hskip \stitchcountwidth@knit\rlap{\box1}% + \else + \rlap{\box1}\hskip \stitchcountwidth@knit + \fi +}} + +\def \printleftstitchcount{{\rncolor \knitrm(\the\stitchcountout\ sts) }} +\def \printrightstitchcount{} \catcode`\@=\catcountknit |