+ -
当前位置:首页 → 问答吧 → [原创] 在slackware 12.1 中,为tetex 3 安装 cjk 支持。[已完成]

[原创] 在slackware 12.1 中,为tetex 3 安装 cjk 支持。[已完成]

时间:2008-12-01

来源:互联网

前言,slackware 12.1 中还是用的tetex 3.0 ,但是tetex已经不再维护了。
现在推荐大家用texlive但是texlive太大了。大神Patrick一直没有替换tetex。
在linuxquestion上的帖子也提到了。在12.2中有可能用一个新的tex系统。
但是我估计还是不会变,Patrick 一直比较保守。

evesea 在 《slackware12.0安装CJK-求安装经验-----弄了好久,该弄的好像都弄了,还不行,只好暂时放弃了》
代码:
http://www.linuxsir.org/bbs/thread336990.html
发了帖子,我当时也没有仔细看。估计他也放弃了。

前两天看到一个《linux可以干什么》的帖子。其中有个latex高高手。
很有感触。上网google了一下。把这个搞定。做了一个安装脚本。
希望也可以帮助其他人。

主要参考两篇文章
1. 替 LaTeX CJK 新增字型 (感谢李果正 先生的贡献)
代码:
http://blog.bs2.to/post/EdwardLee/7672
2. Linux系统中为texlive生成CJK字体 (lchxr)
代码:
 http://www.linuxsir.org/bbs/thread337571.html
第一篇讲的比较详细。第二篇主要是提供了一个脚本,通过查看脚本发现,发现原理是一样的。
但是是为texlive做的,目录不同,还有是安装到$HOME目录的。其他人不能用。

这里主要是讲如何打包成slackware专用的。
方便以后使用。

必备软件
用到的软件主要是 fontforge。 安装脚本到 slackbuilds去下。
注意一点的是要把freetype的代码也拷进去。(freetype的代码我用的是slackware提供的)
同时我也打了bytecode的补丁。

CJK是一个宏包,支持CJK的编译。现在最新版本是4.8.1,把下来的文件解压缩。
代码:
http://cjk.ffii.org/
其中有个文件夹是 texinput 把这个文件夹拷贝到/usr/share/texmf/tex/latex/下面,
同时重命名为 CJK。
你也可以自己制作一个slackware的安装包。方便以后重新安装。

生成字体
要用中文的话要相应的字体,tetex中用type1的字体比较方便。但是现在xetex 可以直接用ttf了。
在这里我使用的是UTF8的字体。关于gbk的我不用。也就是说我的LC_CTYPE=zh_CN.UTF-8
要是gbk的请自己修改脚本。同时我没有为pdftex 做字体映射。slackware中没有dvipdfmx,所以
相应的字体也没有生成。
但是用dvipdfm的话没有问题。同时中文pdf书签也没有问题。只是不能copy。
如果要使用copy功能,请参考上面提到的第2篇文章的脚本。

上面废话这么多,其实就是一句。 用LC_CTYPE=zh_CN.UTF-8。保证是utf8的文件。gbk没有测试。
估计修改脚本生成对应的字体也行。

由于生成脚本需要 一个脚本文件 subfonts.pe (在CJK包的utils/subfonts 下面)。
还有sfd文件。大家可以google一下。同时我在附件里也包含了。
目录结构是
=================================================
font-make->
-> createlatexfont.sh
-> subfonts.pe
-> UBig5.sfd
-> UGBK.sfd
-> Unicode.sfd
=================================================
大家把要制作的ttf字体放到这个目录里面,然后修改脚本,使 $FONTFILE 对应ttf。
同时$FONTN 指定要在 latex中使用的字体名。

整个脚本如下
代码:
#!/bin/bash

CWD=`pwd`
TMP=${TMP:-/tmp}

