summaryrefslogtreecommitdiff
path: root/macros/generic/labtex/labtex.mf
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/generic/labtex/labtex.mf
Initial commit
Diffstat (limited to 'macros/generic/labtex/labtex.mf')
-rw-r--r--macros/generic/labtex/labtex.mf106
1 files changed, 106 insertions, 0 deletions
diff --git a/macros/generic/labtex/labtex.mf b/macros/generic/labtex/labtex.mf
new file mode 100644
index 0000000000..b8794c069d
--- /dev/null
+++ b/macros/generic/labtex/labtex.mf
@@ -0,0 +1,106 @@
+%% This LabTeX, v 0.9
+
+% written by: Alan Hoenig, summer 1991-summer 1992.
+% Bitnet: ajhjj@cunyvm
+% Mail: 17 Bay Avenue, Huntington, NY 11743, USA
+%
+
+% This is file LABTEX.MF. You will also need the file LABTEX.TEX, as
+% well as TeX, Metafont, and their support programs.
+%
+% Here's how to use the Metafont part of the labtex macros.
+%
+% You will create a font source file with each character being a figure
+% that you want. Before the `mode_setup;' command, enter the line
+% input labtex;
+% so Metafont will know the meaning of the macros you'll be using.
+%
+% In the course of creating your figure, you will define the points
+% which serve as the anchors for the labels. After all these have been
+% defined, and before the `endchar;' command, enter
+% labtex(point list);
+% where <point list> is the list of points. If you'd like, use
+% `beginfig' and `endfig' as synonyms for `beginchar' and `endchar'.
+%
+% When Metafont creates your font, create the packed pixel file, move
+% the pk file and the tfm file to the usual place on your hard disk,
+% and prepare to create your TeX source file. See the comments in
+% labtex.tex to see what to do next.
+%
+
+numeric chars[];
+
+vardef lab@#=(x_@#, y_@#) enddef;
+def clearx_y_=save x_, y_ enddef;
+
+def char_init(expr c)= %
+clearx_y_;
+i:=c; chars[i]=1;
+enddef;
+
+extra_beginchar:=extra_beginchar&"char_init(charcode)";
+
+numeric running_label_amt; running_label_amt=0;
+numeric xx_[], yy_[]; % to store the kerns for ligtable
+numeric lpf[]; % to store labels per fig
+def char_fin=
+i:=0;
+forever:
+ exitif not known x_[i];
+ i:=i+1; endfor
+%for j=0 upto i-1: show "X",x_[j], "Y",y_[j]; endfor
+label_amt:=i;
+for i:=0 upto label_amt-1:
+ xx_[running_label_amt +i]=x_[i];
+ yy_[running_label_amt +i]=y_[i]; endfor
+lpf[charcode]=label_amt;
+running_label_amt:=running_label_amt+label_amt;
+enddef;
+
+extra_endchar:=extra_endchar&"char_fin";
+
+% fpf=figures per font
+def fillfont= % to define all chars not yet defined
+ % and to create ligtable
+ show "Now filling font. Patience, please.";
+ last_char=255;
+ for i=0 upto last_char: % need MF2!
+% show i, chars[i];
+ if not known chars[i]: beginchar(i,0,0,0); endchar;
+ if not known fpf: fpf=i; fi fi
+ endfor
+% ligtable machinations only done if at least one label in at least
+% one fig.
+if known lpf[1]:
+ doligtable; fi
+enddef;
+
+def doligtable=
+ ligtable 0: 0 kern xx_0/hppp
+ for i=1 upto running_label_amt-1: , i kern xx_[i]/hppp endfor;
+ ligtable 1: 0 kern yy_0/hppp
+ for i=1 upto running_label_amt-1: , i kern yy_[i]/hppp endfor;
+ ligtable 2: 0 kern lpf0
+ for i=1 upto fpf: , i kern lpf[i] endfor;
+enddef;
+
+vardef labtex(text t)= % t is a list of pair names
+ save I; I=0; % I is a counter
+ for $=t: lab[I]=$; I:=I+1; endfor
+enddef;
+
+
+let beginfig=beginchar;
+let endfig=endchar;
+
+inner end, bye; let savedend=end; let savedbye=bye;
+boolean filledfont; filledfont=false;
+def end= if not filledfont: filledfont:=true; fillfont; fi
+ savedend;
+enddef;
+let bye=end;
+outer end, bye;
+
+
+endinput;
+