diff options
author | Norbert Preining <norbert@preining.info> | 2019-09-02 13:46:59 +0900 |
---|---|---|
committer | Norbert Preining <norbert@preining.info> | 2019-09-02 13:46:59 +0900 |
commit | e0c6872cf40896c7be36b11dcc744620f10adf1d (patch) | |
tree | 60335e10d2f4354b0674ec22d7b53f0f8abee672 /fonts/knitting/tex/latex |
Initial commit
Diffstat (limited to 'fonts/knitting/tex/latex')
-rw-r--r-- | fonts/knitting/tex/latex/knitting.sty | 899 | ||||
-rw-r--r-- | fonts/knitting/tex/latex/uknit.fd | 30 |
2 files changed, 929 insertions, 0 deletions
diff --git a/fonts/knitting/tex/latex/knitting.sty b/fonts/knitting/tex/latex/knitting.sty new file mode 100644 index 0000000000..2a73d0224c --- /dev/null +++ b/fonts/knitting/tex/latex/knitting.sty @@ -0,0 +1,899 @@ +% knitting.sty +% +% Provides commands useful for writing knitting patterns in LaTeX, +% including commands to typeset knit charts, and to switch to larger +% pages mid-document. +% +% author: Ariel Barton +% +% Copyright Ariel Barton, 2010 +% +% This work may be distributed and/or modified under the +% conditions of the LaTeX Project Public License, either +% version 1.3 of this license or (at your option) any +% later version. +% The latest version of the license is in +% http://www.latex-project.org/lppl.txt +% and version 1.3 or later is part of all distributions of +% LaTeX version 2003/06/01 or later. +% +% This work has the LPPL maintenance status "author-maintained". +% +% 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: 3 + +\ProvidesPackage{knitting}[2019/04/03] + +%\pdfmapfile{+knitfont.map} + +% +% 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 + +% +% Color commands +% + +\RequirePackage{color} + +\definecolor{purlgray}{gray}{0.65} +\definecolor{knitlinecolor}{rgb}{0.7,0,0} +\definecolor{gridcolor}{gray}{0.3} +\definecolor{forecolor}{gray}{0} +\definecolor{rncolor}{rgb}{0.6,0,0} +\definecolor{rnarrowcolor}{rgb}{0.45,0,0} + +% +% LaTeX-only material (options and fullpages) +% + +\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 +% 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 next 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} + +% +% Dimensions +% + +\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{tempcount@knit} +\newcounter{rownumberskip} \c@rownumberskip = 1 +\newcounter{stitchcountin} +\newcounter{stitchcountinprev} +\newcounter{stitchcountout} +\newcounter{shortrowstsin@knit} +\newcounter{shortrowstsout@knit} + +\newcommand \passnum@knit{2} +\newcommand \stitchwd{\fontdimen6\csname U/knit/\series@knit/n/\f@size\endcsname} +\newcommand \stitchwd@count@knit{\fontdimen6\csname U/knit/\series@knit/out/\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 + +% +% Fonts +% + +\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} +\newcommand \raiseff@knit{\fontencoding{U}\fontfamily{knit}\fontseries{\series@knit}\fontshape{r}\selectfont} +\newcommand \lowerff@knit{\fontencoding{U}\fontfamily{knit}\fontseries{\series@knit}\fontshape{l}\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} + +% 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 \knitnogrid{\gridfalse\knitsymboltrue \def\series@knit{n}{\ff@knit}} +\newcommand \knitgrid{\gridtrue \knitsymbolfalse\def\series@knit{g}{\ff@knit}} +\newcommand \knitwide{\gridtrue \knitsymbolfalse\def\series@knit{w}{\ff@knit}} +\newcommand \knitmixed{\gridtrue \knitsymboltrue \def\series@knit{m}{\ff@knit}} + +\knitgrid + +% +% Single-pass commands +% + +\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} + +% +% Text knit +% + +\newcommand \textknit[1]{\mbox{\let\|\bar@knit\let\!\barthin@knit + \ff@knit \color{forecolor}% + \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}} + +\newcommand \do@endofpar@knit[1]{\def\par{#1\endgraf\let\par\endgraf}} + +% +% Special symbols +% + +\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 + +% \obeylines is normally defined with \let^^M\par, not \def^^M{\par}; +% doing it this way makes it cooperate with \do@endofpar. + +{\catcode`\^^M = \active \catcode`\| = \active +\global\def\commands@knit{% + \setlength{\fboxsep}{0pt}% + \let\[\pnarrowincrease + \let\]\pnarrowdecrease + \let\<\narrowincrease + \let\>\narrowdecrease + \let\@\bobble + \let \! \barthin@knit + \let \| \bar@knit + \let | \bar@knit + \let \_ \horizlinenarrow@knit + \let \= \horizlinewide@knit + \let \- \horizline@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}% + }% +} + +\newcommand \strut@knit{\rule[-\stitchdp]{0pt}{\stitchht}} + +% Drawing lines on the chart + +\newcommand \horizlinenarrow@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 \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\fi} + +\newcommand \horizline@knit{\@ifstar \horizlinestar@knit \horizlinenostar@knit} + +\newcommand \horizlinestar@knit[1]{\nonumber\nostitchcount\overlinestar@knit{\hskip#1\stitchwd}} +\newcommand \horizlinenostar@knit[1]{\nonumber\nostitchcount\overlinenostar@knit{\hskip#1\stitchwd}} + + +\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{\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{\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 + +% \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}\color{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}\color{forecolor}#1}}\else \char254 \fi} + +\def\orphancablewarning@knit{\typeout{Package knit warning: Orphaned half cable on input line \the\inputlineno.}} + +\newcommand \cableleft[2]{\leavevmode{\ifgrid\knitmixed\fi + \ifcase\passnum@knit + \hbox{\pf@knit #1#2}% + \or + \setbox0=\hbox{\pf@knit #1#2}% + \hbox to \wd0{\char6\leaders\hbox{\char5}\hfil\char6}% + \or + \hbox{\let \textsf \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}} +\newcommand \cableright[2]{\leavevmode{\ifgrid\knitmixed\fi + \ifcase\passnum@knit + \hbox{\pf@knit #1#2}% + \or + \setbox0=\hbox{\pf@knit #1#2}% + \hbox to \wd0{\char6\leaders\hbox{\char5}\hfil\char6}% + \or + \hbox{\let\textsf \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}} + +% 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 \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 + \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{-}% + \ifnum #1>0 \hskip #1\stitchwd plus 1fil minus #1\stitchwd \else\hfil\fi + }% + \lower\stitchdp\vbox to\stitchht{\vss\vskip\fontvoffset@knit\hbox{\fontseries{m}\fontshape{n}\textsf{#2}}\vss} + {\knitboxforeground \count255 = -#1 \leaders\hbox{-}% + \ifnum #1<0 \hskip \count255\stitchwd plus 1fil minus \count255\stitchwd \else\hfil\fi + }}% + \or + \hbox to \Knitstitchcount{#2}{#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 + \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{=}% + \ifnum #1>0 \hskip #1\stitchwd plus 1fil minus #1\stitchwd \else\hfil\fi + }% + \lower\stitchdp\vbox to\stitchht{\vss\vskip\fontvoffset@knit\hbox{\fontseries{m}\fontshape{n}\textsf{#2}}\vss} + {\purlboxforeground \count255 = -#1 \leaders\hbox{=}% + \ifnum #1<0 \hskip \count255\stitchwd plus 1fil minus \count255\stitchwd \else\hfil\fi + }}% + \or + \hbox to \Purlstitchcount{#2}{#3}\stitchwd{\hfil} + \fi} + +\newcommand \Knitstitchcount[2]{#2} +\newcommand \Purlstitchcount[2]{#2} +\newcommand \knitboxstitchcount[2]{#2} +\newcommand \purlboxstitchcount[2]{#2} + +\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 + \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 + {\fontseries{m}\fontshape{n}\textsf{#2}}% + \count255 = -#1 \ifnum #1<0 \hskip \count255\stitchwd plus 1fil minus \count255\stitchwd \else\hfil\fi}% + \vss}% + \or + \hbox to \knitboxstitchcount{#2}{#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 + \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 + {\fontseries{m}\fontshape{n}\textsf{#2}}% + \count255 = -#1 \ifnum #1<0 \hskip \count255\stitchwd plus 1fil minus \count255\stitchwd \else\hfil\fi}% + \vss}% + \or + \hbox to \purlboxstitchcount{#2}{#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} + +\newcommand \widesymbol[3][0]{\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} + +\newcommand \widesymbolspacer[2]{#1} + +% Row number commands + +\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\c@rownumber \csname print##1rownumber\endcsname{\therownumber}\fi\fi}} +\newcommand \rnevenonly{\def\rncore@knit##1{\ifshowrn@knit \ifodd\c@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 \global\advance\c@rownumber -\c@rownumberskip \relax\fi + \ifnum \passnum@knit = 0 \global\advance\c@rownumber -\c@rownumberskip \relax\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 \catcode`\# = 12 \catcode`\& = 12 \chart@knit{#1}} + +% Some special stuff for chartsonly mode +\let\extracommands@knit\relax +\newcommand \smallpage@knit{\noindent\hbox\bgroup} +\let\endsmallpage@knit\egroup + +% The chart command proper +\newcommand \chart@knit[2]{% + \global \chartwidth@knit = 0pt + \ifresetrn \c@rownumber = 0 \else \c@tempcount@knit = \c@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 \c@tempcount@knit = -\c@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 + \c@rownumber = \c@tempcount@knit % + \global \rnleftwd@knit = 0pt + \global \rnrightwd@knit = 0pt + \setbox\fgbox@knit=\vbox{\def\passnum@knit{2}\hsize=\maxdimen + \ff@knit + \color{forecolor} + \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{Package knit error: \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 + \topskip = 0pt % Causes problems in one-row charts if this isn't present + \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 +\fi + +% Autonumbering macros + +\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 \c@rownumber % + \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 \c@rownumber %\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\c@rownumber 1 \do@endofpar@knit{\rnright@knit\adjustchartwidth@knit}}} +\let\autoevenleft@knit\autooddright@knit +\let\autoevenright@knit\autooddleft@knit + +\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 + \ifnum \c@stitchcountinprev > -99 + \vrule width \overfullrule + \typeout{Package knit warning: Stitch count mismatch on input line \the\inputlineno.} + \fi \fi} + +\newcommand \countstitches[1]{% + \global\c@stitchcountinprev = \c@stitchcountin + \setbox0 = \hbox{\def\passnum@knit{3}\countingout@knittrue \let\stitchwd\stitchwd@count@knit \fontshape{out}\selectfont #1}% + \c@stitchcountout = \wd0 + \dimen0 = 0.5\stitchwd@count@knit \advance \c@stitchcountout \dimen0 + \global\divide \c@stitchcountout \stitchwd@count@knit + \setbox1 = \hbox{\def\passnum@knit{3}\countingout@knitfalse \let\stitchwd\stitchwd@count@knit \fontshape{in}\selectfont #1}% + \c@stitchcountin = \wd1 + \dimen1 = 0.5\stitchwd@count@knit \advance \c@stitchcountin \dimen1 + \global\divide \c@stitchcountin \stitchwd@count@knit + } + +\newcommand \stitchcountchart[1][]{\begingroup \catcode`\|=\active \catcode`\# = 12 \catcode`\& = 12 \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{% + \setbox1 = \hbox{#1}% + \ifCountStsThisRow@knit% + \countstitches{#1}% + \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 \c@shortrowstsin@knit \c@stitchcountin \global\advance \c@shortrowstsout@knit \c@stitchcountout % + \global\let \shortrowrowcount@knit 2 + % For some reason, we MUST NOT have a % after the 2. + \else% + \global\advance \c@shortrowstsin@knit -\c@stitchcountout \global\advance \c@shortrowstsout@knit -\c@stitchcountin % + \global\let \shortrowrowcount@knit \relax + \fi% + \global\c@stitchcountin = \c@stitchcountinprev % + } +\gdef\shortrows@printstitchcountlabel@knit#1^^M{\setbox1 = \hbox{#1}\printstitchcountlabel@knit\setbox0=\hbox{}} +\gdef\shortrows#1{\ifnum \passnum@knit = 3 + \c@shortrowstsin@knit = 0 \c@shortrowstsout@knit = 0 \global\let \shortrowrowcount@knit \relax % + \setbox2 = \vbox{\everypar = {\shortrows@countstitcheseachrow@knit}% + #1 + }% + \ifx \shortrowrowcount@knit \relax \advance \c@stitchcountin \c@shortrowstsin@knit \advance \c@stitchcountin -\c@shortrowstsout@knit % + \else + \c@stitchcountinprev = \c@stitchcountin \c@stitchcountin = \c@shortrowstsin@knit \c@stitchcountout = \c@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 + % If there are an even number of short rows, we don't know the stitch count, + % so we don't print it + #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} + +\def\makestitchcounts@knit{\hbox{\setbox1=\vbox{\c@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 + \the\toks0 + }% + \ifnum\stitchcountside@knit = 0 + \hskip \stitchcountwidth@knit\rlap{\box1}% + \else + \rlap{\box1}\hskip \stitchcountwidth@knit + \fi +}} + +\def\nostitchcount{\ifnum \passnum@knit = 3 \global \CountStsThisRow@knitfalse \fi} + +\newcommand \printleftstitchcount{{\color{rncolor}\textnormal{(\thestitchcountout\ sts) }}} +\newcommand \printrightstitchcount{} + +\newcommand \knitdebug{\renewcommand \printleftstitchcount{{\color{rncolor}\textnormal{(\thestitchcountout\ out, \thestitchcountin\ in) }}}} + + + +\newcommand \empty@knit{} +% This is needed because the plain TeX \empty is +% defined with \def and not \newcommand + diff --git a/fonts/knitting/tex/latex/uknit.fd b/fonts/knitting/tex/latex/uknit.fd new file mode 100644 index 0000000000..afa6358a78 --- /dev/null +++ b/fonts/knitting/tex/latex/uknit.fd @@ -0,0 +1,30 @@ +\ProvidesFile{T1knit.fd}[2019/04/03 Knit fonts] + +\DeclareFontFamily{U}{knit}{} + +\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}{m}{n}{<-> knitmn}{} +\DeclareFontShape{U}{knit}{m}{p}{<-> knitmp}{} +\DeclareFontShape{U}{knit}{m}{r}{<-> knitmr}{} +\DeclareFontShape{U}{knit}{m}{l}{<-> knitml}{} +\DeclareFontShape{U}{knit}{m}{g}{<-> knitmg}{} +\DeclareFontShape{U}{knit}{m}{in}{<-> knitn_sc_in}{} +\DeclareFontShape{U}{knit}{m}{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}{<-> knitg_sc_in}{} +\DeclareFontShape{U}{knit}{w}{out}{<-> knitg_sc_out}{} |