LaTeX中文解决方案集锦

上传人:枫** 文档编号:551650621 上传时间:2024-01-06 格式:DOC 页数:11 大小:23KB
返回 下载 相关 举报
LaTeX中文解决方案集锦_第1页
第1页 / 共11页
LaTeX中文解决方案集锦_第2页
第2页 / 共11页
LaTeX中文解决方案集锦_第3页
第3页 / 共11页
LaTeX中文解决方案集锦_第4页
第4页 / 共11页
LaTeX中文解决方案集锦_第5页
第5页 / 共11页
点击查看更多>>
资源描述

《LaTeX中文解决方案集锦》由会员分享,可在线阅读,更多相关《LaTeX中文解决方案集锦(11页珍藏版)》请在金锄头文库上搜索。

1、LaTeX中文解决方案集锦 - LaTeX中文解决方案集锦 LaTeX 处理汉字的时候主要是用 CJK 宏包。这里搜集了一些中文处理的常见问题和解决办 法。 1.首段缩进 每一章,每一节的开头不缩进是很多人抱怨 “CJK 不符合中国人习惯”的头号原因。但是 其实你可以改变这一切。CJK 提供的只是编码,而不是款式。 CJK 是德国人设计的,他不懂中国人的习惯,但是他设计的编码方式完全可以为我们提供 任何可能处理中文的“理论根底”,我们只需要制定自己的“有中国特色的款式”。中国 人的款式必需由中国人自己来制定。这就使我想起了另外两个德国人,还有一位中国老人 :) 通常英语文章在一节开场时的第一段

2、是不缩进的。而在第二段就会缩进 parindent 的距 离。不赖烦的人请如今就在你的文档开头参加: %usepackageindentfirst 然后跳到下一个点子。 假如你设置: setlengthparindent2em 你就可以得到像这样的缩进两个字的效果。但是第一段仍然没有缩进。为了让第一段缩进 。你可以使用 indentfirst 宏包,它会使整篇文章的首段都有缩进。它其实只有两句话: letafterindentfalseafterindenttrue afterindenttrue 假如你只想让你的某一节首行有缩进,可以这么做: makeatletter letafterind

3、entrestoreafterindentfalse letafterindentfalseafterindenttrue afterindenttrue makeatother 这样之后的章节第一段都会缩进当前的 parindent 那么多间隔 。 由于刚刚我们用 afterindentrestore 存储了 afterindentfalse= 的定义。如今我们 使用: makeatletter letafterindentfalseafterindentrestore afterindentrestore makeatother 这下第一段又没有缩进了。你可以把这堆命令都用 newmand

4、 设成新的命令,用起来就 方便了。 2.怎样用 hyperref 生成含有中文 bookmark 的 PDF 文件? 使用 hyperref 的时候参加 CJKbookmarks 选项就行了: %usepackageCJKbookmarkshyperref 假如你使用 dvipdfm,需要再加一个 dvipdfm 的选项: %usepackagedvipdfm,CJKbookmarkshyperref 假如你想用 Unicode 的 bookmark,就加上 unicode 选项: %usepackageunicode,CJKbookmarkshyperref 好了,不耐烦的人请跳到下一个点子

5、 :) 不过假如你有兴趣看一下我昨天晚上怎么 hack 了 hyperref,就看看我的分析p : 我以前不知道hyperref已经有 CJKbookmarks 选项,所以昨天我想了一晚上,自己想出个 方法,就是: 在 %usepackagehyperref 之后加上这样一句: pdfstringdefDisablemands letCJKXXrelax letCJKXXXrelax letCJKXXXprelax letCJKXXXXrelax letCJKXXXXprelax 完成!直接运行 pdflatex 两次就可以得到有中文bookmark的PDF。嘿嘿! 由于 hyperref 与

6、 CJK 宏包的不交融,以前假如要生成中文bookmark的PDF文件,需要进 行以下工作: 在文档里 %usepackagehyperref 之后参加以下内容: PackageWarningNoLinehyperref% CJK characters are disabled in bookmarks pdfstringdefDisablemands% letCJKignorespacesempty% defCJKchar#1gobbletwo% letCJKcharxgobblefour% letCJKpunctchargobblefour% defCJKpunktcharx#1gobbl

7、efour% 第一次运行 pdflatex 后运行 energy 的 aux2out 或者 toc2out 程序。 再次运行 pdflatex 这样做不但费事,而且有个不明显的害处。由于 aux2out 和 toc2out 从 aux 和 toc 文 件里提取目录,它不能完全发挥 TeX 语言的作用,当你的章节里出现控制命令就会出错。 比方,假如你有这样一个小节: sectionexle of the textsfhhline package toc2out 会把 textsfhhline 里的内容全部去掉,这样你得到的就是这样一个 bookma rk: 。就消失了! 其实hyperref设计

