#!/bin/bash # # installfont # # installs a Postscript Type1 font (*.pfb) family # (at least the four basic cuts + (faked) small caps + faked slanted, # but no expert fonts) for using with LaTeX (MiKTeX) # The script tries to rename the fonts automatically (optional). # Otherwise the *.afm and *.pfb files must be named in Karl Berry scheme (e.g. 5bbr8a.pfb) # (tested with MiKTeX 2.8) v1.2 (12.02.2010) # (C) Josef Kleber 2009-2010 License: LPPL # VERSION="v1.2 (2010/02/12)" # FONTFAMILY="5bb" FONTNAME="Barbedor" FONTCOMMAND="FFBarbedor" FONTSCALEKV="Sbb" PACKAGENAME="barbedor" PACKAGEDATE="2010/02/12" PACKAGEVERSION="v1.0" LOCALTEXMF=$(cygpath -u "C:\LocalTexMF") FONTSUBDIR="MyFonts/Barbedor" # Font encoding default: 8a (AdobeStandardEncoding) FONTENCODING="8a" # Font cut default: r (regular) don't change! FONTCUT="r" # # Set the --admin switch for MiKTeX 2.8+ ADMIN="--admin" #ADMIN="" # typeset -i STEP=0 # echo -e "\n\nTry to rename the font(s) automatically? (y/n)" read ANSWER if [ $ANSWER = "y" -o $ANSWER = "Y" ] then ((STEP++)) echo -e "\n\n$STEP) Renaming fonts\n\n" mkdir -p Backup cp *.afm *.AFM ./Backup 2>>/dev/null cp *.pfb *.PFB ./Backup 2>>/dev/null for file in *.AFM; do mv $file ${file%AFM}afm 2>>/dev/null; done for file in *.PFB; do mv $file ${file%PFB}pfb 2>>/dev/null; done FONTNUMBER=$(ls -al *.pfb 2>>/dev/null | wc -l) if [ $FONTNUMBER -le 1 ] then if [ $FONTNUMBER -eq 0 ] then echo "No font(s) to rename!" exit 1 else for file in *.afm; do mv $file ${FONTFAMILY}${FONTCUT}${FONTENCODING}.afm; done for file in *.pfb; do mv $file ${FONTFAMILY}${FONTCUT}${FONTENCODING}.pfb; done fi else mkdir -p Rename # rename small caps font(s) FILES=$(grep -e "Smc" -e "Caps" *.afm | cut -d':' -f1 | uniq) for file in $FILES do FWEIGHT=$(grep -e "Weight" $file | cut -d' ' -f2 | sed -e "s/\r//") if [ $FWEIGHT = "Bold" ] then FONTCUT="bc" else FONTCUT="rc" fi mv $file ./Rename/${FONTFAMILY}${FONTCUT}${FONTENCODING}.afm mv ${file%afm}pfb ./Rename/${FONTFAMILY}${FONTCUT}${FONTENCODING}.pfb done # rename italic font(s) GREP=$(grep -e "ItalicAngle" *.afm | tr ' ' '+') for line in $GREP do FILENAME=$(echo $line | cut -d':' -f1 | sed -e "s/\r//") ITALICANGLE=$(echo $line | cut -d'+' -f2 | sed -e "s/\r//") FWEIGHT=$(grep -e "Weight" $FILENAME | cut -d' ' -f2 | sed -e "s/\r//") if [ $ITALICANGLE -lt 0 ] then if [ $FWEIGHT = "Bold" ] then FONTCUT="bi" else FONTCUT="ri" fi mv $FILENAME ./Rename/${FONTFAMILY}${FONTCUT}${FONTENCODING}.afm mv ${FILENAME%afm}pfb ./Rename/${FONTFAMILY}${FONTCUT}${FONTENCODING}.pfb fi done # rename the bold font FILENAME=$(grep -e "Bold" *.afm | cut -d':' -f1 | uniq) FONTCUT="b" mv $FILENAME ./Rename/${FONTFAMILY}${FONTCUT}${FONTENCODING}.afm mv ${FILENAME%afm}pfb ./Rename/${FONTFAMILY}${FONTCUT}${FONTENCODING}.pfb # rename the regular font FILENAME=$(grep -e "Regular" * | grep -e ".afm" | cut -d':' -f1 | uniq) FONTCUT="r" mv $FILENAME ./Rename/${FONTFAMILY}${FONTCUT}${FONTENCODING}.afm mv ${FILENAME%afm}pfb ./Rename/${FONTFAMILY}${FONTCUT}${FONTENCODING}.pfb fi mv ./Rename/* . rmdir ./Rename ls -al *.pfb *.afm echo -e "\n\nPlease check the font name(s). Continue? (y/n)" read ANSWER if [ $ANSWER = "n" -o $ANSWER = "N" ] then rm *.afm rm *.pfb mv ./Backup/* . rmdir ./Backup exit 1 fi fi # ((STEP++)) echo -e "\n\n$STEP) Creating metrics and virtual fonts\n\n" cat >${FONTFAMILY}-drv.tex <${FONTFAMILY}-map.tex <${PACKAGENAME}.sty <>/dev/null; # ((STEP++)) echo -e "\n\n$STEP) Insert scale factor into the fd files" cat >installfont.sed < /<-> \\\\${FONTSCALEKV}@@scale / EOF # for file in *.fd; do mv $file ${file%fd}fdb; sed -f installfont.sed ${file%fd}fdb >$file; unix2dos $file 2>>/dev/null; done # ((STEP++)) echo -e "\n\n$STEP) Installing font(s) and support files" DIR="${LOCALTEXMF}/fonts/tfm/${FONTSUBDIR}/" if [ ! -d $DIR ] then mkdir -p $DIR fi mv *.tfm $DIR DIR="${LOCALTEXMF}/fonts/vf/${FONTSUBDIR}/" if [ ! -d $DIR ] then mkdir -p $DIR fi mv *.vf $DIR DIR="${LOCALTEXMF}/fonts/type1/${FONTSUBDIR}/" if [ ! -d $DIR ] then mkdir -p $DIR fi mv *.pfb $DIR DIR="${LOCALTEXMF}/fonts/map/dvips/${FONTSUBDIR}/" if [ ! -d $DIR ] then mkdir -p $DIR fi mv *.map $DIR DIR="${LOCALTEXMF}/tex/latex/${FONTSUBDIR}/" if [ ! -d $DIR ] then mkdir -p $DIR fi mv *.fd $DIR DIR="${LOCALTEXMF}/tex/latex/${FONTSUBDIR}/" if [ ! -d $DIR ] then mkdir -p $DIR fi mv *.sty $DIR # ((STEP++)) echo -e "\n\n$STEP) Update FileNameDataBase" initexmf $ADMIN -u ((STEP++)) echo -e "\n\n$STEP) Include the map file" echo -e "\n\n" echo "Add the line 'Map ${FONTFAMILY}.map' to the file in the opening editor." echo "Save the file, close the editor and press RETURN to continue." initexmf $ADMIN --edit-config-file updmap read ANSWER ((STEP++)) echo -e "\n\n$STEP) Update map configuration" initexmf $ADMIN --mkmaps rm *.mtx rm *.pl rm *.vpl rm *.log rm *.tex rm *.fdb rm *.sed if [ -d Backup ] then rm *.afm mv ./Backup/* . rmdir ./Backup fi echo -e "\n\nThe font(s) should be installed now!" exit 0