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