[comp.text.tex] Latex or Postscript for Go boards anyone?

farrell@batserver.cs.uq.oz.au (Friendless) (09/21/90)

  Does anyone know of any latex or postscript macros or other hacks to draw
pictures of go boards like you see in books? How hard would it be to make some
up in postscript? Please mail to me and I will summarise responses if there
are any.


Friendless, 23 kyu :-)

ychen@aftermath.waterloo.edu (Youyi Chen) (09/22/90)

Following is a sample of LaTeX Go board.
I also attach a PostScript program for drawing Go board which
I wrote and posted to rec.games.go sometime ago.

Youyi Chen 
( 4 dan )

%% A Sample of LaTeX Go Board 
%% Youyi Chen
%% University of Waterloo, Dept. of Statistics and Actuarial Science
%% ychen@aftermath.waterloo.edu
%% Sept. 1990
%%
\documentstyle[12pt]{article}
\pagestyle{empty}

\begin{document}
\centerline{{\Huge No Way Out?}}
\vspace{.5in} 
\begin{center}
\setlength{\unitlength}{5mm}
\begin{picture}(18,18)(1,1)

%% moves
\put(6,3){\circle*{1}}
\put(7,3){\circle*{1}}
\put(8,3){\circle*{1}}
\put(5,4){\circle*{1}}
\put(9,4){\circle*{1}}
\put(5,6){\circle*{1}}
\put(9,6){\circle*{1}}
\put(7,6){\circle*{1}}
\put(7,7){\circle*{1}}

\put(6,4){\circle{1}}
\put(7,4){\circle{1}}
\put(8,4){\circle{1}}
\put(6,5){\circle{1}}
\put(8,5){\circle{1}}
%% the board
%% horizontal
\multiput(1,1)(0,1){3}{\line(1,0){18}}

\put(1,4){\line(1,0){4}}
\put(9,4){\line(1,0){10}}

\put(1,5){\line(1,0){4.5}}
\put(6.5,5){\line(1,0){1}}
\put(8.5,5){\line(1,0){10.5}}

\multiput(1,6)(0,1){14}{\line(1,0){18}}

%%vertical
\multiput(1,1)(1,0){5}{\line(0,1){18}}

\put(6,1){\line(0,1){2}}
\put(6,5.5){\line(0,1){13.5}}

\put(7,1){\line(0,1){2}}
\put(7,4.5){\line(0,1){14.5}}

\put(8,1){\line(0,1){2}}
\put(8,5.5){\line(0,1){13.5}}

\multiput(9,1)(1,0){11}{\line(0,1){18}}

%% the stars
\multiput(4,4)(6,0){3}{\circle*{0.3}}
\multiput(4,10)(6,0){3}{\circle*{0.3}}
\multiput(4,16)(6,0){3}{\circle*{0.3}}

\end{picture}
\end{center}
\end{document}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

From ychen Wed Aug  8 17:17:06 EDT 1990
Article 2195 of rec.games.go:
Newsgroups: rec.games.go
Path: water!ychen
>From: ychen@water.waterloo.edu (Youyi Chen)
Subject: PostScript WeiQi: A PostScript program for drawing the Go Games.
Message-ID: <1990Aug8.211019.1809@water.waterloo.edu>
Summary: WeiQi, Go, PostScript.
Organization: University of Waterloo
References: <1990Aug8.154047.1604@athena.mit.edu>
Distribution: na
Date: Wed, 8 Aug 90 21:10:19 GMT
Lines: 242

Following is a PostScript program for drawing the Go games.
A sample game data is supplied in the program.
cut lines from --- Cut here ----, send it to a PostScript
Laser Printer. You will get a very nice picture 
of a life and death problem.

The program can be used to print any game with stone mark, 
title and comments. See the comments in the program for details.

Youyi Chen.

% ------ cut here ----- cut here ---  delete this line -----
%!PS-Adobe-1.0
% ******* WeiQi.PS ********1.0**
% A PostScript Program for Drawing Go game.
%
% Youyi Chen.
% Wed Aug  8 15:41:30 EDT 1990
%
% 	Youyi Chen 	ychen@aftermath.waterloo.edu
% 	Department of Statistics and Acturial Science
% 	University of Waterloo
% 	Waterloo, Ontario
% 	Canada, N2L 3G1
%
% General:
%	A sample game is supplied with this program. Send this
%	program directly to a Postscript printer, you will get
%	a very interesting ancient Chinese WeiQi life and death 
%	problem drawn by PostScript.
%
%	If you want to print you own games, you only need to edit
%	the game data, title, comments using the same format
%	in the example given below, i.e. edit lines between 
%	--- begin game--- 	and     ---- end game ----.
%
%	If you like to keep data and the program separated,
%	You can either write a unix shell program or use "run"
%	operator in postscript.
%	
% User Functions:
%	Title
%		(string) Title ---- print  title.
%	Comment
%		(string) Comment --- print comments. 
%	Newline
%		Newline --- break line in text.
%	W
%		n1 n2 (n3) W --- put a white stone at coordinate n1 n2,
%				and set mark with n3. () gives no mark.
%				1 <= n1 <= 19, 1<= n2 <= 19, n3 can be
%				any character or symbol.
%	B
%		n1 n2 (n3) B ---  same as W, but for black stone.
%	StartComment
%		StarComment ---  begin to input comments (setfont).
%	StartGame
%		StarGame ---  begin to input game data.
% CopyLeft:
%	You are free to use and distribute it.
%	Please send me your suggestions and comments.
%
% PostScript is a trademark of Adobe Systems, Incorporated.

