############################################# # Build the Comprehensive LaTeX Symbol List # # By Scott Pakin # ############################################# # 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 makefakeMnSymbol \ epsdice.eps Makefile # Define INTERMEDIATES as a list of all of the intermediate files # generated by both latex and pdflatex while producing TARGETS. INTERMEDIATES = symbols.aux symbols.idx symbols.ilg \ symbols.ind symbols.log symbols.toc \ symbols.pts # 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: symbols dist ########################################################################### # Define generic rules for building pdf/dvi/ps in letter/a4 size. symbols $(INTERMEDIATES): symbols.tex lightbulb.eps lightbulb10.pfb lightbulb.map fakeMnSymbol.sty $(LATEX) '\PassOptionsToClass{$(SIZE)paper}{article}\input symbols' $(LATEX) '\PassOptionsToClass{$(SIZE)paper}{article}\input symbols' makeindex -s gind.ist symbols $(LATEX) '\PassOptionsToClass{$(SIZE)paper}{article}\input symbols' totalsymbols=`fgrep -c '\item \verb' symbols.ind` ; \ ( fgrep -v prevtotalsymbols symbols.aux > symbols.pts ; \ echo "\\gdef\\prevtotalsymbols{$$totalsymbols}" ; \ echo "\\gdef\\approxcount{}" ) >> symbols.pts ; \ mv symbols.pts symbols.aux $(LATEX) '\PassOptionsToClass{$(SIZE)paper}{article}\input symbols' mv symbols.$(EXT) symbols-$(SIZE).$(EXT) mv symbols.log symbols-$(SIZE)-$(EXT).log ########################################################################### # Define specific rules for building different formats and sizes. symbols-a4.pdf symbols-a4-pdf.log: symbols.tex $(MAKE) $(MAKEFLAGS) SIZE=a4 LATEX=pdflatex EXT=pdf symbols symbols-letter.pdf symbols-letter-pdf.log: symbols.tex $(MAKE) $(MAKEFLAGS) SIZE=letter LATEX=pdflatex EXT=pdf symbols symbols-a4.dvi symbols-a4-dvi.log: symbols.tex $(MAKE) $(MAKEFLAGS) SIZE=a4 LATEX=latex EXT=dvi symbols symbols-letter.dvi symbols-letter-dvi.log: 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 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 ########################################################################### # 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 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) $(INTERMEDIATES) $(TARGETS_DIST) $(RM) symbols-letter.dvi symbols-a4.dvi $(RM) symbols-*-*.log