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
|
#############################################
# Build the Comprehensive LaTeX Symbol List #
# By Scott Pakin <scott+clsl@pakin.org> #
#############################################
# Define TARGETS as a list of all of the files we intend to generate.
# TARGETS is categorized into TARGETS_SOURCE and TARGETS_DIST.
# TARGETS_DIST comprise the prebuilt distribution of the Comprehensive
# LaTeX Symbol List. TARGETS_SOURCE are needed primarily to build
# TARGETS_DIST, although they are also distributed (in a "source"
# subdirectory).
TARGETS = $(TARGETS_SOURCE) $(TARGETS_DIST)
TARGETS_DIST = symbols-letter.pdf symbols-a4.pdf SYMLIST README
TARGETS_SOURCE = lightbulb.eps lightbulb10.pfb lightbulb.map
# There are a few files that we didn't generate but that need to be
# distributed.
EXTRADIST = symbols.tex lightbulb10.mf lightbulb.mf \
symbols.ist versicle.eps response.eps \
makefakeMnSymbol teubner-subset.sty Makefile
# We need FontForge (or the older PfaEdit) to generate lightbulb10.pfb.
FONTFORGE = fontforge
# The following should be overwritten in a recursive call to Make.
SIZE = letter
EXT = pdf
###########################################################################
# Build all specified formats in all specified paper sizes.
all: $(TARGETS)
.PHONY: all symbols dist clean mostlyclean
###########################################################################
# Define generic rules for building pdf/dvi/ps in letter/a4 size.
symbols: symbols.tex symbols.ist fakeMnSymbol.sty \
lightbulb.eps lightbulb10.pfb lightbulb.map
# Pass 1: Produce a list of extra files to include in the custom dump.
$(LATEX) -jobname symbols-$(SIZE)-$(EXT) '\RequirePackage{snapshot}\PassOptionsToClass{$(SIZE)paper}{article}\input symbols'
cat symbols-$(SIZE)-$(EXT).dep | fgrep -v cmll | \
perl -ne '/\{(\w+\.fd)\}/ && print "\\input{$$1}\n"' > symbols-$(SIZE)-$(EXT).inc
# Pass 2: Dump a custom latex format.
$(LATEX) -jobname symbols-$(SIZE)-$(EXT) -ini \&$(LATEX) mylatex.ltx '\PassOptionsToClass{$(SIZE)paper}{article}\input symbols'
# Pass 3: Build a second time using the custom format to produce a
# final page layout (one hopes). Create an index based on that layout.
$(LATEX) -jobname symbols-$(SIZE)-$(EXT) \&symbols-$(SIZE)-$(EXT) symbols
makeindex -s symbols.ist symbols-$(SIZE)-$(EXT)
# Pass 4a: Build the document with the newly generated index.
$(LATEX) -jobname symbols-$(SIZE)-$(EXT) \&symbols-$(SIZE)-$(EXT) symbols
# Pass 4b: Get a final symbol count, and put it in the .aux file.
totalsymbols=`fgrep -c '\item \verb' symbols-$(SIZE)-$(EXT).ind` ; \
( fgrep -v prevtotalsymbols symbols-$(SIZE)-$(EXT).aux > symbols-$(SIZE)-$(EXT).pts ; \
echo "\\gdef\\prevtotalsymbols{$$totalsymbols}" ; \
echo "\\gdef\\approxcount{}" ) >> symbols-$(SIZE)-$(EXT).pts ; \
mv symbols-$(SIZE)-$(EXT).pts symbols-$(SIZE)-$(EXT).aux
# Pass 5: Build the final document using the final symbol count
# and with the table of contents and PDF bookmarks correctly
# reflecting the index pages.
$(LATEX) -jobname symbols-$(SIZE)-$(EXT) \&symbols-$(SIZE)-$(EXT) symbols
mv symbols-$(SIZE)-$(EXT).$(EXT) symbols-$(SIZE).$(EXT)
###########################################################################
# Define specific rules for building different formats and sizes.
symbols-a4.pdf symbols-a4-pdf.log symbols-a4-pdf.ind: symbols.tex
$(MAKE) $(MAKEFLAGS) SIZE=a4 LATEX=pdflatex EXT=pdf symbols
symbols-letter.pdf symbols-letter-pdf.log symbols-letter-pdf.ind: symbols.tex
$(MAKE) $(MAKEFLAGS) SIZE=letter LATEX=pdflatex EXT=pdf symbols
symbols-a4.dvi symbols-a4-dvi.log symbols-a4-dvi.ind: symbols.tex
$(MAKE) $(MAKEFLAGS) SIZE=a4 LATEX=latex EXT=dvi symbols
symbols-letter.dvi symbols-letter-dvi.log symbols-letter-dvi.ind: symbols.tex
$(MAKE) $(MAKEFLAGS) SIZE=letter LATEX=latex EXT=dvi symbols
symbols-letter.ps: symbols-letter.dvi
dvips -t letter -Pamz -Pcmz -j0 -o symbols-letter.ps symbols-letter.dvi
symbols-a4.ps: symbols-a4.dvi
dvips -t a4 -Pamz -Pcmz -j0 -o symbols-a4.ps symbols-a4.dvi
###########################################################################
# Define rules to produce a lightbulb proof figure.
mfplain.mem:
mpost -ini '\input mfplain; dump'
lightbulb.eps: lightbulb10.mf lightbulb.mf mfplain.mem
mpost -mem mfplain '\mode:=proof; prologues:=2; labelfont cmr17; input lightbulb10'
mv lightbulb10.65 lightbulb.eps
# Generate a FontForge script that makes the LightBulb10 PostScript
# names mixed case.
lightbulb10.pe:
echo 'Open($$1);' > $@
echo 'LB = "LightBulb";' >> $@
echo 'SetFontNames(LB+"10", LB, LB+"10");' >> $@
echo 'Generate("lightbulb10.pfb");' >> $@
# Define a rule to produce a Type 1 version of the LightBulb10 font.
lightbulb10.pfb: lightbulb10.mf lightbulb10.pe
mftrace -V -fpfb --simplify lightbulb10
$(FONTFORGE) -script lightbulb10.pe lightbulb10.pfb
# Define a rule to produce a LightBulb font-mapping file.
lightbulb.map:
echo "lightbulb10 LightBulb10 <lightbulb10.pfb" > lightbulb.map
###########################################################################
# If we have MnSymbol.sty, generate a faked version which does not
# declare any new math alphabets.
fakeMnSymbol.sty: makefakeMnSymbol
if [ "`kpsewhich MnSymbol.sty`" ] ; then \
makefakeMnSymbol `kpsewhich MnSymbol.sty` > $@ ; \
else \
makefakeMnSymbol /dev/null > $@ ; \
fi
###########################################################################
# The index is needed to produce a list of symbols. We arbitrarily
# use the symbols-letter-pdf.ind version of the index.
symbols.ind: symbols-letter-pdf.ind
cp symbols-letter-pdf.ind symbols.ind
# Create a list of all symbols.
SYMLIST: symbols.ind
cat symbols.ind | perl -ne 's/.*\\verb\+([^+]+)\+.*/$$1/g && print' | sort -u > SYMLIST
# Create a README file.
README: makeREADME symbols-letter-pdf.log symbols.ind
makeREADME symbols-letter-pdf.log symbols.ind > README
# Create a .tar.gz file.
comprehensive.tar.gz: $(TARGETS) $(EXTRADIST)
$(RM) -r comprehensive
mkdir comprehensive
mkdir comprehensive/source
install -m 664 $(TARGETS_DIST) comprehensive
install -m 664 $(TARGETS_SOURCE) $(EXTRADIST) comprehensive/source
cat symbols.tex | checksum > comprehensive/source/symbols.tex
chmod 755 comprehensive/source/makefakeMnSymbol
chmod 664 comprehensive/source/symbols.tex
tar -czf comprehensive.tar.gz comprehensive
$(RM) -r comprehensive
dist: comprehensive.tar.gz
# Clean up our mess.
clean: mostlyclean
$(RM) comprehensive.tar.gz
$(RM) $(TARGETS)
$(RM) fakeMnSymbol.sty
$(RM) mfplain.{log,mem}
$(RM) lightbulb10*pk lightbulb10.{tfm,log,pe}
mostlyclean:
$(RM) -r comprehensive
$(RM) $(TARGETS_DIST)
$(RM) symbols-*-*.{aux,dep,dvi,fmt,idx,ilg,inc,ind,log,out,pts,toc}
$(RM) symbols.ind
|