ctex
更新时间:2024-01-31 12:08:01 阅读量: 教育文库 文档下载
- cte官网推荐度:
- 相关推荐
ctex宏包说明?
吴凌云?
打印日期:2006年12月16日
摘要
ctex宏包提供了一个统一的中文LATEX文档框架,底层支持CCT和CJK两种中文
LATEX系统。ctex宏包提供了编写中文LATEX文档常用的一些宏定义和命令。
ctex宏包需要CCT系统或者CJK宏包的支持。主要文件包括ctexart.cls、ctexrep.cls、ctexbook.cls和ctex.sty、ctexcap.sty。
ctex宏包由ctex.org制作并负责维护。
目录
1简介2使用帮助2.1使用CJK......................................2.2使用CCT......................................2.3选项.........................................2.4
基本命令......................................2.4.1字体设置..................................2.4.2字号、字距、字宽和缩进..........................2.4.3中文数字转换................................
2.5
高级设置
......................................2.5.1章节标题设置................................
2.5.2部分修改标题格式.............................2.5.3附录标题设置................................2.5.4其他标题设置................................2.5.5其他设置..................................2.6
配置文件
......................................?本文件版本号为v0.8,最后修改日期2006/06/09。
?aloft@ctex.org
1
33445667788
12131314
14
目录3源代码说明3.13.23.33.4
2
15
选项.........................................15宏包.........................................18辅助定义
......................................19
通用中文设置....................................203.4.1中文字号..................................3.4.2
缺省字号大小................................3.5CCT相关配置...................................3.5.1CCT环境设置...............................3.5.2常用的中文字体
..............................3.5.3中文字号..................................3.5.4其他字体命令................................3.5.5
CCTfntef宏包接口.............................3.6CJK相关配置...................................3.6.1CJK环境设置...............................3.6.2常用的中文字体
..............................3.6.3中文字号..................................3.6.4其他字体命令................................3.6.5
CJKfntef宏包接口.............................3.7中文数字处理....................................3.8
中文化的标题结构.................................3.8.1章节标题基本结构.............................3.8.2part的标题.................................3.8.3chapter的标题...............................3.8.4section的标题...............................3.8.5页眉信息的修改
..............................3.8.6标签引用的中文化.............................3.8.7其他中文标题定义.............................3.8.8用户设置命令................................3.8.9
标题配置文件................................3.9文档类........................................3.10其它功能
......................................2224
262627
272728
282829
292930
30373741434547
51515254
58
58
1简介3
3.10.1中文日期格式................................583.10.2图表标题的分隔符.............................59
3.11用标准字体命令修改中文字体...........................59
3.11.1字体定义文件................................593.11.2字体命令修改................................60
1简介
这个宏包的部分原始代码来自于由王磊编写cjkbook.cls文档类,还有一小部分原始代码来自于吴凌云编写的GB.cap文件。原来的这些工作都是零零碎碎编写的,没有认真、系统的设计,也没有用户文档,非常不利于维护和改进。所以我们用doc和docstrip工具重新编写了整个文档,并增加了许多新的功能。
最初Knuth设计开发TEX的时候没有考虑到支持多国语言,特别是多字节的中日韩语
A言。这使得TEX以至后来的LTEX对中文的支持一直不是很好。即使在CJK解决了中文字A符处理的问题以后,中文用户使用LTEX仍然要面对许多困难。最常见的就是中文化的标
题。由于中文习惯和西方语言的不同,使得很难直接使用原有的标题结构来表示中文标题。
A因此需要对标准LTEX宏包做较大的修改。此外,还有诸如中文字号的对应关系等等。ctex
宏包正是尝试着解决这些问题。中间很多地方用到了在ctex.org论坛上的讨论结果,在此对参与讨论的朋友们表示感谢。
ctex宏包由五个主要文件构成:ctexart.cls、ctexrep.cls、ctexbook.cls和ctex.sty、ctexcap.sty。ctex.sty主要是提供整合的中文环境,可以配合大多数文档
A类使用。而ctexcap.sty则是对LTEX的三个标准文档类的格式进行修改以符合中文习惯,该宏包只能配合这三个标准文档类使用。ctexart.cls、ctexrep.cls、ctexbook.cls
则是ctex.sty、ctexcap.sty分别和三个标准文档类结合产生的新文档类,除了包含ctex.sty、ctexcap.sty的所有功能,还加入了一些修改文档类缺省设置的内容(如使用五号字体为缺省字体)。
A这份说明文档可以通过用LTEX编译ctex.dtx文件来得到。编译说明文档需要CJK
宏包和ctex宏包。为了生成正确的索引和版本记录,需要使用如下命令
makeindex-sgind.ist-octex.indctex.idxmakeindex-sgglo.ist-octex.glsctex.glo
2使用帮助
ctex宏包的使用十分简单。如果是使用ctex的文档类,只需用ctexart、ctexrep或者ctexbook替换原来的文档类就可以了。你也可以继续使用原来的文档类,而用ctex.sty
2使用帮助4
和ctexcap.sty宏包来配合使用,两者的效果是一样的(除了不能修改一些文档设置如缺省字体大小)。
2.1使用CJK
这是ctex宏包的缺省设置。ctex宏包会自动调用CJK宏包,你无需再自己调用。此
外,ctex宏包会在\\begin{document}和\\end{document}之间自动加入一个CJK环境,你无需再添加CJK环境。CJK宏包的命令都可以在\\begin{document}和\\end{document}之间正常使用。
例子1:使用文档类宏包
\\documentclass{ctexart}\\begin{document}中文宏包测试\\end{document}
例子2:使用普通宏包
\\documentclass{article}\%usepackage{ctex}\\begin{document}中文宏包测试\\end{document}
2.2使用CCT
ctex宏包也可以配合新版的CCT使用,只需在使用ctex宏包时加上CCT选项即可。
缺省CCT会使用CJK字库,因为这种字库方式比传统CCT字库更方便,兼容性也更好。如果要使用传统CCT字库,则还要加上CCTfont选项。
例子3:使用CJK方式字库
\\documentclass[CCT]{ctexart}\\begin{document}中文宏包测试\\end{document}
例子2:使用CCT方式字库
\\documentclass[CCT,CCTfont]{ctexart}\\begin{document}中文宏包测试\\end{document}
2使用帮助5
2.3选项
宏包的选项用于改变一些缺省风格的设置。缺省的设置已经针对中文的习惯进行了尽量
的修改,所以一般用户无需使用这些选项。如果你觉得某些设置不合适,可以向作者反映。我们会考虑在后面的版本中予以改进。我们也欢迎关于增加或者删减选项的建议。
下面的选项可能会是最经常使用的。但是它们只能用于文档类(ctexart、ctexrep和ctexbook)。
cs4size使用小四字号为缺省字体大小。
c5size使用五号字为缺省字体大小。这个是ctex文档类的缺省格式。
下面这些则可以在文档类宏包和ctex.sty上使用。CCT使用CCT代替CJK做为底层的中文支持系统。
CCTfont使用传统的CCT字库方式,该选项会自动激活CCT选项。punct对中文标点的位置(宽度)进行调整。
nopunct不对中文标点的位置进行调整(每个标点占有相同的宽度)。
space使用CJK的保留空格模式,保留中文字符间的空格(类似英文的习惯)。你需要自己
处理中文字符间的空格以及换行产生的空格(在行尾加上%符号可以避免),否则排版结果可能不符合中文习惯。这种模式可以通过\\CTEXnospace转换到nospace模式。nospace使用CJK的忽略空格模式,也就是CJK*环境的模式。CJK会自动忽略中文字符
间的空格,比较符合中文习惯。在这种模式下,可以使用?来分隔中英文字符,产生的间距稍小于普通空格,排版效果比较美观。这种模式可以通过\\CTEXspace命令转换到space模式。这个是ctex宏包的缺省模式。
cap使用中文的标题样式。这个是文档类宏包的缺省模式。nocap保留使用英文的标题样式。
indent使用中文的段首缩进模式,即缩进两个汉字宽度,同时每个段落都缩进。这个是
ctex宏包的缺省模式。
noindent使用原来的段首缩进模式,章节标题后的第一段不缩进。
psfont使用PostScript字库来代替CM字库。这个选项只影响英文字库的使用,对中文没
有作用。
fancyhdr保持和fancyhdr宏包的兼容性。该选项将使得fancyhdr宏包被自动调用。
Aamstex保持和AMS-LTEX宏包的兼容性。
\\songti\\heiti\\fangsong\\kaishu\\lishu\\youyuan
2使用帮助6
fntef为CJKfntef宏包和CCTfntef宏包提供统一接口。该选项将使得CJKfntef宏包或者
CCTfntef宏包被自动调用。
下面这些则可以在文档类宏包和ctexcap.sty上使用。
cap使用中文的标题样式,缺省格式由ctexcap.cfg配置文件内的定义给出。这个是文档
类宏包的缺省模式。nocap保留使用英文的标题样式。
sub3section将\\paragraph命令产生的标题改为section类格式。此时\\subparagraph命
令产生的标题会具有原来\\paragraph的格式。
sub4section将\\paragraph和\\subparagraph命令产生的标题都改为section类格式。
总结:ctex宏包的缺省选项是nospacecapindent,文档类的缺省选项是nospacecapindentc5size。
2.4基本命令
ctex宏包给用户提供一个通用的文档框架,使得用户可以自由地在不同的底层中文系
统间切换。为此,我们为CJK定制了一些模拟CCT的命令,也对部分CCT命令进行了修改,使得两者保持一致。此外,我们还定义了用于设置文档参数的高级设置命令。2.4.1
字体设置
中文字体很多,但是常用的就那么几个。我们为CJK常用的六种中文字体定义了简单易用的命令。它们是:
宋体:\\songti,CJK等价命令\\CJKfamily{song}黑体:\\heiti,CJK等价命令\\CJKfamily{hei}仿宋:\\fangsong,CJK等价命令\\CJKfamily{fs}楷书:\\kaishu,CJK等价命令\\CJKfamily{kai}隶书:\\lishu,CJK等价命令\\CJKfamily{li}幼圆:\\youyuan,CJK等价命令\\CJKfamily{you}
TEX系统中必须已经定义好这六种中文字体,并且使用和CTEX套装中一致的字体名称。(参见上面CJK等价命令的参数)
上面的字体命令和CCT中的一致,但传统的CCT字库中没有隶书和仿宋两种字体,需要用户自行安装定义。如果使用CCT时选择CJK字库方式,则可以使用这两种中文字体。
\\zihao
\\ziju
\\ccwd
\\CTEXindent
\\CTEXnoindent\\CTEXsetfont
\\CTEXnumber
\\CTEXdigits
2使用帮助7
2.4.2
字号、字距、字宽和缩进
中文字号的设置命令是\\zihao{??字号??},例如\\zihao{3}。可以使用的参数有16个,小号字体在前面加负号表示,从大到小依次为
初号小初一号小一二号小二三号小三0-01-12-23-3四号小四五号小五六号小六七号八号4
-4
5
-5
6
-6
7
8
英文字体大小会始终保持和中文字体一致。
汉字字距的调整使用命令\\ziju{??字宽的倍数??}。参数可以是任意的数字,例如\\ziju{5}设置汉字字距为当前汉字字宽的5倍,\\ziju{0.5}设置汉字字距为当前汉字字宽的一半。这里的汉字字宽指的是实际汉字的宽度,不包含当前字距。该命令不影响英文字距。
当前汉字的字宽保存在宏\\ccwd中。字宽是相邻两个汉字中心的距离,也就是说字距会被计算在内。
正常的缩进两个汉字字宽的距离,同时在汉字大小和字距改变的情况都可以自动修改缩进距离。
取消缩进。
\\CTEXsetfont命令用于更新当前的中文字体信息,包括当前字距和缩进距离。一般来说,用户无需使用这个命令。2.4.3
中文数字转换
使用CJK提供的\\CJKnumber命令可以将阿拉伯数字转换为中文数字。由于LATEX臭
名昭著的脆弱命令的原因,当\\CJKnumber被用在章节标题等地方的时候,要么出现错误无法使用,要么无法达到预期目的,例如在产生PDF书签的时候。于是我们定义了一个\\CTEXnumber命令,可以将产生的中文数字保存下来。该命令的格式为
\\CTEXnumber{??result??}{??number??}
其中??result??必须是一个TEX宏的名字,不需要预先定义。例如
\\CTEXnumber{\\test}{100002005}
则\\test中的内容就是“一亿零二千零五”(不包括引号)。
\\CTEXdigits命令和\\CTEXnumber命令类似,用于代替CJK提供的\\CJKdigits命令。它和\\CTEXnumber命令的不同之处在于转换后结果是中文数字串,而不是按照中文习惯的数字。该命令的格式为
\\chinese
\\CTEXoptions
\\CTEXsetup
2使用帮助8
\\CTEXdigits{??result??}{??number??}
其中??result??必须是一个TEX宏的名字,不需要预先定义。例如
\\CTEXnumber{\\test}{100002005}
则\\test中的内容就是“一○○○○二○○五”(不包括引号)。
对于经常需要转换的计数器,我们特别定义了一个\\chinese命令。该命令可以象罗马数字转换命令\\roman、\\Roman一样使用。具体格式是
\\chinese{??counter??}
其中??counter??是一个LATEX计数器(counter),即由\\newcounter命令产生的,例如section,figure等。
2.5
高级设置
ctex宏包中一般的设置通过\\CTEXoptions命令完成。这个命令的基本格式是\\CTEXoptions[??key1??=??val1??,??key2??=??val2??,...]
其中??key1??,??key2??是设置选项,??val1??,??val2??则是对应选项的设置内容。多个选项可以在一个语句中完成设置。
部分设置如章节标题则通过\\CTEXsetup命令完成。这个命令比\\CTEXoptions多一个参数,用于指定设置对象。基本格式是
\\CTEXsetup[??key1??=??val1??,??key2??=??val2??,...]{??type??}
其中??type??是设置的对象类型,如part,chapter,section,subsection,subsubsection,paragraph,subparagraph等。??key1??,??key2??是设置选项,如name,number,format,nameformat,numberformat,aftername,titleformat等。??val1??,??val2??则是对应选项的设置内容。同一个目标类型的多个选项可以在一个语句中完成设置。
如果以上命令的参数中包含中文字符,则命令必须放在\\begin{document}之后才能正常工作。12.5.1
章节标题设置
普通章节标题的格式全部通过\\CTEXsetup命令完成。章节类型在\\CTEXsetup命令的第二个参数中指定。如果使用了宏包选项cap(缺省情况即是如此),则所有对章节标题的修改必须在\\begin{document}以后进行。原因是缺省的中文标题设置文件ctexcap.cfg文件是在\\begin{document}之后才会自动装入,因而之前的修改都会被覆盖而无效。这一限制对后面的附录标题以及其他标题设置一样有效。2
1从v0.7版本开始支持在导言区使用中文。
2从
v0.7版本开始,ctexcap.cfg文件在宏包文件结束时就已经被装入,因此可以在导言区使用设置命令。
2使用帮助9
name={??prename??,??postname??}该选项用于设置章节的名字,包括章节编号前后的词语,
两个之间用逗号分开。例如
\\CTEXsetup[name={第,节}]{section}
会使得section的标题使用形如“第1节”的名字。注意不要使用中文的逗号。该选项的缺省设置是
使用宏包选项cap
partchaptersectionsubsectionsubsubsectionparagraphsubparagraph
{第,部分}{第,章}同右同右同右同右同右
使用宏包选项nocap{Part\\space,}{Chapter\\space,}{,}{,}{,}{,}{,}
number={??number??}该选项用于设置章节编号的数字样式。例如
\\CTEXsetup[number={\\roman{section}}]{section}
会使得section的标题使用小写罗马数字作为编号。常用的数字样式命令有\\chinese{??counter??}:一,二,三,...\\arabic{??counter??}:1,2,3,...\\roman{??counter??}:i,ii,iii,...\\Roman{??counter??}:I,II,III,...\\alph{??counter??}:a,b,c,...\\Alph{??counter??}:A,B,C,...该选项的缺省设置是
使用宏包选项cap
partchaptersectionsubsectionsubsubsectionparagraphsubparagraph
{\\chinese{part}}{\\chinese{chapter}}同右同右同右同右同右
使用宏包选项nocap{\\Roman{part}}{\\arabic{chapter}}{\\thesection}{\\thesubsection}{\\thesubsubsection}{\\theparagraph}{\\thesubparagraph}
2使用帮助10
format={??format??}用于控制章节标题的全局格式,作用域为章节名字和随后的标题内
容。常用于控制章节标题的对齐方式。该选项的缺省设置是
使用宏包选项cap
part(article)partchaptersectionsubsectionsubsubsectionparagraphsubparagraph
{\\centering}{\\centering}{\\centering}
{\\Large\\bfseries\\centering}{\\large\\bfseries\\centering}
{\\normalsize\\bfseries\\centering}{\\normalsize\\bfseries\\centering}{\\normalsize\\bfseries\\centering}
使用宏包选项nocap{\\raggedright}{\\centering}{\\raggedright}{\\Large\\bfseries}{\\large\\bfseries}
{\\normalsize\\bfseries}{\\normalsize\\bfseries}{\\normalsize\\bfseries}
nameformat={??nameformat??}用于控制章节名字的格式,作用域为章节名字,包括编号。
该选项的缺省设置是
使用宏包选项cap
part(article)partchaptersectionsubsectionsubsubsectionparagraphsubparagraph
同右同右同右同右同右同右同右同右
使用宏包选项nocap{\\Large\\bfseries}{\\huge\\bfseries}{\\huge\\bfseries}{}{}{}{}{}
numberformat={??numberformat??}用于控制章节编号的格式。一般为空,当你需要编号
的格式和前后的章节名字不一样时使用。
aftername={??aftername??}用于控制章节标题中章节名字和随后的标题内容之间的格式变
换。常用于控制标题内容是否另起一行。该选项的缺省设置是
2使用帮助11
使用宏包选项cap
part(article)partchaptersectionsubsectionsubsubsectionparagraphsubparagraph
{\\quad}同右{\\quad}同右同右同右同右同右
使用宏包选项nocap{\\par\\nobreak}{\\par\\vskip20pt}{\\par\\vskip20pt}{}{}{}{}{}
titleformat={??titleformat??}用于控制标题内容的格式,作用域为章节标题内容。
该选项的缺省设置是
使用宏包选项cap
part(article)partchaptersectionsubsectionsubsubsectionparagraphsubparagraph
{\\Large\\bfseries}{\\huge\\bfseries}{\\huge\\bfseries}同右同右同右同右同右
使用宏包选项nocap{\\huge\\bfseries}{\\Huge\\bfseries}{\\Huge\\bfseries}{}{}{}{}{}
beforeskip={??beforeskip??}用于控制章节标题前的空距。
该选项的缺省设置是
使用宏包选项cap
part(article)partchaptersectionsubsectionsubsubsectionparagraphsubparagraph
同右无效同右同右同右同右同右同右
使用宏包选项nocap{4ex}无效{50pt}
{-3.5explus-1exminus-.2ex}{-3.25explus-1exminus-.2ex}{-3.25explus-1exminus-.2ex}{3.25explus1exminus.2ex}{3.25explus1exminus.2ex}
在section及以下的标题中,使用负的距离表示标题后的段落不缩进(如标准的英文LaTeX文档),否则缩进。标题上方真正的空距是该参数的绝对值。
2使用帮助afterskip={??afterskip??}用于控制章节标题后的空距。
该选项的缺省设置是
使用宏包选项cap
part(article)partchaptersectionsubsectionsubsubsectionparagraphsubparagraph
同右无效同右同右同右同右同右同右
使用宏包选项nocap{3ex}无效{40pt}
{2.3explus.2ex}{1.5explus.2ex}{1.5explus.2ex}{-1em}{-1em}
12
在section及以下的标题中,正的距离表示向下留出的空距(如标准的section标题),使用负的距离则表示向右留出的空距的负值(如标准的paragraph标题)。indent={??indent??}用于控制章节标题本身的缩进。
该选项的缺省设置是
使用宏包选项cap
part(article)partchaptersectionsubsectionsubsubsectionparagraphsubparagraph
2.5.2
部分修改标题格式
同右无效同右同右同右同右同右同右
使用宏包选项nocap{0pt}无效{0pt}{0pt}{0pt}{0pt}{0pt}{\\parindent}
如果只想修改标题格式中的某些参数而不是完全重新设置,可以使用带+号的设置选项。例如
\\CTEXsetup[format+={\\zihao{1}}]{section}则section的标题使用一号字体,而其他格式设置保持不变。
标题格式相关的选项都支持这一功能,包括format,nameformat,numberformat,aftername和titleformat,而且对所有文档类型都有效。
2使用帮助2.5.3
附录标题设置
13
附录(appendix)的标题也使用\\CTEXsetup命令进行设置,第二个参数设为appendix。但是只能使用name和number两个设置选项。在使用了\\appendix命令之后,附录的名字和编号会被自动使用。附录的名字和前面的章节不同,它只有一个部分,放在编号之前。在article类文档中,附录是用section实现的,而在report和book类文档中附录使用的是chapter的设置。因此在设置附录的编号的时候要注意使用正确的计数器。如果你要设置其他格式的附录标题,可以根据使用的文档类直接用section或者chapter的设置命令来控制,但是要记住把设置命令放在\\appendix(如果有的话)的后面,否则会被\\appendix命令的设置覆盖。
附录的缺省设置是
使用宏包选项cap
name(article)name
number(article)number
2.5.4
其他标题设置
同右{附录?}同右同右
使用宏包选项nocap{}
{Appendix\\space}{\\Alph{section}}{\\Alph{chapter}}
除章节标题外其他标题的设置通过\\CTEXoptions设置。包括contentsname目录名list?gurename表格目录listtablename插图目录?gurename图tablename表abstractname摘要indexname索引bibname参考文献
例如
\\CTEXoptions[indexname={总索引}]把索引的名字改为“总索引”。
2使用帮助2.5.5
其他设置
14
设置\\today的日期格式的格式包括
使用\\CTEXoptions可以设置\\today命令产生的日期格式。支持
1.阿拉伯数字加中文年月日
\\CTEXoptions[today=small]
\\today生成的日期例子为“2006年12月16日”。2.中文数字加中文年月日
\\CTEXoptions[today=big]
\\today生成的日期例子为“二○○六年十二月十六日”。
A3.LTEX标准格式
\\CTEXoptions[today=old]
\\today生成的日期例子为“December16,2006”。
设置图表标题的分隔符使用\\CTEXoptions可以设置\\caption命令产生的图表标题的分隔符。这个分隔符缺省是使用冒号:。可以通过命令
\\CTEXoptions[captiondelimiter={??string??}]设置为任意的单个字符或者字符串??string??。
2.6配置文件
主要的配置文件有ctex.def和ctexcap.cfg以及几个字体定义文件*.fd。字体定义
文件的内容请参考3.11.1的内容。
ctex.def是一些中文字符串参数的定义,会被所有的宏包使用。如果你想改用其他的中文字符,例如繁体字,可以修改这个文件。
ctexcap.cfg是缺省中文标题格式的定义,当你使用cap选项时就会使用这里的定义。你可以把它改为你经常使用的格式,这样就不用每次都在正文中修改了。ctexcap.cfg中的设置都可以通过宏包提供的设置命令在正文中进行修改。
最后,宏包还将读入ctex.cfg文件,该文件中的设置将覆盖其他配置文件中的设置。用户可以在该文件中加入自己的定义。
在修改这些配置文件的时候,你可以修改系统目录中的文件,也可以拷贝一份放到当前目录下,然后修改。TeX会优先使用当前目录下的同名文件。这样你可以针对不同的应用设置不同的缺省配置文件。
3源代码说明15
3
3.1
\\ifCTEX@cct
源代码说明
选项
用于判断是否使用CCT中文系统,缺省是不使用。
???ctex|cls??
2\\newif\\ifCTEX@cct\\CTEX@cctfalse3\\DeclareOption{CCT}{\\CTEX@ccttrue}4??/ctex|cls??
1
\\ifCTEX@cctfont用于判断CCT是使用传统CCT字库还是CJK字库,缺省是使用CJK字库。
???ctex|cls??
6\\newif\\ifCTEX@cctfont\\CTEX@cctfontfalse
7\\DeclareOption{CCTfont}{\\CTEX@ccttrue\\CTEX@cctfonttrue}8??/ctex|cls??
5
\\ifCTEX@punct用于判断是否对中文标点宽度进行调整,缺省是调整。
910111213
???ctex|cls??
\\newif\\ifCTEX@punct\\CTEX@puncttrue\\DeclareOption{punct}{\\CTEX@puncttrue}\\DeclareOption{nopunct}{\\CTEX@punctfalse}??/ctex|cls??
\\ifCTEX@space用于判断是否忽略汉字间的空格,缺省是忽略。
1415161718
???ctex|cls??
\\newif\\ifCTEX@space\\CTEX@spacefalse\\DeclareOption{space}{\\CTEX@spacetrue}\\DeclareOption{nospace}{\\CTEX@spacefalse}??/ctex|cls??
space参数使得缺省的中文环境不会吃掉中文字符后面的空格。这种情况下很容易造成汉字之间产生多余的空格,需要小心使用。
\\ifCTEX@caption
用于判断是否使用中文标题,缺省是使用。
1920212223
???ctex|ctexcap|cls??
\\newif\\ifCTEX@caption\\CTEX@captiontrue\\DeclareOption{nocap}{\\CTEX@captionfalse}\\DeclareOption{cap}{\\CTEX@captiontrue}??/ctex|ctexcap|cls??
\\ifCTEX@indent用于判断是否使用中文的缩进格式,缺省是使用。
24
???ctex|cls??
3源代码说明21
197198199
\\input{ctexcjk.clo}\\fi
??/ctex|cls??
所有包含中文字符的定义都需要从ctex.def读入。
200201202203204205206207208
???ctex|cls??
\\AtEndOfPackage{%\\makeatletter
\\InputIfFileExists{ctex.def}{}{%\\PackageError{ctex}{ên’tfindctex.def}{%
Therewillbeunexpectederrorsifyoucontinue.}}\\makeatother}??/ctex|cls??
如果使用中文标题,则还要读入ctexcap.cfg的内容。
209210211212213214215216217218219
???ctexcap|cls??\\ifCTEX@caption
\\AtEndOfPackage{%\\makeatletter
\\InputIfFileExists{ctexcap.cfg}{}{%\\PackageError{ctex}{%
Can’tfindctexcap.cfg}{%
Theenglishcaptionsareusedifyoucontinue.}}\\makeatother}\\fi
??/ctexcap|cls??
最后再从ctex.cfg读入用户的自定义设置。
220221222223224225226227
???ctex|cls??
\\AtEndOfPackage{%\\makeatletter
\\InputIfFileExists{ctex.cfg}{}{%\\PackageWarning{ctex}{ên’tfindctex.cfg}}\\makeatother}??/ctex|cls??
\\CTEXindent\\CTEXnoindent
段首缩进2个汉字的距离,需要考虑到字距。
228229230231232233234
???ctex|cls??
\\newcommand*\\CTEXindent{\\CTEXsetfont\\parindent2\\ccwd}\\newcommand*\\CTEXnoindent{\\parindent\\z@}\\ifCTEX@indent
\\AtBeginDocument{\\CTEXindent}\\fi
??/ctex|cls??
3源代码说明22
\\CTEX@spaceChar
235
??ctex|cls??\\def\\CTEX@spaceChar{\\hskip\\f@size\\p@}
\\baselinestretch通常中文文档需要较宽的行距。
236
??ctex|cls??\\def\\baselinestretch{1.3}
3.4.1中文字号
首先给出中文字号和TEX字体大小的对应关系。定义中使用pt为单位。中文字号大小参考Word的定义。
1in=72bp=72.27pt行距=字体大小×1.2
237238239240241242243244245246247248249250251252253254
???ctex|cls??
\\def\\CTEX@fs@eight{5.02}\\def\\CTEX@fs@seven{5.52}\\def\\CTEX@fs@ssix{6.52}\\def\\CTEX@fs@six{7.53}\\def\\CTEX@fs@sfive{9.03}\\def\\CTEX@fs@five{10.54}\\def\\CTEX@fs@sfour{12.05}\\def\\CTEX@fs@four{14.05}\\def\\CTEX@fs@sthree{15.06}\\def\\CTEX@fs@three{16.06}\\def\\CTEX@fs@stwo{18.07}\\def\\CTEX@fs@two{22.08}\\def\\CTEX@fs@sone{24.09}\\def\\CTEX@fs@one{26.10}\\def\\CTEX@fs@szero{36.14}\\def\\CTEX@fs@zero{42.16}??/ctex|cls??
\\def\\CTEX@fs@eightskip{6.02}\\def\\CTEX@fs@sevenskip{6.62}\\def\\CTEX@fs@ssixskip{7.83}\\def\\CTEX@fs@sixskip{9.03}\\def\\CTEX@fs@sfiveskip{10.84}\\def\\CTEX@fs@fiveskip{12.65}\\def\\CTEX@fs@sfourskip{14.45}\\def\\CTEX@fs@fourskip{16.86}\\def\\CTEX@fs@sthreeskip{18.07}\\def\\CTEX@fs@threeskip{19.27}\\def\\CTEX@fs@stwoskip{21.68}\\def\\CTEX@fs@twoskip{26.50}\\def\\CTEX@fs@soneskip{28.91}\\def\\CTEX@fs@oneskip{31.32}\\def\\CTEX@fs@szeroskip{43.36}\\def\\CTEX@fs@zeroskip{50.59}%八号字5bp%七号字5.5bp%小六号6.5bp%六号字7.5bp%小五号9bp%五号字10.5bp%小四号12bp%四号字14bp%小三号15bp%三号字16bp%小二号18bp%二号字22bp%小一号24bp%一号字26bp%小初号36bp%初号字42bp
定义相应的数学字体的大小(用于上下脚标)。
255256257258259260261262263264
???ctex|cls??
\\DeclareMathSizes{\\CTEX@fs@eight}{\\CTEX@fs@eight}{5}{5}\\DeclareMathSizes{\\CTEX@fs@seven}{\\CTEX@fs@seven}{5}{5}\\DeclareMathSizes{\\CTEX@fs@ssix}{\\CTEX@fs@ssix}{5}{5}\\DeclareMathSizes{\\CTEX@fs@six}{\\CTEX@fs@six}{5}{5}
\\DeclareMathSizes{\\CTEX@fs@sfive}{\\CTEX@fs@sfive}{6}{5}\\DeclareMathSizes{\\CTEX@fs@five}{\\CTEX@fs@five}{7}{5}\\DeclareMathSizes{\\CTEX@fs@sfour}{\\CTEX@fs@sfour}{8}{6}\\DeclareMathSizes{\\CTEX@fs@four}
{\\CTEX@fs@four}{\\CTEX@fs@five}{\\CTEX@fs@six}
3源代码说明23
265266267268269270271272273274275276277278279280281
\\DeclareMathSizes{\\CTEX@fs@sthree}
{\\CTEX@fs@sthree}{\\CTEX@fs@sfour}{\\CTEX@fs@sfive}
\\DeclareMathSizes{\\CTEX@fs@three}
{\\CTEX@fs@three}{\\CTEX@fs@four}{\\CTEX@fs@five}
\\DeclareMathSizes{\\CTEX@fs@stwo}
{\\CTEX@fs@stwo}{\\CTEX@fs@sthree}{\\CTEX@fs@sfour}
\\DeclareMathSizes{\\CTEX@fs@two}
{\\CTEX@fs@two}{\\CTEX@fs@three}{\\CTEX@fs@four}
\\DeclareMathSizes{\\CTEX@fs@sone}
{\\CTEX@fs@sone}{\\CTEX@fs@stwo}{\\CTEX@fs@sthree}
\\DeclareMathSizes{\\CTEX@fs@one}
{\\CTEX@fs@one}{\\CTEX@fs@two}{\\CTEX@fs@three}
\\DeclareMathSizes{\\CTEX@fs@szero}
{\\CTEX@fs@szero}{\\CTEX@fs@sone}{\\CTEX@fs@stwo}
\\DeclareMathSizes{\\CTEX@fs@zero}
{\\CTEX@fs@zero}{\\CTEX@fs@one}{\\CTEX@fs@two}
??/ctex|cls??
\\zihao这个命令用于改变中文字号。当前中文字号保存在\\CTEX@zihao中。注意,如果没用过\\zihao命令,则\\CTEX@zihao没有定义。
\\CTEX@zihao
282283
???ctex|cls??
\\def\\CTEX@zihao{}
如果是负数,表示是小号字体
284285286287288289290291292293294
\\DeclareRobustCommand*\\zihao[1]{\\def\\CTEX@zihao{#1}%
\\ifnum#11<0%\\@tempcnta=-#1
\\ifcase\\@tempcnta%
\\fontsize\\CTEX@fs@szero\\CTEX@fs@szeroskip%\\or\\fontsize\\CTEX@fs@sone\\CTEX@fs@soneskip%\\or\\fontsize\\CTEX@fs@stwo\\CTEX@fs@stwoskip%
\\or\\fontsize\\CTEX@fs@sthree\\CTEX@fs@sthreeskip%\\or\\fontsize\\CTEX@fs@sfour\\CTEX@fs@sfourskip%\\or\\fontsize\\CTEX@fs@sfive\\CTEX@fs@sfiveskip%\\or\\fontsize\\CTEX@fs@ssix\\CTEX@fs@ssixskip%
如果不在预定义的字号范围(-0–-6),则报告一个错误
295296297298
\\else\\PackageError{ctex}{%
UndefinedChinesefontsizeincommand\\protect\\zihao}{%Theoldfontsizeisusedifyoucontinue.}%
\\fi%
否则是正常字号
3源代码说明24
299300301302303304305306307308309310
\\else%
\\@tempcnta=#1
\\ifcase\\@tempcnta%
\\fontsize\\CTEX@fs@zero\\CTEX@fs@zeroskip%\\or\\fontsize\\CTEX@fs@one\\CTEX@fs@oneskip%\\or\\fontsize\\CTEX@fs@two\\CTEX@fs@twoskip%
\\or\\fontsize\\CTEX@fs@three\\CTEX@fs@threeskip%\\or\\fontsize\\CTEX@fs@four\\CTEX@fs@fourskip%\\or\\fontsize\\CTEX@fs@five\\CTEX@fs@fiveskip%\\or\\fontsize\\CTEX@fs@six\\CTEX@fs@sixskip%
\\or\\fontsize\\CTEX@fs@seven\\CTEX@fs@sevenskip%\\or\\fontsize\\CTEX@fs@eight\\CTEX@fs@eightskip%
如果不在预定义的字号范围(0–8),则报告一个错误
311312313314315316317
\\else\\PackageError{ctex}{%
UndefinedChinesefontsizeincommand\\protect\\zihao}{%Theoldfontsizeisusedifyoucontinue.}%
\\fi%\\fi%
\\selectfont\\ignorespaces}??/ctex|cls??
3.4.2缺省字号大小
缺省字体只对文档类有效,下面使用中文小四号字时的设置。
318319320321322323324325326327328329330331332333334335336337
???cls??
\\ifCTEX@sfoursize
\\renewcommand\\normalsize{bp
\\@setfontsize\\normalsize{\\CTEX@fs@sfour}{\\CTEX@fs@sfourskip}%\\abovedisplayskip12\\p@\\@plus3\\p@\\@minus7\\p@\\abovedisplayshortskip\\z@\\@plus3\\p@
\\belowdisplayshortskip6.5\\p@\\@plus3.5\\p@\\@minus3\\p@\\belowdisplayskip\\abovedisplayskip\\let\\@listi\\@listI}\\normalsize
\\renewcommand\\small{.5bp
\\@setfontsize\\small{\\CTEX@fs@five}{\\CTEX@fs@fiveskip}%\\abovedisplayskip11\\p@\\@plus3\\p@\\@minus6\\p@\\abovedisplayshortskip\\z@\\@plus3\\p@
\\belowdisplayshortskip6.5\\p@\\@plus3.5\\p@\\@minus3\\p@\\def\\@listi{\\leftmargin\\leftmargini
\\topsep9\\p@\\@plus3\\p@\\@minus5\\p@\\parsep4.5\\p@\\@plus2\\p@\\@minus\\p@\\itemsep\\parsep}%
\\belowdisplayskip\\abovedisplayskip}
3源代码说明25
338339340341342343344345346347348349350351352353354355356357358359360361362363
\\renewcommand\\footnotesize{?p
\\@setfontsize\\footnotesize{\\CTEX@fs@sfive}{\\CTEX@fs@sfiveskip}%\\abovedisplayskip10\\p@\\@plus2\\p@\\@minus5\\p@\\abovedisplayshortskip\\z@\\@plus3\\p@
\\belowdisplayshortskip6\\p@\\@plus3\\p@\\@minus3\\p@\\def\\@listi{\\leftmargin\\leftmargini
\\topsep6\\p@\\@plus2\\p@\\@minus2\\p@\\parsep3\\p@\\@plus2\\p@\\@minus\\p@\\itemsep\\parsep}%
\\belowdisplayskip\\abovedisplayskip}\\renewcommand\\scriptsize{%7.5bp
\\@setfontsize\\scriptsize{\\CTEX@fs@six}{\\CTEX@fs@sixskip}}\\renewcommand\\tiny{%6.5bp
\\@setfontsize\\tiny{\\CTEX@fs@ssix}{\\CTEX@fs@ssixskip}}\\renewcommand\\large{bp
\\@setfontsize\\large{\\CTEX@fs@sthree}{\\CTEX@fs@sthreeskip}}\\renewcommand\\Large{bp
\\@setfontsize\\Large{\\CTEX@fs@stwo}{\\CTEX@fs@stwoskip}}\\renewcommand\\LARGE{"bp
\\@setfontsize\\LARGE{\\CTEX@fs@two}{\\CTEX@fs@twoskip}}\\renewcommand\\huge{$bp
\\@setfontsize\\huge{\\CTEX@fs@sone}{\\CTEX@fs@soneskip}}\\renewcommand\\Huge{&bp
\\@setfontsize\\Huge{\\CTEX@fs@one}{\\CTEX@fs@oneskip}}\\fi??/cls??
缺省字体使用中文五号字时的设置。
364365366367368369370371372373374375376377378379380
???cls??
\\ifCTEX@fivesize
\\renewcommand\\normalsize{.5bp
\\@setfontsize\\normalsize{\\CTEX@fs@five}{\\CTEX@fs@fiveskip}%\\abovedisplayskip10\\p@\\@plus2\\p@\\@minus5\\p@\\abovedisplayshortskip\\z@\\@plus3\\p@
\\belowdisplayshortskip6\\p@\\@plus3\\p@\\@minus3\\p@\\belowdisplayskip\\abovedisplayskip\\let\\@listi\\@listI}\\normalsize
\\renewcommand\\small{?p
\\@setfontsize\\small{\\CTEX@fs@sfive}{\\CTEX@fs@sfiveskip}%\\abovedisplayskip8.5\\p@\\@plus3\\p@\\@minus4\\p@\\abovedisplayshortskip\\z@\\@plus2\\p@
\\belowdisplayshortskip4\\p@\\@plus2\\p@\\@minus2\\p@\\def\\@listi{\\leftmargin\\leftmargini
\\topsep4\\p@\\@plus2\\p@\\@minus2\\p@
3源代码说明26
381382383384385386387388389390391392393394395396397398399400401402403404405406407408409
\\parsep2\\p@\\@plus\\p@\\@minus\\p@\\itemsep\\parsep}%
\\belowdisplayskip\\abovedisplayskip}\\renewcommand\\footnotesize{%7.5bp
\\@setfontsize\\footnotesize{\\CTEX@fs@six}{\\CTEX@fs@sixskip}%\\abovedisplayskip6\\p@\\@plus2\\p@\\@minus4\\p@\\abovedisplayshortskip\\z@\\@plus\\p@
\\belowdisplayshortskip3\\p@\\@plus\\p@\\@minus2\\p@\\def\\@listi{\\leftmargin\\leftmargini
\\topsep3\\p@\\@plus\\p@\\@minus\\p@\\parsep2\\p@\\@plus\\p@\\@minus\\p@\\itemsep\\parsep}%
\\belowdisplayskip\\abovedisplayskip}\\renewcommand\\scriptsize{%6.5bp
\\@setfontsize\\scriptsize{\\CTEX@fs@ssix}{\\CTEX@fs@ssixskip}}\\renewcommand\\tiny{%5.5bp
\\@setfontsize\\tiny{\\CTEX@fs@seven}{\\CTEX@fs@sevenskip}}\\renewcommand\\large{bp
\\@setfontsize\\large{\\CTEX@fs@sfour}{\\CTEX@fs@sfourskip}}\\renewcommand\\Large{bp
\\@setfontsize\\Large{\\CTEX@fs@sthree}{\\CTEX@fs@sthreeskip}}\\renewcommand\\LARGE{bp
\\@setfontsize\\LARGE{\\CTEX@fs@stwo}{\\CTEX@fs@stwoskip}}\\renewcommand\\huge{"bp
\\@setfontsize\\huge{\\CTEX@fs@two}{\\CTEX@fs@twoskip}}\\renewcommand\\Huge{&bp
\\@setfontsize\\Huge{\\CTEX@fs@one}{\\CTEX@fs@oneskip}}\\fi??/cls??
3.5
410
CCT相关配置
???cct??
3.5.1
411412413414415
CCT环境设置
\\ifCTEX@space
\\AtBeginDocument{\\CCTspace}\\else
\\AtBeginDocument{\\CCTnospace}\\fi
\\CTEXspace\\CTEXnospace
416417
\\def\\CTEXspace{\\CCTspace}
\\def\\CTEXnospace{\\CCTnospace}
3源代码说明3.5.2
\\songti\\heiti\\fangsong\\kaishu\\lishu\\youyuan
27
常用的中文字体
定义常用的中文字体命令:宋体、黑体、楷书、仿宋、隶书、幼圆。
418419420421422423424425426427428429430431432433
\\ifCTEX@cctfont\\else
\\CCTdefzitiAsongsong%宋体\\CCTdefzitiBheisong%黑体\\CCTdefzitiCkaisong%楷体\\CCTdefzitiDfssong%仿宋\\CCTdefzitiEbshei%标宋\\CCTdefzitiFlihei%隶书\\CCTdefzitiGyoukai%幼圆
\\DeclareRobustCommand*{\\songti}{\\ziti{A}\\relax}\\DeclareRobustCommand*{\\heiti}{\\ziti{B}\\relax}\\DeclareRobustCommand*{\\kaishu}{\\ziti{C}\\relax}\\DeclareRobustCommand*{\\fangsong}{\\ziti{D}\\relax}\\DeclareRobustCommand*{\\biaosong}{\\ziti{E}\\relax}\\DeclareRobustCommand*{\\lishu}{\\ziti{F}\\relax}\\DeclareRobustCommand*{\\youyuan}{\\ziti{G}\\relax}\\fi
%%%%%%%宋体黑体楷书仿宋标宋隶书幼圆
3.5.3
\\set@fontsize
中文字号
CCT对\\set@fontsize命令进行了重定义,我们需要修改这个定义,让中英文保持一致的大小,并及时更新字体信息。
434435436437438439440441
\\ifx\\CCT@set@fontsize\%undefined
\\let\\CCT@set@fontsize\\oset@fontsize\\fi
\\let\\CTEX@save@set@fontsize\\set@fontsize\\def\\set@fontsize#1#2#3{%
\\CCT@set@fontsize{#1}{#2}{#3}%\\zihaoAny{#2}%\\CTEXsetfont}
3.5.4
\\ziju
其他字体命令
定义调整汉字字距的命令。
442443444445
\\let\\CTEX@save@ziju\\ziju
\\renewcommand*\\ziju[1]{%字距\\CTEX@save@ziju{#1}%\\CTEXsetfont}
\\CTEXsetfont\\CTEXsetfont获得当前的汉字信息。
446447
\\newcommand*\\CTEXsetfont{%
\\ifdim\\parindent=0pt\\else\\parindent2\\ccwd\\fi}
3源代码说明3.5.5
CCTfntef宏包接口
28
为CCTfntef.sty宏包的命令提供统一接口。
448449450451452453454455456457458459460461462463464465466467468469470471472473474475
\\ifCTEX@fntef
\\def\\CTEXunderdot{\\CCTunderdot}\\def\\CTEXunderline{\\CCTunderline}
\\def\\CTEXunderdblline{\\CCTunderdblline}\\def\\CTEXunderwave{\\CCTunderwave}\\def\\CTEXsout{\\CCTsout}\\def\\CTEXxout{\\CCTxout}
\\def\\CTEXfilltwosides{\\CCTfilltwosides}
\\def\\endCTEXfilltwosides{\\endCCTfilltwosides}\\CTEX@replacecommand{CTEX}{CCT}{underdotbasesep}\\CTEX@replacecommand{CTEX}{CCT}{underdotsep}
\\CTEX@replacecommand{CTEX}{CCT}{underlinebasesep}\\CTEX@replacecommand{CTEX}{CCT}{underlinesep}
\\CTEX@replacecommand{CTEX}{CCT}{underdbllinebasesep}\\CTEX@replacecommand{CTEX}{CCT}{underdbllinesep}\\CTEX@replacecommand{CTEX}{CCT}{underwavebasesep}\\CTEX@replacecommand{CTEX}{CCT}{underwavesepa}\\CTEX@replacecommand{CTEX}{CCT}{underwavesep}\\CTEX@replacecommand{CTEX}{CCT}{southeight}\\CTEX@replacecommand{CTEX}{CCT}{xoutheight}\\CTEX@replacecommand{CTEX}{CCT}{underdotcolor}\\CTEX@replacecommand{CTEX}{CCT}{underwavecolor}\\CTEX@replacecommand{CTEX}{CCT}{underlinecolor}\\CTEX@replacecommand{CTEX}{CCT}{underdbllinecolor}\\CTEX@replacecommand{CTEX}{CCT}{soutcolor}\\CTEX@replacecommand{CTEX}{CCT}{xoutcolor}\\fi??/cct??
3.6
476
CJK相关配置
???cjk??
3.6.1
477
CJK环境设置
\\AtEndOfPackage{\\CJK@makeActive}
缺省情况下,我们把整个文档都包含到CJK环境中。如果\\ifCTEX@space设置为true,我们使用CJK环境,否则使用CJK*环境。
478479480
\\ifCTEX@space
\\def\\CTEX@beginCJK{\\begin{CJK}{GBK}{rm}}\\def\\CTEX@endCJK{\\clearpage\\end{CJK}}
3源代码说明29
481482483484485486487488489490
\\else
\\def\\CTEX@beginCJK{\\begin{CJK*}{GBK}{rm}\\CJKtilde}\\def\\CTEX@endCJK{\\clearpage\\end{CJK*}}\\fi
\\let\\CTEX@begindocumenthook\\@begindocumenthook\\let\\CTEX@enddocumenthook\\@enddocumenthook
\\def\\AtBeginDocument{\\g@addto@macro\\CTEX@begindocumenthook}\\def\\AtEndDocument{\\g@addto@macro\\CTEX@enddocumenthook}
\\def\\@begindocumenthook{\\CTEX@begindocumenthook\\CTEX@beginCJK}\\def\\@enddocumenthook{\\CTEX@endCJK\\CTEX@enddocumenthook}
\\CTEXspace\\CTEXnospace
491492
\\def\\CTEXspace{\\CJKspace}
\\def\\CTEXnospace{\\CJKnospace}
3.6.2
\\songti\\heiti\\fangsong\\kaishu\\lishu\\youyuan
常用的中文字体
定义常用的中文字体命令:宋体、黑体、楷书、仿宋、隶书、幼圆。
493494495496497498
\\newcommand*{\\songti}{\\CJKfamily{song}}\\newcommand*{\\heiti}{\\CJKfamily{hei}}\\newcommand*{\\kaishu}{\\CJKfamily{kai}}\\newcommand*{\\fangsong}{\\CJKfamily{fs}}\\newcommand*{\\lishu}{\\CJKfamily{li}}\\newcommand*{\\youyuan}{\\CJKfamily{you}}%%%%%%宋体黑体楷书仿宋隶书幼圆
3.6.3
\\CTEX@save@set@fontsize
\\set@fontsize
中文字号
对\\set@fontsize命令需要进行重定义,以便及时更新字体信息。
499500501502
\\let\\CTEX@save@set@fontsize\\set@fontsize\\def\\set@fontsize#1#2#3{%
\\CTEX@save@set@fontsize{#1}{#2}{#3}%\\CTEXsetfont}
3.6.4
\\ziju
其他字体命令
定义调整汉字字距的命令。
503504505506
\\newcommand*\\ziju[1]{%字距
\\settowidth\\@tempdima{\\CTEX@spaceChar}%
\\renewcommand{\\CJKglue}{\\hskip#1\\@tempdima}%\\CTEXsetfont}
\\ccwd\\ccwd是当前的汉字字宽。
507
\\newdimen\\ccwd%字宽
3源代码说明30
\\CTEXsetfont\\CTEXsetfont获得当前的汉字信息。
508509510
\\newcommand*\\CTEXsetfont{%
\\settowidth\\ccwd{\\CTEX@spaceChar\\CJKglue}%\\ifdim\\parindent=0pt\\else\\parindent2\\ccwd\\fi}
3.6.5CJKfntef宏包接口
为CJKfntef.sty宏包的命令提供统一接口。
511512513514515516517518519520521522523524525526527528529530531532533534535536
\\ifCTEX@fntef
\\def\\CTEXunderdot{\\CJKunderdot}\\def\\CTEXunderline{\\CJKunderline}
\\def\\CTEXunderdblline{\\CJKunderdblline}\\def\\CTEXunderwave{\\CJKunderwave}\\def\\CTEXsout{\\CJKsout}\\def\\CTEXxout{\\CJKxout}
\\def\\CTEXfilltwosides{\\CJKfilltwosides}
\\def\\endCTEXfilltwosides{\\endCJKfilltwosides}\\CTEX@replacecommand{CTEX}{CJK}{underdotbasesep}\\CTEX@replacecommand{CTEX}{CJK}{underdotsep}
\\CTEX@replacecommand{CTEX}{CJK}{underlinebasesep}\\CTEX@replacecommand{CTEX}{CJK}{underlinesep}
\\CTEX@replacecommand{CTEX}{CJK}{underdbllinebasesep}\\CTEX@replacecommand{CTEX}{CJK}{underdbllinesep}\\CTEX@replacecommand{CTEX}{CJK}{underwavebasesep}\\CTEX@replacecommand{CTEX}{CJK}{underwavesep}\\CTEX@replacecommand{CTEX}{CJK}{southeight}\\CTEX@replacecommand{CTEX}{CJK}{underdotcolor}\\CTEX@replacecommand{CTEX}{CJK}{underwavecolor}\\CTEX@replacecommand{CTEX}{CJK}{underlinecolor}\\CTEX@replacecommand{CTEX}{CJK}{underdbllinecolor}\\CTEX@replacecommand{CTEX}{CJK}{soutcolor}\\CTEX@replacecommand{CTEX}{CJK}{xoutcolor}\\fi??/cjk??
3.7中文数字处理
由于脆弱命令的原因,CJK提供的\\CJKnumber在章节编号中直接使用会引发不少问
题。在生成目录和书签等辅助文件时,我们需要未经CJK处理过的中文字符串,而不能是\\CJKchar{...}的形式。此外,这些中文数字必须在被使用之前就已经生成好。于是我们修改了CJKnumb宏包中的一些定义来处理章节编号。
首先是一些基本数字,需要在ctex.def文件中重新定义。
3源代码说明31
537538539540541542543544545546547548549550551552553554555556557558
???def??
\\def\\CTEXnullspace{0pt}
\\def\\CTEX@null{\\kern\\CTEXnullspace○\\kern\\CTEXnullspace}\\def\\CTEX@zero{零}\\def\\CTEX@one{一}\\def\\CTEX@two{二}\\def\\CTEX@three{三}\\def\\CTEX@four{四}\\def\\CTEX@five{五}\\def\\CTEX@six{六}\\def\\CTEX@seven{七}\\def\\CTEX@eight{八}\\def\\CTEX@nine{九}\\def\\CTEX@ten{十}
\\def\\CTEX@hundred{百}\\def\\CTEX@thousand{千}\\def\\CTEX@tenthousand{万}\\def\\CTEX@hundredmillion{亿}\\def\\CTEX@minus{-}??/def?????ctex|cls??
一些条件定义和计数器
559560561562563
\\newif\\ifCTEX@zero@
\\newif\\ifCTEX@previous@\\newif\\ifCTEX@null@\\newcount\\CTEX@q\\newcount\\CTEX@r
\\CTEX@appendstring中文数字处理命令\\CTEX@appendstring用于拼接字符串。
564565
\\def\\CTEX@appendstring#1#2{%
\\expandafter\\def\\expandafter#1\\expandafter{#1#2}}
\\CTEX@appendnumber中文数字处理命令\\CTEX@appendnumber用于拼接数字。
566567568569570571572573574
\\def\\CTEX@appendnumber#1#2{%\\ifcase#2\\relax\\ifCTEX@null@
\\CTEX@appendstring{#1}{\\CTEX@null}%\\else
\\CTEX@appendstring{#1}{\\CTEX@zero}%\\fi
\\or\\CTEX@appendstring{#1}{\\CTEX@one}%\\or\\CTEX@appendstring{#1}{\\CTEX@two}%
3源代码说明32
575576577578579580581582
\\or\\CTEX@appendstring{#1}{\\CTEX@three}%\\or\\CTEX@appendstring{#1}{\\CTEX@four}%\\or\\CTEX@appendstring{#1}{\\CTEX@five}%\\or\\CTEX@appendstring{#1}{\\CTEX@six}%\\or\\CTEX@appendstring{#1}{\\CTEX@seven}%\\or\\CTEX@appendstring{#1}{\\CTEX@eight}%\\or\\CTEX@appendstring{#1}{\\CTEX@nine}%\\fi}
\\CTEX@splitnumber中文数字处理命令\\CTEX@splitnumber将大的数字分为几段四位以内的数字。
583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617
\\def\\CTEX@splitnumber#1{%\\CTEX@q#1\\relax\\CTEX@r#1\\relax%
\\divide\\CTEX@q\\@M\\begingroup
\\multiply\\CTEX@q\\@M
\\advance\\CTEX@r-\\CTEX@q\\ifnum\\CTEX@r=\\z@\\xdef\\CTEX@low{}%\\else
\\xdef\\CTEX@low{\\number\\CTEX@r}%\\fi
\\endgroup%
\\ifnum\\CTEX@q>\\z@\\CTEX@r\\CTEX@q%
\\divide\\CTEX@q\\@M\\begingroup
\\multiply\\CTEX@q\\@M
\\advance\\CTEX@r-\\CTEX@q\\ifnum\\CTEX@r=\\z@\\xdef\\CTEX@high{}%\\else
\\xdef\\CTEX@high{\\number\\CTEX@r}%\\fi
\\endgroup%
\\ifnum\\CTEX@q>\\z@
\\xdef\\CTEX@yi{\\number\\CTEX@q}%\\else
\\xdef\\CTEX@yi{}%\\fi\\else
3源代码说明33
618619620621
\\xdef\\CTEX@high{}%\\xdef\\CTEX@yi{}%\\fi}
\\CTEX@processnumber中文数字处理命令\\CTEX@processnumber处理四位以内的数字,并将得到的中文数字存放在第一个参数中。
622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659
\\def\\CTEX@processnumber#1#2{%\\CTEX@zero@false%
\\CTEX@q#2\\relax\\CTEX@r#2\\relax%
\\divide\\CTEX@q\\@m\\ifnum\\CTEX@q=\\z@\\ifCTEX@previous@\\CTEX@zero@true\\fi\\else
\\ifCTEX@zero@
\\CTEX@appendstring{#1}{\\CTEX@zero}%\\fi
\\CTEX@appendnumber{#1}{\\CTEX@q}%
\\CTEX@appendstring{#1}{\\CTEX@thousand}%\\CTEX@previous@true\\CTEX@zero@false\\fi%
\\multiply\\CTEX@q\\@m
\\advance\\CTEX@r-\\CTEX@q\\CTEX@q\\CTEX@r%
\\divide\\CTEX@q100\\relax\\ifnum\\CTEX@q=\\z@\\ifCTEX@previous@\\CTEX@zero@true\\fi\\else
\\ifCTEX@zero@
\\CTEX@appendstring{#1}{\\CTEX@zero}%\\fi
\\CTEX@appendnumber{#1}{\\CTEX@q}%
\\CTEX@appendstring{#1}{\\CTEX@hundred}%\\CTEX@previous@true\\CTEX@zero@false
3源代码说明34
660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697
\\fi%
\\multiply\\CTEX@q100
\\advance\\CTEX@r-\\CTEX@q\\CTEX@q\\CTEX@r%
\\divide\\CTEX@q10\\relax\\ifnum\\CTEX@q=\\z@\\ifCTEX@previous@\\CTEX@zero@true\\fi\\else
\\ifCTEX@zero@
\\CTEX@appendstring{#1}{\\CTEX@zero}%\\fi
\\ifnum\\CTEX@q=\\@ne\\ifCTEX@previous@
\\CTEX@appendstring{#1}{\\CTEX@one}%\\fi\\else
\\CTEX@appendnumber{#1}{\\CTEX@q}%\\fi
\\CTEX@appendstring{#1}{\\CTEX@ten}%\\CTEX@previous@true\\CTEX@zero@false\\fi%
\\multiply\\CTEX@q10
\\advance\\CTEX@r-\\CTEX@q%
\\ifnum\\CTEX@r=\\z@\\else
\\ifCTEX@zero@
\\CTEX@appendstring{#1}{\\CTEX@zero}%\\fi
\\CTEX@appendnumber{#1}{\\CTEX@r}%\\CTEX@previous@true\\fi}
\\CTEXnumber中文数字处理命令\\CTEXnumber将第二个参数中的数字转换为中文并保存在第一个参数中。
698699700701
\\DeclareRobustCommand\\CTEXnumber[2]{%\\def#1{}%
\\CTEX@null@false%
3源代码说明35
702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739
\\CTEX@q#2\\relax%
\\ifnum\\CTEX@q<\\z@
\\multiply\\CTEX@q\\m@ne
\\CTEX@appendstring{#1}{\\CTEX@minus}%\\fi%
\\CTEX@previous@false\\CTEX@zero@false%
\\ifnum\\CTEX@q=\\z@
\\CTEX@appendstring{#1}{\\CTEX@zero}%\\else
\\CTEX@splitnumber{\\CTEX@q}%%
\\ifx\\CTEX@yi\\@empty\\else
\\CTEX@processnumber{#1}{\\CTEX@yi}%
\\CTEX@appendstring{#1}{\\CTEX@hundredmillion}%\\fi%
\\ifx\\CTEX@high\\@empty\\else
\\CTEX@processnumber{#1}{\\CTEX@high}%
\\CTEX@appendstring{#1}{\\CTEX@tenthousand}%\\fi%
\\ifx\\CTEX@low\\@empty\\else
\\ifx\\CTEX@yi\\@empty\\else
\\ifx\\CTEX@high\\@empty
\\CTEX@appendstring{#1}{\\CTEX@zero}%thiscatches100002345\\fi\\fi
\\CTEX@processnumber{#1}{\\CTEX@low}%\\fi\\fi}
\\CTEX@getdigit中文数字处理命令\\CTEX@getdigit用于提取最高位的数字。
740741742
\\def\\CTEX@getdigit#1#2\\@nil{%\\edef\\CTEX@tempa{#1}%\\edef\\CTEX@tempb{#2}}
\\CTEXdigits中文数字处理命令\\CTEXdigits将第二个参数中的数字串为中文数字串并保存在第一个参
3源代码说明数中。
743744745746747748749750751752753754755756
36
\\DeclareRobustCommand\\CTEXdigits[2]{%\\def#1{}%
\\CTEX@null@true
\\edef\\CTEX@tempa{}%\\edef\\CTEX@tempb{#2}%\\ifx\\CTEX@tempb\\@empty\\else\\loop
\\expandafter\\CTEX@getdigit\\CTEX@tempb\\@nil\\CTEX@appendnumber{#1}{\\CTEX@tempa}%\\ifx\\CTEX@tempb\\@empty\\else\\repeat\\fi}
\\CTEXcounter\\CTEXcounter用于生成对应于计数器\\FOO的中文数字\\cc@FOO。
757758759760761762
\\DeclareRobustCommand\\CTEXcounter[1]{%\\@ifundefined{c@#1}{}{%
\\CTEXnumber{\\reserved@a}{\\@arabic\\csnamec@#1\\endcsname}%\\expandafter\\expandafter\\expandafter\\def%
\\expandafter\\expandafter\\csnamecc@#1\\endcsname%\\expandafter{\\reserved@a}}}
\\setcounter\\addtocounter\\stepcounter
重新定义\\setcounter和\\addtocounter以及时更新\\cc@FOO。
763764765766767768769770771772773774775776777778779780
\\AtBeginDocument{%\\makeatletter%
\\@ifundefined{CTEX@save@setcounter}{%\\let\\CTEX@save@setcounter\\setcounter%\\def\\setcounter#1#2{%
\\CTEX@save@setcounter{#1}{#2}%\\CTEXcounter{#1}}}{}
\\@ifundefined{CTEX@save@addtocounter}{%
\\let\\CTEX@save@addtocounter\\addtocounter%\\def\\addtocounter#1#2{%
\\CTEX@save@addtocounter{#1}{#2}%\\CTEXcounter{#1}}}{}
\\@ifundefined{CTEX@save@stepcounter}{%\\let\\CTEX@save@stepcounter\\stepcounter%\\def\\stepcounter#1{%
\\CTEX@save@stepcounter{#1}%\\CTEXcounter{#1}}}{}
\\makeatother}
3源代码说明37
\\chinese\\chinese用于获得计数器\\FOO对应的中文数字\\cc@FOO。
781782783
\\def\\chinese#1{%
\\@ifundefined{cc@#1}{\\CTEX@null}{\\csnamecc@#1\\endcsname}}??/ctex|cls??
3.8中文化的标题结构
A在中文标题的处理上,需要修改LTEX标准文档的定义来实现中文标题。这个功能最
早是通过GB.cap来实现的,但是CJK提供的文件只能配合koma-script文档类使用而不支持标准文档类。原因是标准文档类需要作出较大的改动。我们最早尝试过把对标准文档类的修改也放到GB.cap文件中,在简单应用中可以达到目的。但是我们还是意识到由于受到GB.cap文件装入时间的限制,这种方案不可避免的带有兼容性问题。解决的方法就是通过自定义的文档类来实现这个功能。此外,中文的标题格式也和英文有所不同,这些都只有修改标准文档类的定义才能实现,于是就有了下面这些代码。3.8.1
章节标题基本结构
以下定义章节标题的基本结构单元。
784
???ctexcap|cls??
\\CTEX@defsecname对于每种章节类型FOO,我们都要定义一个章节名字\\CTEXtheFOO,由\\CTEX@preFOO、\\CTEX@theFOO和\\CTEX@postFOO组成。所以我们用下面的这个命令来完成这些重复工作。
785
\\def\\CTEX@defsecformat#1{%
首先是无格式信息的章节标题。
786787788789790791792793
\\expandafter\\def\\csnameCTEX@pre#1\\endcsname{}%
\\expandafter\\def\\csnameCTEX@post#1\\endcsname{}%\\expandafter\\def\\csnameCTEX@the#1\\endcsname{%\\csnamethe#1\\endcsname}%
\\expandafter\\def\\csnameCTEXthe#1\\endcsname{%\\csnameCTEX@pre#1\\endcsname%\\csnameCTEX@the#1\\endcsname%\\csnameCTEX@post#1\\endcsname}%
然后是包含格式信息的章节标题,先定义一些用于控制格式的宏:\\CTEX@FOO@format作用于整个标题,一般用于控制对齐方式;\\CTEX@FOO@nameformat作用于整个章节名字(\\CTEXtheFOO);\\CTEX@FOO@numberformat作用于章节编号(\\CTEX@theFOO);
3源代码说明38
\\CTEX@FOO@aftername作用于章节名字后的部分,一般用于控制章节名字和章节标题内容
之间是否换行等;
\\CTEX@FOO@titleformat用于控制标题内容的格式。
\\CTEX@FOOname则是在\\CTEXtheFOO中加入了上面的这些格式控制得到的。
794795796797798799800801802803804805806807
\\expandafter\\def\\csnameCTEX@#1@format\\endcsname{}%
\\expandafter\\def\\csnameCTEX@#1@nameformat\\endcsname{}%\\expandafter\\def\\csnameCTEX@#1@numberformat\\endcsname{}%\\expandafter\\def\\csnameCTEX@#1@aftername\\endcsname{}%\\expandafter\\def\\csnameCTEX@#1@titleformat\\endcsname{}\\expandafter\\def\\csnameCTEX@#1name\\endcsname{%\\csnameCTEX@#1@nameformat\\endcsname%\\csnameCTEX@pre#1\\endcsname%\\begingroup%
\\csnameCTEX@#1@numberformat\\endcsname%\\csnameCTEX@the#1\\endcsname%\\endgroup%
\\csnameCTEX@post#1\\endcsname%
\\csnameCTEX@#1@aftername\\endcsname}%
然后是标题上下的空距和缩进:
808809810811
\\expandafter\\def\\csnameCTEX@#1@beforeskip\\endcsname{}%\\expandafter\\def\\csnameCTEX@#1@afterskip\\endcsname{}%\\expandafter\\def\\csnameCTEX@#1@indent\\endcsname{}%}
标准的七种章节类型都需要定义。
812813814815816817818
\\CTEX@defsecformat{part}\\CTEX@defsecformat{chapter}\\CTEX@defsecformat{section}\\CTEX@defsecformat{subsection}\\CTEX@defsecformat{subsubsection}\\CTEX@defsecformat{paragraph}\\CTEX@defsecformat{subparagraph}
缺省的一些设置,在不使用中文标题的时候使用。
819820
\\def\\CTEX@prepart{Part\\space}
\\def\\CTEX@prechapter{Chapter\\space}
part的缺省格式
821822823
??ctex??\\ifCTEX@cls{article}{???ctex|article??
\\def\\CTEX@part@format{\\raggedright}
3源代码说明39
824825826827828829830831832833834835836837838
\\def\\CTEX@part@nameformat{\\Large\\bfseries}\\def\\CTEX@part@aftername{\\par\\nobreak}
\\def\\CTEX@part@titleformat{\\huge\\bfseries}\\def\\CTEX@part@beforeskip{4ex}\\def\\CTEX@part@afterskip{3ex}\\def\\CTEX@part@indent{\\z@}??/ctex|article????ctex??}{
???ctex|report|book??
\\def\\CTEX@part@format{\\centering}
\\def\\CTEX@part@nameformat{\\huge\\bfseries}\\def\\CTEX@part@aftername{\\par\\vskip20\\p@}\\def\\CTEX@part@titleformat{\\Huge\\bfseries}??/ctex|report|book????ctex??}
chapter的缺省格式
839840841842843844845
\\def\\CTEX@chapter@format{\\raggedright}
\\def\\CTEX@chapter@nameformat{\\huge\\bfseries}
\\def\\CTEX@chapter@aftername{\\par\\nobreak\\vskip20\\p@}\\def\\CTEX@chapter@titleformat{\\Huge\\bfseries}\\def\\CTEX@chapter@beforeskip{50\\p@}\\def\\CTEX@chapter@afterskip{40\\p@}\\def\\CTEX@chapter@indent{\\z@}
section的缺省格式
846847848849850
\\def\\CTEX@section@format{\\Large\\bfseries}\\def\\CTEX@section@aftername{\\quad}
\\def\\CTEX@section@beforeskip{-3.5ex\\@plus-1ex\\@minus-.2ex}\\def\\CTEX@section@afterskip{2.3ex\\@plus.2ex}\\def\\CTEX@section@indent{\\z@}
subsection的缺省格式
851852853854855
\\def\\CTEX@subsection@format{\\large\\bfseries}\\def\\CTEX@subsection@aftername{\\quad}
\\def\\CTEX@subsection@beforeskip{-3.25ex\\@plus-1ex\\@minus-.2ex}\\def\\CTEX@subsection@afterskip{1.5ex\\@plus.2ex}\\def\\CTEX@subsection@indent{\\z@}
subsubsection的缺省格式
856857858859860
\\def\\CTEX@subsubsection@format{\\normalsize\\bfseries}\\def\\CTEX@subsubsection@aftername{\\quad}
\\def\\CTEX@subsubsection@beforeskip{-3.25ex\\@plus-1ex\\@minus-.2ex}\\def\\CTEX@subsubsection@afterskip{1.5ex\\@plus.2ex}\\def\\CTEX@subsubsection@indent{\\z@}
3源代码说明支持\\subsubsection以下的小节标题编号paragraph的缺省格式
861862863864865866867868869870
40
\\def\\CTEX@paragraph@format{\\normalsize\\bfseries}\\def\\CTEX@paragraph@aftername{\\quad}\\ifnum\\c@CTEX@sectiondepth>2
\\def\\CTEX@paragraph@beforeskip{-3.25ex\\@plus-1ex\\@minus-.2ex}\\def\\CTEX@paragraph@afterskip{1ex\\@plus.2ex}\\else
\\def\\CTEX@paragraph@beforeskip{3.25ex\\@plus1ex\\@minus.2ex}\\def\\CTEX@paragraph@afterskip{-1em}\\fi
\\def\\CTEX@paragraph@indent{\\z@}
subparagraph的缺省格式
871872873874875876877878879880881882883884
\\def\\CTEX@subparagraph@format{\\normalsize\\bfseries}\\def\\CTEX@subparagraph@aftername{\\quad}\\ifnum\\c@CTEX@sectiondepth>3
\\def\\CTEX@subparagraph@beforeskip{-3.25ex\\@plus-1ex\\@minus-.2ex}\\def\\CTEX@subparagraph@afterskip{1ex\\@plus.2ex}\\else
\\def\\CTEX@subparagraph@beforeskip{3.25ex\\@plus1ex\\@minus.2ex}\\def\\CTEX@subparagraph@afterskip{-1em}\\fi
\\ifnum\\c@CTEX@sectiondepth>2
\\def\\CTEX@subparagraph@indent{\\z@}\\else
\\def\\CTEX@subparagraph@indent{\\parindent}\\fi
\\CTEX@appendixname附录的标题
885886887888889890891892893
??ctexcap??\\ifCTEX@cls{article}{???ctexcap|article??
\\def\\CTEX@appendixname{}??/ctexcap|article????ctexcap??}{
???ctexcap|report|book??
\\def\\CTEX@appendixname{Appendix\\space}??/ctexcap|report|book????ctexcap??}
\\CTEX@appendixnumber附录的编号格式,缺省是大写英文字母。
894895896897
??ctexcap??\\ifCTEX@cls{article}{???ctexcap|article??
\\def\\CTEX@appendixnumber{\\@Alph\\c@section}??/ctexcap|article??
3源代码说明41
898899900901902
??ctexcap??}{
???ctexcap|report|book??
\\def\\CTEX@appendixnumber{\\@Alph\\c@chapter}??/ctexcap|report|book????ctexcap??}
\\CTEX@save@appendix
\\appendix
重定义\\appendix命令以改变附录标题
903904905906907908909910911912913914915916917918919
\\let\\CTEX@save@appendix\\appendix??ctexcap??\\ifCTEX@cls{article}{???ctexcap|article??
\\renewcommand*\\appendix{\\CTEX@save@appendix%\\gdef\\CTEX@presection{\\CTEX@appendixname}%\\gdef\\CTEX@thesection{\\CTEX@appendixnumber}%\\gdef\\CTEX@postsection{}}%??/ctexcap|article????ctexcap??}{
???ctexcap|report|book??
\\renewcommand*\\appendix{\\CTEX@save@appendix%\\gdef\\CTEX@prechapter{\\CTEX@appendixname}%\\gdef\\CTEX@thechapter{\\CTEX@appendixnumber}%\\gdef\\CTEX@postchapter{}}%??/ctexcap|report|book????ctexcap??}??/ctexcap|cls??
3.8.2part的标题
A以下一段修改标准LTEX文档类以实现中文标题需要的结构。
part的标题修改,首先是article类:
920921922923924925926927928929930931932933
??ctexcap??\\ifCTEX@cls{article}{
???ctexcap|article??
\\renewcommand\\part{%
\\if@noskipsec\\leavevmode\\fi\\par
%\\addvspace{4ex}%
\\addvspace{\\CTEX@part@beforeskip}%\\@afterindentfalse\\secdef\\@part\\@spart}\\def\\@part[#1]#2{%
\\ifnum\\c@secnumdepth>\\m@ne\\refstepcounter{part}%%\\addcontentsline{toc}{part}{\\thepart\\hspace{1em}#1}%
\\addcontentsline{toc}{part}{\\CTEXthepart\\hspace{1em}#1}%
3源代码说明42
934935936937938939940941942943944945946947948949950951952953954955956957958959960961
\\else
\\addcontentsline{toc}{part}{#1}%\\fi
{\\interlinepenalty\\@M
%\\normalfont\\parindent\\z@\\raggedright
\\normalfont\\parindent\\CTEX@part@indent\\CTEX@part@format\\ifnum\\c@secnumdepth>\\m@ne%\\Large\\bfseries\\partname\\nobreakspace\\thepart\\par\\nobreak
\\CTEX@partname\\fi
%\\huge\\bfseries#2%
\\CTEX@part@titleformat#2%\\markboth{}{}\\par}%\\nobreak%\\vskip3ex
\\vskip\\CTEX@part@afterskip\\@afterheading}\\def\\@spart#1{%
{\\interlinepenalty\\@M%\\normalfont\\parindent\\z@\\raggedright
\\normalfont\\parindent\\CTEX@part@indent\\CTEX@part@format%\\huge\\bfseries#1\\par}%
\\CTEX@part@titleformat#1\\par}%\\nobreak%\\vskip3ex
\\vskip\\CTEX@part@afterskip\\@afterheading}??/ctexcap|article??
然后是report和book类:
962963964965966967968969970971972973974975976
??ctexcap??}{
???ctexcap|report|book??\\def\\@part[#1]#2{%
\\ifnum\\c@secnumdepth>-2\\relax\\refstepcounter{part}%%\\addcontentsline{toc}{part}{\\thepart\\hspace{1em}#1}%
\\addcontentsline{toc}{part}{\\CTEXthepart\\hspace{1em}#1}%\\else
\\addcontentsline{toc}{part}{#1}%\\fi
\\markboth{}{}%
{\\interlinepenalty\\@M%\\normalfont\\centering
\\normalfont\\CTEX@part@format\\ifnum\\c@secnumdepth>-2\\relax
3源代码说明43
977978979980981982983984985986987988989990991
%
\\huge\\bfseries\\partname\\nobreakspace\\thepart\\par\\vskip20\\p@\\CTEX@partname\\fi
%\\Huge\\bfseries#2\\par}%
\\CTEX@part@titleformat#2\\par}%\\@endpart}\\def\\@spart#1{%
{\\interlinepenalty\\@M%\\normalfont\\centering
\\normalfont\\CTEX@part@format%\\Huge\\bfseries#1\\par}%
\\CTEX@part@titleformat#1\\par}%\\@endpart}
??/ctexcap|report|book????ctexcap??}
3.8.3chapter的标题
chapter的标题修改,首先是report类的
992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017
??ctexcap??\\ifCTEX@cls{report}{???ctexcap|report??
\\def\\@chapter[#1]#2{%
\\ifnum\\c@secnumdepth>\\m@ne\\refstepcounter{chapter}%%\\typeout{\\@chapapp\\space\\thechapter.}%
\\typeout{\\CTEXthechapter}%
\\addcontentsline{toc}{chapter}%{\\protect\\numberline{\\thechapter}#1}%
{\\protect\\numberline{\\CTEXthechapter\\hspace{0.3em}}#1}%\\else
\\addcontentsline{toc}{chapter}{#1}%\\fi
\\chaptermark{#1}%
\\addtocontents{lof}{\\protect\\addvspace{10\\p@}}%\\addtocontents{lot}{\\protect\\addvspace{10\\p@}}%\\if@twocolumn
\\@topnewpage[\\@makechapterhead{#2}]%\\else
\\@makechapterhead{#2}%\\@afterheading\\fi}
\\def\\@makechapterhead#1{%%\\vspace*{50\\p@}%
\\vspace*{\\CTEX@chapter@beforeskip}%
%{\\normalfont\\parindent\\z@\\raggedright
3源代码说明44
1018101910201021102210231024102510261027102810291030
{\\normalfont\\parindent\\CTEX@chapter@indent\\CTEX@chapter@format\\ifnum\\c@secnumdepth>\\m@ne%\\huge\\bfseries\\@chapapp\\space\\thechapter\\par\\nobreak\\vskip20\\p@
\\CTEX@chaptername\\fi
\\interlinepenalty\\@M
%\\Huge\\bfseries#1\\par\\nobreak
\\CTEX@chapter@titleformat#1\\par\\nobreak%\\vskip40\\p@
\\vskip\\CTEX@chapter@afterskip}}
??/ctexcap|report????ctexcap??}{}
然后是book类的
103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060
??ctexcap??\\ifCTEX@cls{book}{???ctexcap|book??
\\def\\@chapter[#1]#2{%
\\ifnum\\c@secnumdepth>\\m@ne\\if@mainmatter
\\refstepcounter{chapter}%
%\\typeout{\\@chapapp\\space\\thechapter.}%
\\typeout{\\CTEXthechapter}%
\\addcontentsline{toc}{chapter}
%{\\protect\\numberline{\\thechapter}#1}%
{\\protect\\numberline{\\CTEXthechapter\\hspace{0.3em}}#1}%\\else
\\addcontentsline{toc}{chapter}{#1}%\\fi\\else
\\addcontentsline{toc}{chapter}{#1}%\\fi
\\chaptermark{#1}%
\\addtocontents{lof}{\\protect\\addvspace{10\\p@}}%\\addtocontents{lot}{\\protect\\addvspace{10\\p@}}%\\if@twocolumn
\\@topnewpage[\\@makechapterhead{#2}]%\\else
\\@makechapterhead{#2}%\\@afterheading\\fi}
\\def\\@makechapterhead#1{%%\\vspace*{50\\p@}%
\\vspace*{\\CTEX@chapter@beforeskip}%
%{\\normalfont\\parindent\\z@\\raggedright
3源代码说明45
106110621063106410651066106710681069107010711072107310741075
{\\normalfont\\parindent\\CTEX@chapter@indent\\CTEX@chapter@format\\ifnum\\c@secnumdepth>\\m@ne\\if@mainmatter%\\huge\\bfseries\\@chapapp\\space\\thechapter\\par\\nobreak\\vskip20\\p@
\\CTEX@chaptername\\fi\\fi
\\interlinepenalty\\@M
%\\Huge\\bfseries#1\\par\\nobreak
\\CTEX@chapter@titleformat#1\\par\\nobreak%\\vskip40\\p@
\\vskip\\CTEX@chapter@afterskip}}
??/ctexcap|book????ctexcap??}{}
有一些是report类和book类共有的
1076107710781079108010811082108310841085108610871088
???ctexcap|report|book??
\\def\\@makeschapterhead#1{%%\\vspace*{50\\p@}%
\\vspace*{\\CTEX@chapter@beforeskip}%
%{\\normalfont\\parindent\\z@\\raggedright
{\\normalfont\\parindent\\CTEX@chapter@indent\\CTEX@chapter@format\\interlinepenalty\\@M
%\\Huge\\bfseries#1\\par\\nobreak
\\CTEX@chapter@titleformat#1\\par\\nobreak%\\vskip40\\p@
\\vskip\\CTEX@chapter@afterskip}}
??/ctexcap|report|book??
3.8.4
1089
section的标题
???ctexcap|cls??
下面修改节的标题的显示方式
1090109110921093109410951096109710981099
\\def\\@seccntformat#1{%
\\@ifundefined{CTEX@#1name}%
{\\csnamethe#1\\endcsname\\quad}%{\\csnameCTEX@#1name\\endcsname}}\\def\\@sect#1#2#3#4#5#6[#7]#8{%\\ifnum#2>\\c@secnumdepth\\let\\@svsec\\@empty\\else
\\refstepcounter{#1}%
\\protected@edef\\@svsec{\\@seccntformat{#1}\\relax}%
3源代码说明46
11001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134
%
%
%
%
\\fi
\\@tempskipa#5\\relax\\ifdim\\@tempskipa>\\z@\\begingroup#6{%
\\@hangfrom{\\hskip#3\\relax\\@svsec}%\\interlinepenalty\\@M#8\\@@par}%\\interlinepenalty\\@M
\\csnameCTEX@#1@titleformat\\endcsname#8\\@@par}%\\endgroup
\\csname#1mark\\endcsname{#7}%\\addcontentsline{toc}{#1}{%
\\ifnum#2>\\c@secnumdepth\\else
\\protect\\numberline{\\csnamethe#1\\endcsname}%\\protect\\numberline{\\@ifundefined{CTEXthe#1}%
{\\csnamethe#1\\endcsname}%
{\\csnameCTEXthe#1\\endcsname}}%
\\fi#7}%\\else
\\def\\@svsechd{%#6{\\hskip#3\\relax\\@svsec#8}%
\\@svsec\\csnameCTEX@#1@titleformat\\endcsname#8}%\\csname#1mark\\endcsname{#7}%\\addcontentsline{toc}{#1}{%
\\ifnum#2>\\c@secnumdepth\\else
\\protect\\numberline{\\csnamethe#1\\endcsname}%\\protect\\numberline{\\@ifundefined{CTEXthe#1}%
{\\csnamethe#1\\endcsname}%
{\\csnameCTEXthe#1\\endcsname}}%
\\fi#7}}%\\fi
\\@xsect{#5}}
通常中文章节标题编号会比较长,因此目录中的缩进距离也要调整。我们通过修改\\numberline命令来实现。
1135113611371138113911401141
\\def\\numberline#1{%
\\settowidth\\@tempdimb{#1\\hspace{0.5em}}%\\ifdim\\@tempdima<\\@tempdimb%\\@tempdima=\\@tempdimb%\\fi%
\\hb@xt@\\@tempdima{#1\\hfil}}\\renewcommand\\section{\\@startsection{section}{1}%
3源代码说明47
1142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166
{\\CTEX@section@indent}%
{\\CTEX@section@beforeskip}%{\\CTEX@section@afterskip}%
{\\normalfont\\CTEX@section@format}}
\\renewcommand\\subsection{\\@startsection{subsection}{2}%
{\\CTEX@subsection@indent}%
{\\CTEX@subsection@beforeskip}%{\\CTEX@subsection@afterskip}%
{\\normalfont\\CTEX@subsection@format}}
\\renewcommand\\subsubsection{\\@startsection{subsubsection}{3}%
{\\CTEX@subsubsection@indent}%
{\\CTEX@subsubsection@beforeskip}%{\\CTEX@subsubsection@afterskip}%
{\\normalfont\\CTEX@subsubsection@format}}
\\renewcommand\\paragraph{\\@startsection{paragraph}{4}%
{\\CTEX@paragraph@indent}%
{\\CTEX@paragraph@beforeskip}%{\\CTEX@paragraph@afterskip}%
{\\normalfont\\CTEX@paragraph@format}}
\\renewcommand\\subparagraph{\\@startsection{subparagraph}{5}%
{\\CTEX@subparagraph@indent}%
{\\CTEX@subparagraph@beforeskip}%{\\CTEX@subparagraph@afterskip}%
{\\normalfont\\CTEX@subparagraph@format}}??/ctexcap|cls??
3.8.5页眉信息的修改
修改页眉中的标题,首先是article类中的定义
1167116811691170117111721173117411751176117711781179118011811182
???ctexcap??
\\ifCTEX@cls{article}{??/ctexcap??
???ctexcap|article??\\if@twoside
\\def\\ps@headings{%
\\let\\@oddfoot\\@empty\\let\\@evenfoot\\@empty
\\def\\@evenhead{\\thepage\\hfil\\slshape\\leftmark}%\\def\\@oddhead{{\\slshape\\rightmark}\\hfil\\thepage}%\\let\\@mkboth\\markboth\\def\\sectionmark##1{%
\\markboth{\\MakeUppercase{%\\ifnum\\c@secnumdepth>\\z@
%\\thesection\\quad
\\CTEXthesection\\quad%\\fi
3源代码说明48
1183118411851186118711881189119011911192119311941195119611971198119912001201120212031204
##1}}{}}%
\\def\\subsectionmark##1{%\\markright{%
\\ifnum\\c@secnumdepth>\\@ne
%\\thesubsection\\quad
\\CTEXthesubsection\\quad%\\fi##1}}}
\\else
\\def\\ps@headings{%
\\let\\@oddfoot\\@empty
\\def\\@oddhead{{\\slshape\\rightmark}\\hfil\\thepage}%\\let\\@mkboth\\markboth\\def\\sectionmark##1{%
\\markright{\\MakeUppercase{%\\ifnum\\c@secnumdepth>\\m@ne
%\\thesection\\quad
\\CTEXthesection\\quad%\\fi
##1}}}}
\\fi
??/ctexcap|article??
然后是report类中的页眉定义
120512061207120812091210121112121213121412151216121712181219122012211222122312241225
??ctexcap??}{\\ifCTEX@cls{report}{???ctexcap|report??\\if@twoside
\\def\\ps@headings{%
\\let\\@oddfoot\\@empty\\let\\@evenfoot\\@empty
\\def\\@evenhead{\\thepage\\hfil\\slshape\\leftmark}%\\def\\@oddhead{{\\slshape\\rightmark}\\hfil\\thepage}%\\let\\@mkboth\\markboth\\def\\chaptermark##1{%
\\markboth{\\MakeUppercase{%\\ifnum\\c@secnumdepth>\\m@ne
%\\@chapapp\\\\thechapter.\\%
\\CTEXthechapter\\quad%\\fi
##1}}{}}%
\\def\\sectionmark##1{%
\\markright{\\MakeUppercase{%\\ifnum\\c@secnumdepth>\\z@
%\\thesection.\\%
\\CTEXthesection\\quad%\\fi
3源代码说明49
122612271228122912301231123212331234123512361237123812391240
##1}}}}
\\else
\\def\\ps@headings{%
\\let\\@oddfoot\\@empty
\\def\\@oddhead{{\\slshape\\rightmark}\\hfil\\thepage}%\\let\\@mkboth\\markboth\\def\\chaptermark##1{%
\\markright{\\MakeUppercase{%\\ifnum\\c@secnumdepth>\\m@ne
%\\@chapapp\\\\thechapter.\\%
\\CTEXthechapter\\quad%\\fi
##1}}}}
\\fi
??/ctexcap|report??
然后是book类中的页眉定义
1241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268
??ctexcap??}{
???ctexcap|book??\\if@twoside
\\def\\ps@headings{%
\\let\\@oddfoot\\@empty\\let\\@evenfoot\\@empty
\\def\\@evenhead{\\thepage\\hfil\\slshape\\leftmark}%\\def\\@oddhead{{\\slshape\\rightmark}\\hfil\\thepage}%\\let\\@mkboth\\markboth\\def\\chaptermark##1{%
\\markboth{\\MakeUppercase{%\\ifnum\\c@secnumdepth>\\m@ne\\if@mainmatter
%\\@chapapp\\\\thechapter.\\%
\\CTEXthechapter\\quad%\\fi\\fi
##1}}{}}%
\\def\\sectionmark##1{%
\\markright{\\MakeUppercase{%\\ifnum\\c@secnumdepth>\\z@
%\\thesection.\\%
\\CTEXthesection\\quad%\\fi
##1}}}}
\\else
\\def\\ps@headings{%
\\let\\@oddfoot\\@empty
\\def\\@oddhead{{\\slshape\\rightmark}\\hfil\\thepage}%
3源代码说明50
126912701271127212731274127512761277127812791280128112821283
%
\\let\\@mkboth\\markboth\\def\\chaptermark##1{%
\\markright{\\MakeUppercase{%\\ifnum\\c@secnumdepth>\\m@ne\\if@mainmatter
\\@chapapp\\\\thechapter.\\%\\CTEXthechapter\\quad%\\fi\\fi
##1}}}}
\\fi
??/ctexcap|book?????ctexcap??}}
??/ctexcap??
让前面的页眉定义生效:
1284
??ctexcap|cls??\\pagestyle{headings}
\\ps@fancy如果使用了fancyhdr宏包,需要修改其定义的宏,以正确显示中文页眉。
1285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309
???ctexcap|cls??
\\@ifundefined{ps@fancy}{}{%\\def\\ps@fancy{%
\\@ifundefined{@chapapp}{\\let\\@chapapp\\chaptername}{}%foramsbook\\@ifundefined{MakeUppercase}{\\def\\MakeUppercase{\%uppercase}}{}%\\@ifundefined{chapter}{\\def\\sectionmark##1{\\markboth{\\MakeUppercase{\\ifnum\\c@secnumdepth>\\z@%\\thesection\\hskip1em\\relax\\fi##1}}{}}%
\\CTEXthesection\\quad\\fi##1}}{}}%
\\def\\subsectionmark##1{\\markright{\\ifnum\\c@secnumdepth>\\@ne%\\thesubsection\\hskip1em\\relax\\fi##1}}}%
\\CTEXthesubsection\\quad\\fi##1}}}%
{\\def\\chaptermark##1{\\markboth{\\MakeUppercase{\\ifnum\\c@secnumdepth>\\m@ne%\\@chapapp\\\\thechapter.\\\\fi##1}}{}}%
\\ifCTEX@cls{book}{\\if@mainmatter\\CTEXthechapter\\quad\\fi}{\\CTEXthechapter\\quad}\\fi##1}}{}}%
\\def\\sectionmark##1{\\markright{\\MakeUppercase{\\ifnum\\c@secnumdepth>\\z@%\\thesection.\\\\fi##1}}}}%
\\CTEXthesection\\quad\\fi##1}}}}%\\ps@@fancy
\\gdef\\ps@fancy{\\@fancyplainfalse\\ps@@fancy}%\\ifdim\\headwidth<0sp
\\global\\advance\\headwidth123456789sp\\global\\advance\\headwidth\\textwidth\\fi}}
正在阅读:
ctex01-31
高支撑专项施工方案09-22
“十三五”规划重点-消毒器皿项目建议书(立项报告)04-24
QIAGEN DNeasy Blood& Tissue 试剂盒说明书(翻译版)03-07
冬天问候客户短信02-07
纤维素酶活力的测定10-19
人生感悟与学习散文03-21
长安大学测试与传感器技术试题库及答案10-16
- exercise2
- 铅锌矿详查地质设计 - 图文
- 厨余垃圾、餐厨垃圾堆肥系统设计方案
- 陈明珠开题报告
- 化工原理精选例题
- 政府形象宣传册营销案例
- 小学一至三年级语文阅读专项练习题
- 2014.民诉 期末考试 复习题
- 巅峰智业 - 做好顶层设计对建设城市的重要意义
- (三起)冀教版三年级英语上册Unit4 Lesson24练习题及答案
- 2017年实心轮胎现状及发展趋势分析(目录)
- 基于GIS的农用地定级技术研究定稿
- 2017-2022年中国医疗保健市场调查与市场前景预测报告(目录) - 图文
- 作业
- OFDM技术仿真(MATLAB代码) - 图文
- Android工程师笔试题及答案
- 生命密码联合密码
- 空间地上权若干法律问题探究
- 江苏学业水平测试《机械基础》模拟试题
- 选课走班实施方案
- 2004年陈先奎押题讲座笔记
- 2011—2012小学六年级语文第一学年度上学期真题试题试卷(含附加题)
- 关于转发《关于申报中央财政主要污染物减排专项资金国家环境空气监测网建设项目有关事项的通知》的通知
- 加气块砌筑注意事项上墙
- 临床医学院通讯录 - 图文
- XXX学院标准化考场监控方案 - 图文
- 2016年秋季《幼儿园教育评价》期末考核
- 公务员1
- 电子商务概论实验指导书
- 超声波气泡检测传感器
- 教师资格培训心得体会
- 天津外国语学院2006-2007学年表彰名单
- 2015年12月六级考试真题+答案
- 人教版四年级下册语文第一二单元测试卷
- 教师校本研修学习资料
- 语言文字规范意识和能力培养方案
- 2016年特种作业高压电工最新题库
- FPGA中同步FIFO的使用小结
- 东北大学卓越工程师教育培养计划工作进展报告
- 卫生监督协管知识讲座2012-63