|
发表于 2007-6-25 15:39:53
|
显示全部楼层
我从网上搜到的一个脚本用的是 ttf2pt1 和 afm2tfm,也是生成 UTF-8 的字体文件,效果不错。最早的版本在这里 http://www.study-area.org/tips/latex/pdftex.html
我先贴上修改过的用来生成 UTF-8 字体的版本(包含斜体支持),楼主可以比较下看看哪个更方便。
- #!/bin/sh
- #
- # Origin By Edward G.J. Lee 2001.11.25
- # http://www.study-area.org/tips/latex/pdftex.html
- # This code is Public Domain.
- #
- # Enhanced by intron AT intron DOT ac, 2006.1.9
- # Modified for NetBSD by jungle AT soforge DOT com, 2006.1.14
- # Italic support added by robert.zhangle AT gmail DOT com, 2006.5.19
- #
- # Modified for TeXLive 2005 by cyfdecyf AT gmail DOT com 2006.12.23
- #
- if [ $# -ne 3 ]
- then
- cat << EOF
- Usage: `basename $0` font.ttf <TeX_Internal_Font_Name> <Tex_Font_Name>
- <TeX_Internal_Font_Name>: Used to name *.enc, *.afm, *.pfb, *.tfm & *.map
- <Tex_Font_Name>: Used in TeX source: \CJKencfamily{UTF8}{Tex_Font_Name}
- An example: `basename $0` gbsn00lp.ttf gbsn00lp songpt1
- EOF
- exit 1
- fi
- if ! which ttf2pt1; then
- echo "Please install ttf2pt1 before you can run me."
- exit 1
- fi
- #if ! which t1asm; then
- # echo "Please install t1utils before you can run me."
- # exit 1
- #fi
- if ! which extconv; then
- echo "Please CJK before you can run me."
- exit 1
- fi
- cat <<EOF
- ***************************************************************************
- * Please confirm that current working directory is EMPTY except scripts *
- * and HAS ENOUGH SPACE to contain so many intermediate files. *
- * If it is not empty, this script may DAMAGE INNOCENT FILES!!! *
- ***************************************************************************
- EOF
- #read -p "Go ahead?[n]" a
- #if [ "$a" != "y" ] && [ "$a" != "Y" ]; then
- # exit 0
- #fi
- FONTFILENAME="$1"
- FONTNAME="$2"
- FONTTEXNAME="$3"
- TEXMFHOME=`kpsexpand '$TEXMFHOME'`
- ENCDIR=${TEXMFHOME}/fonts/enc/dvips/chinese/${FONTNAME}
- AFMDIR=${TEXMFHOME}/fonts/afm/chinese/${FONTNAME}
- TFMDIR=${TEXMFHOME}/fonts/tfm/chinese/${FONTNAME}
- PFBDIR=${TEXMFHOME}/fonts/type1/chinese/${FONTNAME}
- MAPDIR=${TEXMFHOME}/fonts/map/dvips
- UPDMAPCFGDIR=${TEXMFHOME}/web2c
- UPDMAPCFG=${UPDMAPCFGDIR}/updmap.cfg
- if [ ! -f $UPDMAPCFG ]
- then
- SYSUPDMAPCFG=`kpsewhich -format 'web2c files' updmap.cfg`
- if [ ! -d ${UPDMAPCFGDIR} ]; then
- mkdir -p ${UPDMAPCFGDIR}
- fi
- cp $SYSUPDMAPCFG $UPDMAPCFG
- fi
- CIDXMAPDIR=${TEXMFHOME}/fonts/map/dvipdfm/dvipdfmx/
- CIDXMAP=${CIDXMAPDIR}/cid-x.map
- if [ ! -f $CIDXMAP ]
- then
- if [ ! -d ${CIDXMAPDIR} ]; then
- mkdir -p ${CIDXMAPDIR}
- fi
- touch $CIDXMAP
- fi
- CJKDIR=${TEXMFHOME}/tex/latex/CJK/UTF8
- INSTALLDIRMODE="-m 0755"
- INSTALLMODE="-m 0644"
- FONTFILEBASENAME=`basename "$FONTFILENAME"`
- FDNAME=c70${FONTTEXNAME}.fd
- #MAPFILE=/usr/local/share/ttf2pt1/maps/cugb.map
- PLANENUM=255
- # Initialize ${FONTNAME}.map
- echo -n "" > ${FONTNAME}.map
- n=0
- echo "Generating subfonts from plane $n to plane $PLANENUM ..."
- while [ $n -le $PLANENUM ]
- do
- m=`printf %02x $n`
-
- echo -n "[$n]"
-
- SUBFONTNAME=${FONTNAME}${m}
-
- # Generate *.t1a *.afm *.enc
- ttf2pt1 -b -GAEF -p ft -Ohub -W0 -l plane+pid=3,eid=1,0x$m \
- "$FONTFILENAME" ${SUBFONTNAME}
-
- # avoid dvips(k)(before v5.86) t1part module bug.
- #perl -pi -e 's/_/Z/g' ${SUBFONTNAME}.t1a ${SUBFONTNAME}.afm
- # Generate *.pfb
- #t1asm -b ${SUBFONTNAME}.t1a > ${SUBFONTNAME}.pfb 2>/dev/null
-
- # Generate *.tfm
- afm2tfm ${FONTNAME}$m.afm ${FONTNAME}$m.tfm >/dev/null
- afm2tfm ${FONTNAME}$m.afm -s .167 ${FONTNAME}sl$m.tfm >/dev/null
-
- # Generate ${FONTNAME}.map
- AFMNAME=`grep -m 1 -i fontname ${SUBFONTNAME}.afm | cut -d ' ' -f 2`
- echo "${FONTNAME}$m ${AFMNAME} <${FONTNAME}$m.pfb" >> ${FONTNAME}.map
- echo "${FONTNAME}sl$m ${AFMNAME} " .167 SlantFont " <${FONTNAME}$m.pfb" \
- >> ${FONTNAME}.map
- n=`expr $n + 1`
- done
- echo
- cat > ${FDNAME} << EOF
- % This file is automatically generated by `basename $0`
- \\def\\fileversion{0.0.1}
- \\def\\filedate{`date +%Y/%m/%d`}
- \\ProvidesFile{${FDNAME}}[\\filedate\\space\\fileversion]
- \\DeclareFontFamily{C70}{${FONTTEXNAME}}{\\hyphenchar \\font\\m@ne}
- \\DeclareFontShape{C70}{${FONTTEXNAME}}{m}{n}{<-> CJK * ${FONTNAME}}{}
- \\DeclareFontShape{C70}{${FONTTEXNAME}}{bx}{n}{<-> CJKb * ${FONTNAME}}{}
- \\DeclareFontShape{C70}{${FONTTEXNAME}}{m}{it}{<-> CJK * ${FONTNAME}sl}{}
- \\DeclareFontShape{C70}{${FONTTEXNAME}}{bx}{it}{<-> CJKb * ${FONTNAME}sl}{}
- \\DeclareFontShape{C70}{${FONTTEXNAME}}{m}{sl}{<-> CJK * ${FONTNAME}sl}{}
- \\DeclareFontShape{C70}{${FONTTEXNAME}}{bx}{sl}{<-> CJKb * ${FONTNAME}sl}{}
- \\endinput
- EOF
- #exit 0;
- echo
- echo "Installing ..."
- install -d $INSTALLDIRMODE $ENCDIR $AFMDIR $TFMDIR $PFBDIR $MAPDIR $CJKDIR
- n=0
- while [ $n -le $PLANENUM ]
- do
- m=`printf %02x $n`
- echo -n "[$n]"
- install $INSTALLMODE ${FONTNAME}${m}.enc $ENCDIR
- install $INSTALLMODE ${FONTNAME}${m}.afm $AFMDIR
- install $INSTALLMODE ${FONTNAME}${m}.tfm $TFMDIR
- install $INSTALLMODE ${FONTNAME}sl${m}.tfm $TFMDIR
- install $INSTALLMODE ${FONTNAME}${m}.pfb $PFBDIR
- n=`expr $n + 1`
- done
- echo
- install $INSTALLMODE ${FONTNAME}.map $MAPDIR
- install $INSTALLMODE $FDNAME $CJKDIR
- echo "Map ${FONTNAME}.map" >> $UPDMAPCFG
- # update cid-x.map
- FONTFILEBASENAME=`basename ${FONTFILENAME}`
- echo "${FONTNAME}@Unicode@ UniGB-UCS2-H :0:${FONTFILEBASENAME}" >> $CIDXMAP
- echo "${FONTNAME}sl@Unicode@ UniGB-UCS2-H :0:${FONTFILEBASENAME}" >> $CIDXMAP
- #mktexlsr
- #updmap-sys
- #updmap
- #read -p "Do you want remove all intermediate files?[n]"
- #if [ "$a" = "y" ] || [ "$a" = "Y" ]; then
- n=0
- while [ $n -le $PLANENUM ]
- do
- m=`printf %02x $n`
- echo -n "[$n]"
-
- rm -f ${FONTNAME}${m}.enc ${FONTNAME}${m}.afm \ #${FONTNAME}${m}.t1a \
- ${FONTNAME}${m}.pfb ${FONTNAME}sl${m}.tfm ${FONTNAME}${m}.tfm
-
- n=`expr $n + 1`
- done
- echo
-
- rm -fv $FDNAME ${FONTNAME}.map
- #fi
- echo
- echo "OK, all done. :-)"
- echo
复制代码 |
|