8、时就考虑到了这种情况,它设计了一个命令: pdfstringdefDisablemands 它的定义就是当生成 bookmark 时,我们需要对原来的文档进展的变化,比方,上面这个 例子: sectionexle of the textsfhhline package 假如我们 defpdfstringdefDisablemandslettextsfrelax 就可以保存 hhline 在 bookmark 中。 这样我就有了一个中文 bookmark 的最简单的解决方案,完全可以不用外部程序。方法就 是:在 %usepackagehyperref 之后加上这样一句: pdfstringdef

9、Disablemands letCJKXXrelax letCJKXXXrelax letCJKXXXprelax letCJKXXXXrelax letCJKXXXXprelax 这样,当生成 bookmark 时,GBK 的汉字被原封不动保存下来放到 .out 文件里。从而可 以生成正确的中文 bookmark. 你还可以把 letCJKXXrelax letCJKXXXrelax letCJKXXXprelax letCJKXXXXrelax letCJKXXXXprelax 都写到 hyperref.sty 的 defpdfstringdef#1#2. 里,这样直接用 hyperref

10、 就可 以生成中文 pdf bookmark 了! 这种方法比起 hyperref 如今的方法有一个好处。因为汉字首先是通过 CJKXX, CJKX XX, . 转化为 CJK 内部代码的。hyperref 如今的方法相当于在输出 .out 文件的时候 把 CJK 内部码又转回 GBK 码或者 Unicode。我的方法是直接把 CJKXX, CJKXXX, . . 设为 relax 让它们对汉字不起作用。这样汉字编码直接进入了 .out 文件,更加直接 快速。 不过假如想要得到 Unicode 的汉字 bookmark, 需要实现更加直接的方法把 GBK 转到 Un ic,我还不知道怎么转,编

11、码的东西太烦人 :P 假如你的汉字不是 GBK, Unicode, 而是 HZ, BIG5, GB18030, 还是什么其它语言,. 你知道了这些,在将来的编码扩展中会更加 容易解决问题,假如你遇到这种情况就可以在pdfstringdefDisablemands里参加你的 东西。 3.怎样让汉字可以显示粗体? 你是否发现,在 section 标号的小节中,英语是粗体表示的,而汉字却没有变化?很多 时候你想让汉字也成为粗体。 假如你用 textbf你好, 你会发现根本没有变化。就像你在 Word 里使用“粗体”,打 印出来也没有粗体效果一样。因为 Word 其实只是显示在屏幕上的时候让你看到很“

12、粗” ,但是其实你没有“粗宋体”这个字体,它打印时是不会打印出粗体的。Word 还有很多比 如“下划线”之类的字体变化,但是实际上那些都是不符合排版的美学的。 CJK 宏包为没有粗体的人提供了一个“穷人”的方法:在 CJK 的字体定义文件中设置 C JKbold. 看看你的 c19song.fd 里是否有以下内容: DeclareFontFamilyC19song DeclareFontShapeC19songmn CJK * gbksong DeclareFontShapeC19songbxn CJKb * gbksongCJKbold DeclareFontShapeC19songmit

13、CJK * gbksongsl DeclareFontShapeC19songbxit CJKb * gbksongsl DeclareFontShapeC19songmsl CJK * gbksongslCJKbold 假如有的话,你用 textbf粗体 就会得到一种“穷人的粗体”,它是把宋体汉字平移了 三次重合在一起实现的,看看你的 CJK.sty 有如下定义: DeclareRobustmandCJKsymbols2 char #1char #2relax ifCJKbold hbox to CJKboldshifthsschar #1char #2 hbox to CJKboldshi

14、fthsschar #1char #2 fi 这样的到的粗体显然是非常难看的,在PDF文件里显示明显有“彩虹”效果!根本不能用。 所以 gbkfonts 生成的 fd 文件全部去掉了这个选项。 字体不是一个你想怎么变就可以怎么变的东西,它假如设计的时候就不是粗体,那你是不 可能把它变成粗体的。假如你用LaTeX缺省的英文字体,一般的时候是 cmr10, 用粗体的时 候其实用的是 cmbx10。 cmr10 和 cmbx10 是同一家族(puter Modern)的两种不同的字 体。cmbx 并不是 cmr 做了什么几何变换得到的,甚至 cmr10 也跟本不是 cmr5 扩大了两 倍变出来的! 字体都是专门的设计,每一个尺寸的每一笔每一划都经过了字体设计者的精雕细琢。它们 有的也可以

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 办公文档 > 演讲稿/致辞

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号