summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/tex/plain/knitting/knitting.tex
diff options
context:
space:
mode:
Diffstat (limited to 'Master/texmf-dist/tex/plain/knitting/knitting.tex')
-rw-r--r--Master/texmf-dist/tex/plain/knitting/knitting.tex567
1 files changed, 396 insertions, 171 deletions
diff --git a/Master/texmf-dist/tex/plain/knitting/knitting.tex b/Master/texmf-dist/tex/plain/knitting/knitting.tex
index 509d291a7ca..17b6a0c242e 100644
--- a/Master/texmf-dist/tex/plain/knitting/knitting.tex
+++ b/Master/texmf-dist/tex/plain/knitting/knitting.tex
@@ -20,9 +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
+% Version: 3
-% Date: 2010/08/29
+% Date: 2019/04/03
%\pdfmapfile{+knitfont.map}
@@ -31,24 +31,37 @@
\catcode`@=11
\fi
+%
+% Boolean variables
+%
+
\newif \ifchartsonly \chartsonlyfalse
\newif \ifgrid
+\newif \ifknitsymbol
\newif \ifresetrn \resetrntrue
\newif \ifleftrn@knit
\newif \ifshowrn@knit \showrn@knittrue
\newif \ifpdf@knit
\newif \ifcountingout@knit
+\newif \ifCountStsThisRow@knit \CountStsThisRow@knittrue
\pdf@knittrue
\ifx \pdfoutput \undefined \pdf@knitfalse \fi
\ifx \pdfoutput \relax \pdf@knitfalse \fi
-% This defines pdfTeX-friendly or dvips-friendly grays.
+%
+% Color commands
+%
+
+% This defines pdfTeX-friendly or dvips-friendly color.
% Change them to use your driver's syntax if you insist on
% not using pdfTeX.
-% For black lines, just say \let\knitlinecolor \relax
+% For black lines, just say \let \knitlinecolor \relax
+% If grayscale really just isn't working at all,
+% go down and redefine \changeknitsize
\ifpdf@knit
\ifnum \pdftexversion < 140
+ \def\forecolor {\pdfliteral {0 g 0 G}\aftergroup\makenormalcolorknit}
\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}
@@ -56,6 +69,7 @@
\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\forecolor {\pdfcolorstack 0 push {0 g 0 G}\aftergroup\makenormalcolorknit}
\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}
@@ -64,6 +78,7 @@
\def\makenormalcolorknit{\pdfcolorstack 0 pop}
\fi
\else
+ \def\forecolor {\special{color push gray 0}\aftergroup\makenormalcolorknit}
\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}
@@ -71,40 +86,11 @@
\def\rnarrowcolor{\special{color push rgb 0.35 0 0}\aftergroup\makenormalcolorknit}
\def\makenormalcolorknit{\special{color pop}}
\fi
+\def\knitoverlinecolor{\knitlinecolor}
-% If grayscale really just isn't working at all,
-% go down and redefine \changeknitsize
-
-\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
-\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}
+%
+% Plain TeX-only material (change knit size)
+%
\def \changeknitsize#1{\fontsize@knit = #1
\font\knitsf = cmss10 at \fontsize@knit
@@ -118,23 +104,35 @@
\font\gff@knit = knitgn at \fontsize@knit
\font\wff@knit = knitwn at \fontsize@knit
\font\nff@knit = knitnn at \fontsize@knit
+ \font\mff@knit = knitmn 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\mgf@knit = knitmg 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\mpf@knit = knitmp at \fontsize@knit
+ %
+ \font\raisen@knit = knitnr at \fontsize@knit
+ \font\lowern@knit = knitnl at \fontsize@knit
+ \font\raisem@knit = knitmr at \fontsize@knit
+ \font\lowerm@knit = knitml at \fontsize@knit
+ \let \raiseg@knit \raisem@knit
+ \let \raisew@knit \raisem@knit
+ \let \lowerg@knit \lowerm@knit
+ \let \lowerw@knit \lowerm@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
- %
+ \let \wstsout@knit \gstsout@knit
+ \let \wstsin@knit \gstsin@knit
+ \let \mstsout@knit \nstsout@knit
+ \let \mstsin@knit \nstsin@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
@@ -144,12 +142,71 @@
}
\let \ngf@knit \nullfont
+
+%
+% Dimensions
+%
+
+\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
+\newcount \stitchcountin
+\newcount \stitchcountinprev
+\newcount \stitchcountout
+\newcount \shortrowstsin@knit
+\newcount \shortrowstsout@knit
+
+\def \passnum@knit{2}
+\def \stitchwd{\fontdimen6\ff@knit}
+\def \stitchwd@count@knit{\fontdimen6\stsout@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}
+% The rest of them aren't \the\font because I want them to still work outside of a chart
+
+%
+% Fonts
+%
+
\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 \raiseff@knit{\csname raise\series@knit @knit\endcsname}
+\def \lowerff@knit{\csname lower\series@knit @knit\endcsname}
\def \stsout@knit{\csname \series@knit stsout@knit\endcsname}
\def \stsin@knit{\csname \series@knit stsin@knit\endcsname}
+\def \knitnogrid{\gridfalse\knitsymboltrue \def\series@knit{n}}
+\def \knitgrid{\gridtrue \knitsymbolfalse\def\series@knit{g}}
+\def \knitwide{\gridtrue \knitsymbolfalse\def\series@knit{w}}
+\def \knitmixed{\gridtrue \knitsymboltrue \def\series@knit{m}}
+
+\changeknitsize{10pt}
+
+\knitgrid
+
+%
+% Single-pass commands
+%
+
\def \purlpass{\futurelet\next@knit\purlpass@@knit}
\def \gridpass{\futurelet\next@knit\gridpass@@knit}
\def \mainpass{\futurelet\next@knit\mainpass@@knit}
@@ -158,52 +215,55 @@
\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 \def\nextstep@@knit{#2}\else \def\nextstep@@knit{#1}\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
+%
+% Text knit
+%
-\def \textknit#1{\leavevmode\hbox{\ff@knit
+\def \textknit#1{\leavevmode\hbox{\let\|\bar@knit\let\!\barthin@knit
+ \ff@knit \forecolor
\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}}
+%
% Special symbols
+%
-\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\narrowincreasestartnumber{1}
+\def\narrowdecreaseendnumber{1}
+
+\def \narrowdecrease#1{\genbobble@knit{#1}{1}{-\narrowincraise@knit}\adjuststitchcount[#1]{\narrowdecreaseendnumber}\adjuststitchcount[-1]{-1}}
+\def \pnarrowdecrease#1{\genbobble@knit{#1}{2}{-\narrowincraise@knit}\adjuststitchcount[#1]{\narrowdecreaseendnumber}\adjuststitchcount[-1]{-1}}
+\def \narrowincrease#1{\genbobble@knit{#1}{3}{\narrowincraise@knit}\adjuststitchcount[\narrowincreasestartnumber]{#1}\adjuststitchcount[-1]{-1}}
+\def \pnarrowincrease#1{\genbobble@knit{#1}{4}{\narrowincraise@knit}\adjuststitchcount[\narrowincreasestartnumber]{#1}\adjuststitchcount[-1]{-1}}
\def \bobble#1{\genbobble@knit{#1}{0}{0pt}}
-\def\genbobble@knit#1#2#3{\char#2 \ifnum \passnum@knit = 2
+\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}
+ \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}
+ \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
@@ -220,9 +280,9 @@
\let \! \barthin@knit
\let \| \bar@knit
\let | \bar@knit
- \let \_ \horizline@knit
+ \let \_ \horizlinenarrow@knit
\let \= \horizlinewide@knit
- \let \- \horizlinenarrow@knit
+ \let \- \horizline@knit
\let\overline\overline@knit
\let\underline\underline@knit
\let\rn\rn@knit
@@ -245,23 +305,27 @@
% Drawing lines on the chart
-\def \horizline@knit{\ifnum\passnum@knit<3 \ifvmode\nonumber\leavevmode\fi \dimen0 = \stitchwd \advance \dimen0 \knitlinewd
+\def \horizlinenarrow@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
+ \hskip -0.5\knitlinewd\smash{{\knitoverlinecolor \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}}
+ \smash{{\knitoverlinecolor \vrule width \dimen0 height 0.5\knitlinewd depth 0.5\knitlinewd}}
\else\hskip \dimen0 \fi\fi}
+\def \horizline@knit{\futurelet\next@knit\horizline@@knit}
+\def \horizline@@knit{\ifx\next@knit*%
+ \def\nextstep@knit{\horizlinestar@knit}\else
+ \def\nextstep@knit{\horizlinenostar@knit}\fi\nextstep@knit}
+
+\def \horizlinestar@knit#1{\nonumber\nostitchcount\overlinestar@knit{\hskip#1\stitchwd}}
+\def \horizlinenostar@knit#1{\nonumber\nostitchcount\overlinenostar@knit{\hskip#1\stitchwd}}
+
\def \bar@knit{\ifnum\passnum@knit < 3 \leavevmode
\ifgrid
\ifnum \passnum@knit = 0
- \hbox{\knitlinecolor \vrule width \knitlinewd depth \stitchdp height \stitchht}%
+ \hbox{{\knitlinecolor \vrule width \knitlinewd depth \stitchdp height \stitchht}}%
\else
\kern \knitlinewd
\fi
@@ -293,14 +357,14 @@
\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}}}%
+ {\rlap{\raise\ht0\hbox{\hskip -0.5\gridwidth\knitoverlinecolor \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}}}%
+ {\rlap{\raise\ht0\hbox{\hskip -0.5\gridwidth\knitoverlinecolor \vrule width \dimen1 height \knitlinewd depth 0pt}}}%
\else
\dimen0=\ht0 \advance \dimen0 \knitlinewd
\vrule width 0pt height \dimen0 depth 0pt
@@ -311,7 +375,7 @@
\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}}}%
+ \smash{\rlap{\raise\ht0\hbox{\hskip -0.5\gridwidth\knitoverlinecolor \vrule width \dimen1 height 0.5\knitlinewd depth 0.5\knitlinewd}}}%
\fi
#2}}
@@ -325,14 +389,14 @@
\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}}%
+ \rlap{\raise-\dp0\hbox{\hskip -0.5\gridwidth\knitoverlinecolor \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}}%
+ \rlap{\raise-\dp0\hbox{\hskip -0.5\gridwidth\knitoverlinecolor \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
@@ -342,46 +406,55 @@
\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}}}%
+ \smash{\rlap{\raise-\dp0\hbox{\hskip -0.5\gridwidth\knitoverlinecolor \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{\leavevmode{\knitnogrid
+% \ifnum \passnum@knit = 3 \leavevmode \fi causes problems
+% due to the weird things we do automatically at the start of a paragraph
+\def\doifcounting@knit#1{}
+
+\def\cablebackground#1{\doifcounting@knit{\leavevmode}%
+ \ifnum \passnum@knit = 0 \leavevmode \hbox to \stitchwd{#1\hss {\raiseff@knit \def\passnum@knit{2}\forecolor#1}}\else \char255 \fi}
+\def\cableforeground#1{\doifcounting@knit{\leavevmode}%
+ \ifnum \passnum@knit = 0 \leavevmode \hbox to \stitchwd{#1\hss {\lowerff@knit \def\passnum@knit{2}\forecolor#1}}\else \char254 \fi}
+
+\def\orphancablewarning@knit{\message{Package knit warning: Orphaned half cable on input line \the\inputlineno.}}
+
+\def \cableleft#1#2{\leavevmode{\ifgrid\knitmixed\fi
\ifcase\passnum@knit
- \hbox{\pf@knit #1#2}
+ \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
+ \setbox0=\hbox{\pf@knit #1#2}%
+ \hbox to \wd0{\char6\leaders\hbox{\char5}\hfil\char6}%
\or
- \hbox{\let\knitsf \cablesf@knit \let \knitsfsmall@knit \cablesfsmall@knit {\lowerff@knit \overcableleft@knit{#1}}{\raiseff@knit \undercableright@knit{#2}}}
+ \hbox{\let\knitsf \cablesf@knit \let \knitsfsmall@knit \cablesfsmall@knit %
+ \setbox1=\hbox{#1}%
+ \setbox2=\hbox{#2}%
+ \ifdim \wd1 = 0pt \orphancablewarning@knit \fi
+ \ifdim \wd2 = 0pt \orphancablewarning@knit \fi
+ {\lowerff@knit \rlap{#1}\hbox to \wd1{\leaders\hbox to \stitchwd{\hfil\char15}\hfil\ifdim\wd1>0pt \hskip\stitchwd\char10\fi}%
+ \ifdim\wd1>0pt \ifdim \wd2>0pt \char13\fi \fi }%
+ {\raiseff@knit \rlap{#2}\hbox to \wd2{\ifdim\wd2>0pt \char12\hskip\stitchwd\fi\leaders\hbox to \stitchwd{\char8\hfil}\hfil}}}%
\else
#1#2\fi}}
-\def \cableright#1#2{\leavevmode{\knitnogrid
+\def \cableright#1#2{\leavevmode{\ifgrid\knitmixed\fi
\ifcase\passnum@knit
- \hbox{\pf@knit #1#2}
+ \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
+ \setbox0=\hbox{\pf@knit #1#2}%
+ \hbox to \wd0{\char6\leaders\hbox{\char5}\hfil\char6}%
\or
- \hbox{\let \knitsf \cablesf@knit \let \knitsfsmall@knit \cablesfsmall@knit {\raiseff@knit \undercableleft@knit{#1}}{\lowerff@knit \overcableright@knit{#2}}}
+ \hbox{\let\knitsf \cablesf@knit \let \knitsfsmall@knit \cablesfsmall@knit %
+ \setbox1=\hbox{#1}%
+ \setbox2=\hbox{#2}%
+ \ifdim \wd1 = 0pt \orphancablewarning@knit \fi
+ \ifdim \wd2 = 0pt \orphancablewarning@knit \fi
+ {\raiseff@knit \rlap{#1}\hbox to \wd1{\leaders\hbox to \stitchwd{\hfil\char16}\hfil\ifdim\wd1>0pt \hskip\stitchwd\char9\fi}%
+ \ifdim\wd1>0pt \ifdim \wd2>0pt \char14\fi \fi }%
+ {\lowerff@knit \rlap{#2}\hbox to \wd2{\ifdim\wd2>0pt \char11\hskip\stitchwd \fi\leaders\hbox to \stitchwd{\char7\hfil}\hfil}}}%
\else
#1#2\fi}}
@@ -407,15 +480,27 @@
\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}%
+ \ifknitsymbol
+ \hbox to #3\stitchwd{\char6\leaders\hbox{\char5}\hfil\char6}%
+ \else
+ \hbox{\hbox to #3\stitchwd{%
+ \leaders \hbox to \stitchwd{\char6\hfil\char6}\hfil
+ \hskip \wd0
+ \leaders \hbox to \stitchwd{\char6\hfil\char6}\hfil}%
+ \hskip -#3\stitchwd
+ \hbox to #3\stitchwd{\char6\leaders\hbox{\char5}\hfil\char6}}%
+ \fi
\or
\hbox to #3\stitchwd{%
- {\knitboxforeground\leaders\hbox{-}\hskip #1\stitchwd plus 1fil }%
+ {\knitboxforeground\leaders\hbox{-}%
+ \ifnum #1>0 \hskip #1\stitchwd plus 1fil minus #1\stitchwd \else\hfil\fi
+ }%
\lower\stitchdp\vbox to\stitchht{\vss\vskip\fontvoffset@knit\hbox{\knitsf #2}\vss\vskip\stitchdp}
- {\knitboxforeground\leaders\hbox{-}\hfil}}%
+ {\knitboxforeground \count255 = -#1 \leaders\hbox{-}%
+ \ifnum #1<0 \hskip \count255\stitchwd plus 1fil minus \count255\stitchwd \else\hfil\fi
+ }}%
\or
- \hbox to #3\stitchwd{\hfil}
+ \hbox to \Knitstitchcount{#2}{#3}\stitchwd{\hfil}
\fi}
\def \Purl{\futurelet\next@knit\Purl@knit}
\def \Purl@knit{\ifx\next@knit[%
@@ -429,17 +514,34 @@
\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}%
+ \ifknitsymbol
+ \hbox to #3\stitchwd{\char6\leaders\hbox{\char5}\hfil\char6}%
+ \else
+ \hbox{\hbox to #3\stitchwd{%
+ \leaders \hbox to \stitchwd{\char6\hfil\char6}\hfil
+ \hskip \wd0
+ \leaders \hbox to \stitchwd{\char6\hfil\char6}\hfil}%
+ \hskip -#3\stitchwd
+ \hbox to #3\stitchwd{\char6\leaders\hbox{\char5}\hfil\char6}}%
+ \fi
\or
\hbox to #3\stitchwd{%
- {\purlboxforeground\leaders\hbox{=}\hskip #1\stitchwd plus 1fil }%
+ {\purlboxforeground\leaders\hbox{=}%
+ \ifnum #1>0 \hskip #1\stitchwd plus 1fil minus #1\stitchwd \else\hfil\fi
+ }%
\lower\stitchdp\vbox to\stitchht{\vss\vskip\fontvoffset@knit\hbox{\knitsf #2}\vss\vskip\stitchdp}
- {\purlboxforeground\leaders\hbox{=}\hfil}}%
+ {\purlboxforeground \count255 = -#1 \leaders\hbox{=}%
+ \ifnum #1<0 \hskip \count255\stitchwd plus 1fil minus \count255\stitchwd \else\hfil\fi
+ }}%
\or
- \hbox to #3\stitchwd{\hfil}
+ \hbox to \Purlstitchcount{#2}{#3}\stitchwd{\hfil}
\fi}
+\def \Knitstitchcount#1#2{#2}
+\def \Purlstitchcount#1#2{#2}
+\def \knitboxstitchcount#1#2{#2}
+\def \purlboxstitchcount#1#2{#2}
+
\def \knitbox{\futurelet\next@knit\knitbox@knit}
\def \knitbox@knit{\ifx\next@knit[%
\def\nextstep@knit{\knitbox@@knit}\else
@@ -453,9 +555,14 @@
\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}
+ \lower\stitchdp\vbox to\stitchht{%
+ \vss\vskip\fontvoffset@knit
+ \hbox to #3\stitchwd{\ifnum #1>0 \hskip #1\stitchwd plus 1fil minus #1\stitchwd \else\hfil\fi
+ {\knitsf #2}%
+ \count255 = -#1 \ifnum #1<0 \hskip \count255\stitchwd plus 1fil minus \count255\stitchwd \else\hfil\fi}%
+ \vss\vskip\stitchdp}%
\or
- \hbox to #3\stitchwd{\hfil}
+ \hbox to \knitboxstitchcount{#2}{#3}\stitchwd{\hfil}
\fi}
\def \purlbox{\futurelet\next@knit\purlbox@knit}
\def \purlbox@knit{\ifx\next@knit[%
@@ -470,21 +577,43 @@
\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}%
+ \lower\stitchdp\vbox to\stitchht{%
+ \vss\vskip\fontvoffset@knit
+ \hbox to #3\stitchwd{\ifnum #1>0 \hskip #1\stitchwd plus 1fil minus #1\stitchwd \else\hfil\fi
+ {\knitsf #2}%
+ \count255 = -#1 \ifnum #1<0 \hskip \count255\stitchwd plus 1fil minus \count255\stitchwd \else\hfil\fi}%
+ \vss\vskip\stitchdp}%
\or
- \hbox to #3\stitchwd{\hfil}%
+ \hbox to \purlboxstitchcount{#2}{#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
+\def \purlbackground#1{%
+ \ifnum\passnum@knit=0
+ \setbox0=\hbox{#1}%
+ \dimen0 = \wd0 \advance\dimen0 2\purlextend@knit
+ \dimen1 = \stitchht \advance\dimen1 \purlextend@knit
+ \dimen2 = \stitchdp \advance\dimen2 \purlextend@knit
\vrule width 0pt height \ht0 depth \dp0
\smash{\vrule width \dimen0 height \dimen1 depth \dimen2}%
\kern-\purlextend@knit
- \else\box0\fi}
-
+ \else#1\fi}
+
+\def \widesymbol{\futurelet\next@knit\widesymbol@knit}
+\def \widesymbol@knit{\ifx\next@knit[%
+ \def\nextstep@knit{\widesymbol@@knit}\else
+ \def\nextstep@knit{\widesymbol@@knit[0]}\fi\nextstep@knit}
+\def \widesymbol@@knit[#1]#2#3{\strut@knit
+ \ifcase \passnum@knit
+ \knitbox{}{#3}\or
+ \knitbox{}{#3}\or
+ \hbox to #3\stitchwd{\ifnum #1>0 \hskip #1\stitchwd plus 1fil minus #1\stitchwd \else\hfil\fi
+ #2%
+ \count255 = -#1 \ifnum #1<0 \hskip \count255\stitchwd plus 1fil minus \count255\stitchwd \else\hfil\fi}\else
+ \widesymbolspacer{#2}{#3}\relax\fi}
+
+\def\widesymbolspacer#1#2{#1}
+
+
% Row number commands
\def \numberrow#1#2#3{\ifnum\passnum@knit=3 \ifvmode\vskip\stitchht\fi\else
@@ -522,15 +651,15 @@
\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 \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}
+ \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}}
@@ -569,13 +698,17 @@
\ifchartsonly \advance \dimen0 1pt \fi
\ifdim \dimen0 > \rnrightwd@knit \global\rnrightwd@knit = \dimen0 \fi
\hbox to 0pt{\box0\hss}\fi}
+
+% Title for the chart
+\def\charttitle@knit{}
+\def\titlechart#1{\def\charttitle@knit{#1}}
% 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\nextstep@knit{\smallpage@knit\obeylines \catcode`\|=\active \catcode`\# = 12 \chart@knit}\else
+ \def\nextstep@knit{\smallpage@knit\obeylines \catcode`\|=\active \catcode`\# = 12 \chart@knit[]}\fi\nextstep@knit}
% Some special stuff for chartsonly mode
\let\extracommands@knit\relax
@@ -616,7 +749,7 @@
\def\nonumber{\global\showrn@knitfalse}%
\csname auto#1@knit\endcsname #2\par}%
\fi
- \rownumber = \tempcount@knit
+ \rownumber = \tempcount@knit %
\global \rnleftwd@knit = 0pt
\global \rnrightwd@knit = 0pt
\setbox\fgbox@knit=\vbox{\def\passnum@knit{2}\hsize=\maxdimen
@@ -634,9 +767,11 @@
\csname auto#1@knit\endcsname #2\par}%
\global\advance \chartwidth@knit \rnleftwd@knit
\global\advance \chartwidth@knit \rnrightwd@knit
+ \ifchartsonly \global\advance \chartwidth@knit 0.5\gridwidth \fi
\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
@@ -647,37 +782,73 @@
% 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%
+ \vbox{%
+ \ifx\empty\charttitle@knit\empty\else
+ \hbox to \chartwidth@knit{\hskip \rnleftwd@knit\printcharttitle{\charttitle@knit}\hskip \rnrightwd@knit}\fi
+ \box\fgbox@knit}%
\hss}%
\endsmallpage@knit
+ \gdef\charttitle@knit{}
}
+\def\printcharttitle#1{\hfil\vrule depth 3pt height 9pt width 0pt \relax #1\hfil}
+
% Special charts only macros
+\newif \ifchartsonlysideways \chartsonlysidewaysfalse
+
\def \chartsonly{\chartsonlytrue
- \ifpdf@knit\else\errmessage{\chartsonly should only be used with pdfTeX.}\fi%
+ \ifpdf@knit\else\errmessage{Package knit error: \chartsonly should only be used with pdfTeX.}\fi%
\hoffset=-1in
\voffset=-1in
\vsize = 120in
+ \topskip = 0pt % Causes problems in one-row charts if this isn't present
\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
+ \ifchartsonlysideways
+ %
+ \pdfpageheight=\wd0
+ %
+ \dimen0=\ht0 \advance \dimen0 by \dp0
+ \pdfpagewidth=\dimen0
+ %
+ \ifdim \pdfpagewidth > \vsize
+ %{\newlinechar=`|
+ %\message{||The chart ending on line \the\inputlineno\space is too big.}
+ %\message{|Compensate by increasing \string\vsize\space or by breaking the chart into pieces.}%
+ %\message{|What do you want such a big chart for, anyway?||}}%
+ \fi
+ %
+ % Commands borrowed from samplepdf.tex
+ \setbox1=\hbox{\copy0}%
+ \wd1 = 0pt
+ \ht1 = 0pt
+ \dp1 = 0pt
+ \vtop{\vskip\wd0
+ \leftline{\hskip-2pt\hskip\ht0\hskip\dp0%
+ \pdfliteral{q 0 1 -1 0 0 0 cm}%
+ \box1
+ \pdfliteral{Q}}}
+ \else
+ %
+ \pdfpagewidth=\wd0
+ %
+ \dimen0=\ht0 \advance \dimen0 by \dp0
+ \pdfpageheight=\dimen0
+ %
+ \ifdim \pdfpageheight > \vsize
+ %{\newlinechar=`|
+ %\message{||The chart ending on line \the\inputlineno\space is too big.}
+ %\message{Compensate by increasing \string\vsize\space or by breaking the chart into pieces.}%
+ %\message{What do you want such a big chart for, anyway?||}}%
+ \fi
+ %
+ \box0
+ \fi
\vfil\break
}
\let\smallpage@knit\smallpage
@@ -685,6 +856,7 @@
\def\extracommands@knit{%
\leftskip = 0.5\gridwidth
\rightskip = 0.5\gridwidth
+ %\vskip \gridwidth
}
}
\let\smallpage\begingroup
@@ -698,13 +870,13 @@
\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}}
+ \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}%
+ \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
@@ -726,28 +898,30 @@
\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 \stitchcountwarningbar{%
+ \ifnum \stitchcountinprev = \stitchcountout \else
+ \ifnum \stitchcountinprev > -99
+ \vrule width \overfullrule
+ \message{Package knit warning: Stitch count mismatch on input line \the\inputlineno.}
+ \fi \fi}
\def \countstitches#1{%
\global\stitchcountinprev = \stitchcountin
- \setbox0 = \hbox{\def\passnum@knit{3}\countingout@knittrue \stsout@knit #1}%
+ \setbox0 = \hbox{\def\passnum@knit{3}\countingout@knittrue \let\stitchwd\stitchwd@count@knit \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}%
+ \dimen0 = 0.5\stitchwd@count@knit \advance \stitchcountout \dimen0
+ \global\divide \stitchcountout \stitchwd@count@knit
+ \setbox1 = \hbox{\def\passnum@knit{3}\countingout@knitfalse \let\stitchwd\stitchwd@count@knit \stsin@knit #1}%
\stitchcountin = \wd1
- \dimen1 = 0.5\stitchwd \advance \stitchcountin \dimen1
- \global\divide \stitchcountin \stitchwd
- \ifnum\stitchcountinprev < -99
- \global\stitchcountinprev = \stitchcountout
- \fi
+ \dimen1 = 0.5\stitchwd@count@knit \advance \stitchcountin \dimen1
+ \global\divide \stitchcountin \stitchwd@count@knit
}
\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 \stitchcountchart@@knit[#1]{\begingroup \catcode`\|=\active \catcode`\# = 12 \def\chartrn@knit{#1}\obeylines \afterassignment \printstitchcountchart@knit \toks0 =}
\def \printstitchcountchart@knit{\smallpage@knit\hbox{%
\ifx\relax\printleftstitchcount\else\ifx \empty \printleftstitchcount\else
@@ -762,18 +936,63 @@
{\obeylines
\gdef\countstitcheseachrow@knit#1^^M{%
+ \setbox1 = \hbox{#1}%
+ \ifCountStsThisRow@knit%
\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
+ \setstitchcountlabel@knit%
+ \else%
+ \global\CountStsThisRow@knittrue%
+ \setbox0=\hbox{}%
+ \fi%
+ \printstitchcountlabel@knit}
+\gdef\shortrows@countstitcheseachrow@knit#1^^M{\countstitches{#1} %
+ \ifx \relax \shortrowrowcount@knit %
+ \global\advance \shortrowstsin@knit \stitchcountin \global\advance \shortrowstsout@knit \stitchcountout %
+ \global\let \shortrowrowcount@knit 2
+ % For some reason, we MUST NOT have a % after the 2.
+ \else%
+ \global\advance \shortrowstsin@knit -\stitchcountout \global\advance \shortrowstsout@knit -\stitchcountin %
+ \global\let \shortrowrowcount@knit \relax
+ \fi%
+ \global\stitchcountin = \stitchcountinprev %
+ }
+\gdef\shortrows@printstitchcountlabel@knit#1^^M{\setbox1 = \hbox{#1}\printstitchcountlabel@knit\setbox0=\hbox{}}
+\gdef\shortrows#1{%
+ \ifnum \passnum@knit = 3
+ \shortrowstsin@knit = 0 \shortrowstsout@knit = 0 \global\let \shortrowrowcount@knit \relax %
+ \setbox2 = \vbox{\everypar = {\shortrows@countstitcheseachrow@knit}%
+ #1
+ }%
+ \ifx \shortrowrowcount@knit \relax
+ \advance \stitchcountin \shortrowstsin@knit \advance \stitchcountin -\shortrowstsout@knit %
+ \else
+ \stitchcountinprev = \stitchcountin \stitchcountin = \shortrowstsin@knit \stitchcountout = \shortrowstsout@knit %
+ \fi %
+ \setstitchcountlabel@knit%
+ \vbox{\everypar = {\shortrows@printstitchcountlabel@knit}%
+ \ifx \shortrowrowcount@knit \relax \setbox0=\hbox{} \else
+ \ifCountStsThisRow@knit\else \setbox0=\hbox{} \global\CountStsThisRow@knittrue \fi \fi
+ #1
+ }%
+ \else%
+ #1
+ \fi%
+ \par}
+ }
+
+\def\setstitchcountlabel@knit{\setbox0=\hbox{\def\passnum@knit{2}\strut@knit \printstitchcount@knit\stitchcountwarningbar}}
+\def\printstitchcountlabel@knit{\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}}
+ \par}
-\def\makestitchcounts@knit{\hbox{\setbox1=\vbox{\stitchcountin = -1001 \global\stitchcountwidth@knit=0pt
+\def\makestitchcounts@knit{\hbox{\setbox1=\vbox{\stitchcountin = -1001
+ \global\stitchcountwidth@knit=0pt
+ \global\CountStsThisRow@knittrue
\parindent=0pt
\def\passnum@knit{3}
+ \def\doifcounting@knit##1{##1}
\ff@knit
\commands@knit
\everypar={\countstitcheseachrow@knit} \offinterlineskip
@@ -786,8 +1005,14 @@
\fi
}}
+\def\nostitchcount{\ifnum \passnum@knit = 3 \global \CountStsThisRow@knitfalse \fi}
+
+\def \knitdebug{\def \printleftstitchcount{{\rncolor \knitrm(\the\stitchcountout\ out, \the\stitchcountin\ in) }}}
+
\def \printleftstitchcount{{\rncolor \knitrm(\the\stitchcountout\ sts) }}
\def \printrightstitchcount{}
+\def \knitdebugging{\def \printleftstitchcount{{\rncolor \knitrm(\the\stitchcountout\ out/\the\stitchcountin\ in) }}}
+
\catcode`\@=\catcountknit