diff options
author | Karl Berry <karl@freefriends.org> | 2006-01-11 23:58:09 +0000 |
---|---|---|
committer | Karl Berry <karl@freefriends.org> | 2006-01-11 23:58:09 +0000 |
commit | 21f4ffdcbfe9008f3988f8016d3f6d380271895d (patch) | |
tree | 666dcd456b1accc1efdeec9259bf47f644928c3f /Master/texmf-dist/source/latex/sudoku/sudoku.dtx | |
parent | 224bc14829bc59b7a4b09255ce1e1bcaf9419688 (diff) |
trunk/Master/texmf-dist/source/latex/sudoku
git-svn-id: svn://tug.org/texlive/trunk@536 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/source/latex/sudoku/sudoku.dtx')
-rw-r--r-- | Master/texmf-dist/source/latex/sudoku/sudoku.dtx | 351 |
1 files changed, 351 insertions, 0 deletions
diff --git a/Master/texmf-dist/source/latex/sudoku/sudoku.dtx b/Master/texmf-dist/source/latex/sudoku/sudoku.dtx new file mode 100644 index 00000000000..b6e6129c9a3 --- /dev/null +++ b/Master/texmf-dist/source/latex/sudoku/sudoku.dtx @@ -0,0 +1,351 @@ +% \iffalse meta-comment +% +% sudoku.dtx +% Copyright 2005 Paul Abraham <paul.abraham@hotpop.com> +% +% 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 this 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/12/01 or later. +% +% This work has the LPPL maintenance status "maintained". +% +% This Current Maintainer of this work is Paul Abraham. +% +% This work consists of the files sudoku.dtx, sudoku.ins +% README, CHANGES and the derived file sudoku.sty. +% +% \fi +% +% \iffalse +%<package>\NeedsTeXFormat{LaTeX2e}[1999/12/01] +%<package>\ProvidesPackage{sudoku} +%<package> [2005/06/29 v1.0 Sudoku grid] +% +%<*driver> +\documentclass{ltxdoc} +\usepackage{sudoku} +\EnableCrossrefs +\CodelineIndex +\RecordChanges +\begin{document} + \DocInput{sudoku.dtx} + \PrintChanges + \PrintIndex +\end{document} +%</driver> +% \fi +% +% \CheckSum{84} +% +% \CharacterTable +% {Upper-case \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z +% Lower-case \a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z +% Digits \0\1\2\3\4\5\6\7\8\9 +% Exclamation \! Double quote \" Hash (number) \# +% Dollar \$ Percent \% Ampersand \& +% Acute accent \' Left paren \( Right paren \) +% Asterisk \* Plus \+ Comma \, +% Minus \- Point \. Solidus \/ +% Colon \: Semicolon \; Less than \< +% Equals \= Greater than \> Question mark \? +% Commercial at \@ Left bracket \[ Backslash \\ +% Right bracket \] Circumflex \^ Underscore \_ +% Grave accent \` Left brace \{ Vertical bar \| +% Right brace \} Tilde \~} +% +% \changes{v1.0}{2005/06/29}{Initial version} +% +% \GetFileInfo{sudoku.sty} +% +% \DoNotIndex{\newcommand,\newenvironment} +% \setlength{\parindent}{0pt} +% \setlength{\parskip}{5pt plus 2pt minus 1pt} +% +% \title{The \textsf{sudoku} package\thanks{This document +% corresponds to \textsf{sudoku}~\fileversion, dated \filedate.}} +% \author{Paul Abraham \\ \texttt{paul.abraham@hotpop.com}} +% +% \maketitle +% +% \section{Introduction} +% +% The \textsf{sudoku} package allows the user to typeset +% sudoku\footnote{I~have seen Sudoku written as Sudoku +% (one word) and Su Doku (two words). I don't know which of them (if +% either) is more correct than the other. I am just using one word.} +% puzzles. +% +% A~sudoku puzzle is a 9$\times$9 grid where some of the squares in +% the grid contain numbers. The rules are simple: +% every column can only contain the digits 1 to 9, +% every row can only contain the digits 1 to 9 and +% every 3$\times$3 box can only contain the digits 1 to 9. +% +% The puzzle derives its name from the Japanese \textit{Su}, meaning +% number, and \textit{Doku\/} meaning singular or solitary. +% +% More information, including help and example puzzles, can be found +% at \texttt{www.sudoku.org.uk}. This site also has blank sudoku grids +% (or worksheets), but you will not need to print them from there if +% you have this package installed. +% +% \section{Acknowledgements} +% +% I~want to thank Morten H\o gholm who took my first attempt at +% creating a sudoku environment in \LaTeX\ and corrected all my +% mistakes. He then gave me the help and encouragement to publish +% it as a package. +% +% \section{Usage} +% +% \DescribeMacro{\sudokuformat} +% This macro contains the formatting information for each number +% in the grid. The default value is \verb|\Huge\sffamily|, which +% gives correctly sized numbers for the default grid size, but it +% can be changed with \verb|\renewcommand*\sudokuformat[1]{\|\meta{font}|#1}|. +% +% \DescribeMacro{\sudokusize} +% This length contains the size of the grid, defaulting to \verb|10cm|. +% It can be changed with \verb|\setlength\sudokusize{|\meta{size}|}|. +% +% \DescribeEnv{sudoku-block} +% This environment draws the sudoku grid. The contents of each cell +% in the grid are delimited by the vertical bar (\verb+|+) character. +% +% \DescribeEnv{sudoku} +% This environment starts a |center| environment, then uses the +% |sudoku-block| environment to draw the grid. +% +% \section{Examples} +% +% This should be a relatively easy puzzle to solve. +% +% \begin{verbatim} +% \begin{sudoku} +% |2|5| | |3| |9| |1|. +% | |1| | | |4| | | |. +% |4| |7| | | |2| |8|. +% | | |5|2| | | | | |. +% | | | | |9|8|1| | |. +% | |4| | | |3| | | |. +% | | | |3|6| | |7|2|. +% | |7| | | | | | |3|. +% |9| |3| | | |6| |4|. +% \end{sudoku} +% \end{verbatim} +% The output is shown in figure~\ref{easypuzzle}. The solution is shown in +% figure~\ref{easysolution}. +% +% \begin{figure}[t] +% \begin{sudoku} +% |2|5| | |3| |9| |1|. +% | |1| | | |4| | | |. +% |4| |7| | | |2| |8|. +% | | |5|2| | | | | |. +% | | | | |9|8|1| | |. +% | |4| | | |3| | | |. +% | | | |3|6| | |7|2|. +% | |7| | | | | | |3|. +% |9| |3| | | |6| |4|. +% \end{sudoku} +% \caption{Easy puzzle\label{easypuzzle}} +% \end{figure} +% +% This is a bit more difficult. +% +% \begin{verbatim} +% \begin{sudoku} +% | |2| | |3| |9| |7|. +% | |1| | | | | | | |. +% |4| |7| | | |2| |8|. +% | | |5|2| | | |9| |. +% | | | |1|8| |7| | |. +% | |4| | | |3| | | |. +% | | | | |6| | |7|1|. +% | |7| | | | | | | |. +% |9| |3| |2| |6| |5|. +% \end{sudoku} +% \end{verbatim} +% The output is shown in figure~\ref{difficultpuzzle}. The solution is shown in +% figure~\ref{difficultsolution}. +% +% \begin{figure}[t] +% \begin{sudoku} +% | |2| | |3| |9| |7|. +% | |1| | | | | | | |. +% |4| |7| | | |2| |8|. +% | | |5|2| | | |9| |. +% | | | |1|8| |7| | |. +% | |4| | | |3| | | |. +% | | | | |6| | |7|1|. +% | |7| | | | | | | |. +% |9| |3| |2| |6| |5|. +% \end{sudoku} +% \caption{Difficult puzzle\label{difficultpuzzle}} +% \end{figure} +% +% \newpage +% This code will create the same grid inline: +% \begin{verbatim} +% \renewcommand*\sudokuformat[1]{\sffamily#1} +% \setlength\sudokusize{5cm} +% Easy Sudoku Puzzle +% \begin{sudoku-block} +% |2|5| | |3| |9| |1|. +% | |1| | | |4| | | |. +% |4| |7| | | |2| |8|. +% | | |5|2| | | | | |. +% | | | | |9|8|1| | |. +% | |4| | | |3| | | |. +% | | | |3|6| | |7|2|. +% | |7| | | | | | |3|. +% |9| |3| | | |6| |4|. +% \end{sudoku-block} +% \end{verbatim} +% +% \StopEventually{} +% +%\iffalse +% 2005/06/29 v1.0 Initial version +%\fi +% +% \section{Implementation} +% +% First initialise a couple of counters that keep track of where we are. +% \begin{macrocode} +\newcounter{@sudoku@row} +\newcounter{@sudoku@col} +% \end{macrocode} +% +% \begin{macrocode} +\newcommand*\@sudoku@separator[1]{% + \stepcounter{@sudoku@col}% + \ifx#1\@sudoku@separator + \expandafter#1% + \else + \ifx.#1% + \setcounter{@sudoku@col}{-1}% + \addtocounter{@sudoku@row}{-1}% + \else + \put(\value{@sudoku@col},\value{@sudoku@row})% + {\makebox(1,1){\sudokuformat{#1}}}% + \fi + \fi +} +% \end{macrocode} +% +% \begin{macrocode} +\begingroup + \catcode`\|=\active + \gdef\@sudoku@activate{\let|=\@sudoku@separator} +\endgroup +% \end{macrocode} +% +% Now we can draw the grid. Each 3$\times$3 box has thicker borders +% than the rest of the grid. +% +% \begin{macrocode} +\newcommand*\@sudoku@grid{% + \thinlines + \multiput(0,0)(1,0){10}{\line(0,1){9}}% + \multiput(0,0)(0,1){10}{\line(1,0){9}} + \thicklines + \multiput(0,0)(3,0){4}{\line(0,1){9}}% + \multiput(0,0)(0,3){4}{\line(1,0){9}} +} +% \end{macrocode} +% +% The default font is a huge, sans serif font. +% \begin{macrocode} +\newcommand*\sudokuformat[1]{\Huge\sffamily#1} +% \end{macrocode} +% +% The grid defaults to a 10 centimetre square. +% \begin{macrocode} +\newdimen\sudokusize +\setlength\sudokusize{10cm} +% \end{macrocode} +% +% Make the size of each square $1/9$ of the size of sudoku grid. +% \begin{macrocode} +\newenvironment{sudoku-block}{% + \catcode`\|=\active + \@sudoku@activate + \setcounter{@sudoku@col}{-1}% + \setcounter{@sudoku@row}{8}% + \setlength\unitlength{.111111\sudokusize}% + \begin{picture}(9,9)% + \@sudoku@grid\@sudoku@grab@arguments + }{\end{picture}} +% \end{macrocode} +% +% As we change the \verb|catcode| of \verb+|+ inside the environment, +% under normal \TeX\ we can't just use such an environment as an argument +% of another command. This can be solved by using e\TeX\ as engine for +% \LaTeX, which is what all the major distributions do currently. +% \begin{macrocode} + \begingroup + \@ifundefined{eTeXversion}{\endgroup + \def\@sudoku@grab@arguments#1{% + \ifx#1\@sudoku@separator + \expandafter#1% + \else + \PackageError{sudoku}{% + Sudoku puzzles are not allowed in the arguments\MessageBreak + of other commands}{% + Either fix this in your source (possibly using the `lrbox' + environment) or use an eTeX based LaTeX format} + \fi + }% + }{\endgroup + \def\@sudoku@grab@arguments#1.#2.#3.#4.#5.#6.#7.#8.#9.{% + \scantokens{#1.#2.#3.#4.#5.#6.#7.#8.#9.}}% + } +% \end{macrocode} +% +% The |sudoku| environment simply calls the |sudoku-block| +% environment inside a |center| environment. +% \begin{macrocode} +\newenvironment{sudoku}{% + \begin{center}% + \begin{sudoku-block}}{\end{sudoku-block}\end{center}} +% \end{macrocode} +% +% \Finale +% +% \begin{figure}[b] +% \begin{sudoku} +% |2|5|8|7|3|6|9|4|1|. +% |6|1|9|8|2|4|3|5|7|. +% |4|3|7|9|1|5|2|6|8|. +% |3|9|5|2|7|1|4|8|6|. +% |7|6|2|4|9|8|1|3|5|. +% |8|4|1|6|5|3|7|2|9|. +% |1|8|4|3|6|9|5|7|2|. +% |5|7|6|1|4|2|8|9|3|. +% |9|2|3|5|8|7|6|1|4|. +% \end{sudoku} +% \caption{Solution for easy puzzle\label{easysolution}} +% \end{figure} +% +% \begin{figure}[b] +% \begin{sudoku} +% |6|2|8|5|3|4|9|1|7|. +% |5|1|9|8|7|2|4|3|6|. +% |4|3|7|9|1|6|2|5|8|. +% |8|6|5|2|4|7|1|9|3|. +% |3|9|2|1|8|5|7|6|4|. +% |7|4|1|6|9|3|5|8|2|. +% |2|5|4|3|6|9|8|7|1|. +% |1|7|6|4|5|8|3|2|9|. +% |9|8|3|7|2|1|6|4|5|. +% \end{sudoku} +% \caption{Solution for difficult puzzle\label{difficultsolution}} +% \end{figure} +% +\endinput |