% -------- Variables and Procedures --------
/unitlength 18 def	% board unit length = 0.25 inch
/linewidth 0.5 def	% board grid linewidth
/unit 
 { unitlength mul } def
/LM 0 def		% left margin for board and comments
24 unit
/RM exch def		% right margin for comments

/TitleFont { 
  /Times-Bold findfont 
   25 scalefont setfont 
} def

/CommentFont { 
  /Times-Italic findfont 
   12 scalefont  setfont 
} def

/Title {		% stack: (title)
  TitleFont
  dup stringwidth pop
  18 unit sub -0.5 mul
  20 unit moveto
  show
} def

/StartComment {
  -2 unit
  /ypos exch def	% board lowleft y margine
  /lineheight 16 def	% distance between lines of text
  CommentFont
  LM ypos moveto
} def
   
0.55 unit ceiling 
/sfs exch def		% stone font size
/StoneFont { 		% find font for marking the stones
  /Helvetica-Bold findfont 
  sfs scalefont
  setfont
} def

/StoneRadius			% stone radius
 { unitlength 2.1 div } def

/W {			% stack: x y (s) 
  /str exch def		% draw a white stone at x y with mark s at center
  unit 1 unit sub /cy exch def
  unit 1 unit sub /cx exch def
  newpath
  cx cy StoneRadius 0 360 arc 
  gsave 1 setgray fill grestore 0 setgray stroke
  /xp 
   { cx str stringwidth pop 0.5 mul sub } def
  /yp 
   { cy sfs 0.325 mul sub} def
  xp yp moveto str show
} def

/B {			% stack: x y (s)
  /str exch def 	% draw a black stone at x y with mark s at center
   unit 1 unit sub  /cy exch def
   unit 1 unit sub  /cx exch def
   newpath
   cx cy StoneRadius 0 360 arc 
   0 setgray fill
   /xp
    { cx str stringwidth 
      pop 0.5 mul sub } def
   /yp 
    { cy sfs 0.325 mul sub} def
   1 setgray xp yp moveto 
   str show
} def

/mr {unitlength 7 div} def	% ridius of mark circle
/SetMark			% stack: x y
 { mr 0 360 arc fill} def	% set mark at 9 special points

/DrawBoard {
  linewidth setlinewidth
  newpath
  0 1 unit 18 unit		% draw grid
   { 0 moveto 0 18 unit rlineto } for stroke
  newpath 
  0 1 unit 18 unit 
    { 0 exch moveto 18 unit 0 rlineto } for stroke
  3 6 15 { unit 3 unit SetMark } for	% set marks
  3 6 15 { unit 9 unit SetMark } for
  3 6 15 { unit 15 unit SetMark} for
} def

/StartGame 
 { StoneFont } def

% A simple text formatter for printing comments
/Newline {			% moveto next line
  ypos lineheight sub
  /ypos exch def	
  LM ypos moveto 
} def		% move to next line

/Comment {			% stack: str
  dup stringwidth pop
  currentpoint pop
  add RM gt	
  {Newline} if
  show 
} def			% print string

% -------- Main Program --------
170 300 translate	% move the origin
.8 .8 scale		% set global scale
DrawBoard

% -------- begin of the sample game ---------
	(No Way Out?)				Title
StartComment
	(Gui-Si:)				Comment
Newline
	(   A life and death problem )		Comment
	(from an ancient Chinese WeiQi book.)	Comment
Newline Newline Newline Newline Newline 
	(WeiQi.PS)				Comment
Newline
	(A PostScript program for drawing Go game.) Comment
Newline
	(PostScript is a trade mark of )	Comment
	(Adobe System, Incorporated. )		Comment
	(Weiqi is Go in Chinese.)		Comment
Newline
	(Please send any comment and )		Comment
	(suggestion to ychen@water.waterloo.edu) Comment
StartGame
		% -------- Problem -------- 
6 3 () B
7 3 () B
8 3 () B
5 4 () B
9 4 () B
5 6 () B
9 6 () B
7 6 () B
7 7 () B
6 4 () W
6 5 () W
7 4 () W
8 4 () W
8 5 () W
		% -------- transformation --------
14 17 () B
13 17 () B
12 17 () B
15 16 () B
11 16 () B
15 14 () B
11 14 () B
13 14 () B
13 13 () B
14 16 () W
14 15 () W
13 16 () W
12 16 () W
12 15 () W
		% ------ solution ---------
13 12 (1) W
14 14 (2) B
12 14 (3) W
12 13 (4) B
11 15 (5) W
10 15 (6) B
10 14 (7) W
11 13 (8) B
10 16 (9) W
% -------- end of the sample game ---------

showpage