############################################# # 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 \ 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 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