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??