#!/bin/bash #密码变量 password="" #安装texlive installTex(){     if [ "$1" = "1" ]; then         echo "==>texlive简单安装..."         sudo -K        echo $password| sudo -S apt-get -y install texlivetexlive-math-extra texlive-latex-base texlive-latex-extratexlive-latex-recommended texlive-pictures texlive-sciencetexlive-bibtex-extra texlive-common latex-beamer     elif [ "$1" = "2" ]; then         echo "==>texlive完全安装..."         sudo -K         echo $password| sudo -S apt-get -y install texlive-full latex-beamer     else         echo "==>不安装texlive"     fi } #安装CJK installCJK(){     if [ "$1" = "1" ]; then         echo "==>CJK中文支持..."         sudo -K         echo $password| sudo -S apt-get -y install latex-cjk-chinese ttf-arphic-* hbf-*     elif [ "$1" = "2" ]; then         echo "==>CJK完全支持..."         sudo -K         echo $password| sudo -S apt-get -y install latex-cjk-all     else         echo "==>不安装CJK"     fi } #安装fontforge installFontforge(){     if [ "$1" = "1" ]; then         sudo -K         echo $password| sudo -S apt-get -y install fontforge     else         echo "==>不安装fontforge"     fi } #进度列表 stepEcho(){     case "$1" in     1) echo "安装Texlive和一些常用宏包配置";;     2) echo "安装CJK包配置";;     3) echo "安装fontforge配置";;     4) echo "确认subfonts.pe和Unicode.sfd文件路径";;     5) echo "设定CJK字体引用名";;     6) echo "正式安装texlive";;     7) echo "正式安装CJK";;     8) echo "正式安装fontforge";;     9) echo "正式检查subfonts.pe和Unicode.sfd存在性";;     *) echo "循环处理字体中...";;     esac } #生成map文件 makemap(){ for i in *.tfm do echo "${i%.tfm} ${i%.tfm} >$1 done } #检测返回值错误提示,和$?配合 perr(){     if [ "$1" != "0" ]; then         echo "[错误!]错误代码="$1     fi } ################main################ proc="0" #进度参数 procFile="./texsetup.sh_procFile" #进度记录文件 maprec="./texsetup.sh_maprec" #记录生成的map列表 subfontsPath="/usr/share/latex-cjk-common/utils/subfonts/subfonts.pe" #subfonts.pe文件的默认位置 UnicodePath="/usr/share/texmf/fonts/sfd/Unicode.sfd" #Unicode.sfd文件的默认位置 findpath="/usr" #如果上面两个文件找不到,默认到这个目录下找 #CJK路径 mapPath="$HOME/.texmf-var/fonts/map/dvips/CJK/" tfmPath="$HOME/.texmf-var/fonts/tfm/CJK/" #+"citename" typePath="$HOME/.texmf-var/fonts/type1/CJK/" #+"citename" encPath="$HOME/.texmf-var/tex/latex/CJK/" #+"encoding" #开始欢迎信息 clear echo "==============================================================" echo "[[Texlive+Latex+CJK+字体配置]]" echo "使用方法:" echo "将需要添加的字体文件都放到一个可写的临时目录(比如~/tempfont)里,然后将脚本" echo "文件也放到该目录下,运行即可,注意不要用root权限运行本脚本!!!" echo "==============================================================" usernow=`whoami` if [ "$usernow" = "root" ]; then     echo "不能用root权限运行本脚本!"     exit 1 fi echo "现在才需要输入sudo密码~" echo -n "password:" stty -echo read password stty echo echo "输入完毕" sudo -K echo "检测当前权限..." echo $password |sudo -S whoami success=`echo $?` if [ "$success" = "0" ];then     echo "密码输入正确" else     echo "密码输入错误"     exit 1 fi echo "==============================================================" echo "完成后是否删掉临时目录(删掉不影响字体使用)?"`pwd` RMYES="1" OPTIONS="删掉 保留" select opt in $OPTIONS;do     if [ "$opt" = "删掉" ]; then         RMYES="1"         break     elif [ "$opt" = "保留" ]; then         RMYES="0"         break     else         echo "错误选择!"     fi done echo "==========================================================" #检测系统信息 echo "系统信息检测" echo "----------------------------------" echo "系统信息:"`cat /proc/version` sysinfo=`cat /proc/version |egrep -i "ubuntu|debian"` if [ -z "$sysinfo" ]; then     echo "你的系统不是ubuntu/debian,某些步骤可能不能正常工作:"     OPTIONS="继续 退出"     select opt in $OPTIONS;do         if [ "$opt" = "继续" ]; then             break         elif [ "$opt" = "退出" ]; then             exit 0         else             echo "错误选择!"         fi     done fi encoding=`env |grep -i '^lang'` encoding=${encoding##*.} echo "编码:"$encoding if [ "${encoding:0:3}" != "UTF" ] && [ "${encoding:0:3}" != "utf" ]; then     echo "您当前系统默认编码不是UTF8,其他编码未测试可能支持不好,是否继续?"     OPTIONS="继续 退出"     select opt in $OPTIONS;do         if [ "$opt" = "继续" ]; then             break         elif [ "$opt" = "退出" ]; then             exit 0         else             echo "错误选择!"         fi     done else     encoding="UTF8" fi echo "==========================================================" #0:查看进度记录是否存在 echo "查看是否存在进度记录" echo "" echo "----------------------------------" if [ -e "$procFile" ];then     proc=`cat $procFile`     echo -n "存在进度记录"$proc"=>"     stepEcho $proc     OPTIONS="从进度记录处开始 从头开始"     select opt in $OPTIONS;do         if [ "$opt" = "从进度记录处开始" ]; then             echo "正准备从进度记录处开始..."             break         elif [ "$opt" = "从头开始" ]; then             echo "正准备从头开始..."             proc="1"             break         else             echo "错误选择!"         fi     done else     echo "无进度记录,从头开始..."     proc="1" fi echo "==========================================================" #1:安装Texlive和一些常用宏包配置 if [ "$proc" = "1" ]; then     echo "安装Texlive和一些常用宏包"     echo ""     echo "----------------------------------"     OPTIONS="简单安装 完全安装 跳过本步"     select opt in $OPTIONS;do         if [ "$opt" = "简单安装" ]; then             s1="1"             break         elif [ "$opt" = "完全安装" ]; then             s1="2"             break         elif [ "$opt" = "跳过本步" ]; then             s1="0"             break         else             echo "错误选择!"         fi     done     proc="2"     echo $proc > $procFile echo "==========================================================" fi #2:安装CJK包配置 if [ "$proc" = "2" ]; then     echo "安装CJK包"     echo ""     echo ""     echo "----------------------------------"     OPTIONS="简单安装 完全安装 跳过本步"     select opt in $OPTIONS;do         if [ "$opt" = "简单安装" ]; then             s2="1"             break         elif [ "$opt" = "完全安装" ]; then             s2="2"             break         elif [ "$opt" = "跳过本步" ]; then             s2="0"             break         else             echo "错误选择!"         fi     done     proc="3"     echo $proc > $procFile echo "==========================================================" fi #3:安装fontforge配置 if [ "$proc" = "3" ]; then     echo "安装fontforge"     echo ""     echo "----------------------------------"     OPTIONS="安装 跳过本步"     select opt in $OPTIONS;do         if [ "$opt" = "安装" ]; then             s3="1"             break         elif [ "$opt" = "跳过本步" ]; then             s3="0"             break         else             echo "错误选择!"         fi     done     proc="4"     echo $proc > $procFile echo "==========================================================" fi #4:确认subfonts.pe和Unicode.sfd文件路径 if [ "$proc" = "4" ]; then     echo "确认subfonts.pe和Unicode.sfd文件位置"     echo ""     echo "-------------------------------------------------"     echo "subfonts.pe默认路径="$subfontsPath     echo "Unicode.sfd默认路径="$UnicodePath     OPTIONS="更改 不更改"     select opt in $OPTIONS;do         if [ "$opt" = "更改" ]; then             echo -n "subfonts.pe路径[直接回车采用默认]="             read filepath             if [ ! -z "$filepath" ];then                 subfontsPath="$filepath"             fi             echo -n "Unicode.sfd路径[直接回车采用默认]="             read filepath             if [ ! -z "$filepath" ];then                 UnicodePath="$filepath"             fi             echo "确认路径分别为:"             echo "subfonts.pe路径="$subfontsPath             echo "Unicode.sfd路径="$UnicodePath             break         elif [ "$opt" = "不更改" ]; then             break         else             echo "错误选择!"         fi     done     echo -n "若以上路径都不可用时,到$findpath搜索[直接回车采用默认]="     read tmpfindpath     if [ ! -z "$tmpfindpath" ];then         findpath="$tempfindpath"     fi     proc="5"     echo $proc > $procFile echo "==========================================================" fi #5:设定CJK字体引用名 if [ "$proc" = "5" ]; then     echo "设定字体引用名"     echo "说明:比如设定simsun.ttc的引用名叫song,在tex文件中就是这么引用\begin{CJK*}{GBK}{song}"     echo "--------------------------------------"     echo ""     ls     echo "分别设定引用名(注意不要出现重名):"     fontcount="1"     for i in *.ttc *.ttf *.bdf *.dfont *.bin *.hqx *.otf *.sfd *.pfa *.pfb *.cid *.ps *.svg *.pk *.pcf     do         if [ "${i:0:1}" = "*" ]; then             continue;         fi         echo -n "字体文件"$i"="         read fname         mv $i $fontcount"-RENAMEDFONT-"$fname"."${i##*.}         let "fontcount=$fontcount+1"     done     proc="6"     echo $proc > $procFile echo "==========================================================" fi #>=6:正式安装中!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! echo "配置完成,进行正式安装..." echo "安装过程将持续很长时间,处理一个字体大约花费几十分钟,请确认以上步骤均没有错误,如果有错误请先结束脚本再次运行,确认继续?" echo "选择后请耐心等待结束,没选项了= =|||......" OPTIONS="继续 退出" select opt in $OPTIONS;do     if [ "$opt" = "继续" ]; then         break     elif [ "$opt" = "退出" ]; then         exit 0     else         echo "错误选择!"     fi done #6:正式安装texlive if [ "$proc" = "6" ]; then     echo "★正式安装texlive"     installTex $s1     perr $?     proc="7"     echo $proc > $procFile fi #7:正式安装CJK if [ "$proc" = "7" ]; then     echo "★正式安装CJK"     installCJK $s2     perr $?     proc="8"     echo $proc > $procFile fi #8:正式安装fontforge(若有必要,要顺便配置PATH) if [ "$proc" = "8" ]; then     echo "★正式安装fontforge"     installFontforge $s3     perr $?     proc="9"     echo $proc > $procFile fi #9:正式检查subfonts.pe和Unicode.sfd存在性 if [ "$proc" = "9" ]; then     echo "★检查subfonts.pe和Unicode.sfd存在性"     if [ -e "$subfontsPath" ]; then         echo "subfonts.pe在默认路径中找到"     else         echo "subfonts.pe没找到在"$findpath"中查找..."         subfontsPath=`find $findpath |grep -i "subfonts\.pe"`         if [ -z "$subfontsPath" ]; then             echo "[致命错误]没找到subfonts.pe"             exit 1         else             echo "找到文件:"$subfontsPath         fi     fi     if [ -e "$UnicodePath" ]; then         echo "Unicode.sfd在默认路径中找到"     else         echo "Unicode.sfd没找到在"$findpath"中查找..."         UnicodePath=`find $findpath |grep -i "unicode\.sfd"`         if [ -z "$subfontsPath" ]; then             echo "[致命错误]没找到Unicode.sfd"             exit 1         else             echo "找到文件:"$UnicodePath         fi     fi     proc="10"     echo $proc > $procFile fi #>=10:循环处理字体中 nowproc="9" echo "★漫长的循环开始啦~~~~~~~~~~~~~~~~~~~~~~~~~~~~~" #首先构造必要目录 mkdir -p $mapPath mkdir -p $encPath"$encoding" echo "生成路径:"$mapPath echo "生成路径:${encPath}${encoding}" for fontfile in *RENAMEDFONT* do     fonttype=${fontfile##*.}     tmpname=${fontfile##*-}     citename=${tmpname%%.*}     count=${fontfile%%-*}     let "nowproc=${nowproc}+1"     echo "☆当前处理字体为${citename}......"     if [ "$proc" -gt "$nowproc" ]; then         echo "==>已处理"         continue;     fi     #如果提示找不到fontforge,看安装成功没,然后再检查PATH     mapfilename=${citename}".map"     if [ ! -e "$mapfilename" ]; then         fontforge -script "$subfontsPath" "$fontfile" "$citename" "$UnicodePath"     fi     makemap $mapfilename     mkdir -p $tfmPath"$citename"     mkdir -p $typePath"$citename"     echo "生成字体路径:"$tfmPath"$citename"     echo "生成字体路径:"$typePath"$citename"     cp $citename".map" $mapPath     mv *.tfm $tfmPath"$citename"     mv *.pfb $typePath"$citename"     #生成fd文件     echo "\ProvidesFile{c70${citename}.fd}" >>$encPath"$encoding/c70${citename}.fd"    echo "\DeclareFontFamily{C70}{${citename}}{\hyphenchar \font\m@ne}">>$encPath"$encoding/c70${citename}.fd"    echo "\DeclareFontShape{C70}{${citename}}{m}{n}{ CJK *${citename}}{}" >>$encPath"$encoding/c70${citename}.fd"    echo "\DeclareFontShape{C70}{${citename}}{bx}{n}{ CJKb *${citename}}{\CJKbold}" >>$encPath"$encoding/c70${citename}.fd"     echo "\endinput" >>$encPath"$encoding/c70${citename}.fd"     #记录生成的map文件名     echo $mapfilename >> $maprec     let "proc=$proc+1"     echo $proc > $procFile done #这个需要root权限 sudo -K echo $password| sudo -S texhash #更新 for i in `cat $maprec` do     updmap --enable Map $i done #清理本临时目录 if [ "$RMYES" = "1" ]; then     rm -r `pwd` fi echo "任务终了= =|||久等了......"
11-04 00:31
查看更多