LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 2527|回复: 6

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

[复制链接]
发表于 2008-11-30 20:50:40 | 显示全部楼层 |阅读模式
前言,slackware 12.1 中还是用的tetex 3.0 ,但是tetex已经不再维护了。
现在推荐大家用texlive但是texlive太大了。大神Patrick一直没有替换tetex。
在linuxquestion上的帖子也提到了。在12.2中有可能用一个新的tex系统。
但是我估计还是不会变,Patrick 一直比较保守。

evesea 在  《slackware12.0安装CJK-求安装经验-----弄了好久,该弄的好像都弄了,还不行,只好暂时放弃了》
  1. http://www.linuxsir.cn/bbs/thread336990.html
复制代码

发了帖子,我当时也没有仔细看。估计他也放弃了。

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

主要参考两篇文章
1. 替 LaTeX CJK 新增字型 (感谢李果正 先生的贡献)
  1. http://blog.bs2.to/post/EdwardLee/7672
复制代码

2. Linux系统中为texlive生成CJK字体 (lchxr)
  1. http://www.linuxsir.cn/bbs/thread337571.html
复制代码


第一篇讲的比较详细。第二篇主要是提供了一个脚本,通过查看脚本发现,发现原理是一样的。
但是是为texlive做的,目录不同,还有是安装到$HOME目录的。其他人不能用。

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

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

CJK是一个宏包,支持CJK的编译。现在最新版本是4.8.1,把下来的文件解压缩。
  1. http://cjk.ffii.org/
复制代码

其中有个文件夹是 texinput 把这个文件夹拷贝到/usr/share/texmf/tex/latex/下面,
同时重命名为 CJK。
你也可以自己制作一个slackware的安装包。方便以后重新安装。

[color="Red"]生成字体
要用中文的话要相应的字体,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中使用的字体名。

整个脚本如下

  1. #!/bin/bash

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

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

  14. PKG=$TMP/package-$FONTN

  15. MYTEXMF=$PKG/usr/share/texmf
  16. MYFONT=$MYTEXMF/fonts
  17. T1DIR=$MYFONT/type1/CJK/$FONTN
  18. TFMDIR=$MYFONT/tfm/CJK/$FONTN
  19. AFMDIR=$MYFONT/afm/CJK/$FONTN
  20. ENCDIR=$MYFONT/enc/CJK/$FONTN
  21. #VFDIR=$MYFONT/vf/CJK/$FONTN
  22. MAPDIR=$MYFONT/map/dvips/CJK/
  23. LTXDIR=$MYTEXMF/tex/latex/CJK

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

  27. cd $TMP

  28. rm -rf $FONTN-$VERSION
  29. mkdir $FONTN-$VERSION
  30. cd $FONTN-$VERSION

  31. #cp $CWD/$FONTFILE .

  32. # begin to generate the unicode type1 fonts

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


  35. # generate the font map file

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

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

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

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

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

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

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

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

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

  65. \endinput

  66. EOF

  67. # now move the file to correct place

  68. cp  *.tfm $TFMDIR
  69. cp  *.afm $AFMDIR
  70. cp  *.enc $ENCDIR
  71. cp  *.pfb $T1DIR

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

  74. #begin to pack the file

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

  78. cd $CWD

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

  84. texhash

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

  86. EOF
  87. chmod 700 ${FONTN}-install.sh

  88. echo "==========================================="
  89. echo "Please Pay Attention "
  90. echo "After install the package"
  91. echo "run the script ${FONTN}-install.sh manually"
复制代码


[color="Red"]结束语

要注意几点的是我只测试了 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我本身是不熟悉的,这方面我也不行。
 楼主| 发表于 2008-11-30 21:45:46 | 显示全部楼层
忘记传附件了。同时多赚一个帖子。;);)

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复 支持 反对

使用道具 举报

发表于 2008-11-30 22:57:19 | 显示全部楼层
Thanks,正需要!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-12-2 04:38:45 | 显示全部楼层
上传一个字体比较信息。
用上面提供的脚本处理出来的字体,看起来不是很清楚。

www.ctex.org网站上,有个脚本来增粗字体。
  1. #!/usr/bin/fontforge -script
  2. # 脚本使用方式举例
  3. #fontforge -script stroke.pe Fonts-old/gbkfs/fonts/type1/chinese/gbkfs/gbkfs01.pfb #New-Fonts/gbkfs/gbkfs01.pfb
  4. if ($argc !=3)
  5. Print("")
  6. Print("Usage: ", $0, " infont outfont")
  7. Print("")
  8. Quit()
  9. else
  10. Open($1)
  11. endif
  12. SelectAll()
  13. foreach
  14. # ExpandStroke(width, line cap, line join, 0, remove internal/external flag)
  15. #     flag: 1=remove internal, 2=remove external
  16. # FindIntersections()
  17. # RemoveOverlap()
  18. # Simplify()
  19. CorrectDirection()
  20. ExpandStroke(10, 0, 0, 0, 1)
  21. Simplify()
  22. endloop
  23. Generate($2)
复制代码

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

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

我贴了图片,里面的字体都是FZFS,大家可以看一下比较效果。
上面的是增粗的字体,下面是原来的字体。图片是200%。点击后可以看到大图。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复 支持 反对

使用道具 举报

发表于 2008-12-2 09:29:11 | 显示全部楼层
收藏了~ 呵呵~

不过我一直是用 texlive 里的 xetex ……
回复 支持 反对

使用道具 举报

发表于 2009-2-21 10:28:13 | 显示全部楼层
到外面去问,搞好中文支持了用它写毕业论文.
回复 支持 反对

使用道具 举报

发表于 2009-2-25 22:08:42 | 显示全部楼层
我用的也是SW12.1,也是用TeTex3,CJK也装了,宋体和楷体用网上人家做好的,黑体和隶书用XP的自己生成。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表