注记:这是配置字体的补充,Nobel Huang写了这个内容,我就转载这里了,希望对大家配置有所帮助,当然如果你用xetex的话,我们就不需这么配置了。新版CTeX也已经支持了。无需配置,当然,备用我们用户来学习配置和字体原理。 在windows下想好好用用utf8编码写点东西发现不是那么容易。ctex提供的字体和配置包可以很好的解决gbk编码的字体问题,大家也很多都喜欢使用gbk编码。出于种种原因,我个人比较喜欢使用utf8,所以想将这一环境配得更好些。 查看ctex提供的字体和配置包(ctex-cs-1.5.4和ctex-fonts-2.4.6)不难发现,对于gbk编码的字体,ctex提 供了truetype和type1两种选择,type1字体已经编译好放在font/type1/chinese/gbk*各个目录下,但是utf8的字 体,只提供了tfm,即没有提供truetype的配置(在pdftex/chinese下)也没有提供type1的编译字体,pdflatex总是使用 ttfonts.map的配置产生pk字体嵌入,效果很差。这样,只有自己来做了。 研究了两天如何配置,发现网上的文章大部分都是针对比较老版本的pdflatex的了,而且也不再起作用,故无奈之下只有不断尝试。下面将先说明如何配置truetype字体的。 另外也顺便说明如何使得英文和数字(ASCII字体)也使用中文字体。 一配置truetype字体 安装ctex的字体和配置文件(可以从ctex网站获得安装文件) 使用如下脚本生成所需要的tfm、enc和map文件(目录请自行修改为所用系统适合的目录)(该代码修改自ctex论坛上instanton 兄提供的脚本) 该脚本的意思很简单,输入两个参数<字体的ttf名称>和<希望构造的字体名>,后者将会是在fd文件中使用的名称,例如 将产生使用系统目录下的fzst.ttf字体构造的名为unisong 的tex字体 两个循环的意图在于根据存在的enc文件编号将对应配置行写入map文件中 使用 以使得pdflatex可以找到对应的字体和编码文件 依次执行 刷新系统。现在你可以将你的ttf字体嵌入到生成的pdf文件中了,不再是pk点阵字体了。 二配置type1字体 接下来是type1字体的嵌入,这当然涉及到type1字体的生成了,但是步骤与上面大同小异,只是在脚本中需要添加一处ttf2pt1的调用而已。 生成type1字体的脚本如下 可以看到18行使用ttf2pt1产生pfb文件。 我尝试过使用ttf2pfd产生asm文件再用t1asm产生pfb文件,pdflatex总是说pfb文件不是预期的,同样使用ttf2pt1 产生t1a文件再用t1asm产生pfb文件也是这个错误,所以在这里不使用t1asm来生成pfb文件而是直接使用ttf2pt1的 -b选项来生成二进制的pfb文件就可以了。 注意 该脚本生成type1字体需要一些时间,一个字体大约3min(e4600(2.8GHz)+2Gddr3) 三对ASCII字符使用中文字体 作为ASCII字符,latex一般将使用系统内的tex字体(例如cmr或者ptm字体)。但是,在很多时候,我们也许想让输出的文档中的部分数 字和英文字体也使用自定义的中文字体中的字形,例如宋体的1234abcd等,而用第一和第二部分的方法所做出来的配置将不能满足这个要求,cjk将不会 使用低于256索引的字符作为输出。因此我们需要按照nfss的方法再做一些配置。以truetype的fzst(方正宋体)为例。 使用ttf2tfm生成ascii字符的tfm文件 注意 到没有使用-w选项,这样生成的tfm将只包含ascii的字形。将该文件命名为 书写fd文件 类似于下面的t1song.fd文件 注意其中的t1song对应于上一步生成的 更新 如果你使用的是miktex2.7的话,那么可以这么做 输入 在弹出的文件中添加 一行,保存退出。如果不是使用miktex,那么你只需要简单的 然后新建 表明使用生成的unisong00.enc(第一部分说明如何生成),和使用的truetype字体为fzst.ttf 将各个文件放置到合适的位置,然后执行 普通的tex系统执行 即可 现在你可以使用nfss的字体选择命令来使用这些ascii的字体了,例如 就将使用fzst的字体显示test1234了 Gook luck !set ttfile="%SystemRoot%\Fonts\%1"
rd /S /Q "%LOCALTEXMF%\pdftex\chinese\%2"
rd /S /Q "%LOCALTEXMF%\fonts\tfm\chinese\%2"
if not exist "%LOCALTEXMF%\pdftex\chinese\%2" mkdir "%LOCALTEXMF%\pdftex\chinese\%2"
if not exist "%LOCALTEXMF%\fonts\tfm\chinese\%2" mkdir "%LOCALTEXMF%\fonts\tfm\chinese\%2"
ttf2tfm"%SystemRoot%\fonts\%1" -w%2@Unicode@.tfm
ttf2tfm"%SystemRoot%\fonts\%1" -s0.167 %2sl@Unicode@.tfm
move *.tfm"%LOCALTEXMF%\fonts\tfm\chinese\%2"
rm*.map
for %%iin(0,1,2,3,4,5,6,7,8,9,a,b,c,d,e,f) do (
for %%jin(0,1,2,3,4,5,6,7,8,9,a,b,c,d,e,f) do (
if exist %2%%i%%j.encecho %2%%i%%j^<%2%%i%%j.enc^<%1 >> ttf-%2.map
if exist %2%%i%%j.encecho %2sl%%i%%j^<%2%%i%%j.enc^<%1 >> ttf-%2.map
))
move *.enc"%LOCALTEXMF%\pdftex\chinese\%2\"
move *.map"%LOCALTEXMF%\pdftex\chinese\"genttf.bat fzst.ttf unisong
initexmf --edit-config-file updmap
编辑updmap文件,在其中加入Map ttf-<fontname>.map
initexmf -u
initexmf --mkmaps
initexmf -uset ttfile="%SystemRoot%\Fonts\%1"
rd /S /Q "%LOCALTEXMF%\pdftex\chinese\%2"
rd/S /Q "%LOCALTEXMF%\fonts\afm\chinese\%2"
rd/S /Q "%LOCALTEXMF%\fonts\type1\chinese\%2"
rd/S /Q "%LOCALTEXMF%\fonts\tfm\chinese\%2"
if not exist "%LOCALTEXMF%\pdftex\chinese\%2" mkdir "%LOCALTEXMF%\pdftex\chinese\%2"
if not exist "%LOCALTEXMF%\fonts\afm\chinese\%2" mkdir "%LOCALTEXMF%\fonts\afm\chinese\%2"
if not exist "%LOCALTEXMF%\fonts\type1\chinese\%2" mkdir "%LOCALTEXMF%\fonts\type1\chinese\%2"
if not exist "%LOCALTEXMF%\fonts\tfm\chinese\%2" mkdir "%LOCALTEXMF%\fonts\tfm\chinese\%2"
ttf2tfm"%SystemRoot%\fonts\%1" -w%2@Unicode@.tfm
ttf2tfm"%SystemRoot%\fonts\%1" -s0.167 %2sl@Unicode@.tfm
move *.tfm"%LOCALTEXMF%\fonts\tfm\chinese\%2"
rm*.map
for %%iin(0,1,2,3,4,5,6,7,8,9,a,b,c,d,e,f) do (
for %%jin(0,1,2,3,4,5,6,7,8,9,a,b,c,d,e,f) do (
if exist %2%%i%%j.encttf2pt1 -b-W0-GFAE-lplane+0x%%i%%j%ttfile%%2%%i%%j
if exist %2%%i%%j.encecho %2%%i%%j^<%2%%i%%j.enc^<%2%%i%%j.pfb>> t1-%2.map
if exist %2%%i%%j.encecho %2sl%%i%%j^<%2%%i%%j.enc^<%2%%i%%j.pfb>> t1-%2.map
))
move *.enc"%LOCALTEXMF%\pdftex\chinese\%2\"
move *.afm"%LOCALTEXMF%\fonts\afm\chinese\%2\"
move *.pfb"%LOCALTEXMF%\fonts\type1\chinese\%2\"
move *.map"%LOCALTEXMF%\pdftex\chinese\"ttf2tfmfzst.ttf
t1song.tfm
\def\fileversion{4.8.1}
\def\filedate{2008/11/19}
\ProvidesFile{t1song.fd}[\filedate\space\fileversion]
\DeclareFontFamily{T1}{song}{}
\DeclareFontShape{T1}{song}{m}{n}{<-> t1song}{}
\DeclareFontShape{T1}{song}{m}{sl}{<-> t1song}{}
\DeclareFontShape{T1}{song}{m}{it}{<-> t1song}{}
\DeclareFontShape{T1}{song}{b}{n}{<-> t1song}{}
\DeclareFontShape{T1}{song}{b}{sl}{<-> t1song}{}
\DeclareFontShape{T1}{song}{b}{it}{<-> t1song}{}
\DeclareFontShape{T1}{song}{bx}{n}{<->ssub*t1song/b/n}{}
\DeclareFontShape{T1}{song}{bx}{sl}{<->ssub*t1song/b/sl}{}
\DeclareFontShape{T1}{song}{bx}{it}{<->ssub*t1song/b/it}{}
\endinputt1song.tfm
map
文件initexmf --edit-config-file updmap
Map ttf-ascii.map
updmap.cfg
文件中添加这么一行就可以了。ttf-ascii.map
文件,在其中输入t1song <unisong00.enc <fzst.ttf
initexmf -u
initexmf --mkmaps
initexmf -utexhash
updmap
texhash\fontencoding{T1}\fontfamily{song}\selectfont test1234
发表评论 取消回复