FONTN=wqyzh
FONTFILE=wqy-zenhei.ttf
FONTSCRIPT=subfonts.pe
# you can change this sfd file to generate
# the gbk or big file, But need to change the fd file name
# and the the fd file place. line 31 and line 67 here script
SFDFILE=Unicode.sfd
VERSION=0.6.26
ARCH=i486
BUILD=${BUILD:-1}

PKG=$TMP/package-$FONTN

MYTEXMF=$PKG/usr/share/texmf
MYFONT=$MYTEXMF/fonts
T1DIR=$MYFONT/type1/CJK/$FONTN
TFMDIR=$MYFONT/tfm/CJK/$FONTN
AFMDIR=$MYFONT/afm/CJK/$FONTN
ENCDIR=$MYFONT/enc/CJK/$FONTN
#VFDIR=$MYFONT/vf/CJK/$FONTN
MAPDIR=$MYFONT/map/dvips/CJK/
LTXDIR=$MYTEXMF/tex/latex/CJK

rm -rf $PKG
# do not use the virtual font $VFDIR
mkdir -p $T1DIR $TFMDIR $AFMDIR $ENCDIR $MAPDIR $LTXDIR/UTF8 

cd $TMP

rm -rf $FONTN-$VERSION
mkdir $FONTN-$VERSION
cd $FONTN-$VERSION

#cp $CWD/$FONTFILE .

# begin to generate the unicode type1 fonts

echo "generate the type1 font $FONTFILE, this will take a long time."
fontforge -script $CWD/$FONTSCRIPT $CWD/$FONTFILE $FONTN $CWD/$SFDFILE


# generate the font map file

for x in *.tfm
do
 echo "${x%.tfm} ${x%.tfm} < ${x%.tfm}.pfb" >> ${FONTN}.map 
done

# do not generate the italic font, there have some problem.

#for x in *.afm
#do 
# y=`echo $x | sed "s/$FONTN/${FONTN}sl/"`
# z=`afm2tfm ${x} -s .167 ${y%.afm}.tfm`
# echo "$z < ${x%.afm}.pfb" >> ${FONTN}.map 
#done

# generate the fd file used in the latex, 
# 70 is mean unicode, 19 is gbk, 00 is big5
# ONLY the normal roman font.

cat > c70$FONTN.fd << EOF
% This is the file c70${FONTN}.fd of the CJK package
% for using Chinese characters with LaTeX2e
%
% Created by Chunhua Li
%
% Version 4.7.0 (28-May-2007)

\def\fileversion{4.7.0}
\def\filedate{2007/05/28}
\ProvidesFile{c70${FONTN}.fd}[\filedate\space\fileversion]

% character set: Unicode U+0080 - U+FFFD
% font encoding: Unicode

\DeclareFontFamily{C70}{${FONTN}}{\hyphenchar \font\m@ne}

\DeclareFontShape{C70}{${FONTN}}{m}{n}{<-> CJK * ${FONTN}}{}
\DeclareFontShape{C70}{${FONTN}}{bx}{n}{<-> CJKb * ${FONTN}}{\CJKbold}

\endinput

EOF

# now move the file to correct place

cp *.tfm $TFMDIR
cp *.afm $AFMDIR
cp *.enc $ENCDIR
cp *.pfb $T1DIR

mv -v ${FONTN}.map $MAPDIR
mv -v c70${FONTN}.fd $LTXDIR/UTF8

#begin to pack the file

cd $PKG
chown -R root:root .
makepkg -l y -c n $TMP/tetex-cjk-${FONTN}-${VERSION}-$ARCH-$BUILD.tgz

cd $CWD

cat > ${FONTN}-install.sh << EOF
#!/bin/sh
# Add PATH and MANPATH for teTeX:
PATH="$PATH:/usr/share/texmf/bin"
MANPATH="$MANPATH:/usr/share/texmf/man"

texhash 

updmap-sys --enable Map ${FONTN}.map

EOF
chmod 700 ${FONTN}-install.sh

