summaryrefslogtreecommitdiff
path: root/systems/unix/tex-fpc/README
blob: 4d62296690f723d551d824199987bf4968c1609a (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
2019-03-04

This directory contains change files for Donald E. Knuth's suite
of TeX related programs. The change files (.ch) and Don Knuth's
WEB files (.web) from January 2014 are the key components of a
construction kit for "TeX-FPC"---a TeX system which is based on
the Free Pascal Compiler (FPC) and runs in a Unix environment.  It's
by magnitudes smaller than other TeX distributions.

These building bricks are glued together by shell scripts in
the---guess where---shell subdirectory.

The MFT directory contains shell scripts for installing fonts
(xxxfonts), and the directory iby shows how to install fonts
with TeX-FPC. In this case a polytonic Greek font, suited for ancient
Greek texts.

The directories dvipsnk and xdvi show how to install Tom Rokicki's
dvips and Paul Vojta's xdvi.
If your printer does not accept postscript, you might want to install
ghostscript, which converts postscript to the language of you printer or
to pdf. Use ghostscripts dvipdf to convert ps to pdf.

TeX-FPC replaces the famous and beautiful TeX-GPC. The GNU Pascal Compiler
is not supported on Linux, the BSDs and OS X. Free Pascal is chosen
not because it is the best alternative but because it is the only
alternative.
In FPC 3.0.4 I spotted to errors: See
0035136: The function EOF does not comply to ISO Pascal
0035066: fpc says "cannot determine which overloaded function to call"
at bugs.freepascal.org


Overview:
=========

File formats and their documentation:
-------------------------------------
WEB files:
.web	WEB programs, "The WEB System of Structured Documentation" (webman.tex)
.ch	Change files for WEB programs (patches to be applied to .web files)
.p	Free Pascal source
.pool   String pool, contains the string constants of a WEB program.


METAFONT files:
.mf	METAFONT source, "The METAFONTbook" (mfbook.tex)
.base   Base file, a compact representation of METAFONT's memory.
.tfm    TeX font metric, "TeX: The Program" (tex.web) part 30
.nnngf	generic font file, "METAFONT: The Program" (mf.web), part 46
.nnnpk	packed font file, gftopk.web, modules 21-36
        The last two are bitmap font formats, where nnn is a number that
        stands for "dots per inch". The number equals resolution of the
        output device as specified in your mode times the magnification.
.log    a log file
 
TeX files:
.tex	TeX source, "The TeXbook" (texbook.tex)
.fmt    Format file, a compact representation of TeX's memory.
        contains the string pool (tex.pool) and preloaded .tfm files.
.dvi	device independent file, "TeX: The Program" (tex.web), part 31
.log    a log file



Files and their processors:
--------------------------
WEB:
		   tangle
       .web, .ch --------> .p, .pool

                   fpc
             x.p  --------> x

                   tgl
       x.web, x.ch --------> x (linking the last two steps)

                   itgl
      x.web, x.ch --------> x,  inix.p, .pool (links the first two steps
                                                  and keeps the pascal sources)

		   weave
       .web, .ch --------> .tex (Description of the program)

		   wve
       .web, .ch --------> .dvi (linking the above step and tex)


METAFONT:
		   inimf
	plain.mf --------> plain.base

                    mf
	     .mf --------> .nnngf, tfm

                  gftopk
          .nnngf --------> .nnnpk

                  mkfont
             .mf --------> TeXfonts/.tfm, PKfonts/.nnnpk

                 mkpkfont
             .mf --------> PKfonts/.nnnpk


TeX:
		   initex
 .tfm, plain.tex --------> plain.fmt

                    tex
  [ .tfm ], .tex --------> .dvi


DVI drivers:
                   dvips
    .dvi, .nnnpk --------> .ps, PostScript printer

                   xdvi
    .dvi, .nnnpk --------> X-Window


File names:
-----------
TeX-FPC searches files in directories which are local to the working
directory:
	TeXinputs  .tex
	TeXfonts   .tfm
	TeXformats .pool, .fmt
	MFinputs   .mf
	MFbases    .pool, .base
	PKfonts    .nnnpk
	DVIPSconf  .pro, .ps, .map (Header and configuration files for dvips)

I created one set of "master directories" and used symbolic links
to my working directory like:

	ln -s ~/TeXformats .

The scripts mk_TeX_dir and mk_MF_dir help to prepare a directory
for running TeX resp. METAFONT.  Adapt these scripts to the locations
of your master directories.

TeX-FPC's path searching applies to file names without directory
components, i.e. without a /:
	.tex   local directory and then TeXinputs 
	.mf    local directory and then MFinputs
	.tfm   TeXfonts

Depending on the context, TeX-FPC programs append ".mf", ".tex",
or ".tfm" to file names without extensions.

builtin file names:
------------------
TeXformats/tex.pool	string pool for tex, (in initex)
MFbases/mf.pool		string pool for mf, (in inimf)
TeXformats/plain.fmt 	format file for Plain TeX, (in tex)
MFbases/plain.base  	base file for Plain METAFONT, (in mf)

Fonts in TeX-FPC:
----------------
For each font TeX needs one .tfm file. For each font and
resolution/magnification the DVI drivers need one .nnnpk file.
The script mkfont will install both a .tfm and an .nnnpk file, the
script mkpkfont will install an .nnnpk file only.  You specify the
resolution in your METAFONT mode and the magnification as an optional
second argument to mkpkfont or mkfont.  The DVI drivers will invoke
mkpkfont automatically to create missing .nnnpk files.

Running TeX-FPC
===============
Missing files
-------------
Search missing macro files like (webmac.tex) in Knuth's lib
directory and copy them to the working directory or to TeXinputs.
My change files import webmac-fpc.tex; move it to TeXinputs.

Search the sources of missing fonts in the lib directory (.mf),
copy them to MFinputs and use the scripts mkfont  or mkpkfont to
create and install .tfm files respective .pk files. The shell scripts
assume the METAFONT mode localfont which is defined in MFT/local.mf.
Remember, you've loaded local.mf into the file plain.base. Or you
might want to grep for font assignments in your .tex files. The
command line
	grep '\\font.*=' plain.tex > plainfonts
creates a list of the font names used by plain.tex. I edited
plainfonts to convert it to a shell script that creates all fonts
of the plain format. In the MFT directory you'll find other examples.

Installing new fonts from CTAN
------------------------------
The directory MFT/iby contains instructions on how to install a font
from CTAN, in this case ibygrk to typeset polytonic ancient Greek.

Printing the documentation
--------------------------
The weave program generates an xxx.tex file from an xxx.web file
and a possibly empty change file. Use tex to generate an xxx.dvi
file. This is done by the script wve. For example, to view the
description of TeX-FPC, use
	wve tex.web tex.ch && xdvi tex
The web-macros need another font. Use webfonts to install it.
The scripts texwebfonts installs additional fonts for  tex.tex, 
and mfwebfonts for mf.tex.

TRIP TRAP
---------
Both tests might not be passed by TeX-FPC: TeX and METAFONT trim
trailing spaces from input lines for compatibility with IBM's
punched cards. TeX-FPC's programs don't.


Installing TeX-FPC:
===================

Get Knuth's source files:
------------------------
Make a stage directory, say tex-fpc, which mirrors Knuth's distribution
from

	ftp://ftp.dante.de/pub/tex/systems/knuth/dist.zip

This gives you the WEB files, manuals, macros and some .mf files.
At least you need the directories lib, tex, mfware, mf and web.

You need another set of source files, namely the METAFONT source
files (.mf) for Knuth's font Computer Modern.

Copy the .mf files from
	ftp://ftp.dante.de/pub/tex/fonts/cm/mf/
to MFinputs.

And Copy the .mf files from the lib directory to MFinputs.
        cp -p lib/*.mf MFinputs

I prefer the DANTE server, because that server preserves modification
times. This is not true with other CTAN mirrors.

Building from WEB sources, (xxx.web and xxx.ch --> xxx, xxx.pool)
----------------------------------------------------------------
The general procedure to build a binary xxx from its WEB files is:
Move xxx.ch to the directory that contains xxx.web, apply tangle
to xxx.web and xxx.ch to generate xxx.p and xxx.pool, and compile the
Pascal source with gpc. The command line
   tgl xxx.web xxx.ch
will do all that. It produces xxx that you need to move to your binary
directory.

Step by step procedure to bootstrap TeX-FPC
-------------------------------------------
Install Free Pascal Compiler from www.freepascal.org.

Create the master directories (see above)

copy the shell scripts from the tex-fpc/shell to your binary direcory.


0. Make tangle                                       tangle.p --> tangle
------------------------------------------------------------------------
Compile tangle.p (fpc tangle.p) and move tangle to your
binary directory.

1. Make inimf and initex  mf.web,  mf.ch --> inimf, inimf.p, MFbases/mf.pool
                         tex.web, tex.ch --> initex,initex.p TeXformats/tex.pool
Make sure, mf.ch and tex.ch are prepared to produce ini versions of
tex and mf.
------------------------------------------------------------------------
Build the ini-programs and save them as initex, resp. inimf.
Move tex.pool to TeXformats and mf.pool to MFbases, use itgl instead
of tgl to keep inimf.p and initex.p.

2. Make plain.base                   lib/plain.mf --> MFbases/plain.base
------------------------------------------------------------------------
Go to the directory tex-fpc/mf and use inimf to create plain.base.
The file local.mf contains mode definitions for my HP LaserJet 1320
printer. Adapt local.mf to your printer and then type
	inimf ../lib/plain input ../MFT/local dump

Move plain.base to MFbases.

3. Make mf 					    mf.web, mf.ch --> mf
------------------------------------------------------------------------
Edit mf.ch and look for the string @x inimf that introduces a change
block. This change block is commented out, since it is shifted
right.  Shift left this block to uncomment it. This way mf.ch is
changed to build a production version.

4. Make gftopk                          gftopk.web, gftopk.ch --> gftopk
------------------------------------------------------------------------
Build gftopk in the mfware directory. You need gftopk to install
packed font files (.nnnpk) in the next step.

5. Install fonts:         MFinputs/*.mf --> TeXfonts/*.tfm, PKfonts/*.pk
------------------------------------------------------------------------
Prepare tex-fpc to run both METAFONT (mk_MF_dir) and TeX (mk_TeX_dir)
and run the shell script MFT/plainfonts from there.
Check the file trouble that might contain commands that failed.

6. Make plain.fmt                 lib/plain.tex --> TeXformats/plain.fmt
------------------------------------------------------------------------
Copy lib/hyphen.tex to TeXinputs and go to the directory tex-fpc/tex
to build plain.fmt.
This command line will do 
    initex ../lib/plain \\dump # one backslash is consumend by sh!
Move plain.fmt to TeXformats.

7. Finally build tex                             tex.web, tex.ch --> tex
------------------------------------------------------------------------
Change tex.ch for production, and build it with tgl.

Enjoy,
Wolfgang Helbig, Programmierer

Comments welcome: helbig@mailbox.org

TeX is a trademark of the American Mathematical Society.
METAFONT is a trademark of Addison Wesley Publishing Company.