summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/tex
diff options
context:
space:
mode:
authorKarl Berry <karl@freefriends.org>2010-09-07 00:38:17 +0000
committerKarl Berry <karl@freefriends.org>2010-09-07 00:38:17 +0000
commit50f3494b12ada52be9b302aa865453dcbbf5119c (patch)
tree3d1d31b4d3e4f92b3ac8a61e11730e789526ec3e /Master/texmf-dist/tex
parenta79aae44637de232d489b3396e917453d37746cd (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.sty1054
-rw-r--r--Master/texmf-dist/tex/latex/knitting/uknit.fd16
-rw-r--r--Master/texmf-dist/tex/plain/knitting/knitting.tex1121
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