问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

Latex CJK中文字体安装指南(原理与实现)

发布网友 发布时间:2024-09-30 14:00

我来回答

1个回答

热心网友 时间:2024-10-08 04:03

记得有一本书中提到过鸟笼效应,买了漂亮的鸟笼之后,自然想买只漂亮的鸟。安装了 LaTeX 和 Vim 这些工具后,我总想用它们来写些 LaTeX 语句,以此来对得起自己辛苦搭建的环境。尽管我对 LaTeX 一窍不通,但我在网络上找到了一个模板,然后用 Vim 一行行敲代码,编译出漂亮的 PDF,这种完美感很快就消失了。当我尝试写下 "hello world" 这样的代码时,却遇到了编译错误。很快我就意识到问题出在字体上。早些时候,我对 LaTeX 使用中文字体就感到不安,总是担心编译器会告诉我 "这个用不了",就像一个严格的老师面对一个没底的学生。我知道可以尝试使用 xelatex 或者 ctex,以避免这些尴尬时刻,但我并不了解为什么我不能随意使用中文字体,我渴望了解更多。


这篇文章旨在为和我一样的初学者提供指南,主要关注于如何安装和使用 ttc 或 ttf 格式的CJK子字体。虽然我可能在某些环节中犯了错误,希望高手能指正并补充。我们首先需要理解 LaTeX 工作的原理,这将帮助我们建立整体概念。让我从博客上找到的一篇解释开始:


很多人对 LaTeX 的各种文件和字体感到困惑,但实际上 LaTeX 处理汉字的过程相当简单。当你编辑了一个包含如下内容的文件 example.tex:


用户在命令行中输入 "latex example.tex",一个名为 "latex" 的程序启动,实际上它就是 TeX、LaTeX 和 TeX 的结合体。如果在某些系统下,"latex" 是一个脚本,其中仅包含几行代码。例如在 Linux 系统下:


TeX 发现自己是通过 "latex" 启动的,或者脚本中明显指明需要 "latex" 格式,它会读取名为 "latex.fmt" 的文件,该文件通常位于 "$TEXMF/web2c" 目录。从这时起,我们进入了 LaTeX 的世界。LaTeX 是 TeX 的一种特殊情况,理解这一点后,我们可以无视 TeX 给我们的诸多规定。当 LaTeX 发现用户使用了 CJK 宏包,在 "\begin{CJK}{GBK}{song}" 时,CJK 宏包会将从现在开始到 "\end{CJK}" 之间的中文内容转换为一些奇怪的 TeX 命令。这些命令会根据不同的汉字转换不同的字体。例如,对于汉字“您”,它会将字体设置为 "gbksong51",然后获取第 115 个字符。为了实现这一目的,它将汉字“您”转换为 "\C19/song/m/n/10/51 s" 的命令,其中 "\C19/song/m/n/10/51" 表示使用 GBK 编码(C19)的 song 体,粗细为 medium(m),形状为 upright(n),大小为 10pt,子集号码为 51。这个描述会被 C19song.fd 这个字体描述文件映射为 "gbksong51"。因为 C19song.fd 中有这样一行代码:"\DeclareFontShape{C19}{song}{m}{n}{<-> CJK * gbksong}{}",所以 "\C19/song/m/n/10/51" 命令会将字体设置为 "gbksong51 at 10pt"(TeX 术语)。最后,我们继续处理文档的其他部分,就像处理其他任何英语文件一样,直到生成 dvi 文件。用户使用 dvips 生成 PostScript 文件,dvips 找到配置文件并读取字体映射列表,列表中有一个文件叫做 "cjk.map",它会读取该文件。在 "cjk.map" 中,我们找到 gbksong51 这个字体的图像(glyph)应该从 Type1 字体文件 "gbksong51.pfb" 里获取。dvips 将这些信息存储到一个表中以备后续使用。dvips 开始读取 dvi 文件,发现需要使用 "gbksong51" 字体,并输出一个 "s" 字符。它将 "gbksong51.pfb" 下载到生成的 PostScript 文件 "example.ps" 中,并在合适的位置放置索引号:s。现在,我们使用文本编辑器,如 VIM,打开 "example.ps" 文件,可以看到其中包含如下内容:


通过这个分析,我们可以看出 TeX 在本质上处理汉字没有问题,因为经过 CJK 的转化,汉字被转换成了类似于英文字符的“盒子”。只要按照 TeX 的规则处理这些“盒子”,我们就可以实现与英文完全相同的功能。


