summaryrefslogtreecommitdiff
path: root/macros/latex/contrib/bg
diff options
context:
space:
mode:
authorNorbert Preining <norbert@preining.info>2019-09-02 13:46:59 +0900
committerNorbert Preining <norbert@preining.info>2019-09-02 13:46:59 +0900
commite0c6872cf40896c7be36b11dcc744620f10adf1d (patch)
tree60335e10d2f4354b0674ec22d7b53f0f8abee672 /macros/latex/contrib/bg
Initial commit
Diffstat (limited to 'macros/latex/contrib/bg')
-rw-r--r--macros/latex/contrib/bg/README16
-rw-r--r--macros/latex/contrib/bg/bg.150gfbin0 -> 52584 bytes
-rw-r--r--macros/latex/contrib/bg/bg.150pkbin0 -> 27388 bytes
-rw-r--r--macros/latex/contrib/bg/bg.225gfbin0 -> 83540 bytes
-rw-r--r--macros/latex/contrib/bg/bg.225pkbin0 -> 43016 bytes
-rw-r--r--macros/latex/contrib/bg/bg.75gfbin0 -> 28532 bytes
-rw-r--r--macros/latex/contrib/bg/bg.75pkbin0 -> 13164 bytes
-rw-r--r--macros/latex/contrib/bg/bg.mf1098
-rw-r--r--macros/latex/contrib/bg/bg.sty543
-rw-r--r--macros/latex/contrib/bg/bg.tfmbin0 -> 1096 bytes
-rw-r--r--macros/latex/contrib/bg/description.pdfbin0 -> 106820 bytes
-rwxr-xr-xmacros/latex/contrib/bg/make_font6
-rw-r--r--macros/latex/contrib/bg/sampletext.pdfbin0 -> 40413 bytes
-rw-r--r--macros/latex/contrib/bg/sampletext.tex70
14 files changed, 1733 insertions, 0 deletions
diff --git a/macros/latex/contrib/bg/README b/macros/latex/contrib/bg/README
new file mode 100644
index 0000000000..a0d71dc3c3
--- /dev/null
+++ b/macros/latex/contrib/bg/README
@@ -0,0 +1,16 @@
+This package consists of the following files:
+
+README
+bg.150gf
+bg.150pk
+bg.225gf
+bg.225pk
+bg.75gf
+bg.75pk
+bg.mf
+bg.sty
+description.ps
+make_font
+sampletext.tex
+
+The description and use of this package is described in the file description.ps.
diff --git a/macros/latex/contrib/bg/bg.150gf b/macros/latex/contrib/bg/bg.150gf
new file mode 100644
index 0000000000..71b4607bc1
--- /dev/null
+++ b/macros/latex/contrib/bg/bg.150gf
Binary files differ
diff --git a/macros/latex/contrib/bg/bg.150pk b/macros/latex/contrib/bg/bg.150pk
new file mode 100644
index 0000000000..71f8719c88
--- /dev/null
+++ b/macros/latex/contrib/bg/bg.150pk
Binary files differ
diff --git a/macros/latex/contrib/bg/bg.225gf b/macros/latex/contrib/bg/bg.225gf
new file mode 100644
index 0000000000..0175ce8b37
--- /dev/null
+++ b/macros/latex/contrib/bg/bg.225gf
Binary files differ
diff --git a/macros/latex/contrib/bg/bg.225pk b/macros/latex/contrib/bg/bg.225pk
new file mode 100644
index 0000000000..b2210bafdd
--- /dev/null
+++ b/macros/latex/contrib/bg/bg.225pk
Binary files differ
diff --git a/macros/latex/contrib/bg/bg.75gf b/macros/latex/contrib/bg/bg.75gf
new file mode 100644
index 0000000000..82562220e7
--- /dev/null
+++ b/macros/latex/contrib/bg/bg.75gf
Binary files differ
diff --git a/macros/latex/contrib/bg/bg.75pk b/macros/latex/contrib/bg/bg.75pk
new file mode 100644
index 0000000000..54b17e4053
--- /dev/null
+++ b/macros/latex/contrib/bg/bg.75pk
Binary files differ
diff --git a/macros/latex/contrib/bg/bg.mf b/macros/latex/contrib/bg/bg.mf
new file mode 100644
index 0000000000..57fde2d563
--- /dev/null
+++ b/macros/latex/contrib/bg/bg.mf
@@ -0,0 +1,1098 @@
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% bg.mf : A character set to draw backgammon matches in LaTeX %
+% %
+% Copyright by J. Richter 1994 %
+% %
+% Distribution and use is free, as long as you don't change this file %
+% %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+mode_setup;
+
+size# := 30pt#; % Length of the edge of one square
+number_shadepoints := 15; % Numbers of pixels for black point per row
+
+pensize# := size#/100;
+
+define_pixels(size, pensize);
+
+whitecheckersize := size-3*pensize;
+blackcheckersize := size;
+digitpensize := 5*pensize;
+
+erasediameter := size/2;
+
+font_x_height size#;
+font_quad size#;
+
+%%%%%%%%%%%%%%%%
+% upwhitepoint %
+%%%%%%%%%%%%%%%%
+
+def upwhitepoint(expr i) =
+
+pickup pencircle scaled pensize;
+
+draw (0.1*i*size,0pt)--(0.1*(i+1)*size,size);
+draw ((0.9-i*0.1)*size,size)--((1-i*.1)*size,0pt);
+
+enddef; % upwhitepoint
+
+%%%%%%%%%%%%%%%%%%
+% downwhitepoint %
+%%%%%%%%%%%%%%%%%%
+
+def downwhitepoint(expr i) =
+
+pickup pencircle scaled pensize;
+
+draw (0.1*i*size,size)--(0.1*(i+1)*size,0pt);
+draw ((0.9-i*0.1)*size,0pt)--((1-i*.1)*size,size);
+
+enddef; % downwhitepoint
+
+%%%%%%%%%%%%%%%%
+% upblackpoint %
+%%%%%%%%%%%%%%%%
+
+def upblackpoint(expr i) =
+
+boolean first_time;
+
+x := 0;
+y := 0;
+
+if 2*round(i/2)=i:
+ offset := 0;
+else :
+ offset := size/(2number_shadepoints);
+fi;
+
+pickup pencircle scaled 2pensize;
+
+for y = 1 upto number_shadepoints :
+ if offset = 0 :
+ offset := size/(2number_shadepoints)
+ else :
+ offset := 0;
+ fi;
+ for x = 0 upto number_shadepoints - 1:
+ if (0.1*(i+y/number_shadepoints)*size< x*(size/number_shadepoints)+offset) and
+ ((1-(i+y/number_shadepoints)*0.1)*size > x*(size/number_shadepoints)+offset):
+ drawdot (x*(size/number_shadepoints)+offset,y*(size/number_shadepoints));
+ fi;
+ endfor;
+endfor;
+
+pickup pencircle scaled pensize;
+
+draw (0.1*i*size,0pt)--(0.1*(i+1)*size,size);
+draw ((0.9-i*0.1)*size,size)--((1-i*.1)*size,0pt);
+
+enddef; % upblackpoint
+
+%%%%%%%%%%%%%%%%%%
+% downblackpoint %
+%%%%%%%%%%%%%%%%%%
+
+def downblackpoint(expr i) =
+
+boolean first_time;
+
+x := 0;
+y := 0;
+if 2*round(i/2)=i:
+ offset := size/(2number_shadepoints);
+else :
+ offset := 0;
+fi;
+
+pickup pencircle scaled 2pensize;
+
+for y = 1 upto number_shadepoints :
+ if offset = 0 :
+ offset := size/(2number_shadepoints)
+ else :
+ offset := 0;
+ fi;
+ for x = 0 upto number_shadepoints - 1:
+ if (0.1*(i+(1-y/number_shadepoints))*size< x*(size/number_shadepoints)+offset) and
+ ((1-(i+(1-y/number_shadepoints))*0.1)*size > x*(size/number_shadepoints)+offset):
+ drawdot (x*(size/number_shadepoints)+offset,y*(size/number_shadepoints));
+ fi;
+ endfor;
+endfor;
+
+pickup pencircle scaled pensize;
+
+draw (0.1*i*size,size)--(0.1*(i+1)*size,0pt);
+draw ((0.9-i*0.1)*size,0pt)--((1-i*.1)*size,size);
+
+enddef; % upblackpoint
+
+%%%%%%%%%%%%%%%%
+% whitechecker %
+%%%%%%%%%%%%%%%%
+
+def whitechecker =
+
+pickup pencircle scaled 3pensize;
+
+erase fill fullcircle scaled whitecheckersize shifted (size/2, size/2);
+draw fullcircle scaled whitecheckersize shifted (size/2, size/2);
+
+enddef; % whitechecker
+
+%%%%%%%%%%%%%%%%
+% blackchecker %
+%%%%%%%%%%%%%%%%
+
+def blackchecker =
+
+pickup pencircle scaled 3pensize;
+
+fill fullcircle scaled blackcheckersize shifted (size/2, size/2);
+
+enddef; % blackchecker
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Macros to draw the digits from 0 to 9 %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+
+def drawdigit_zero(expr xstart,ystart,scale) =
+
+pickup pencircle xscaled digitpensize yscaled pensize;
+draw (xstart+scale*size/4,ystart+scale*size){right}..(xstart+scale*size/2,ystart+scale*size/2){down}..(xstart+scale*size/4,ystart+scale*0){left}..(xstart+scale*0,ystart+scale*size/2){up}..cycle;
+
+enddef; %drawdigit_zero
+
+def drawdigit_one(expr xstart,ystart,scale) =
+
+pickup pencircle xscaled digitpensize yscaled pensize;
+draw (xstart+scale*0,ystart+scale*3size/4)--(xstart+scale*size/4,ystart+scale*size)--(xstart+scale*size/4,ystart+scale*0);
+draw (xstart+scale*0,ystart+scale*0)--(xstart+scale*size/2,ystart+scale*0);
+
+enddef; %drawdigit_one
+
+def drawdigit_two(expr xstart,ystart,scale) =
+
+pickup pencircle xscaled digitpensize yscaled pensize;
+draw (xstart+scale*0,ystart+scale*3size/4){up}..(xstart+scale*size/4,ystart+scale*size){right}..(xstart+scale*size/2,ystart+scale*3size/4){down}..(xstart+scale*0,ystart+scale*0){dir 270};
+draw(xstart+scale*0,ystart+scale*0)--(xstart+scale*size/2,ystart+scale*0);
+
+enddef; %drawdigit_two
+
+def drawdigit_three(expr xstart,ystart,scale) =
+
+pickup pencircle xscaled digitpensize yscaled pensize;
+draw (xstart+scale*0,ystart+scale*7size/8){dir 45}..(xstart+scale*size/4,ystart+scale*size){right}..(xstart+scale*size/2,ystart+scale*13size/16){down}..(xstart+scale*size/8,ystart+scale*55size/100){left};
+draw (xstart+scale*size/8,ystart+scale*55size/100){right}..(xstart+scale*size/2,ystart+scale*5size/16){down}..(xstart+scale*size/4,ystart+scale*0){left}..(xstart+scale*0,ystart+scale*size/8){up};
+
+enddef; %drawdigit_three
+
+def drawdigit_four(expr xstart,ystart,scale) =
+
+pickup pencircle xscaled digitpensize yscaled pensize;
+
+draw (xstart+scale*size/2,ystart+scale*size/4)--(xstart+scale*0,ystart+scale*size/4)--(xstart+scale*3size/8,ystart+scale*size)--(xstart+scale*3size/8,ystart+scale*0)
+
+enddef; %drawdigit_four
+
+def drawdigit_five(expr xstart,ystart,scale) =
+
+pickup pencircle xscaled digitpensize yscaled pensize;
+
+draw (xstart+scale*size/2,ystart+scale*size)--(xstart+scale*0,ystart+scale*size)--(xstart+scale*0,ystart+scale*55size/100){dir 13}..(xstart+scale*size/2,ystart+scale*size/4){down}..(xstart+scale*size/4,ystart+scale*0){left}..(xstart+scale*0,ystart+scale*size/4){up}
+
+enddef; %drawdigit_five
+
+def drawdigit_six(expr xstart,ystart,scale) =
+
+pickup pencircle xscaled digitpensize yscaled pensize;
+
+draw (xstart+scale*size/2,ystart+scale*size){left}..(xstart+scale*0,ystart+scale*3size/10){down}..(xstart+scale*size/4,ystart+scale*0){right}..(xstart+scale*size/2,ystart+scale*3size/10){up}..(xstart+scale*size/4,ystart+scale*6size/10){left}..(xstart+scale*0,ystart+scale*3size/10){down}
+
+enddef; %drawdigit_six
+
+def drawdigit_seven(expr xstart,ystart,scale) =
+
+pickup pencircle xscaled digitpensize yscaled pensize;
+
+draw (xstart+scale*0,ystart+scale*size)--(xstart+scale*size/2,ystart+scale*size)--(xstart+scale*0,ystart+scale*0)
+
+enddef; %drawdigit_seven
+
+def drawdigit_eight(expr xstart,ystart,scale) =
+
+pickup pencircle xscaled digitpensize yscaled pensize;
+
+diameter1 := scale*0.9size/2;
+diameter2 := scale*1.1size/2;
+draw fullcircle scaled diameter1 shifted (xstart+scale*size/4,ystart+scale*1.55size/2);
+draw fullcircle scaled diameter2 shifted (xstart+scale*size/4,ystart+scale*0.55size/2);
+
+enddef; %drawdigit_eight
+
+def drawdigit_nine(expr xstart,ystart,scale) =
+
+pickup pencircle xscaled digitpensize yscaled pensize;
+
+draw (xstart+scale*0,ystart+scale*0){right}..(xstart+scale*size/2,ystart+scale*7size/10){up}..(xstart+scale*size/4,ystart+scale*size){left}..(xstart+scale*0,ystart+scale*7size/10){down}..(xstart+scale*size/4,ystart+scale*4size/10){right}..(xstart+scale*size/2,ystart+scale*7size/10){up}
+
+enddef; %drawdigit_nine
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% The numbers from 1 to 24 to number the boardpoints %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+beginchar(128, size#, size#, 0);
+
+drawdigit_one(0.425size,0.35size,0.3)
+
+endchar;
+
+beginchar(129, size#, size#, 0);
+
+drawdigit_two(0.425size,0.35size,0.3)
+
+endchar;
+
+beginchar(130, size#, size#, 0);
+
+drawdigit_three(0.425size,0.35size,0.3)
+
+endchar;
+
+beginchar(131, size#, size#, 0);
+
+drawdigit_four(0.425size,0.35size,0.3)
+
+endchar;
+
+beginchar(132, size#, size#, 0);
+
+drawdigit_five(0.425size,0.35size,0.3)
+
+endchar;
+
+beginchar(133, size#, size#, 0);
+
+drawdigit_six(0.425size,0.35size,0.3)
+
+endchar;
+
+beginchar(134, size#, size#, 0);
+
+drawdigit_seven(0.44size,0.35size,0.3)
+
+endchar;
+
+beginchar(135, size#, size#, 0);
+
+drawdigit_eight(0.425size,0.35size,0.3)
+
+endchar;
+
+beginchar(136, size#, size#, 0);
+
+drawdigit_nine(0.425size,0.35size,0.3)
+
+endchar;
+
+beginchar(137, size#, size#, 0);
+
+drawdigit_one(0.32size,0.35size,0.3)
+drawdigit_zero(0.55size,0.35size,0.3)
+
+endchar;
+
+beginchar(138, size#, size#, 0);
+
+drawdigit_one(0.32size,0.35size,0.3)
+drawdigit_one(0.55size,0.35size,0.3)
+
+endchar;
+
+beginchar(139, size#, size#, 0);
+
+drawdigit_one(0.32size,0.35size,0.3)
+drawdigit_two(0.55size,0.35size,0.3)
+
+endchar;
+
+beginchar(140, size#, size#, 0);
+
+drawdigit_one(0.32size,0.35size,0.3)
+drawdigit_three(0.55size,0.35size,0.3)
+
+endchar;
+
+beginchar(141, size#, size#, 0);
+
+drawdigit_one(0.32size,0.35size,0.3)
+drawdigit_four(0.55size,0.35size,0.3)
+
+endchar;
+
+beginchar(142, size#, size#, 0);
+
+drawdigit_one(0.32size,0.35size,0.3)
+drawdigit_five(0.55size,0.35size,0.3)
+
+endchar;
+
+beginchar(143, size#, size#, 0);
+
+drawdigit_one(0.32size,0.35size,0.3)
+drawdigit_six(0.55size,0.35size,0.3)
+
+endchar;
+
+beginchar(144, size#, size#, 0);
+
+drawdigit_one(0.32size,0.35size,0.3)
+drawdigit_seven(0.55size,0.35size,0.3)
+
+endchar;
+
+beginchar(145, size#, size#, 0);
+
+drawdigit_one(0.32size,0.35size,0.3)
+drawdigit_eight(0.55size,0.35size,0.3)
+
+endchar;
+
+beginchar(146, size#, size#, 0);
+
+drawdigit_one(0.32size,0.35size,0.3)
+drawdigit_nine(0.55size,0.35size,0.3)
+
+endchar;
+
+beginchar(147, size#, size#, 0);
+
+drawdigit_two(0.32size,0.35size,0.3)
+drawdigit_zero(0.55size,0.35size,0.3)
+
+endchar;
+
+beginchar(148, size#, size#, 0);
+
+drawdigit_two(0.32size,0.35size,0.3)
+drawdigit_one(0.55size,0.35size,0.3)
+
+endchar;
+
+beginchar(149, size#, size#, 0);
+
+drawdigit_two(0.32size,0.35size,0.3)
+drawdigit_two(0.55size,0.35size,0.3)
+
+endchar;
+
+beginchar(150, size#, size#, 0);
+
+drawdigit_two(0.32size,0.35size,0.3)
+drawdigit_three(0.55size,0.35size,0.3)
+
+endchar;
+
+beginchar(151, size#, size#, 0);
+
+drawdigit_two(0.32size,0.35size,0.3)
+drawdigit_four(0.55size,0.35size,0.3)
+
+endchar;
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% checkers with numbers on it %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+code := 142;
+
+for background = 1 upto 5:
+
+for colour = 1 upto 2:
+
+code := code + 10;
+
+beginchar(code, size#, size#, 0);
+
+if background = 2: downwhitepoint(4) fi
+if background = 3: downblackpoint(4) fi
+if background = 4: upwhitepoint(4) fi
+if background = 5: upblackpoint(4) fi
+
+if colour = 1: whitechecker
+else: blackchecker
+fi
+
+erase fill (size/4,size/4)--(size/4,3size/4)--(3size/4,3size/4)--(3size/4,size/4)--cycle;
+
+drawdigit_six(0.425size,0.35size,0.3)
+
+endchar;
+
+beginchar(code+1, size#, size#, 0);
+
+if background = 2: downwhitepoint(4) fi
+if background = 3: downblackpoint(4) fi
+if background = 4: upwhitepoint(4) fi
+if background = 5: upblackpoint(4) fi
+
+if colour = 1: whitechecker
+else: blackchecker
+fi
+
+erase fill (size/4,size/4)--(size/4,3size/4)--(3size/4,3size/4)--(3size/4,size/4)--cycle;
+
+
+drawdigit_seven(0.44size,0.35size,0.3)
+
+endchar;
+
+beginchar(code+2, size#, size#, 0);
+
+if background = 2: downwhitepoint(4) fi
+if background = 3: downblackpoint(4) fi
+if background = 4: upwhitepoint(4) fi
+if background = 5: upblackpoint(4) fi
+
+if colour = 1: whitechecker
+else: blackchecker
+fi
+
+erase fill (size/4,size/4)--(size/4,3size/4)--(3size/4,3size/4)--(3size/4,size/4)--cycle;
+
+
+drawdigit_eight(0.425size,0.35size,0.3)
+
+endchar;
+
+beginchar(code+3, size#, size#, 0);
+
+if background = 2: downwhitepoint(4) fi
+if background = 3: downblackpoint(4) fi
+if background = 4: upwhitepoint(4) fi
+if background = 5: upblackpoint(4) fi
+
+if colour = 1: whitechecker
+else: blackchecker
+fi
+
+erase fill (size/4,size/4)--(size/4,3size/4)--(3size/4,3size/4)--(3size/4,size/4)--cycle;
+
+
+drawdigit_nine(0.425size,0.35size,0.3)
+
+endchar;
+
+beginchar(code+4, size#, size#, 0);
+
+if background = 2: downwhitepoint(4) fi
+if background = 3: downblackpoint(4) fi
+if background = 4: upwhitepoint(4) fi
+if background = 5: upblackpoint(4) fi
+
+if colour = 1: whitechecker
+else: blackchecker
+fi
+
+erase fill (size/4,size/4)--(size/4,3size/4)--(3size/4,3size/4)--(3size/4,size/4)--cycle;
+
+
+drawdigit_one(0.32size,0.35size,0.3)
+drawdigit_zero(0.55size,0.35size,0.3)
+
+endchar;
+
+beginchar(code+5, size#, size#, 0);
+
+if background = 2: downwhitepoint(4) fi
+if background = 3: downblackpoint(4) fi
+if background = 4: upwhitepoint(4) fi
+if background = 5: upblackpoint(4) fi
+
+if colour = 1: whitechecker
+else: blackchecker
+fi
+
+erase fill (size/4,size/4)--(size/4,3size/4)--(3size/4,3size/4)--(3size/4,size/4)--cycle;
+
+
+drawdigit_one(0.32size,0.35size,0.3)
+drawdigit_one(0.55size,0.35size,0.3)
+
+endchar;
+
+beginchar(code+6, size#, size#, 0);
+
+if background = 2: downwhitepoint(4) fi
+if background = 3: downblackpoint(4) fi
+if background = 4: upwhitepoint(4) fi
+if background = 5: upblackpoint(4) fi
+
+if colour = 1: whitechecker
+else: blackchecker
+fi
+
+erase fill (size/4,size/4)--(size/4,3size/4)--(3size/4,3size/4)--(3size/4,size/4)--cycle;
+
+
+drawdigit_one(0.32size,0.35size,0.3)
+drawdigit_two(0.55size,0.35size,0.3)
+
+endchar;
+
+beginchar(code+7, size#, size#, 0);
+
+if background = 2: downwhitepoint(4) fi
+if background = 3: downblackpoint(4) fi
+if background = 4: upwhitepoint(4) fi
+if background = 5: upblackpoint(4) fi
+
+if colour = 1: whitechecker
+else: blackchecker
+fi
+
+erase fill (size/4,size/4)--(size/4,3size/4)--(3size/4,3size/4)--(3size/4,size/4)--cycle;
+
+
+drawdigit_one(0.32size,0.35size,0.3)
+drawdigit_three(0.55size,0.35size,0.3)
+
+endchar;
+
+beginchar(code+8, size#, size#, 0);
+
+if background = 2: downwhitepoint(4) fi
+if background = 3: downblackpoint(4) fi
+if background = 4: upwhitepoint(4) fi
+if background = 5: upblackpoint(4) fi
+
+if colour = 1: whitechecker
+else: blackchecker
+fi
+
+erase fill (size/4,size/4)--(size/4,3size/4)--(3size/4,3size/4)--(3size/4,size/4)--cycle;
+
+
+drawdigit_one(0.32size,0.35size,0.3)
+drawdigit_four(0.55size,0.35size,0.3)
+
+endchar;
+
+beginchar(code+9, size#, size#, 0);
+
+if background = 2: downwhitepoint(4) fi
+if background = 3: downblackpoint(4) fi
+if background = 4: upwhitepoint(4) fi
+if background = 5: upblackpoint(4) fi
+
+if colour = 1: whitechecker
+else: blackchecker
+fi
+
+erase fill (size/4,size/4)--(size/4,3size/4)--(3size/4,3size/4)--(3size/4,size/4)--cycle;
+
+
+drawdigit_one(0.32size,0.35size,0.3)
+drawdigit_five(0.55size,0.35size,0.3)
+
+endchar;
+
+endfor;
+
+endfor;
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% white points without checkers %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+beginchar("a", size#, size#, 0);
+
+upwhitepoint(0)
+
+endchar;
+
+beginchar("b", size#, size#, 0);
+
+upwhitepoint(1)
+
+endchar;
+
+beginchar("c", size#, size#, 0);
+
+upwhitepoint(2)
+
+endchar;
+
+beginchar("d", size#, size#, 0);
+
+upwhitepoint(3)
+
+endchar;
+
+beginchar("e", size#, size#, 0);
+
+upwhitepoint(4)
+
+endchar;
+
+beginchar("k", size#, size#, 0);
+
+downwhitepoint(0)
+
+endchar;
+
+beginchar("l", size#, size#, 0);
+
+downwhitepoint(1)
+
+endchar;
+
+beginchar("m", size#, size#, 0);
+
+downwhitepoint(2)
+
+endchar;
+
+beginchar("n", size#, size#, 0);
+
+downwhitepoint(3)
+
+endchar;
+
+beginchar("o", size#, size#, 0);
+
+downwhitepoint(4)
+
+endchar;
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% black points without checkers %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+beginchar("f", size#, size#, 0);
+
+upblackpoint(0)
+
+endchar;
+
+beginchar("g", size#, size#, 0);
+
+upblackpoint(1)
+
+endchar;
+
+beginchar("h", size#, size#, 0);
+
+upblackpoint(2)
+
+endchar;
+
+beginchar("i", size#, size#, 0);
+
+upblackpoint(3)
+
+endchar;
+
+beginchar("j", size#, size#, 0);
+
+upblackpoint(4)
+
+endchar;
+
+beginchar("p", size#, size#, 0);
+
+downblackpoint(0)
+
+endchar;
+
+beginchar("q", size#, size#, 0);
+
+downblackpoint(1)
+
+endchar;
+
+beginchar("r", size#, size#, 0);
+
+downblackpoint(2)
+
+endchar;
+
+beginchar("s", size#, size#, 0);
+
+downblackpoint(3)
+
+endchar;
+
+beginchar("t", size#, size#, 0);
+
+downblackpoint(4)
+
+endchar;
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% white points with white checkers %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+beginchar("A", size#, size#, 0);
+
+upwhitepoint(0)
+whitechecker
+
+endchar;
+
+beginchar("B", size#, size#, 0);
+
+upwhitepoint(1)
+whitechecker
+
+endchar;
+
+
+beginchar("C", size#, size#, 0);
+
+upwhitepoint(2)
+whitechecker
+
+endchar;
+
+beginchar("D", size#, size#, 0);
+
+upwhitepoint(3)
+
+whitechecker
+endchar;
+
+beginchar("E", size#, size#, 0);
+
+upwhitepoint(4)
+whitechecker
+
+endchar;
+
+beginchar("K", size#, size#, 0);
+
+downwhitepoint(0)
+whitechecker
+
+endchar;
+
+beginchar("L", size#, size#, 0);
+
+downwhitepoint(1)
+whitechecker
+
+endchar;
+
+beginchar("M", size#, size#, 0);
+
+downwhitepoint(2)
+whitechecker
+
+endchar;
+
+beginchar("N", size#, size#, 0);
+
+downwhitepoint(3)
+
+whitechecker
+endchar;
+
+beginchar("O", size#, size#, 0);
+
+downwhitepoint(4)
+whitechecker
+
+endchar;
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% white points with black checkers %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+beginchar("0", size#, size#, 0);
+
+upwhitepoint(0)
+blackchecker
+
+endchar;
+
+beginchar("1", size#, size#, 0);
+
+upwhitepoint(1)
+blackchecker
+
+endchar;
+
+
+beginchar("2", size#, size#, 0);
+
+upwhitepoint(2)
+blackchecker
+
+endchar;
+
+beginchar("3", size#, size#, 0);
+
+upwhitepoint(3)
+
+blackchecker
+endchar;
+
+beginchar("4", size#, size#, 0);
+
+upwhitepoint(4)
+blackchecker
+
+endchar;
+
+beginchar("P", size#, size#, 0);
+
+downwhitepoint(0)
+blackchecker
+
+endchar;
+
+beginchar("Q", size#, size#, 0);
+
+downwhitepoint(1)
+blackchecker
+
+endchar;
+
+beginchar("R", size#, size#, 0);
+
+downwhitepoint(2)
+blackchecker
+
+endchar;
+
+beginchar("S", size#, size#, 0);
+
+downwhitepoint(3)
+
+blackchecker
+endchar;
+
+beginchar("T", size#, size#, 0);
+
+downwhitepoint(4)
+blackchecker
+
+endchar;
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% black points with white checkers %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+beginchar("F", size#, size#, 0);
+
+upblackpoint(0);
+whitechecker;
+
+endchar;
+
+beginchar("G", size#, size#, 0);
+
+upblackpoint(1);
+whitechecker;
+
+endchar;
+
+beginchar("H", size#, size#, 0);
+
+upblackpoint(2);
+whitechecker;
+
+endchar;
+
+beginchar("I", size#, size#, 0);
+
+upblackpoint(3);
+
+whitechecker;
+endchar;
+
+beginchar("J", size#, size#, 0);
+
+upblackpoint(4);
+whitechecker;
+
+endchar;
+
+beginchar("U", size#, size#, 0);
+
+downblackpoint(0);
+whitechecker;
+
+endchar;
+
+beginchar("V", size#, size#, 0);
+
+downblackpoint(1);
+whitechecker;
+
+endchar;
+
+
+beginchar("W", size#, size#, 0);
+
+downblackpoint(2);
+whitechecker;
+
+endchar;
+
+beginchar("X", size#, size#, 0);
+
+downblackpoint(3);
+
+whitechecker;
+endchar;
+
+beginchar("Y", size#, size#, 0);
+
+downblackpoint(4);
+whitechecker;
+
+endchar;
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% black points with black checkers %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+beginchar("5", size#, size#, 0);
+
+upblackpoint(0)
+blackchecker
+
+endchar;
+beginchar("6", size#, size#, 0);
+
+upblackpoint(1)
+blackchecker
+
+endchar;
+
+
+beginchar("7", size#, size#, 0);
+
+upblackpoint(2)
+blackchecker
+
+endchar;
+
+beginchar("8", size#, size#, 0);
+
+upblackpoint(3)
+
+blackchecker
+endchar;
+
+beginchar("9", size#, size#, 0);
+
+upblackpoint(4)
+blackchecker
+
+endchar;
+
+beginchar("u", size#, size#, 0);
+
+downblackpoint(0)
+blackchecker
+
+endchar;
+
+beginchar("v", size#, size#, 0);
+
+downblackpoint(1)
+blackchecker
+
+endchar;
+
+beginchar("w", size#, size#, 0);
+
+downblackpoint(2)
+blackchecker
+
+endchar;
+
+beginchar("x", size#, size#, 0);
+
+downblackpoint(3)
+
+blackchecker
+endchar;
+
+beginchar("y", size#, size#, 0);
+
+downblackpoint(4)
+blackchecker
+
+endchar;
+
+%%%%%%%%%%%%%%%%%%%
+% An empty square %
+%%%%%%%%%%%%%%%%%%%
+
+beginchar("z", size#, size#, 0);
+
+endchar;
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% A (left or right) border %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+beginchar("Z", pensize#, size#, 0);
+
+pickup pencircle scaled pensize;
+
+draw (0pt,0pt)--(0pt,size);
+
+endchar;
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% An (upper or lower) border %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+beginchar("-", size#, pensize#, 0);
+
+pickup pencircle scaled pensize;
+
+draw (0pt,0pt)--(size,0pt);
+
+endchar;
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% A "boarderthick" filler %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+beginchar(0, pensize#, pensize#, 0);
+
+endchar;
+
+%%%%%%%%%%%%%%%%%%%
+% A black Checker %
+%%%%%%%%%%%%%%%%%%%
+
+beginchar("@", size#, size#, 0);
+
+blackchecker
+
+endchar;
+
+
+%%%%%%%%%%%%%%%%%%%
+% A white Checker %
+%%%%%%%%%%%%%%%%%%%
+
+beginchar("*", size#, size#, 0);
+
+whitechecker
+
+endchar;
+
+end
+
diff --git a/macros/latex/contrib/bg/bg.sty b/macros/latex/contrib/bg/bg.sty
new file mode 100644
index 0000000000..952f7c12d2
--- /dev/null
+++ b/macros/latex/contrib/bg/bg.sty
@@ -0,0 +1,543 @@
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% bg.sty : A style file to annote backgammon matches and positions %
+% %
+% Copyright by J. Richter 1994 %
+% %
+% Distribution and use is free, as long as you don't change this file %
+% %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\newcount\@value
+\newcount\@f
+\newcount\@t
+
+\newcount\@movenumber
+\newfont{\@bigboardfont}{bg scaled 750}
+\newfont{\@normalboardfont}{bg scaled 500}
+\newfont{\@smallboardfont}{bg scaled 250}
+
+\newdimen\@whiteskip
+\@whiteskip=\textwidth
+\divide\@whiteskip by 2
+
+\def\@black{-1}
+\def\@white{1}
+\def\@middle{0}
+
+\newif\ifcube % only true if the cubevalue should be printed with the boards
+\newif\ifblack % only true if black is on move
+\newif\ifnumbers % only true if boardpoints are numbered
+\newif\ifmoves % only true if \move prints out his arguments
+\newif\ifindent % only true if the moves of white are indented by \@whiteskip
+\newif\ifptsonmove % only true if points are numbered from the view of the one on move
+\newif\ifbothhalfs % only true if both halfs of the board are printed
+\newif\ifsecmove % only true if the move numbers change only every second move
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Some global default settings of the switches %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\def\boardtype{drawnormalboard}
+\indenttrue
+\numberstrue
+\cubetrue
+\movestrue
+\blacktrue
+\ptsonmovetrue
+\bothhalfstrue
+\secmovetrue
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Macros to set and get the value of a point %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\def\@set[#1](#2){
+ \expandafter\xdef\csname point#1\endcsname{#2}}
+
+\def\@get#1[#2]{
+ \edef#1{\csname point#2\endcsname}}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Macro to make all points of the board empty %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\def\@clearboard{
+\@value=0{
+\loop \@set[\the\@value](0) \ifnum\@value<27\advance\@value by 1 \repeat}
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Macro to set the board to the configuration at the start of the game %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+% White plays from 0 to 24 with 0 being the bar of White
+% Black plays from 25 to 1 with 25 being the bar of Black
+
+% a positive value means that White has this number of checkers on the point
+% a negative value means that Black has the negative of this number as
+% chechers on this point
+
+\def\initboard{
+\@set[0](0) \@set[1](2) \@set[2](0) \@set[3](0) \@set[4](0) \@set[5](0) \@set[6](-5)
+\@set[7](0) \@set[8](-3) \@set[9](0) \@set[10](0) \@set[11](0) \@set[12](5)
+\@set[13](-5) \@set[14](0) \@set[15](0) \@set[16](0) \@set[17](3) \@set[18](0)
+\@set[19](5) \@set[20](0) \@set[21](0) \@set[22](0) \@set[23](0) \@set[24](-2)
+\@set[25](0)
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Macros to draw a single point %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\def\@whitehangingpoint[#1]{
+\@get\@dummy[#1]
+\@value=\@dummy{
+\ifnum\@value=0\vbox{\hbox{k}\hbox{l}\hbox{m}\hbox{n}\hbox{o}}\else
+\ifnum\@value=1\vbox{\hbox{K}\hbox{l}\hbox{m}\hbox{n}\hbox{o}}\else
+\ifnum\@value=2\vbox{\hbox{K}\hbox{L}\hbox{m}\hbox{n}\hbox{o}}\else
+\ifnum\@value=3\vbox{\hbox{K}\hbox{L}\hbox{M}\hbox{n}\hbox{o}}\else
+\ifnum\@value=4\vbox{\hbox{K}\hbox{L}\hbox{M}\hbox{N}\hbox{o}}\else
+\ifnum\@value=5\vbox{\hbox{K}\hbox{L}\hbox{M}\hbox{N}\hbox{O}}\else
+\ifnum\@value>5\advance\@value by 166
+\vbox{\hbox{K}\hbox{L}\hbox{M}\hbox{N}\hbox{\char\the\@value}}\else
+\ifnum\@value=-1\vbox{\hbox{P}\hbox{l}\hbox{m}\hbox{n}\hbox{o}}\else
+\ifnum\@value=-2\vbox{\hbox{P}\hbox{Q}\hbox{m}\hbox{n}\hbox{o}}\else
+\ifnum\@value=-3\vbox{\hbox{P}\hbox{Q}\hbox{R}\hbox{n}\hbox{o}}\else
+\ifnum\@value=-4\vbox{\hbox{P}\hbox{Q}\hbox{R}\hbox{S}\hbox{o}}\else
+\ifnum\@value=-5\vbox{\hbox{P}\hbox{Q}\hbox{R}\hbox{S}\hbox{T}}\else
+\ifnum\@value<-5\multiply\@value by -1\advance\@value by 176
+\vbox{\hbox{P}\hbox{Q}\hbox{R}\hbox{S}\hbox{\char\the\@value}}
+\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi}
+}
+
+\def\@blackhangingpoint[#1]{
+\@get\@dummy[#1]
+\@value=\@dummy{
+\ifnum\@value=0\vbox{\hbox{p}\hbox{q}\hbox{r}\hbox{s}\hbox{t}}\else
+\ifnum\@value=1\vbox{\hbox{U}\hbox{q}\hbox{r}\hbox{s}\hbox{t}}\else
+\ifnum\@value=2\vbox{\hbox{U}\hbox{V}\hbox{r}\hbox{s}\hbox{t}}\else
+\ifnum\@value=3\vbox{\hbox{U}\hbox{V}\hbox{W}\hbox{s}\hbox{t}}\else
+\ifnum\@value=4\vbox{\hbox{U}\hbox{V}\hbox{W}\hbox{X}\hbox{t}}\else
+\ifnum\@value=5\vbox{\hbox{U}\hbox{V}\hbox{W}\hbox{X}\hbox{Y}}\else
+\ifnum\@value>5\advance\@value by 186
+\vbox{\hbox{U}\hbox{V}\hbox{W}\hbox{X}\hbox{\char\the\@value}}\else
+\ifnum\@value=-1\vbox{\hbox{u}\hbox{q}\hbox{r}\hbox{s}\hbox{t}}\else
+\ifnum\@value=-2\vbox{\hbox{u}\hbox{v}\hbox{r}\hbox{s}\hbox{t}}\else
+\ifnum\@value=-3\vbox{\hbox{u}\hbox{v}\hbox{w}\hbox{s}\hbox{t}}\else
+\ifnum\@value=-4\vbox{\hbox{u}\hbox{v}\hbox{w}\hbox{x}\hbox{t}}\else
+\ifnum\@value=-5\vbox{\hbox{u}\hbox{v}\hbox{w}\hbox{x}\hbox{y}}\else
+\ifnum\@value<-5\multiply\@value by -1\advance\@value by 196
+\vbox{\hbox{u}\hbox{v}\hbox{w}\hbox{x}\hbox{\char\the\@value}}
+\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi}
+}
+
+\def\@whitestandingpoint[#1]{
+\@get\@dummy[#1]
+\@value=\@dummy{
+\ifnum\@value=0\vbox{\hbox{e}\hbox{d}\hbox{c}\hbox{b}\hbox{a}}\else
+\ifnum\@value=1\vbox{\hbox{e}\hbox{d}\hbox{c}\hbox{b}\hbox{A}}\else
+\ifnum\@value=2\vbox{\hbox{e}\hbox{d}\hbox{c}\hbox{B}\hbox{A}}\else
+\ifnum\@value=3\vbox{\hbox{e}\hbox{d}\hbox{C}\hbox{B}\hbox{A}}\else
+\ifnum\@value=4\vbox{\hbox{e}\hbox{D}\hbox{C}\hbox{B}\hbox{A}}\else
+\ifnum\@value=5\vbox{\hbox{E}\hbox{D}\hbox{C}\hbox{B}\hbox{A}}\else
+\ifnum\@value>5\advance\@value by 206
+\vbox{\hbox{\char\the\@value}\hbox{D}\hbox{C}\hbox{B}\hbox{A}}\else
+\ifnum\@value=-1\vbox{\hbox{e}\hbox{d}\hbox{c}\hbox{b}\hbox{0}}\else
+\ifnum\@value=-2\vbox{\hbox{e}\hbox{d}\hbox{c}\hbox{1}\hbox{0}}\else
+\ifnum\@value=-3\vbox{\hbox{e}\hbox{d}\hbox{2}\hbox{1}\hbox{0}}\else
+\ifnum\@value=-4\vbox{\hbox{e}\hbox{3}\hbox{2}\hbox{1}\hbox{0}}\else
+\ifnum\@value=-5\vbox{\hbox{4}\hbox{3}\hbox{2}\hbox{1}\hbox{0}}\else
+\ifnum\@value<-5\multiply\@value by -1\advance\@value by 216
+\vbox{\hbox{\char\the\@value}\hbox{3}\hbox{2}\hbox{1}\hbox{0}}
+\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi}
+}
+
+\def\@blackstandingpoint[#1]{
+\@get\@dummy[#1]
+\@value=\@dummy{
+\ifnum\@value=0\vbox{\hbox{j}\hbox{i}\hbox{h}\hbox{g}\hbox{f}}\else
+\ifnum\@value=1\vbox{\hbox{j}\hbox{i}\hbox{h}\hbox{g}\hbox{F}}\else
+\ifnum\@value=2\vbox{\hbox{j}\hbox{i}\hbox{h}\hbox{G}\hbox{F}}\else
+\ifnum\@value=3\vbox{\hbox{j}\hbox{i}\hbox{H}\hbox{G}\hbox{F}}\else
+\ifnum\@value=4\vbox{\hbox{j}\hbox{I}\hbox{H}\hbox{G}\hbox{F}}\else
+\ifnum\@value=5\vbox{\hbox{J}\hbox{I}\hbox{H}\hbox{G}\hbox{F}}\else
+\ifnum\@value>5\advance\@value by 226
+\vbox{\hbox{\char\the\@value}\hbox{I}\hbox{H}\hbox{G}\hbox{F}}\else
+\ifnum\@value=-1\vbox{\hbox{j}\hbox{i}\hbox{h}\hbox{g}\hbox{5}}\else
+\ifnum\@value=-2\vbox{\hbox{j}\hbox{i}\hbox{h}\hbox{6}\hbox{5}}\else
+\ifnum\@value=-3\vbox{\hbox{j}\hbox{i}\hbox{7}\hbox{6}\hbox{5}}\else
+\ifnum\@value=-4\vbox{\hbox{j}\hbox{8}\hbox{7}\hbox{6}\hbox{5}}\else
+\ifnum\@value=-5\vbox{\hbox{9}\hbox{8}\hbox{7}\hbox{6}\hbox{5}}\else
+\ifnum\@value<-5\multiply\@value by -1\advance\@value by 236
+\vbox{\hbox{\char\the\@value}\hbox{8}\hbox{7}\hbox{6}\hbox{5}}
+\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi}
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Macro to draw the pieces on the bar %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\def\hangingbar[#1]{
+\@get\@dummy[#1]
+\@value=\@dummy{
+\ifnum\@value=0\vbox{\hbox{z}\hbox{z}\hbox{z}\hbox{z}\hbox{z}}\else
+\ifnum\@value=1\vbox{\hbox{*}\hbox{z}\hbox{z}\hbox{z}\hbox{z}}\else
+\ifnum\@value=2\vbox{\hbox{*}\hbox{*}\hbox{z}\hbox{z}\hbox{z}}\else
+\ifnum\@value=3\vbox{\hbox{*}\hbox{*}\hbox{*}\hbox{z}\hbox{z}}\else
+\ifnum\@value=4\vbox{\hbox{*}\hbox{*}\hbox{*}\hbox{*}\hbox{z}}\else
+\ifnum\@value=5\vbox{\hbox{*}\hbox{*}\hbox{*}\hbox{*}\hbox{*}}\else
+\ifnum\@value>5\advance\@value by 146
+\vbox{\hbox{*}\hbox{*}\hbox{*}\hbox{*}\hbox{\char\the\@value}}\else
+\ifnum\@value=-1\vbox{\hbox{@}\hbox{z}\hbox{z}\hbox{z}\hbox{z}}\else
+\ifnum\@value=-2\vbox{\hbox{@}\hbox{@}\hbox{z}\hbox{z}\hbox{z}}\else
+\ifnum\@value=-3\vbox{\hbox{@}\hbox{@}\hbox{@}\hbox{z}\hbox{z}}\else
+\ifnum\@value=-4\vbox{\hbox{@}\hbox{@}\hbox{@}\hbox{@}\hbox{z}}\else
+\ifnum\@value=-5\vbox{\hbox{@}\hbox{@}\hbox{@}\hbox{@}\hbox{@}}\else
+\ifnum\@value<-5\multiply\@value by -1\advance\@value by 156
+\vbox{\hbox{@}\hbox{@}\hbox{@}\hbox{@}\hbox{\char\the\@value}}
+\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi}
+}
+
+\def\standingbar[#1]{
+\@get\@dummy[#1]
+\@value=\@dummy{
+\ifnum\@value=0\vbox{\hbox{z}\hbox{z}\hbox{z}\hbox{z}\hbox{z}}\else
+\ifnum\@value=1\vbox{\hbox{z}\hbox{z}\hbox{z}\hbox{z}\hbox{*}}\else
+\ifnum\@value=2\vbox{\hbox{z}\hbox{z}\hbox{z}\hbox{*}\hbox{*}}\else
+\ifnum\@value=3\vbox{\hbox{z}\hbox{z}\hbox{*}\hbox{*}\hbox{*}}\else
+\ifnum\@value=4\vbox{\hbox{z}\hbox{*}\hbox{*}\hbox{*}\hbox{*}}\else
+\ifnum\@value=5\vbox{\hbox{*}\hbox{*}\hbox{*}\hbox{*}\hbox{*}}\else
+\ifnum\@value>5\advance\@value by 146
+\vbox{\hbox{\char\the\@value}\hbox{*}\hbox{*}\hbox{*}\hbox{*}}\else
+\ifnum\@value=-1\vbox{\hbox{z}\hbox{z}\hbox{z}\hbox{z}\hbox{@}}\else
+\ifnum\@value=-2\vbox{\hbox{z}\hbox{z}\hbox{z}\hbox{@}\hbox{@}}\else
+\ifnum\@value=-3\vbox{\hbox{z}\hbox{z}\hbox{@}\hbox{@}\hbox{@}}\else
+\ifnum\@value=-4\vbox{\hbox{z}\hbox{@}\hbox{@}\hbox{@}\hbox{@}}\else
+\ifnum\@value=-5\vbox{\hbox{@}\hbox{@}\hbox{@}\hbox{@}\hbox{@}}else
+\ifnum\@value<-5\multiply\@value by -1\advance\@value by 156
+\vbox{\hbox{\char\the\@value}\hbox{@}\hbox{@}\hbox{@}\hbox{@}}
+\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi}
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Macros to draw some borders %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\def\@verticalborder{
+\@value=1\vbox{
+\loop \hbox{Z} \ifnum\@value<5\advance\@value by 1 \repeat}
+}
+
+\def\@horizontalborder{
+\ifbothhalfs
+\@value=1\hbox{
+\loop \hbox{-} \ifnum\@value<13\advance\@value by 1 \repeat}
+\else
+\@value=1\hbox{
+\loop \hbox{-} \ifnum\@value<7\advance\@value by 1 \repeat}
+\fi
+}
+
+\def\@middleoftheboard{
+\ifbothhalfs
+\hbox{ \vsize=0.5em
+ \hbox{Z}
+ \@value=1{
+ \loop \hbox{z} \ifnum\@value<6\advance\@value by 1 \repeat}
+ \hbox{ZzZ}
+ \@value=1{
+ \loop \hbox{z} \ifnum\@value<6\advance\@value by 1 \repeat}
+ \hbox{Z}
+}
+\else
+\hbox{ \vsize=0.5em
+ \hbox{Z}
+ \@value=1{
+ \loop \hbox{z} \ifnum\@value<6\advance\@value by 1 \repeat}
+ \hbox{ZzZ}
+}
+\fi
+}
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Macros to write boards in various sizes %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\def\@onetotwelfe{\ifptsonmove
+\hbox{\char0\char128\char129\char130\char131\char132\char133\char0z\char0
+\ifbothhalfs
+\char134\char135\char136\char137\char138\char139\fi}
+\else
+\hbox{\char0\char151\char150\char149\char148\char147\char146\char0z\char0
+\ifbothhalfs
+\char145\char144\char143\char142\char141\char140
+\fi}
+\fi
+}
+\def\@twentyfourtothirteen{\ifptsonmove
+\hbox{\char0\char151\char150\char149\char148\char147\char146\char0z\char0
+\ifbothhalfs
+\char145\char144\char143\char142\char141\char140\fi}
+\else
+\hbox{\char0\char128\char129\char130\char131\char132\char133\char0z\char0
+\ifbothhalfs
+\char134\char135\char136\char137\char138\char139
+\fi}
+\fi
+}
+
+\def\@drawcube{
+\ifcube\@value=\cubeowner\relax
+\ifnum\@value=\@black\@value=\@cubevalue
+\advance\@value by 127
+\vbox{\hbox to 1.5em{ \hfill
+ \vbox{ \hbox{z}\hbox{z}\hbox{z}\hbox{z}\hbox{z}\hbox{z}\hbox{z}
+ \hbox{z}\hbox{z}\hbox{z}\hbox{z}
+ \hbox{-}\hbox{\hbox{Z}\char\the\@value\hbox{Z}}\hbox{-}
+ \hbox{z}}
+ }
+}
+\else\ifnum\@value=\@white\@value=\@cubevalue
+\advance\@value by 127
+\vbox{\hbox to 1.5em{ \hfill
+ \vbox{ \hbox{z}
+ \hbox{-}\hbox{\hbox{Z}\char\the\@value\hbox{Z}}\hbox{-}
+ \hbox{z}\hbox{z}\hbox{z}\hbox{z}\hbox{z}
+ \hbox{z}\hbox{z}\hbox{z}\hbox{z}\hbox{z}\hbox{z}}
+ }
+}
+\else\ifnum\@value=\@middle\@value=\@cubevalue
+\advance\@value by 127
+\vbox{\hbox to 1.5em{ \hfill
+ \vbox{ \hbox{z}\hbox{z}\hbox{z}\hbox{z}\hbox{z}\hbox{z}
+ \hbox{-}\hbox{\hbox{Z}\char\the\@value\hbox{Z}}\hbox{-}
+ \hbox{z}\hbox{z}\hbox{z}\hbox{z}\hbox{z}\hbox{z}}
+ }
+}
+\fi\fi\fi\fi
+}
+
+\def\@drawboard{
+\offinterlineskip
+\vbox{
+ \ifnumbers\ifblack\@twentyfourtothirteen\else\@onetotwelfe\fi\fi
+ \@horizontalborder
+ \hbox{ \@verticalborder
+ \@blackhangingpoint [24]
+ \@whitehangingpoint [23]
+ \@blackhangingpoint [22]
+ \@whitehangingpoint [21]
+ \@blackhangingpoint [20]
+ \@whitehangingpoint [19]
+ \@verticalborder
+ \hangingbar [0]
+ \@verticalborder
+ \ifbothhalfs
+ \@blackhangingpoint [18]
+ \@whitehangingpoint [17]
+ \@blackhangingpoint [16]
+ \@whitehangingpoint [15]
+ \@blackhangingpoint [14]
+ \@whitehangingpoint [13]
+ \@verticalborder
+ \fi
+ }
+ \@middleoftheboard
+ \hbox{ \@verticalborder
+ \@whitestandingpoint [1]
+ \@blackstandingpoint [2]
+ \@whitestandingpoint [3]
+ \@blackstandingpoint [4]
+ \@whitestandingpoint [5]
+ \@blackstandingpoint [6]
+ \@verticalborder
+ \standingbar [25]
+ \@verticalborder
+ \ifbothhalfs
+ \@whitestandingpoint [7]
+ \@blackstandingpoint [8]
+ \@whitestandingpoint [9]
+ \@blackstandingpoint [10]
+ \@whitestandingpoint [11]
+ \@blackstandingpoint [12]
+ \@verticalborder
+ \fi
+ }
+ \@horizontalborder
+ \ifnumbers\ifblack\@onetotwelfe\else\@twentyfourtothirteen\fi\fi
+}
+\@drawcube
+}
+
+\def\@drawbigboard{
+{\@bigboardfont
+\@drawboard
+}
+}
+
+\def\@drawnormalboard{
+{\@normalboardfont
+\@drawboard
+}
+}
+
+\def\@drawsmallboard{
+{\@smallboardfont
+\@drawboard
+}
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Macro to move a single checker %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\def\@movechecker(#1-#2){
+%
+\ifblack
+\xdef\from{#1}\xdef\to{#2}\xdef\@movecolour{\@black}\xdef\@negmovecolour{\@white}
+\else
+\@value=#1\multiply\@value by -1\advance\@value by 25\xdef\from{\the\@value}
+\@value=#2\multiply\@value by -1\advance\@value by 25\xdef\to{\the\@value}
+\xdef\@movecolour{\@white}\xdef\@negmovecolour{\@black}
+\fi
+%
+\@value=\@movecolour\multiply\@value by 25\advance\@value by 25\divide\@value by 2\relax
+\ifnum\@value=\to
+% bearoff %
+\@get\@dummy[\from]\@value=\@dummy\advance\@value by \@negmovecolour\@set[\from](\the\@value)
+\else\@get\@dummy[\to]\@value=\@dummy\multiply\@value by \@movecolour\relax
+\ifnum\@value=-1
+%A checker is hit%
+\gdef\washit{*}
+\@get\@dummy[\from]\@value=\@dummy\advance\@value by \@negmovecolour\@set[\from](\the\@value)
+\@set[\to](\@movecolour)
+\@value=\@movecolour\multiply\@value by 25\advance\@value by 25\divide\@value by 2\xdef\hit{\the\@value}
+\@get\@dummy[\hit]\@value=\@dummy\advance\@value by \@negmovecolour\@set[\hit](\the\@value)
+\else
+%normal move%
+\@get\@dummy[\from]\@value=\@dummy\advance\@value by \@negmovecolour\@set[\from](\the\@value)
+\@get\@dummy[\to]\@value=\@dummy\advance\@value by \@movecolour\@set[\to](\the\@value)
+\fi\fi
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Macro to perform all moves contained in a string which %
+% starts with a , and ends with 69-69,69-69. %
+% defines \stringofmoves, which contains the formatted move %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\def\@moveallcheckers#1-#2,#3.{
+\@value=#1
+\ifnum\@value=69 %reached end of the list%
+\else\@f=#1\@t=#2%Delete blanks in #1 and #2 %
+\gdef\washit{}\@movechecker(\the\@f-\the\@t)
+\xdef\@dummy{\stringofmoves}
+\ifnum\@f=25\def\from{bar}\else\def\from{\the\@f}\fi
+\ifnum\@t=0\def\to{off}\else\def\to{\the\@t}\fi
+\edef\stringofmoves{\@dummy\comma\from--\to\washit}\gdef\comma{, }
+\expandafter\@moveallcheckers#3.\fi
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Commands for the position and the game environment %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\newcommand{\blackpoint}[2]{\@value=#1\@set[\the\@value](-#2)}
+\newcommand{\whitepoint}[2]{\@value=#1\advance\@value by -25
+ \multiply\@value by -1
+ \@set[\the\@value](#2)}
+\newcommand{\whitebar}[1]{\@set[0](#1)}
+\newcommand{\blackbar}[1]{\@set[25](-#1)}
+\newcommand{\smallboard}{\def\@boardtype{@drawsmallboard}}
+\newcommand{\normalboard}{\def\@boardtype{@drawnormalboard}}
+\newcommand{\bigboard}{\def\@boardtype{@drawbigboard}}
+\newcommand{\boardcaption}[1]{\def\capt{#1}}
+\newcommand{\blackonmove}{\global\blacktrue}
+\newcommand{\whiteonmove}{\global\blackfalse}
+\newcommand{\dontshownumbers}{\global\numbersfalse}
+\newcommand{\shownumbers}{\global\numberstrue}
+\newcommand{\togglenumbers}{\ifptsonmove\global\ptsonmovefalse\else\ptsonmovetrue\fi}
+\newcommand{\dontshowcube}{\global\cubefalse}
+\newcommand{\showcube}{\global\cubetrue}
+\newcommand{\blackcube}[1]{\gdef\cubeowner{\@black}\edef\@cubevalue{#1}}
+\newcommand{\whitecube}[1]{\gdef\cubeowner{\@white}\edef\@cubevalue{#1}}
+\newcommand{\middlecube}[1]{\gdef\cubeowner{\@middle}\edef\@cubevalue{#1}}
+\newcommand{\showmoves}{\global\movestrue}
+\newcommand{\dontshowmoves}{\global\movesfalse}
+\newcommand{\indentwhite}{\global\indenttrue}
+\newcommand{\dontindentwhite}{\global\indentfalse}
+\newcommand{\halfboard}{\global\bothhalfsfalse}
+\newcommand{\fullboard}{\global\bothhalfstrue}
+\newcommand{\halfincr}{\global\secmovetrue}
+\newcommand{\fullincr}{\global\secmovefalse}
+\newcommand{\printboard}{\par\vspace{2em}
+\centerline{\csname \@boardtype \endcsname}\par
+\vspace{0.5em}
+\centerline{\capt}
+\vspace*{1.5em}\par}
+\newcommand{\rawboard}{\mbox{\csname\@boardtype\endcsname}}
+\def\dices(#1#2){\@value=#1\multiply\@value by 10\advance\@value by #2\relax
+\the\@value}
+\newcommand{\move}[2]{\gdef\comma{}\gdef\stringofmoves{}\relax\expandafter\@moveallcheckers#2,69-69,69-69.
+\ifmoves
+\par\ifindent\ifblack\else\hspace*{\@whiteskip}\fi\fi
+\ifsecmove
+\@value=\@movenumber\advance\@value by 1\divide\@value 2
+\else
+\@value=\@movenumber
+\fi
+\the\@value. \ifblack$\bullet$ \else$\circ$ \fi
+\dices(#1)
+: \stringofmoves\par
+\fi
+\ifblack\global\blackfalse\else\blacktrue\fi
+\advance \@movenumber by 1}
+\newcommand{\textmove}[1]{\ifmoves
+\par\ifblack\else\ifindent\hspace*{\@whiteskip}\fi\fi
+\ifsecmove
+\@value=\@movenumber\advance\@value by 1\divide\@value 2
+\else
+\@value=\@movenumber
+\fi
+\the\@value. \ifblack$\bullet$ \else$\circ$ \fi#1\par
+\fi
+\ifblack\global\blackfalse\else\blacktrue\fi
+\advance \@movenumber by 1}
+\newcommand{\takecube}{\ifblack\gdef\cubeowner{\@white}\else\gdef\cubeowner{\@black}\fi
+\@value=\@cubevalue\multiply\@value by 2\edef\@cubevalue{\the\@value}}
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% The position environment to produce a single board %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\newenvironment{position}%
+{\@clearboard
+\gdef\capt{}
+\gdef\cubeowner{\@middle}
+\gdef\@cubevalue{1}
+}%
+{\printboard}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% The game environment to annotate matches %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\newenvironment{game}[2]%
+{\initboard
+\gdef\capt{}
+\global\blacktrue
+\gdef\cubeowner{\@middle}
+\gdef\@cubevalue{1}
+\global\@movenumber=1
+\ifx\@empty#1\else\ifx\@empty#2\else
+\ifindent
+\par\hbox{\large\hbox to \@whiteskip{$\bullet$ #1\hfill}\hbox{$\circ$ #2}}\par
+\else
+\par\vbox{\large\hbox{$\bullet$ #1\hfill}\hbox{$\circ$ #2}}\par
+\fi
+\vspace*{4ex}
+\fi\fi
+}%
+{}
diff --git a/macros/latex/contrib/bg/bg.tfm b/macros/latex/contrib/bg/bg.tfm
new file mode 100644
index 0000000000..7e937d5662
--- /dev/null
+++ b/macros/latex/contrib/bg/bg.tfm
Binary files differ
diff --git a/macros/latex/contrib/bg/description.pdf b/macros/latex/contrib/bg/description.pdf
new file mode 100644
index 0000000000..6b9fa26d63
--- /dev/null
+++ b/macros/latex/contrib/bg/description.pdf
Binary files differ
diff --git a/macros/latex/contrib/bg/make_font b/macros/latex/contrib/bg/make_font
new file mode 100755
index 0000000000..82fd2af527
--- /dev/null
+++ b/macros/latex/contrib/bg/make_font
@@ -0,0 +1,6 @@
+mf '\mode=localfont; mag=0.75; input bg'
+gftopk bg.225gf
+mf '\mode=localfont; mag=0.5; input bg'
+gftopk bg.150gf
+mf '\mode=localfont; mag=0.25; input bg'
+gftopk bg.75gf
diff --git a/macros/latex/contrib/bg/sampletext.pdf b/macros/latex/contrib/bg/sampletext.pdf
new file mode 100644
index 0000000000..169ce2fc65
--- /dev/null
+++ b/macros/latex/contrib/bg/sampletext.pdf
Binary files differ
diff --git a/macros/latex/contrib/bg/sampletext.tex b/macros/latex/contrib/bg/sampletext.tex
new file mode 100644
index 0000000000..77d39ee571
--- /dev/null
+++ b/macros/latex/contrib/bg/sampletext.tex
@@ -0,0 +1,70 @@
+\documentstyle[12pt,bg]{article}
+
+\begin{document}
+
+\setlength{\parindent}{0pt}
+\setlength{\parskip}{1em}
+
+This is a discussion of a position from the newsgroup rec.games.backgammon:
+
+\begin{position}
+\smallboard
+\whitepoint{2}{2}
+\whitepoint{3}{2}
+\whitepoint{4}{2}
+\whitepoint{5}{2}
+\whitepoint{6}{5}
+\whitepoint{9}{1}
+\whitepoint{23}{2}
+\blackpoint{1}{2}
+\blackpoint{4}{2}
+\blackpoint{5}{3}
+\blackpoint{6}{2}
+\blackpoint{8}{3}
+\blackpoint{12}{1}
+\blackpoint{24}{2}
+\middlecube{1}
+
+\boardcaption{Score 0-0 in a 3 point match: White to play 5-4}
+\whiteonmove
+\shownumbers
+\showcube
+
+\end{position}
+
+{\bf Carl Nielsen (nlscar01@uctvax.uct.ac.za) wrote:}
+
+I played 23-14. X rolled 4-2 and played 17-23. I couldn't get back on and
+ended up losing to a gammon. Did I play wrong? Should I have left moving my
+runners till later and moved 9-4 6-2 or something like that?
+
+Suggestions please.
+
+{\bf Kit Woolsey (kwoolsey@netcom.com) wrote:}
+
+Your play looks ok to me. You have to get moving sometime and your
+opponent has plenty of time if you play the waiting game, so it is
+probably best to run now before you have an accident and are forced to
+lose your board by rolling too many threes and fours. You were just
+unlucky. Btw, what is that cube doing in the center? You have a clear
+advantage with some threats, so you have a strong double. Maybe your
+opponent will pass, and maybe he should pass!
+
+Kit
+
+{\bf Kent Goulding (kg1@netcom.com) wrote:}
+
+Biggest error here, by FAR, is the failure to double. As is so often the
+case, the cube errors are the costly ones while checker plays are no big
+deal. I think your opponent should pass. As far as the checker play
+goes, it looks pretty close. Running now gives your opponent a crack at
+grabbing TWO of your checkers, while waiting will likely expose only
+one. Your home board is actually not in great danger of breaking right
+away. You can't play 5s and 6s there, and you will likely run from your
+anchor the next chance you get. Also, it's nice to spread out some
+builders for your ace point in case your opponent runs (either forced or
+by choice). I'm inclined to sit tight and see what happens next.
+
+--KG
+
+\end{document}