From e0c6872cf40896c7be36b11dcc744620f10adf1d Mon Sep 17 00:00:00 2001
From: Norbert Preining <norbert@preining.info>
Date: Mon, 2 Sep 2019 13:46:59 +0900
Subject: Initial commit

---
 macros/latex/contrib/sudoku/sudoku.dtx | 393 +++++++++++++++++++++++++++++++++
 1 file changed, 393 insertions(+)
 create mode 100644 macros/latex/contrib/sudoku/sudoku.dtx

(limited to 'macros/latex/contrib/sudoku/sudoku.dtx')

diff --git a/macros/latex/contrib/sudoku/sudoku.dtx b/macros/latex/contrib/sudoku/sudoku.dtx
new file mode 100644
index 0000000000..23c46369ac
--- /dev/null
+++ b/macros/latex/contrib/sudoku/sudoku.dtx
@@ -0,0 +1,393 @@
+% \iffalse meta-comment
+%
+% sudoku.dtx
+% Copyright 2005,2006 Paul Abraham <paul.abraham@linuxdirect.org>
+%
+% 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>	[2006/03/25 v1.0.1 Sudoku grid]
+%
+%<*driver>
+\documentclass{ltxdoc}
+\usepackage{sudoku}
+\EnableCrossrefs
+\CodelineIndex
+\RecordChanges
+\begin{document}
+  \DocInput{sudoku.dtx}
+  \PrintChanges
+  \PrintIndex
+\end{document}
+%</driver>
+% \fi
+%
+% \CheckSum{104}
+%
+% \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}
+% \changes{v1.0.1}{2006/03/25}{Added ability to specify line thickness}
+%
+% \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@linuxdirect.org}}
+%
+% \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}|}|.
+%
+% \DescribeMacro{\sudokuthickline}
+% This length determines the thickness of the thick lines and defaults
+% to \verb|2pt|.  It can be changed with
+% \verb|\setlength\sudokuthickline{|\meta{size}|}|.
+%
+% \DescribeMacro{\sudokuthinline}
+% This length determines the thickness of the thin lines and defaults
+% to \verb|0.4pt|.  It can be changed with
+% It can be changed with \verb|\setlength\sudokuthinline{|\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 \verb|center| environment, then uses the
+% \verb|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
+% 2006/03/25 v1.0.1 Added ability to specify line thickness
+%\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.  From version 1.0.1, the line thickness
+% can be determined by changing \verb|\sudokuthinline| and
+% \verb|\sudokuthickline|.
+%
+%    \begin{macrocode}
+\newcommand*\@sudoku@grid{
+%    \end{macrocode}
+%
+% First draw the thin lines.
+%
+%    \begin{macrocode}
+        \linethickness{\sudokuthinline}%
+        \multiput(0,0)(1,0){10}{\line(0,1){9}}%
+        \multiput(0,0)(0,1){10}{\line(1,0){9}}
+%    \end{macrocode}
+%
+% Now draw the thick lines.
+%
+%    \begin{macrocode}
+        \linethickness{\sudokuthickline}%
+        \multiput(0,0)(3,0){4}{\line(0,1){9}}%
+        \multiput(0,0)(0,3){4}{\line(1,0){9}}
+%    \end{macrocode}
+%
+% Finally try and fill in the four corners of the grid.
+%
+%    \begin{macrocode}
+        \linethickness{0.5\sudokuthickline}%
+        \put(0,0){\framebox(0,0){}}%
+        \put(9,0){\framebox(0,0){}}%
+        \put(0,9){\framebox(0,0){}}%
+        \put(9,9){\framebox(0,0){}}
+}
+%    \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}
+%
+% Set line thicknesses to 0.4pt and 2pt for thin and thick lines.
+%    \begin{macrocode}
+\newdimen\sudokuthinline
+\setlength\sudokuthinline{0.4pt}
+\newdimen\sudokuthickline
+\setlength\sudokuthickline{2pt}
+%    \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
-- 
cgit v1.2.3

