#! /bin/sh # usage: mkf input_file.mkf # # description: mkf generates a makefile to generate a series of fonts # based on a small input file consisting of key=value pairs # # dpi - dots per inch # maxmag - dpi * maximum magstep (ie. dpi * 1.2^9) for LaTeX # mode - mode for Metafont # mf - command for Metafont that includes "mode" # mfbin - path for "mf" # mkt - if non-null makes the standard TeX CM fonts # mkl - if non-null makes the LaTeX and SliTeX CM fonts # # example: the file junk.mkf could contain # # dpi = 300 # maxmag = 1548 # mode = localfont # mfbin = /usr/local/bin # mf = cmmf # mkt = "mkt" # mkl = # # to execute in the directory with the *.mf files # # mkf junk.mkf > somefile # make -f somefile # # still more examples: # # # canoncx.mkf # dpi=300 # maxmag=1548 # mode=CanonCX # mfbin=/usr/local/bin # mf=virmf \&cmplain # mkt="mkt" # mkl="mkl" # # # r4080.mkf # dpi=300 # maxmag=1548 # mode=RicohFourZeroEightZero # mfbin=/usr/local/bin # mf=virmf \&cmplain # mkt="mkt" # mkl="mkl" # # # toshiba.mkf # dpi=180 # maxmag=929 # mode=toshiba # mfbin=/usr/local/bin # mf=virmf \&cmplain # mkt="mkt" # mkl= # # # author: Harold G. Walters walters@1.ce.okstate.edu # # # Date: Wed, 24 May 89 12:21:28 cdt # From: "Harold G. Walters" # Subject: Mkf shell script to generate standard fonts # Keywords: TeX, LaTeX, SliTeX, fonts # # What follows is a shell script to generate a makefile to build the # standard set of TeX and/or LaTeX and SliTeX fonts. It is driven by a # small file that contains information like dpi and mode for Metafont. # Examples are given below. You can use this script to generate all # makefiles for your fonts instead of having a zillion different # makefiles. It makes life much easier when generating fonts for a new # printer. # # Harold G. Walters walters@1.ce.okstate.edu # School of Civil Engineering okstate!oksce1!walters # Oklahoma State University "If all you have is a hammer, # Stillwater, OK 74078 everything looks like a nail". # # Changes at Utah [Nelson H. F. Beebe] # [03-Aug-89] -- changed awk to nawk because I added gsub() calls to strip # blanks from fields (it is not convenient to have to suppress # spaces in the assignments) nawk '\ BEGIN { FS = "="; dpi = 300; maxmag = 1548; mfbin = "/usr/local/bin"; mf = "cmmf"; mode = "localfont"; mkt = ""; mkl = ""; linelen = 60; # tex fonts tfonts["1S1"] = "cmbsy10"; tfonts["1S2"] = "cmbx10"; tfonts["1S3"] = "cmbx12"; tfonts["1S4"] = "cmbx5"; tfonts["1S5"] = "cmbx6"; tfonts["1S6"] = "cmbx7"; tfonts["1S7"] = "cmbx8"; tfonts["1S8"] = "cmbx9"; tfonts["1S9"] = "cmcsc10"; tfonts["1S10"] = "cmdunh10"; tfonts["1S11"] = "cmex10"; tfonts["1S12"] = "cmmi10"; tfonts["1S13"] = "cmmi12"; tfonts["1S14"] = "cmmi5"; tfonts["1S15"] = "cmmi6"; tfonts["1S16"] = "cmmi7"; tfonts["1S17"] = "cmmi8"; tfonts["1S18"] = "cmmi9"; tfonts["1S19"] = "cmmib10"; tfonts["1S20"] = "cmr10"; tfonts["1S21"] = "cmr12"; tfonts["1S22"] = "cmr17"; tfonts["1S23"] = "cmr5"; tfonts["1S24"] = "cmr6"; tfonts["1S25"] = "cmr7"; tfonts["1S26"] = "cmr8"; tfonts["1S27"] = "cmr9"; tfonts["1S28"] = "cmsl10"; tfonts["1S29"] = "cmsl12"; tfonts["1S30"] = "cmsl8"; tfonts["1S31"] = "cmsl9"; tfonts["1S32"] = "cmsltt10"; tfonts["1S33"] = "cmss10"; tfonts["1S34"] = "cmss12"; tfonts["1S35"] = "cmss17"; tfonts["1S36"] = "cmssbx10"; tfonts["1S37"] = "cmssi10"; tfonts["1S38"] = "cmssi12"; tfonts["1S39"] = "cmssi17"; tfonts["1S40"] = "cmssq8"; tfonts["1S41"] = "cmssqi8"; tfonts["1S42"] = "cmsy10"; tfonts["1S43"] = "cmsy5"; tfonts["1S44"] = "cmsy6"; tfonts["1S45"] = "cmsy7"; tfonts["1S46"] = "cmsy8"; tfonts["1S47"] = "cmsy9"; tfonts["1S48"] = "cmtex10"; tfonts["1S49"] = "cmtex9"; tfonts["1S50"] = "cmti10"; tfonts["1S51"] = "cmti12"; tfonts["1S52"] = "cmti7"; tfonts["1S53"] = "cmti8"; tfonts["1S54"] = "cmti9"; tfonts["1S55"] = "cmtt10"; tfonts["1S56"] = "cmtt12"; tfonts["1S57"] = "cmtt8"; tfonts["1S58"] = "cmtt9"; tfonts["1S59"] = "cmu10"; tfonts["1S60"] = "manfnt"; tfonts_n_mag_j[1] = 60; tfonts["2S1"] = "cmbx10"; tfonts["2S2"] = "cmmi10"; tfonts["2S3"] = "cmr10"; tfonts["2S4"] = "cmsl10"; tfonts["2S5"] = "cmss10"; tfonts["2S6"] = "cmsy10"; tfonts["2S7"] = "cmti10"; tfonts["2S8"] = "cmtt10"; tfonts["2S9"] = "manfnt"; tfonts_n_mag_j[2] = 9; tfonts["3S1"] = "cmsy10"; tfonts["3S2"] = "manfnt"; tfonts_n_mag_j[3] = 2; tfonts["4S1"] = "cmbx10"; tfonts["4S2"] = "cmmi10"; tfonts["4S3"] = "cmr10"; tfonts["4S4"] = "cmssbx10"; tfonts["4S5"] = "cmsy10"; tfonts["4S6"] = "cmtt10"; tfonts["4S7"] = "manfnt"; tfonts_n_mag_j[4] = 7; tfonts["5S1"] = "cmbx10"; tfonts["5S2"] = "cmsy10"; tfonts["5S3"] = "manfnt"; tfonts_n_mag_j[5] = 3; tfonts["6S1"] = "cmbx10"; tfonts["6S2"] = "cmmi10"; tfonts["6S3"] = "cmr10"; tfonts["6S4"] = "cmr7"; tfonts["6S5"] = "cmsy10"; tfonts["6S6"] = "manfnt"; tfonts_n_mag_j[6] = 6; tfonts["7S1"] = "cmbx10"; tfonts["7S2"] = "cmr10"; tfonts["7S3"] = "manfnt"; tfonts_n_mag_j[7] = 3; tfonts_n_mag_i = 7; # latex fonts lfonts["1S1"] = "lasy10"; lfonts["1S2"] = "lasy5"; lfonts["1S3"] = "lasy6"; lfonts["1S4"] = "lasy7"; lfonts["1S5"] = "lasy8"; lfonts["1S6"] = "lasy9"; lfonts["1S7"] = "lasyb10"; lfonts["1S8"] = "lcircle10"; lfonts["1S9"] = "lcirclew10"; lfonts["1S10"] = "line10"; lfonts["1S11"] = "linew10"; lfonts_n_mag_j[1] = 11; lfonts["2S1"] = "lasy10"; lfonts["2S2"] = "lasy5"; lfonts["2S3"] = "lasy7"; lfonts["2S4"] = "lasyb10"; lfonts_n_mag_j[2] = 4; lfonts["3S1"] = "lasy10"; lfonts["3S2"] = "lasy5"; lfonts["3S3"] = "lasy7"; lfonts["3S4"] = "lasyb10"; lfonts_n_mag_j[3] = 4; lfonts["4S1"] = "lasy10"; lfonts["4S2"] = "lasy5"; lfonts["4S3"] = "lasy7"; lfonts["4S4"] = "lasyb10"; lfonts_n_mag_j[4] = 4; lfonts["5S1"] = "cmex10"; lfonts["5S2"] = "cmmi8"; lfonts["5S3"] = "cmsy8"; lfonts["5S4"] = "cmtt8"; lfonts["5S5"] = "icmex10"; lfonts["5S6"] = "icmmi8"; lfonts["5S7"] = "icmsy8"; lfonts["5S8"] = "icmtt8"; lfonts["5S9"] = "ilasy8"; lfonts["5S10"] = "ilcmss8"; lfonts["5S11"] = "ilcmssb8"; lfonts["5S12"] = "ilcmssi8"; lfonts["5S13"] = "lasy10"; lfonts["5S14"] = "lasy5"; lfonts["5S15"] = "lasy7"; lfonts["5S16"] = "lasy8"; lfonts["5S17"] = "lasyb10"; lfonts["5S18"] = "lcmss8"; lfonts["5S19"] = "lcmssb8"; lfonts["5S20"] = "lcmssi8"; lfonts_n_mag_j[5] = 20; lfonts["6S1"] = "cmmi8"; lfonts["6S2"] = "cmsy8"; lfonts["6S3"] = "cmtt8"; lfonts["6S4"] = "icmmi8"; lfonts["6S5"] = "icmsy8"; lfonts["6S6"] = "icmtt8"; lfonts["6S7"] = "ilasy8"; lfonts["6S8"] = "ilcmss8"; lfonts["6S9"] = "ilcmssb8"; lfonts["6S10"] = "ilcmssi8"; lfonts["6S11"] = "lasy10"; lfonts["6S12"] = "lasy5"; lfonts["6S13"] = "lasy7"; lfonts["6S14"] = "lasy8"; lfonts["6S15"] = "lasyb10"; lfonts["6S16"] = "lcmss8"; lfonts["6S17"] = "lcmssb8"; lfonts["6S18"] = "lcmssi8"; lfonts_n_mag_j[6] = 18; lfonts["7S1"] = "cmmi8"; lfonts["7S2"] = "cmsy8"; lfonts["7S3"] = "cmtt8"; lfonts["7S4"] = "icmmi8"; lfonts["7S5"] = "icmsy8"; lfonts["7S6"] = "icmtt8"; lfonts["7S7"] = "ilasy8"; lfonts["7S8"] = "ilcmss8"; lfonts["7S9"] = "ilcmssb8"; lfonts["7S10"] = "ilcmssi8"; lfonts["7S11"] = "lasy10"; lfonts["7S12"] = "lasy5"; lfonts["7S13"] = "lasy7"; lfonts["7S14"] = "lasy8"; lfonts["7S15"] = "lasyb10"; lfonts["7S16"] = "lcmss8"; lfonts["7S17"] = "lcmssb8"; lfonts["7S18"] = "lcmssi8"; lfonts_n_mag_j[7] = 18; lfonts["8S1"] = "cmmi8"; lfonts["8S2"] = "cmsy8"; lfonts["8S3"] = "cmtt8"; lfonts["8S4"] = "icmmi8"; lfonts["8S5"] = "icmsy8"; lfonts["8S6"] = "icmtt8"; lfonts["8S7"] = "ilasy8"; lfonts["8S8"] = "ilcmss8"; lfonts["8S9"] = "ilcmssb8"; lfonts["8S10"] = "ilcmssi8"; lfonts["8S11"] = "lasy8"; lfonts["8S12"] = "lcmss8"; lfonts["8S13"] = "lcmssb8"; lfonts["8S14"] = "lcmssi8"; lfonts_n_mag_j[8] = 14; lfonts["9S1"] = "cmmi8"; lfonts["9S2"] = "cmsy8"; lfonts["9S3"] = "cmtt8"; lfonts["9S4"] = "icmmi8"; lfonts["9S5"] = "icmsy8"; lfonts["9S6"] = "icmtt8"; lfonts["9S7"] = "ilasy8"; lfonts["9S8"] = "ilcmss8"; lfonts["9S9"] = "ilcmssb8"; lfonts["9S10"] = "ilcmssi8"; lfonts["9S11"] = "lasy8"; lfonts["9S12"] = "lcmss8"; lfonts["9S13"] = "lcmssb8"; lfonts["9S14"] = "lcmssi8"; lfonts_n_mag_j[9] = 14; lfonts["10S1"] = "cmmi8"; lfonts["10S2"] = "cmsy8"; lfonts["10S3"] = "cmtt8"; lfonts["10S4"] = "icmmi8"; lfonts["10S5"] = "icmsy8"; lfonts["10S6"] = "icmtt8"; lfonts["10S7"] = "ilasy8"; lfonts["10S8"] = "ilcmss8"; lfonts["10S9"] = "ilcmssb8"; lfonts["10S10"] = "ilcmssi8"; lfonts["10S11"] = "lasy8"; lfonts["10S12"] = "lcmss8"; lfonts["10S13"] = "lcmssb8"; lfonts["10S14"] = "lcmssi8"; lfonts_n_mag_j[10] = 14; lfonts["11S1"] = "ilcmss8"; lfonts["11S2"] = "lcmss8"; lfonts_n_mag_j[11] = 2; lfonts_n_mag_i = 11; } /^[ ]*dpi/ { dpi = $2 + 0; } /^[ ]*maxmag/ { maxmag = $2 + 0; } /^[ ]*mfbin/ { gsub(/[ \t]/,"",$2); mfbin = $2; } /^[ ]*mf/ { gsub(/[ \t]/,"",$2); mf = $2; } /^[ ]*mode/ { gsub(/[ \t]/,"",$2); mode = $2; } /^[ ]*mkt/ { gsub(/[ \t]/,"",$2); mkt = $2; } /^[ ]*mkl/ { gsub(/[ \t]/,"",$2); mkl = $2; } END { # calc magsteps # NOMAG magst[1] = 0; mags[1] = dpi; # HALFMAG magst[2] = 0.5; mags[2] = dpi * sqrt(1.2); # MAGONE magst[3] = 1; mags[3] = dpi * 1.2; # MAGetc. for (i = 4; (i <= lfonts_n_mag_i) && (mags[i] < maxmag); i++) { mags[i] = mags[i-1] * 1.2; magst[i] = i-2; } n_mag = i - 1; # round dpi = int(dpi + 0.5); for (i = 1; i <= n_mag; i++) { mags[i] = int(mags[i] + 0.5); } "date" | getline date; "pwd" | getline pwd; "echo \"<`whoami`@`hostname`>\"" | getline user; # print out the makefile printf "#============================================================\n"; printf "# WARNING: Do NOT edit this file.\n"; printf "# It was created automatically by mkf on " date "\n"; printf "# by " user " in " pwd "\n"; printf "#============================================================\n\n"; printf "GFTOPK = gftopk\n"; printf "MF = " mfbin "/" mf "\n"; printf "MFFLAGS = \"\\mode:=" mode ";\" \"batchmode;\"\n\n"; printf ".SUFFIXES:\n"; printf ".SUFFIXES: .mf "; for (i = 1; i <= n_mag; i++) { printf ".%dpk ", mags[i]; } printf "\n\n"; cmdline = "$(MF) $(MFFLAGS) "; dpnd = "\n.mf.%dpk:\n\t"; inpt = "input $*\n"; for (i = 1; i <= n_mag; i++) { if (magst[i] == 0) { cmd = dpnd cmdline inpt; printf cmd,dpi; } else { cmd = dpnd cmdline "\"mag:=magstep(%2.1f);\" " inpt; printf cmd,mags[i],magst[i]; } printf "\t- $(GFTOPK) $*.%dgf\n", mags[i]; printf "\t@- rm -f $*.%dgf\n", mags[i]; } printf "\nall:\t"; # tex fonts len = 0; if (mkt != "") { for (i = 1; i <= tfonts_n_mag_i; i++) { for (j = 1; j <= tfonts_n_mag_j[i]; j++) { ind = i "S" j; l = sprintf("%s.%dpk ", tfonts[ind], mags[i]); len += length(l); if (len > linelen) { printf "\\\n\t"; len = 8; } printf "%s", l; } } } # latex cm fonts len = 0; if (mkl != "") { if (mkt != "") printf "\\\n\t"; for (i = 1; i <= n_mag; i++) { for (j = 1; j <= lfonts_n_mag_j[i]; j++) { ind = i "S" j; # These 2 fonts are obsolete if ((lfonts[ind] == "lcircle10") || (lfonts[ind] == "lcirclew10")) continue; l = sprintf("%s.%dpk ", lfonts[ind], mags[i]); len += length(l); if (len > linelen) { len = 0; printf "\\\n\t"; } printf "%s", l; } } } }' < $1 exit 0