这篇文章揭示了 LaTeX 处理汉字的过程,涉及到了一些概念,如 $TEXMF$ 目录、字体描述文件(.fd)、映射文件(.map)等。为了解决一些疑惑,我提出了以下几个问题:



$TEXMF$ 是如何找到的?
为什么是 "gbksong51" 而不是 "52",是否存在 "gbksong53"?
"C19" 是什么,为什么不是 "C20" 或 "C80"?
.fd、.map 文件的用途是什么?它们在哪里,长什么样子?

这些问题的回答帮助我们理解了字体的安装和使用过程。例如,$TEXMF$ 是一个路径,它包含了 LaTeX 的各种配置文件和字体,通过命令 `kpsewhich -expand-var '$TEXMF'` 可以找到它。不同字体编码和子集号码的存在,使得同一个汉字在不同字体中可能对应不同的编号。C19 是基于 GB 编码的规定,不同的编码(如 C70 对应 UTF-8)用于不同的应用场景。字体描述文件(.fd)和映射文件(.map)是 LaTeX 系统中关键的组成部分,用于字体的映射和管理。


通过理解这些概念,我们可以更深入地了解 LaTeX 处理中文字体的过程。从编码到映射,再到最终的 PostScript 输出,每一步都遵循特定的规则和流程。了解这些细节有助于我们更好地解决在实际应用中遇到的问题。

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
女方早婚早育要离婚未满月孩子该怎么才能判给 家庭暴力,孩子未满月,孩子母亲要求离婚 孩子未满月是否可以离婚 孩子未满月可不可以离婚 新生儿未满月是否可离婚 固原斜视眼有哪些表现? 如何看待儿童斜视问题?固原 固原斜视儿童有必要做手术吗 HOJOJODO皇家金盾S1智能电子锁-详细介绍 皇家金盾智能锁怎么改密码 word2003怎么更改所有数字的字体 绿联t3可以用app控制吗 中兴v788D上不了网 。移动联通都不行。是跟固定电话绑定的。 梦见手掌上长出仙人掌是什么意思?想起就觉得鸡皮疙瘩 中兴v788d卡1放入移动卡 显示无卡 怎么回事 在线等 中兴V788D,卡1是联通GSM卡,如何设置才能上网呢!! 中兴V788D手机卡一是移动卡 流量已经用超了 卡二是联通的卡 请问怎么... 中兴v788d手机怎么切换主卡模式 1卡是联通的 2卡是移动的 上网想用移... 苹果17系统有什么新功能 中兴v788d如何切换卡2上网 ...安装了CTeX套装,输入语句后运行dvi文件失败了,是系统问题,还是我安... 我梦见吃人肉,黏黏的!谁能帮我解梦 啊! 梦见吃生人肉是什么意思 梦见自己去朋友家吃饭,奇怪的是明知道这是人肉却还是和朋友吃的很好,结... 梦见吃人肉代表什么? 三十几岁女人补什么盖容易吸收 台式电脑暂时不用怎么让它黑屏 正宗南京大肉面的制作方法是什么? 喝完椰汁椰肉怎么办 请问长江流经哪些省自治区和直辖市? itouch2冲不了电,显示一个闪电的符号,插在电脑上也是这个样子连着三个小... LaTeX中文配置(FandolSong和SimSun) LaTex 排版 (2):表格 | Linux 中国 linux 安装latex,我先安装了texlive2007,然后打算装texlive2013,我直接... 豆角炒腊肉的家常做法有哪些? 干豆角蒸腊肉怎么做比较下饭? 干豆角蒸腊肉有哪些家常做法? 微头条是什么?微头条怎么写有收益?一文告诉你如何玩转微头条“赢奖金... ...错误:Error Launching Console Application PDFTeXify 求详细解释... ...read the file: C:\Latex1.pdf, no such file or directory. 【LaTeX】新手问题 输中文出乱码 Latex 用法整理 梦见蛇和蚂蚁是什么意思啊 梦见蛇蚂蚁意味着什么 梦见黄桃摩司的预兆 梦见滴水的墩布把子 梦见用墩布清理胡同天很黑心里很害怕 让电脑桌面开满999朵玫瑰花的软件。或者是别的什么、、反正就是可以表白... 求一个软件,打开之后满屏幕开满玫瑰花 ...有没有一个能让对方打开就是满屏幕的玫瑰花的软件啊?急急急哦!_百... 那个满屏幕玫瑰的软件,求一个名为"礼物"的小程序,打开之后桌面开满玫...