diff options
author | Karl Berry <karl@freefriends.org> | 2006-01-12 23:53:42 +0000 |
---|---|---|
committer | Karl Berry <karl@freefriends.org> | 2006-01-12 23:53:42 +0000 |
commit | 845415b178d5e26612ba8b406ff532893bcb1071 (patch) | |
tree | 8b3d3cf2b36233749016b5403d955cf5ab5830aa /Master/texmf-dist/tex/latex/crosswrd | |
parent | 55c1e6d1e50a3c2dea5f349f8066da63aa742efb (diff) |
crosswrd
git-svn-id: svn://tug.org/texlive/trunk@797 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/tex/latex/crosswrd')
-rw-r--r-- | Master/texmf-dist/tex/latex/crosswrd/crosswrd.sty | 281 |
1 files changed, 281 insertions, 0 deletions
diff --git a/Master/texmf-dist/tex/latex/crosswrd/crosswrd.sty b/Master/texmf-dist/tex/latex/crosswrd/crosswrd.sty new file mode 100644 index 00000000000..5f829134c7d --- /dev/null +++ b/Master/texmf-dist/tex/latex/crosswrd/crosswrd.sty @@ -0,0 +1,281 @@ +%% +%% This is file `crosswrd.sty', +%% generated with the docstrip utility. +%% +%% The original source files were: +%% +%% crosswrd.dtx (with options: `package') +%% Copyright C 1989 Brian Hamilton Kelly +%% +%% crossword macros for LaTeX +%% updated for LaTeX2e by Frank Mittelbach 96/12/06 +%% +%% for documentation run latex crosswrd.dtx +%% +%% distribution consist of +%% +%% crosswrd.dtx source +%% crosswrd.ins installation script +%% 00readme +%% +%% don't distribute this file without distributing the above +%% files as well +%% +\NeedsTeXFormat{LaTeX2e}[1995/12/01] +\ProvidesPackage{crosswrd} + [1996/12/06 v2.8b Generating crosswords (BHK)] +\def\ninept{\@setsize\ninept{11pt}\ixpt\@ixpt + \abovedisplayskip 8.5pt plus 3pt minus 4pt + \belowdisplayskip \abovedisplayskip + \abovedisplayshortskip \z@ plus2pt + \belowdisplayshortskip 4pt plus2pt minus 2pt + \def\@listi{\itemsep 0pt + \parsep \z@ plus 1pt + \topsep 4pt plus 2pt minus 2pt +}} +\newif\ifnumberit +\newcount{\gr@dsize} +\newcount{\p@csize} +\newcount{\Down} +\newcount{\Across} +\newwrite\tf@acr +\newwrite\tf@dwn +\def\OpenClueFiles{% + \immediate\openout \tf@acr \jobname.acr\relax + \immediate\openout \tf@dwn \jobname.dwn\relax + \@writefile{acr}{\begin{minipage}[t]{70mm}}% + \@writefile{acr}{ \centerline{\textbf{\ACROSStext}}}% + \@writefile{acr}{ \sloppy}% + \@writefile{acr}{ \ninept}% + \@writefile{acr}{ \begin{ClueList}}% + \@writefile{dwn}{\begin{minipage}[t]{70mm}}% + \@writefile{dwn}{ \centerline{\textbf{\DOWNtext}}}% + \@writefile{dwn}{ \sloppy}% + \@writefile{dwn}{ \ninept}% + \@writefile{dwn}{ \begin{ClueList}}} +\newcommand\ACROSStext{ACROSS} +\newcommand\DOWNtext{DOWN} +\def\CloseClueFiles{% + \@writefile{acr}{ \end{ClueList}}% + \@writefile{acr}{\end{minipage}}% + \@writefile{dwn}{ \end{ClueList}}% + \@writefile{dwn}{\end{minipage}}% + \immediate\closeout\tf@acr \let\tf@acr\relax + \immediate\closeout\tf@dwn \let\tf@dwn\relax + \endgraf +} +\def\ClueListlabel#1{\hspace\labelsep {\bf #1}\hss} +\def\ClueList{\list{}{\labelwidth\leftmargin + \advance \labelwidth by -\labelsep + \let\makelabel\ClueListlabel}} +\let\endClueList\endlist +\def\PrintClues{% + \centerline{% + \begin{tabular}{ c | c } + \@input{\jobname.acr} + & + \@input{\jobname.dwn} + \end{tabular} + }\endgraf +} +\def\crossword#1#2{% + \endgraf\leavevmode + \vtop\bgroup + \unitlength 6mm\numberittrue + \def\Header{}% + \OpenClueFiles + \TestAnswers{#2}% + \SetUpGrid{#1}} +\def\endcrossword{\endgraf + \centerline{\Header}% + \hbox{\FinishGrid}% + \CloseClueFiles + \hbox{\PrintClues}% + \egroup +} +\expandafter\def\csname crossword*\endcsname#1#2{% + \unitlength 4mm\numberitfalse + \endgraf\leavevmode + \vtop\bgroup + \def\Header{{\bf\strut #2}}% + \def\answer{Y}% + \let\tf@dwn=\relax \let\tf@acr=\relax + \SetUpGrid{#1}} + +\expandafter\def\csname endcrossword*\endcsname{\endgraf + \centerline{\Header}% + \hbox{\FinishGrid}% + \egroup +} +\def\laterletter#1{\setsquare{\lettersquare{#1}}} +\def\nextletter#1#2{% + \ifx#2\@nil \let\nextlet=\@gobble + \else\letterput{#2}\advance#1 by \@ne + \let\nextlet=\nextletter + \let\letterput=\laterletter + \fi + \nextlet{#1}} +\def\blacktest{\blacksquare} +\newif\ifneed@d +\newif\ifNoerr +\Noerrtrue +\newtoks\Number \newtoks\Plain +\def\blank#1{\Plain} +\def\numbered#1#2{\Number} +\def\letterinsquare#1{#1} + +\def\letterinnumbersquare#1#2{#2} +\def\setsquare#1{% + \need@dfalse + \ifx#1\blacksquare + \need@dtrue + \else + \expandafter\ifx\csname\ther@w\thec@l\endcsname\blacktest + \need@dtrue + \else + \let\lettersquare=\letterinsquare + \let\numbersquare=\letterinnumbersquare + \expandafter\if\csname\ther@w\thec@l\endcsname#1 + \else + \ifNoerr + \errhelp{Two intersecting lights tried to + put different letters^^Jin the same square! + You've probably confused their coordinates.^^J + Carry on, and examine the printout.} + \errmessage{Illegal redefinition of square \ther@w\thec@l. + Was: \expandafter\meaning\csname\ther@w + \thec@l\endcsname. + Now: \noexpand #1} + \Noerrfalse + \fi + \fi + \let\lettersquare=\blank + \let\numbersquare=\numbered + \expandafter\ifx#1\Number + \need@dtrue + \fi + \fi + \fi + \ifneed@d + \expandafter\edef\csname\ther@w\thec@l\endcsname{\noexpand #1} + \fi +} +\def\clue#1#2#3#4#5#6#7{% + \findnumber{#1} + \ifx#2A + \if\@empty#7\relax\else + \ifx\tf@acr\relax\else + \@writefile{acr}{ \item[#1] #6 (#7)}% + \fi + \fi + \let\Direction=\Across + \else + \ifx#2D + \if\@empty#7\relax\else + \ifx\tf@dwn\relax\else + \@writefile{dwn}{ \item[#1] #6 (#7)}% + \fi + \fi + \let\Direction=\Down + \else + \errhelp{The second parameter of the \string\clue\space + command must be `A' or `D'} + \errmessage{Illegal direction (#1) specification + for \string\clue.} + \fi + \fi + \Across=#3 \Down=#4 + \edef\letterput##1{\noexpand\setsquare + {\noexpand\numbersquare + {\noexpand\cluenumber}{##1}}}% + \nextletter{\Direction}#5\@nil + \ignorespaces +} +\newcount\clueNumber +\def\special@gobble #1\@nil{} +\def\findnumber#1{% + \afterassignment \special@gobble \clueNumber=0#1 \@nil + \ifnum\clueNumber=0 + \errhelp{The first parameter of the \string\clue\space command + must commence with a digit} + \errmessage{Illegal clue number (#1) specified + for \string\clue.} + \fi +} +\def\cluenumber{\the\clueNumber} +\def\blackenrow{\let\savediterate\iterate + \loop\relax\ifnum\Across>\z@ + \setsquare{\blacksquare}% + \advance\Across by \m@ne + \repeat + \let\iterate\savediterate +} +\def\SetUpGrid#1{% + \gr@dsize=#1 + \p@csize=#1 \advance\p@csize by \@ne + \Down=\gr@dsize + \loop + \Across=\gr@dsize + \ifnum\Down>\z@ + \blackenrow + \advance\Down by \m@ne + \repeat +} +\def\thec@l{C\romannumeral\Across} +\def\ther@w{R\romannumeral\Down} +\def\f@rst#1#2.{#1} +\def\TestAnswers#1{\edef\next{\def\noexpand\answer{#1}}% + \lowercase\expandafter{\next}% + \edef\answer{\expandafter \f@rst \answer .}% + \if\answer y \else \if\answer n \else + \typein[\answer]{Make answers visible? [Y/N]: }\fi + \fi + \edef\next{\def\noexpand\answer{\answer}}% + \uppercase\expandafter{\next}% + \edef\answer{\expandafter \f@rst \answer .}% +} +\def\letter#1{{\put(\Across,-\Down){\makebox(1,1){\sffamily #1}}}} +\def\numberedsquare#1#2{% + \put(\Across,-\Down){% + \begin{picture}(1,1)(0,0) + \put(0.05,0.05){\makebox(0.9,0.9)[tl]{\tiny #1}} + \end{picture}% + } + \letter{#2}} +\def\unnumberedsquare#1{\letter} +\def\FinishGrid{% + \if\answer Y \else \let \letter=\@gobble \fi + \ifnumberit + \let\numbersquare=\numberedsquare + \else + \let\numbersquare=\unnumberedsquare + \fi + \let\lettersquare=\letter + \def\blacksquare{% + \put(\Across,-\Down){\rule{\unitlength}{\unitlength}}} + \Down=\gr@dsize + \centerline{% + \begin{picture}(\p@csize,\p@csize)(1,-\p@csize) + \loop\ifnum\Down>\z@ + \put(1,-\Down){\line(1,0){\the\gr@dsize}} + \Across=\gr@dsize + {\loop \ifnum\Across>\z@ + \csname\ther@w\thec@l\endcsname + \advance\Across by \m@ne + \repeat + }% + \advance\Down by \m@ne + \repeat + \put(1,0){\line(1,0){\the\gr@dsize}} + \Across=\p@csize + \loop\ifnum\Across>\z@ + \put(\Across,0){\line(0,-1){\the\gr@dsize}} + \advance\Across by \m@ne + \repeat + \end{picture}% + }% +} + +\endinput +%% +%% End of file `crosswrd.sty'. |