echo "==========================================="
echo "Please Pay Attention "
echo "After install the package"
echo "run the script ${FONTN}-install.sh manually"
结束语

要注意几点的是我只测试了 fireflysung.ttf wqy-zenhei.ttf 两款free字体。
对于有版权限制的字体,大家自己用脚本生成字体。
对于点阵字体,生成要很长时间,firefly我用了4、5个小时。wqy是矢量字体要好很多,
我只用了30分钟。我没有生成斜体,因为我用lchxr的脚本生成的时候,我觉得比较难看。
同时自己也不熟悉,这方面的东西。生成的只有正体。

大家可以把生成的字体备份一下,以后要处理的时候,还可以直接用。

在tex文件中使用的字体名,是在fd文件中定义的。

脚本最后自动生成了一个安装字体后。更新 tex的脚本。我的水平有限,我写在安装包里面的时候,
不起作用。我就单独生成了一个。做这个主要是因为su的时候有些PATH变量没有载入,命令无法执行。
现在用脚本就好了。 (记住要用root)

主要是两个命令
texhash 更新文件数据库。
updmap-sys --enable Map ${FONTN}.map 更新字体映射。

第二个主要是修改 /usr/share/texmf-config/web2c/updmap.cfg 在最后可以添加映射文件。
可以用vi修改。然后在 updmap-sys 一下。

这个脚本每次只处理一种字体。打成一个包。我个人觉的还是很方便的。


ps. 希望告诉多多指正。大家多提意见。 latex我本身是不熟悉的,这方面我也不行。

作者: ginkgo   发布时间: 2008-12-01

忘记传附件了。同时多赚一个帖子。
上传的附件
font-make-20090301.tar.bz2 (95.4 KB, 8 次查看)

作者: ginkgo   发布时间: 2008-12-01

Thanks,正需要!

作者: kangjs79   发布时间: 2008-12-01

上传一个字体比较信息。
用上面提供的脚本处理出来的字体,看起来不是很清楚。

到http://www.ctex.org网站上,有个脚本来增粗字体。
代码:
#!/usr/bin/fontforge -script 

# 脚本使用方式举例
#fontforge -script stroke.pe Fonts-old/gbkfs/fonts/type1/chinese/gbkfs/gbkfs01.pfb #New-Fonts/gbkfs/gbkfs01.pfb

if ($argc !=3)
 Print("")
 Print("Usage: ", $0, " infont outfont")
 Print("")
 Quit()
else
 Open($1)
endif

SelectAll()

foreach
 # ExpandStroke(width, line cap, line join, 0, remove internal/external flag)
 # flag: 1=remove internal, 2=remove external
 # FindIntersections()
 # RemoveOverlap()
 # Simplify()
 CorrectDirection()
 ExpandStroke(10, 0, 0, 0, 1)
 Simplify()
endloop

Generate($2)
但是很话时间,我昨天处理一个FZFS_18030,可能字体比较大。
我生成type1字体的时候用了5个小时。

但是用这个脚本增粗的时候,竟然花了15个小时。原来是16M,处理后是22.4M,
如果有人不想自己花时间,同时需要的话,可以pm我。

我贴了图片,里面的字体都是FZFS,大家可以看一下比较效果。
上面的是增粗的字体,下面是原来的字体。图片是200%。点击后可以看到大图。
上传的图像
fz-font-mod.png (51.5 KB, 29 次查看)

作者: ginkgo   发布时间: 2008-12-02

收藏了~ 呵呵~

不过我一直是用 texlive 里的 xetex ……

作者: grissiom   发布时间: 2008-12-02

到外面去问,搞好中文支持了用它写毕业论文.

作者: evesea   发布时间: 2009-02-21

我用的也是SW12.1,也是用TeTex3,CJK也装了,宋体和楷体用网上人家做好的,黑体和隶书用XP的自己生成。

作者: digwtx   发布时间: 2009-02-26