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

谁知道LaTeX + CJK 到底干了什么?

发布网友 发布时间:2022-04-26 17:50

我来回答

1个回答

热心网友 时间:2023-10-19 00:29

是这样的:
首先你编辑了一个文件 example.tex,里面有如下内容:
\documentclass{article}
\usepackage{CJK}
\begin{CJK}{GBK}{song}
\begin{document}您\end{CJK}\end{document}
用户在命令行敲入 "latex example.tex". 一个跟 "tex" 一模一样只不过叫做 "latex"的程序启动了。它其实就是 TeX, LaTeX 和 TeX 其实是同一个程序。在有些系统下 latex 是一个脚本,里面只有几行字。比如我的 Linux 版本就是这样:#!/bin/shtest -f "`kpsewhich latex.fmt`" || fmtutil --byfmt latex
exec tex -fmt=latex "$@"
TeX 发现自己是用叫做 "latex" 的命令启动的。或者脚本里明显指明了需要"latex"格式,它就去读入一个宏包叫做 latex.fmt. 这个文件一般在 $TEXMF/web2c. 以后我们就进入了 LaTeX 的世界,看到了?LaTeX 只是 TeX 的一种特殊情况(一种“格式”)。所以如果你能明白 TeX, LaTeX 给你的很多条条框框你都可以不遵守。
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), 而不是 bold, 形状为upright(n), 而不是 italic, 大小是 10pt, 子集号码 51. 这个描述会被 C19song.fd 这个字体描述文件映射为gbksong51. 因为 C19song.fd 里有这样一行:
\DeclareFontShape{C19}{song}{m}{n}{<-> CJK * gbksong}{}
所以 "\C19/song/m/n/10/51" 这个命令就会把字体设置为 "gbksong51 at 10pt"(TeX术语). 后面接着一个"s", "s" 的 ASCII 码是 115, 正好是 “您” 在这个子集中的索引号。
LaTeX 继续处理文档的其它部分,就象处理其它任何英语文件一样……最后生成了 dvi 文件。
用户用 dvips 生成 PostScript 文件。dvips 找到 config.ps 配置,读取里面的字体映射文件列表,列表里有一个文件叫做 cjk.map, 它就去读取 cjk.map. cjk.map 指出:gbksong51 这个字体的图像(glyph)应该从Type1字体文件 gbksong51.pfb 里得到…… dvips 把这些信息存到一张表里备用。
dvips 开始读取 dvi 文件,发现里面要求使用 gbksong51 这个字体,并且输出一个 "s" 对应的字符。它就下载(download,PostScript术语) gbksong51.pfb 到生成的 PostScript 文件 example.ps, 然后在合适的位置放上对“您”索引: s. 现在你用一个文本编辑器,比如 VIM, 打开 example.ps 就可以看到里面有如下内容:
%%BeginFont:SimSun51
%!FontType1-1.0: SimSun 2.10
%%Creator: ttf2pfb, $Id: ttf2pfb.c,v 1.2 2002/07/27 12:58:58 wy Exp $
%%CreationDate: Sun Jul 28 17:44:29 2002
%%VMusage: 030000 030000
%%Page: 1 1
TeXDict begin 1 0 bop 639 523 a Fb(s)1926 8991 y Fa(1)peop end%%Trailer
而你用 gsview 打开文件就看到了“您”。发现没有?"SimSun51" 就是插入Type1字体的开始处, 而"(s)" 就是说“输出字符串s”。这个字体里的"s"看起来就是“您”。而那个SimSun51,就是所谓的PostScript 字体名字。你的文档就是这样生成的。
从这个分析你可以看出,TeX 在本质上处理汉字是没有任何问题的,因为经过 CJK 的转化,汉字被转成了和英文字符一样的“盒子”。
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
强奸罪判多少年可以缓刑吗 20句充满着正能量的最励志的英语名言 如何通过cet-4? 去赤道几内亚,需要带什么行李,生活用品,在那边大概生活一年,什么东西... 去赤道几内亚需要准备什么?主要要预防什么疾病?要准备什么预防药品... 可惜!大部分消费者在交易后会取消亚马逊Prime会员资格 想问下 cpu i7 4900mq. gtx765m显卡. 32G内存 能大部分游戏效果开高么... i7 4800MQ i7 4900MQ 能有多大差别? 外星人14,显卡GTX765M。玩... 三星k2200打印机怎么升级 三星k2200打印机怎么升级br? 三星k2200打印机如何双面打? Latex高手请进~~~!如何打出一下角度的符号。 latex中怎样出现空心的字符 latex编辑一些特殊符号时(如И)总是出现问题补充中所给的一句话,是什么原因? latex特殊符号空心五角星怎么打啊 latex 特殊符号问题 latex 特殊符号 怎么在latex中输入特殊字符比如“╮” 旧楼房的电梯间被占用了怎么办? 怎样在 LaTeX 中输入特殊的法文字母? 老旧小区加装电梯费用高?这座城市宣布:可提取公积金 物业要求给老小区家装电梯,会不会有安全隐患呢? 热搜榜为什么旧楼加装电梯要审5个月? 老小区可以加装电梯了,怎么装,费用怎么算 安装室外货梯需要什么手续 七部门联合发文!太原市发布既有住宅加装电梯工作的实施意见 电梯安装资质证到期延长办理怎样写承诺书 如何撰写关于旧楼加装电梯后,业主转让物业时,要求下一手业主对于电梯维护和维修费用的责任承诺书 加装电梯业主给用地单位的承诺书怎么写? 语文学科对学生成长的意义 学科语文和中国语言文学选哪个? 用LaTeX 怎么进行批注和修改 雪铁龙C3一xr碳罐电磁阀在哪个位置? 雪铁龙c4碳罐电磁阀在哪个地方1.6t的 雪铁龙天逸C5碳罐电磁阀在什么位置 雪铁龙世嘉碳罐电磁阀坏了会报故障码吗 雪铁龙世嘉的碳罐电磁阀耐用吗 雪铁龙爱丽舍的碳罐控制电磁阀在什么地方 雪铁龙c4l碳罐电磁阀在哪里 雪铁龙C2的碳罐电磁阀不哒哒响了正常吗 08年产雪铁龙世嘉两厢碳罐电磁阀在哪个部位 雪铁龙2013款c5碳罐电磁阀多少钱? 怎样注销京东账号? 雪铁龙世嘉启动无反应怎么办? 雪铁龙C4L氧传感器控制电路电压低是什么意思 雪铁龙世嘉启动无反应 雪铁龙世嘉出现偶尔打火无反应? 冬天钓鱼钓小白条有吗。 冬天路亚在野塘钓白条应上浮水还是沉水 冬天零下十度为什么钓不到白条? 我想请问:冬天可以钓白条吗,白条的生活习性是什么?本人初学,冬季可以...