2006年8月28日
#
- 基本包的安裝
sudo apt-get install tetex-base tetex-bin tetex-extra
- CJK包安裝
sudo apt-get install latex-cjk-chinese
- CJK UTF8字體生成
將下面的code復(fù)制到文件cvtfont.sh中:
#!/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@intron.ac, 2006.1.9
# Modified for NetBSD by jungle@soforge.com, 2006.1.14
# Italic support added by robert.zhangle@gmail.com, 2006.5.19
#
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 pkgsrc fonts/ttf2pt1 before you can run me."
exit 1
fi
if ! which t1asm; then
echo "Please install pkgsrc fonts/t1utils before you can run me."
exit 1
fi
if ! which extconv; then
echo "Please install pkgsrc chinese/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'`
TEXMFMAIN=`kpsexpand '$TEXMFMAIN'`
TEXMFHOME='/usr/share/texmf-tetex/'
TTFONTFILEDIR=${TEXMFHOME}/fonts/truetype/chinese/
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/chinese
UPDMAPCFG=${TEXMFHOME}/web2c/updmap.cfg
if [ ! -f $UPDMAPCFG ]
then
SYSUPDMAPCFG=`kpsewhich -format 'web2c files' updmap.cfg`
cp $SYSUPDMAPCFG $UPDMAPCFG
fi
CIDXMAP=${TEXMFHOME}/dvipdfm/config/cid-x.map
if [ ! -f $CIDXMAP ]
then
touch $CIDXMAP
fi
CJKDIR=${TEXMFMAIN}/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 -GAE -pft -OHUBs -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}}{\\\\CJKbold}
\\\\DeclareFontShape{C70}{${FONTTEXNAME}}{m}{it}{<-> CJK * ${FONTNAME}sl}{}
\\\\DeclareFontShape{C70}{${FONTTEXNAME}}{bx}{it}{<-> CJKb * ${FONTNAME}sl}{\\\\CJKbold}
\\\\DeclareFontShape{C70}{${FONTTEXNAME}}{m}{sl}{<-> CJK * ${FONTNAME}sl}{}
\\\\DeclareFontShape{C70}{${FONTTEXNAME}}{bx}{sl}{<-> CJKb * ${FONTNAME}sl}{\\\\CJKbold}
\\\\endinput
EOF
#exit 0;
echo
echo "Installing ..."
install -d $INSTALLDIRMODE $TTFONTFILEDIR $ENCDIR $AFMDIR $TFMDIR $PFBDIR $MAPDIR $CJKDIR
install $INSTALLMODE $FONTFILENAME $TTFONTFILEDIR
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 >> $UPDMAPCFG
echo "Map ${FONTNAME}.map" >> $UPDMAPCFG
# update cid-x.map
echo "${FONTNAME}@Unicode@ unicode :0:${FONTFILENAME}" >> $CIDXMAP
echo "${FONTNAME}sl@Unicode@ unicode :0:${FONTFILENAME}" >> $CIDXMAP
mktexlsr
#updmap-sys
updmap
read -p "Do you want remove all intermediate files?[n]" a
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
根據(jù)自己的需要可以將TEXMFHOME目錄設(shè)置成不同的地方,只要Latex能找到即可
我將該目錄改為了/usr/share/texmf-tetex,如果相應(yīng)的目錄不存在,則需要自己新建。
將windows系統(tǒng)中的字體文件拷到腳本所在目錄執(zhí)行腳本即可生成Latex所需字體文件,以simhei.ttf為例:
sudo ./cvtfont.sh simhei.ttf simhei simhei
摘要: 很久沒(méi)有看Java相關(guān)的東西了,這幾天才發(fā)現(xiàn)Struts2 已經(jīng)發(fā)布了,以前就聽(tīng)說(shuō)Struts2就是以前的Webwork2,只是作了少許的改動(dòng)而已,我以前也沒(méi)看過(guò)Webwork,所以趕緊下來(lái)試了一把。Struts2的地址:http://struts.apache.org/2.x在Eclipse中新建了一個(gè)Tomcat工程(如果用WTP插件的話Dynamic Web工程)struts2Test,以下...
閱讀全文
前幾天按照Ubuntu How-To上的NVIDIA驅(qū)動(dòng)安裝說(shuō)明安裝了8672版的驅(qū)動(dòng),結(jié)果發(fā)現(xiàn)只要退出X-Window,系統(tǒng)就會(huì)沒(méi)有反應(yīng),網(wǎng)上搜了搜,發(fā)現(xiàn)有人也有一樣的情況,按照說(shuō)明重新安裝、重新配置Xorg,問(wèn)題依然沒(méi)有解決,X-Window也起不來(lái)了。
到NVIDIA網(wǎng)站上下了最新的8774版驅(qū)動(dòng)后,趕緊找找看怎么自己裝,有人已經(jīng)寫(xiě)好了
在恢復(fù)模式下:
需要gcc支持,如果沒(méi)有安裝則:
apt-get install build-essential gcc
刪除已經(jīng)安裝的NVIDIA驅(qū)動(dòng):
apt-get --purge remove linux-restricted-modules-`uname -r` linux-restricted-modules-common nvidia-glx nvidia-settings nvidia-kernel-common
安裝內(nèi)核headers
apt-get install linux-headers-`uname -r`
將下載下來(lái)的NVIDIA-Linux-x86-1.0-8774-pkg1.run解壓縮:
sh ./NVIDIA-Linux-x86-1.0-8774-pkg1.run --extract-only
進(jìn)入解壓后的NVIDIA-Linux-x86-1.0-8774-pkg1文件夾,執(zhí)行安裝:
./nvidia-installer -n --x-prefix=/usr/lib/xorg/
最后由于默認(rèn)安裝到了/usr/lib/xorg/lig/xorg,需要將文件拷到對(duì)應(yīng)的目錄下:
cp --no-dereference /usr/lib/xorg/lib/xorg/libX* /usr/lib/xorg/modules/
cp /usr/lib/xorg/lib/xorg/modules/drivers/* /usr/lib/xorg/modules/drivers/
cp --no-dereference /usr/lib/xorg/lib/xorg/modules/extensions/* /usr/lib/xorg/modules/extensions/
前天剛裝了個(gè)Qt4for windows,發(fā)現(xiàn)安裝的時(shí)候MySQL等數(shù)據(jù)庫(kù)插件都沒(méi)有安裝,像Qt X11版一樣,都需要自己安裝這些插件。
在Qt的安裝目錄C:\Qt4.1.2\下,有個(gè)src目錄,進(jìn)入plugins\sqldrivers\mysql,可以看到兩個(gè)文件,main.cpp和mysql.pro,很顯然要用qmake來(lái)完成編譯、生成目標(biāo)。
編譯前,首先保證依賴(lài)的MySQL頭文件和庫(kù)文件正確。首先MySQL安裝目錄下的include中的所有文件拷到qmake時(shí)能找到的目錄下,接著從lib/opt目錄下拷出libmysql.a,其實(shí)lib/opt下只有l(wèi)ibmysql.lib和libmysql.dll,從網(wǎng)上搜了一下找到一個(gè)方法從libmysql.dll生成libmysql.a:
1 、安裝好MySQL (如果不愿意安裝,找個(gè)libmySQL.dll文件也可以)
2、下載Pexports工具
3、轉(zhuǎn)換操作: pexports libmysql.dll > libmysql.def
4、使用MinGW的 dlltool轉(zhuǎn)換成為libmysql.a文件。dlltool --input-def libmysql.def --dllname libmysql.dll --output-lib libmysql.a -k
5、嘗試是否成功:
將生成的libmysql.a 拷到qmake的lib搜索路徑下后在plugins\sqldrivers\mysql目錄下做:
qmake -project
qmake
make
如果再出現(xiàn)象mysql_connect@xx (xx是數(shù)字)的錯(cuò)誤提示。就執(zhí)行第6步。
6、修改libmysql.def文件,給mysql_connect加上@xx,即mysql_connect@xx
7、重做第4步
8、然后嘗試第5步,如果還是出現(xiàn)錯(cuò)誤提示。就作第6步。一直到?jīng)]有錯(cuò)誤為止。
最后C:\Qt4.1.2\plugins\sqldrivers下將會(huì)生成需要的libqsqlmysql.a和qsqlmysql.dll。
找了一個(gè)測(cè)試文件,通過(guò)。
#include?<QtSql>?
#include?<QtGui>?


bool?createConnection(){?
QSqlDatabase?db?=?QSqlDatabase::addDatabase("QMYSQL");?
db.setHostName("localhost");?
db.setDatabaseName("test");?
db.setUserName("test");?
db.setPassword("");?

if(!db.open()){?
QMessageBox::critical(0,?QObject::tr("Database?Error"),?
??????????????????????????????db.lastError().text());?

return?false;?
}?

QSqlQuery?query;?
//query.exec("insert?into?book?values(?3,?'title',?'author')?");?
query.exec("select?title?,?author?from?book?");?

while?(query.next())?{?


????QString?title?=?query.value(0).toString();?
????QString?author?=?query.value(1).toString();?

QMessageBox::critical(0,?title,author);?
????
}?


return?true;?
}?



int?main(int?argc,char**?argv){?

QApplication?app(argc,?argv);?
????if?(!createConnection()){?

return?1;?
}?
????????

????return?app.exec();?


}?
