% \iffalse meta-comment % % Copyright 2003-2006 % CTEX.ORG and any individual authors listed elsewhere in this file. % % This file is part of the ctex package project. % ---------------------------------------------- % % It may be distributed under the conditions of the LaTeX Project Public % License, either version 1.2 of this license or (at your option) any % later version. The latest version of this license is in % http://www.latex-project.org/lppl.txt % and version 1.2 or later is part of all distributions of LaTeX % version 1999/12/01 or later. % %<*!(cfg|fd)> % \fi % %% \CharacterTable %% {Upper-case \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z %% Lower-case \a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z %% Digits \0\1\2\3\4\5\6\7\8\9 %% Exclamation \! Double quote \" Hash (number) \# %% Dollar \$ Percent \% Ampersand \& %% Acute accent \' Left paren \( Right paren \) %% Asterisk \* Plus \+ Comma \, %% Minus \- Point \. Solidus \/ %% Colon \: Semicolon \; Less than \< %% Equals \= Greater than \> Question mark \? %% Commercial at \@ Left bracket \[ Backslash \\ %% Right bracket \] Circumflex \^ Underscore \_ %% Grave accent \` Left brace \{ Vertical bar \| %% Right brace \} Tilde \~} %% % % \CheckSum{3181} % % \iffalse meta-comment % % %<*driver> \ProvidesFile{ctex.dtx} % % %\NeedsTeXFormat{LaTeX2e}[1995/12/01] %\ProvidesPackage{ctex} %\ProvidesPackage{ctexcap} %
\ProvidesClass{ctexart} %\ProvidesClass{ctexrep} %\ProvidesClass{ctexbook} %\ProvidesFile{ctexcjk.clo} %\ProvidesFile{ctexcct.clo} %\ProvidesFile{ctex.def} %\ProvidesFile{ctexcap.cfg} %\ProvidesFile{ctex.cfg} %\ProvidesFile{c19rm.fd} %\ProvidesFile{c19sf.fd} %\ProvidesFile{c19tt.fd} [2007/05/06 v0.8a ctex % macros package] % document class] % document class option] % configuration file] % font definition file] % %<*driver> bundle source file] % % %<*driver> \documentclass{ltxdoc} \usepackage{ctex} \usepackage{texnames} \topmargin 0.5 true cm \oddsidemargin 2.5 true cm \evensidemargin 2.5 true cm \textheight 21 true cm \textwidth 14 true cm \EnableCrossrefs %\DisableCrossrefs % Say \DisableCrossrefs if index is ready \CodelineIndex \RecordChanges % Gather update information %\OnlyDescription % comment out for implementation details %\OldMakeindex % use if your MakeIndex is pre-v2.9 \begin{document} \DocInput{ctex.dtx} \end{document} % % %<*def> % % %<*cap> %% Chinese captions %% %% character set: GBK %% encoding: EUC % % %<*conf> % % %<*fd> %% Chinese characters (extension of GB 2312) %% %% character set: GBK %% font encoding: CJK (extended) % % % \fi % % % \changes{v0.0}{2003/04/26}{Initial version} % \changes{v0.1}{2003/08/15}{First beta release} % \changes{v0.2}{2004/01/16}{Add support for CCT} % \changes{v0.2c}{2004/02/13}{Add CJKpunct as standard configuration} % \changes{v0.2d}{2004/04/23}{Change option c5size to base on 10pt basic class} % \changes{v0.5}{2004/08/23}{Move Chinese definitions from ctex.cfg to ctex.def} % \changes{v0.6}{2005/09/24}{Adapt to cct-0.6180-0} % \changes{v0.7}{2005/11/25}{Read configuration files before preamble} % \changes{v0.8}{2006/06/09}{Split ctex.sty to ctex.sty and ctexcap.sty} % % % \DoNotIndex{\begin,\end,\begingroup,\endgroup} % \DoNotIndex{\ifx,\ifdim,\ifnum,\ifcase,\else,\or,\fi} % \DoNotIndex{\let,\def,\xdef,\newcommand,\renewcommand} % \DoNotIndex{\expandafter,\csname,\endcsname,\relax,\protect} % \DoNotIndex{\Huge,\huge,\LARGE,\Large,\large,\normalsize} % \DoNotIndex{\small,\footnotesize,\scriptsize,\tiny} % \DoNotIndex{\normalfont,\bfseries,\slshape,\interlinepenalty} % \DoNotIndex{\hfil,\par,\vskip,\vspace,\quad} % \DoNotIndex{\centering,\raggedright} % \DoNotIndex{\c@secnumdepth,\@startsection,\@setfontsize} % \DoNotIndex{\ ,\@plus,\@minus,\p@,\z@,\@m,\@M,\@ne,\m@ne} % \DoNotIndex{\@@par} % % % \GetFileInfo{ctex.dtx} % % % \MakeShortVerb{\|} % \setcounter{StandardModuleDepth}{1} % % % \newcommand{\ctex}{\texttt{ctex}} % \newcommand{\ctexorg}{\texttt{ctex.org}} % % % \setlength{\parskip}{0.75ex plus .2ex minus .5ex} % \renewcommand{\baselinestretch}{1.2} % % % \makeatletter % \def\parg#1{\mbox{$\langle${\it #1\/}$\rangle$}} % \def\@smarg#1{{\tt\string{}\parg{#1}{\tt\string}}} % \def\@marg#1{{\tt\string{}{\rm #1}{\tt\string}}} % \def\marg{\@ifstar\@smarg\@marg} % \def\@soarg#1{{\tt[}\parg{#1}{\tt]}} % \def\@oarg#1{{\tt[}{\rm #1}{\tt]}} % \def\oarg{\@ifstar\@soarg\@oarg} % \makeatother % % % \title{\bf \ctex{}~宏包说明\thanks % {本文件版本号为~\fileversion{},最后修改日期~\filedate{}。}} % \author{\it 吴凌云\thanks{aloft@ctex.org}} % \date{\small 打印日期:~\today} % \maketitle % % % \begin{abstract} % \ctex{}~宏包提供了一个统一的中文~\LaTeX{}~文档框架,底层支持~CCT~和 % ~CJK~两种中文~\LaTeX{}~系统。\ctex{}~宏包提供了编写中文~\LaTeX{}~文档 % 常用的一些宏定义和命令。 % % \ctex{}~宏包需要~CCT~系统或者~CJK~宏包的支持。 % 主要文件包括~\texttt{ctexart.cls}、 % ~\texttt{ctexrep.cls}、~\texttt{ctexbook.cls}~和 % ~\texttt{ctex.sty}、~\texttt{ctexcap.sty}。 % % \ctex{}~宏包由~\ctexorg{}~制作并负责维护。 % \end{abstract} % % % \tableofcontents % % % \section{简介} % % 这个宏包的部分原始代码来自于由王磊编写~\texttt{cjkbook.cls}~文档类, % 还有一小部分原始代码来自于吴凌云编写的~\texttt{GB.cap}~文件。 % 原来的这些工作都是零零碎碎编写的,没有认真、系统的设计, % 也没有用户文档,非常不利于维护和改进。所以我们用~\texttt{doc}~ % 和~\texttt{docstrip}~工具重新编写了整个文档,并增加了许多新的功能。 % % 最初~Knuth~设计开发~\TeX{}~的时候没有考虑到支持多国语言, % 特别是多字节的中日韩语言。这使得~\TeX{}~以至后来的 % ~\LaTeX{}~对中文的支持一直不是很好。即使在~CJK~解决了中文字符 % 处理的问题以后,中文用户使用~\LaTeX{}~仍然要面对许多困难。 % 最常见的就是中文化的标题。由于中文习惯和西方语言的不同, % 使得很难直接使用原有的标题结构来表示中文标题。因此需要对 % 标准~\LaTeX{}~宏包做较大的修改。此外,还有诸如中文字号的对应 % 关系等等。~\ctex{}~宏包正是尝试着解决这些问题。中间很多地方 % 用到了在~\ctexorg{}~论坛上的讨论结果,在此对参与讨论的 % 朋友们表示感谢。 % % \ctex{}~宏包由五个主要文件构成: % ~\texttt{ctexart.cls}、~\texttt{ctexrep.cls}、~\texttt{ctexbook.cls}~和 % ~\texttt{ctex.sty}、~\texttt{ctexcap.sty}。~\texttt{ctex.sty}~主要是提供整合的 % 中文环境,可以配合大多数文档类使用。而~\texttt{ctexcap.sty}~则是对~\LaTeX{}~ % 的三个标准文档类的格式进行修改以符合中文习惯,该宏包只能配合这三个标准文档类使用。 % ~\texttt{ctexart.cls}、~\texttt{ctexrep.cls}、~\texttt{ctexbook.cls}~则是 % ~\texttt{ctex.sty}、\texttt{ctexcap.sty}~分别和三个标准文档类结合产生的新文档类, % 除了包含~\texttt{ctex.sty}、\texttt{ctexcap.sty}~的所有功能,还加入了一些修改文档类 % 缺省设置的内容(如使用五号字体为缺省字体)。 % % \vskip 10pt % {\kaishu % 这份说明文档可以通过用~\LaTeX{}~编译~\texttt{ctex.dtx}~文件来得到。 % 编译说明文档需要~CJK~宏包和~\ctex{}~宏包。 % 为了生成正确的索引和版本记录,需要使用如下命令 % \begin{verbatim} % makeindex -s gind.ist -o ctex.ind ctex.idx % makeindex -s gglo.ist -o ctex.gls ctex.glo % \end{verbatim} % } % % % \section{使用帮助} % % \ctex{}~宏包的使用十分简单。如果是使用~\ctex{}~的文档类,只需用 % ~\texttt{ctexart}、~\texttt{ctexrep}~或者~\texttt{ctexbook}~替换原来的 % 文档类就可以了。你也可以继续使用原来的文档类,而用~\texttt{ctex.sty}~和 % ~\texttt{ctexcap.sty}~宏包来配合使用,两者的效果是一样的 % (除了不能修改一些文档设置如缺省字体大小)。 % % \subsection{使用~CJK} % % 这是~\ctex{}~宏包的缺省设置。\ctex{}~宏包会自动调用~CJK~宏包,你无需再自己调用。 % 此外,\ctex{}~宏包会在~|\begin{document}|~和~|\end{document}|~ % 之间自动加入一个~CJK~环境,你无需再添加~CJK~环境。~CJK~宏包的命令都可以 % 在~|\begin{document}|~和~|\end{document}|~之间正常使用。 % % 例子1:使用文档类宏包 % \begin{verbatim} % \documentclass{ctexart} % \begin{document} % 中文宏包测试 % \end{document} % \end{verbatim} % % 例子2:使用普通宏包 % \begin{verbatim} % \documentclass{article} % \usepackage{ctex} % \begin{document} % 中文宏包测试 % \end{document} % \end{verbatim} % % \subsection{使用~CCT} % \ctex{}~宏包也可以配合新版的~CCT~使用,只需在使用~\ctex{}~宏包时加上~CCT~选项即可。 % 缺省~CCT~会使用~CJK~字库,因为这种字库方式比传统~CCT~字库更方便,兼容性也更好。 % 如果要使用传统~CCT~字库,则还要加上~CCTfont~选项。 % % 例子3:使用~CJK~方式字库 % \begin{verbatim} % \documentclass[CCT]{ctexart} % \begin{document} % 中文宏包测试 % \end{document} % \end{verbatim} % % 例子2:使用~CCT~方式字库 % \begin{verbatim} % \documentclass[CCT,CCTfont]{ctexart} % \begin{document} % 中文宏包测试 % \end{document} % \end{verbatim} % % % \subsection{选项} % % 宏包的选项用于改变一些缺省风格的设置。缺省的设置已经针对中文 % 的习惯进行了尽量的修改,所以一般用户无需使用这些选项。 % 如果你觉得某些设置不合适,可以向作者反映。我们会考虑在后面的 % 版本中予以改进。我们也欢迎关于增加或者删减选项的建议。 % % % 下面的选项可能会是最经常使用的。但是它们只能用于文档类 % (\texttt{ctexart}、~\texttt{ctexrep}~和~\texttt{ctexbook})。 % \begin{description} % \item[cs4size] 使用小四字号为缺省字体大小。 % \item[c5size] 使用五号字为缺省字体大小。{\heiti 这个是 % ~\ctex{}~文档类的缺省格式。} % \end{description} % % % 下面这些则可以在文档类宏包和~\texttt{ctex.sty}~上使用。 % \begin{description} % \item[CCT] 使用~CCT~代替~CJK~做为底层的中文支持系统。 % % \item[CCTfont] 使用传统的~CCT~字库方式,该选项会自动激活~CCT~选项。 % % \item[punct] 对中文标点的位置(宽度)进行调整。 % % \item[nopunct] 不对中文标点的位置进行调整(每个标点占有相同的宽度)。 % \item[space] 使用~CJK~的保留空格模式,保留中文字符间的空格(类似英文的 % 习惯)。你需要自己处理中文字符间的空格以及换行产生的空格(在行尾加上 % ~\%~符号可以避免),否则排版结果可能不符合中文习惯。这种模式可以通过 % ~|\CTEXnospace|~转换到~nospace~模式。 % % \item[nospace] 使用~CJK~的忽略空格模式,也就是~CJK*~环境的模式。 % ~CJK~会自动忽略中文字符间的空格,比较符合中文习惯。在这种模式下, % 可以使用~\textasciitilde~来分隔中英文字符,产生的间距稍小于普通空格, % 排版效果比较美观。这种模式可以通过~|\CTEXspace|~命令转换到~space~模式。 % {\heiti 这个是~\ctex{}~宏包的缺省模式。} % % \item[cap] 使用中文的标题样式。{\heiti 这个是文档类宏包的缺省模式。} % % \item[nocap] 保留使用英文的标题样式。 % % \item[indent] 使用中文的段首缩进模式,即缩进两个汉字宽度,同时每个段落 % 都缩进。{\heiti 这个是~\ctex{}~宏包的缺省模式。} % % \item[noindent] 使用原来的段首缩进模式,章节标题后的第一段不缩进。 % % \item[psfont] 使用~PostScript~字库来代替~CM~字库。这个选项只影响英文 % 字库的使用,对中文没有作用。 % % \item[fancyhdr] 保持和~\texttt{fancyhdr}~宏包的兼容性。该选项将使得 % ~\texttt{fancyhdr}~宏包被自动调用。 % % \item[amstex] 保持和~\AMSLaTeX{}~宏包的兼容性。 % % \item[fntef] 为~\texttt{CJKfntef}~宏包和~\texttt{CCTfntef}~宏包提供统一接口。 % 该选项将使得~\texttt{CJKfntef}~宏包或者~\texttt{CCTfntef}~宏包被自动调用。 % \end{description} % % % 下面这些则可以在文档类宏包和~\texttt{ctexcap.sty}~上使用。 % \begin{description} % \item[cap] 使用中文的标题样式,缺省格式由~\texttt{ctexcap.cfg}~配置文件 % 内的定义给出。{\heiti 这个是文档类宏包的缺省模式。} % % \item[nocap] 保留使用英文的标题样式。 % % \item[sub3section] 将~|\paragraph|~命令产生的标题改为~section~类格式。 % 此时~|\subparagraph|~命令产生的标题会具有原来~|\paragraph|~的格式。 % % \item[sub4section] 将~|\paragraph|~和~|\subparagraph|~命令产生的标题 % 都改为~section~类格式。 % \end{description} % % % \vskip 10pt % {\kaishu % 总结:\ctex{}~宏包的缺省选项是~nospace cap indent,文档类 % 的缺省选项是~nospace cap indent c5size。 % } % % % \subsection{基本命令} % % \ctex{}~宏包给用户提供一个通用的文档框架,使得用户可以自由地在不同的 % 底层中文系统间切换。为此,我们为~CJK~定制了一些模拟~CCT~的命令, % 也对部分~CCT~命令进行了修改,使得两者保持一致。 % 此外,我们还定义了用于设置文档参数的高级设置命令。 % % \subsubsection{字体设置} % % 中文字体很多,但是常用的就那么几个。我们为~CJK~常用的六种中文 % 字体定义了简单易用的命令。它们是: % % \DescribeMacro{\songti} % 宋体:~|\songti|,~CJK~等价命令~|\CJKfamily{song}| % % \DescribeMacro{\heiti} % 黑体:~|\heiti|,~CJK~等价命令~|\CJKfamily{hei}| % % \DescribeMacro{\fangsong} % 仿宋:~|\fangsong|,~CJK~等价命令~|\CJKfamily{fs}| % % \DescribeMacro{\kaishu} % 楷书:~|\kaishu|,~CJK~等价命令~|\CJKfamily{kai}| % % \DescribeMacro{\lishu} % 隶书:~|\lishu|,~CJK~等价命令~|\CJKfamily{li}| % % \DescribeMacro{\youyuan} % 幼圆:~|\youyuan|,~CJK~等价命令~|\CJKfamily{you}| % % \vskip 10pt % {\kaishu % \TeX{}~系统中必须已经定义好这六种中文字体,并且使用和~\CTeX{}~套装中 % 一致的字体名称。(参见上面~CJK~等价命令的参数) % % 上面的字体命令和~CCT~中的一致,但传统的~CCT~字库中没有隶书和 % 仿宋两种字体,需要用户自行安装定义。如果使用~CCT~时选择~CJK~字库方式, % 则可以使用这两种中文字体。 % } % % \subsubsection{字号、字距、字宽和缩进} % % \DescribeMacro{\zihao} % 中文字号的设置命令是~|\zihao|\marg*{字号},例如~|\zihao{3}|。 % 可以使用的参数有~16~个,小号字体在前面加负号表示,从大到小依次为 % \begin{center} % \begin{tabular}{cccccccc} % \hline % 初号 & 小初 & 一号 & 小一 & 二号 & 小二 & 三号 & 小三 \\ % 0 & -0 & 1 & -1 & 2 & -2 & 3 & -3 \\ % \hline % 四号 & 小四 & 五号 & 小五 & 六号 & 小六 & 七号 & 八号 \\ % 4 & -4 & 5 & -5 & 6 & -6 & 7 & 8 \\ % \hline % \end{tabular} % \end{center} % \noindent 英文字体大小会始终保持和中文字体一致。 % % \DescribeMacro{\ziju} % 汉字字距的调整使用命令~|\ziju|\marg*{字宽的倍数}。参数可以是任意的数字, % 例如~|\ziju{5}|~设置汉字字距为当前汉字字宽的~5~倍,~|\ziju{0.5}|~设置汉字 % 字距为当前汉字字宽的一半。这里的汉字字宽指的是实际汉字的宽度, % 不包含当前字距。该命令不影响英文字距。 % % \DescribeMacro{\ccwd} % 当前汉字的字宽保存在宏~|\ccwd|~中。字宽是相邻两个汉字中心的距离, % 也就是说字距会被计算在内。 % % \DescribeMacro{\CTEXindent} % 正常的缩进两个汉字字宽的距离,同时在汉字大小和字距改变的 % 情况都可以自动修改缩进距离。 % % \DescribeMacro{\CTEXnoindent} % 取消缩进。 % % \DescribeMacro{\CTEXsetfont} % |\CTEXsetfont|~命令用于更新当前的中文字体信息,包括当前字距和缩进 % 距离。一般来说,用户无需使用这个命令。 % % % \subsubsection{中文数字转换} % % \DescribeMacro{\CTEXnumber} % 使用~CJK~提供的~|\CJKnumber|~命令可以将阿拉伯数字转换为中文数字。 % 由于~\LaTeX{}~臭名昭著的脆弱命令的原因,当~|\CJKnumber|~被用在 % 章节标题等地方的时候,要么出现错误无法使用,要么无法达到预期目的, % 例如在产生~PDF~书签的时候。于是我们定义了一个~|\CTEXnumber|~命令, % 可以将产生的中文数字保存下来。该命令的格式为 % \begin{quote} % |\CTEXnumber|\marg*{result}\marg*{number} % \end{quote} % 其中~\parg{result}~必须是一个~\TeX{}~宏的名字,不需要预先定义。 % 例如 % \begin{quote} % |\CTEXnumber{\test}{100002005}| % \end{quote} % 则~|\test|~中的内容就是“一亿零二千零五”(不包括引号)。 % % \DescribeMacro{\CTEXdigits} % |\CTEXdigits|~命令和~|\CTEXnumber|~命令类似,用于代替~CJK~提供的 % ~|\CJKdigits|~命令。它和~|\CTEXnumber|~命令的不同之处在于转换后 % 结果是中文数字串,而不是按照中文习惯的数字。该命令的格式为 % \begin{quote} % |\CTEXdigits|\marg*{result}\marg*{number} % \end{quote} % 其中~\parg{result}~必须是一个~\TeX{}~宏的名字,不需要预先定义。 % 例如 % \begin{quote} % |\CTEXnumber{\test}{100002005}| % \end{quote} % 则~|\test|~中的内容就是“一○○○○二○○五”(不包括引号)。 % % \DescribeMacro{\chinese} % 对于经常需要转换的计数器,我们特别定义了一个~|\chinese|~命令。 % 该命令可以象罗马数字转换命令~|\roman|、~|\Roman|~一样使用。 % 具体格式是 % \begin{quote} % |\chinese|\marg*{counter} % \end{quote} % 其中~\parg{counter}~是一个~\LaTeX{}~计数器(counter),即由 % ~|\newcounter|~命令产生的,例如~|section|,~|figure|~等。 % % % \subsection{高级设置} % % \DescribeMacro{\CTEXoptions} % \ctex{}~宏包中一般的设置通过~|\CTEXoptions|~命令完成。 % 这个命令的基本格式是 % \begin{quote} % |\CTEXoptions|\oarg{\parg{key1}={\parg{val1}}, % \parg{key2}={\parg{val2}}, ...} % \end{quote} % 其中~\parg{key1}, \parg{key2}~是设置选项, % ~\parg{val1}, \parg{val2}~则是对应选项的设置内容。 % 多个选项可以在一个语句中完成设置。 % % \DescribeMacro{\CTEXsetup} % 部分设置如章节标题则通过~|\CTEXsetup|~命令完成。这个命令比 % ~|\CTEXoptions|~多一个参数,用于指定设置对象。 % 基本格式是 % \begin{quote} % |\CTEXsetup|\oarg{\parg{key1}={\parg{val1}}, % \parg{key2}={\parg{val2}}, ...}\marg*{type} % \end{quote} % 其中~\parg{type}~是设置的对象类型,如~|part|, |chapter|, |section|, % |subsection|, |subsubsection|, |paragraph|, |subparagraph|~等。 % ~\parg{key1}, \parg{key2}~是设置选项,如~|name|, |number|, |format|, % |nameformat|, |numberformat|, |aftername|, |titleformat|~等。 % ~\parg{val1}, \parg{val2}~则是对应选项的设置内容。 % 同一个目标类型的多个选项可以在一个语句中完成设置。 % % {\bf 如果以上命令的参数中包含中文字符,则命令必须放在 % ~|\begin{document}|~之后才能正常工作。} % \footnote{从~v0.7~版本开始支持在导言区使用中文。} % % % \subsubsection{章节标题设置} % % 普通章节标题的格式全部通过~|\CTEXsetup|~命令完成。 % 章节类型在~|\CTEXsetup|~命令的第二个参数中指定。 % {\bf 如果使用了宏包选项~cap~(缺省情况即是如此),则所有 % 对章节标题的修改必须在~|\begin{document}|~以后进行。原因是 % 缺省的中文标题设置文件~\texttt{ctexcap.cfg}~文件是在 % ~|\begin{document}|~之后才会自动装入,因而之前的修改都 % 会被覆盖而无效。}这一限制对后面的附录标题以及其他标题设置 % 一样有效。\footnote{从~v0.7~版本开始,\texttt{ctexcap.cfg}~文件 % 在宏包文件结束时就已经被装入,因此可以在导言区使用设置命令。} % % \begin{description} % % \item[name=\{\parg{prename},\parg{postname}\}] % 该选项用于设置章节的名字,包括章节编号前后的词语,两个之间用逗号分开。 % 例如 % \begin{quote} % |\CTEXsetup[name={第,节}]{section}| % \end{quote} % 会使得~section~的标题使用形如“第1节”的名字。注意{\bf 不要}使用中文 % 的逗号。 % % 该选项的缺省设置是 % \begin{center} % \begin{tabular}{lll} % \hline\hline % & 使用宏包选项~cap~ & 使用宏包选项~nocap~ \\ % \hline % part & \{第,部分\} & \{Part\cs{space},\} \\ % chapter & \{第,章\} & \{Chapter\cs{space},\} \\ % section & 同右 & \{,\} \\ % subsection & 同右 & \{,\} \\ % subsubsection & 同右 & \{,\} \\ % paragraph & 同右 & \{,\} \\ % subparagraph & 同右 & \{,\} \\ % \hline\hline % \end{tabular} % \end{center} % % \item[number=\{\parg{number}\}] % 该选项用于设置章节编号的数字样式。例如 % \begin{quote} % |\CTEXsetup[number={\roman{section}}]{section}| % \end{quote} % 会使得~section~的标题使用小写罗马数字作为编号。常用的数字样式命令有 % \begin{description} % \item \cs{chinese}\marg*{counter}: 一, 二, 三, ... % \item \cs{arabic}\marg*{counter}: 1, 2, 3, ... % \item \cs{roman}\marg*{counter}: i, ii, iii, ... % \item \cs{Roman}\marg*{counter}: I, II, III, ... % \item \cs{alph}\marg*{counter}: a, b, c, ... % \item \cs{Alph}\marg*{counter}: A, B, C, ... % \end{description} % % 该选项的缺省设置是 % \begin{center} % \begin{tabular}{lll} % \hline\hline % & 使用宏包选项~cap~ & 使用宏包选项~nocap~ \\ % \hline % part & \{\cs{chinese}\marg{part}\} & \{\cs{Roman}\marg{part}\} \\ % chapter & \{\cs{chinese}\marg{chapter}\} & \{\cs{arabic}\marg{chapter}\} \\ % section & 同右 & \{\cs{thesection}\} \\ % subsection & 同右 & \{\cs{thesubsection}\} \\ % subsubsection & 同右 & \{\cs{thesubsubsection}\} \\ % paragraph & 同右 & \{\cs{theparagraph}\} \\ % subparagraph & 同右 & \{\cs{thesubparagraph}\} \\ % \hline\hline % \end{tabular} % \end{center} % % \item[format=\{\parg{format}\}] % 用于控制章节标题的全局格式,作用域为章节名字和随后的标题内容。 % 常用于控制章节标题的对齐方式。 % % 该选项的缺省设置是 % \begin{center} \small % \begin{tabular}{lll} % \hline\hline % & 使用宏包选项~cap~ & 使用宏包选项~nocap~ \\ % \hline % part (article) & \{\cs{centering}\} & \{\cs{raggedright}\} \\ % part & \{\cs{centering}\} & \{\cs{centering}\} \\ % chapter & \{\cs{centering}\} & \{\cs{raggedright}\} \\ % section & \{\cs{Large}\cs{bfseries}\cs{centering}\} & \{\cs{Large}\cs{bfseries}\} \\ % subsection & \{\cs{large}\cs{bfseries}\cs{centering}\} & \{\cs{large}\cs{bfseries}\} \\ % subsubsection & \{\cs{normalsize}\cs{bfseries}\cs{centering}\} & \{\cs{normalsize}\cs{bfseries}\} \\ % paragraph & \{\cs{normalsize}\cs{bfseries}\cs{centering}\} & \{\cs{normalsize}\cs{bfseries}\} \\ % subparagraph & \{\cs{normalsize}\cs{bfseries}\cs{centering}\} & \{\cs{normalsize}\cs{bfseries}\} \\ % \hline\hline % \end{tabular} % \end{center} % % \item[nameformat=\{\parg{nameformat}\}] % 用于控制章节名字的格式,作用域为章节名字,包括编号。 % % 该选项的缺省设置是 % \begin{center} % \begin{tabular}{lll} % \hline\hline % & 使用宏包选项~cap~ & 使用宏包选项~nocap~ \\ % \hline % part (article) & 同右 & \{\cs{Large}\cs{bfseries}\} \\ % part & 同右 & \{\cs{huge}\cs{bfseries}\} \\ % chapter & 同右 & \{\cs{huge}\cs{bfseries}\} \\ % section & 同右 & \{\} \\ % subsection & 同右 & \{\} \\ % subsubsection & 同右 & \{\} \\ % paragraph & 同右 & \{\} \\ % subparagraph & 同右 & \{\} \\ % \hline\hline % \end{tabular} % \end{center} % % \item[numberformat=\{\parg{numberformat}\}] % 用于控制章节编号的格式。一般为空,当你需要编号的格式和前后的章节名字 % 不一样时使用。 % % \item[aftername=\{\parg{aftername}\}] % 用于控制章节标题中章节名字和随后的标题内容之间的格式变换。 % 常用于控制标题内容是否另起一行。 % % 该选项的缺省设置是 % \begin{center} % \begin{tabular}{lll} % \hline\hline % & 使用宏包选项~cap~ & 使用宏包选项~nocap~ \\ % \hline % part (article) & \{\cs{quad}\} & \{\cs{par}\cs{nobreak}\} \\ % part & 同右 & \{\cs{par}\cs{vskip} 20pt\} \\ % chapter & \{\cs{quad}\} & \{\cs{par}\cs{vskip} 20pt\} \\ % section & 同右 & \{\} \\ % subsection & 同右 & \{\} \\ % subsubsection & 同右 & \{\} \\ % paragraph & 同右 & \{\} \\ % subparagraph & 同右 & \{\} \\ % \hline\hline % \end{tabular} % \end{center} % % \item[titleformat=\{\parg{titleformat}\}] % 用于控制标题内容的格式,作用域为章节标题内容。 % % 该选项的缺省设置是 % \begin{center} % \begin{tabular}{lll} % \hline\hline % & 使用宏包选项~cap~ & 使用宏包选项~nocap~ \\ % \hline % part (article) & \{\cs{Large}\cs{bfseries}\} & \{\cs{huge}\cs{bfseries}\} \\ % part & \{\cs{huge}\cs{bfseries}\} & \{\cs{Huge}\cs{bfseries}\} \\ % chapter & \{\cs{huge}\cs{bfseries}\} & \{\cs{Huge}\cs{bfseries}\} \\ % section & 同右 & \{\} \\ % subsection & 同右 & \{\} \\ % subsubsection & 同右 & \{\} \\ % paragraph & 同右 & \{\} \\ % subparagraph & 同右 & \{\} \\ % \hline\hline % \end{tabular} % \end{center} % % \item[beforeskip=\{\parg{beforeskip}\}] % 用于控制章节标题前的空距。 % % 该选项的缺省设置是 % \begin{center} % \begin{tabular}{lll} % \hline\hline % & 使用宏包选项~cap~ & 使用宏包选项~nocap~ \\ % \hline % part (article) & 同右 & \{4ex\} \\ % part & 无效 & 无效 \\ % chapter & 同右 & \{50pt\} \\ % section & 同右 & \{-3.5ex plus -1ex minus -.2ex\} \\ % subsection & 同右 & \{-3.25ex plus -1ex minus -.2ex\} \\ % subsubsection & 同右 & \{-3.25ex plus -1ex minus -.2ex\} \\ % paragraph & 同右 & \{3.25ex plus 1ex minus .2ex\} \\ % subparagraph & 同右 & \{3.25ex plus 1ex minus .2ex\} \\ % \hline\hline % \end{tabular} % \end{center} % % 在~section~及以下的标题中,使用负的距离表示标题后的段落不缩进 % (如标准的英文~LaTeX~文档),否则缩进。标题上方真正的空距是该参数的绝对值。 % % \item[afterskip=\{\parg{afterskip}\}] % 用于控制章节标题后的空距。 % % 该选项的缺省设置是 % \begin{center} % \begin{tabular}{lll} % \hline\hline % & 使用宏包选项~cap~ & 使用宏包选项~nocap~ \\ % \hline % part (article) & 同右 & \{3ex\} \\ % part & 无效 & 无效 \\ % chapter & 同右 & \{40pt\} \\ % section & 同右 & \{2.3ex plus .2ex\} \\ % subsection & 同右 & \{1.5ex plus .2ex\} \\ % subsubsection & 同右 & \{1.5ex plus .2ex\} \\ % paragraph & 同右 & \{-1em\} \\ % subparagraph & 同右 & \{-1em\} \\ % \hline\hline % \end{tabular} % \end{center} % % 在~section~及以下的标题中,正的距离表示向下留出的空距(如标准的~section~标题), % 使用负的距离则表示向右留出的空距的负值(如标准的~paragraph~标题)。 % % \item[indent=\{\parg{indent}\}] % 用于控制章节标题本身的缩进。 % % 该选项的缺省设置是 % \begin{center} % \begin{tabular}{lll} % \hline\hline % & 使用宏包选项~cap~ & 使用宏包选项~nocap~ \\ % \hline % part (article) & 同右 & \{0pt\} \\ % part & 无效 & 无效 \\ % chapter & 同右 & \{0pt\} \\ % section & 同右 & \{0pt\} \\ % subsection & 同右 & \{0pt\} \\ % subsubsection & 同右 & \{0pt\} \\ % paragraph & 同右 & \{0pt\} \\ % subparagraph & 同右 & \{\cs{parindent}\} \\ % \hline\hline % \end{tabular} % \end{center} % % \end{description} % % % \subsubsection{部分修改标题格式} % % 如果只想修改标题格式中的某些参数而不是完全重新设置,可以使用带~+~号的 % 设置选项。例如 % \begin{quote} % |\CTEXsetup[format+={\zihao{1}}]{section}| % \end{quote} % 则~section~的标题使用一号字体,而其他格式设置保持不变。 % % 标题格式相关的选项都支持这一功能,包括~|format|, |nameformat|, |numberformat|, % |aftername|~和~|titleformat|,而且对所有文档类型都有效。 % % \subsubsection{附录标题设置} % % 附录(appendix)的标题也使用~|\CTEXsetup|~命令进行设置, % 第二个参数设为~|appendix|。但是只能使用~|name|~和~|number|~ % 两个设置选项。在使用了~|\appendix|~命令之后,附录 % 的名字和编号会被自动使用。{\bf 附录的名字和前面的章节不同, % 它只有一个部分,放在编号之前。}在~article~类文档中, % 附录是用~section~实现的,而在~report~和~book~类文档中附录 % 使用的是~chapter~的设置。因此在设置附录的编号的时候要注意 % 使用正确的计数器。如果你要设置其他格式的附录标题, % 可以根据使用的文档类直接用~section~或者~chapter~的设置命令来控制, % 但是要记住把设置命令放在~|\appendix|~(如果有的话)的后面, % 否则会被~|\appendix|~命令的设置覆盖。 % % 附录的缺省设置是 % \begin{center} % \begin{tabular}{lll} % \hline\hline % & 使用宏包选项~cap~ & 使用宏包选项~nocap~ \\ % \hline % name (article) & 同右 & \{\} \\ % name & \{附录\textasciitilde\} & \{Appendix\cs{space}\} \\ % number (article) & 同右 & \{\cs{Alph}\marg{section}\} \\ % number & 同右 & \{\cs{Alph}\marg{chapter}\} \\ % \hline\hline % \end{tabular} % \end{center} % % % \subsubsection{其他标题设置} % % 除章节标题外其他标题的设置通过~|\CTEXoptions|~设置。包括 % % \begin{description} % \item[contentsname] 目录名 % \item[listfigurename] 表格目录 % \item[listtablename] 插图目录 % \item[figurename] 图 % \item[tablename] 表 % \item[abstractname] 摘要 % \item[indexname] 索引 % \item[bibname] 参考文献 % \end{description} % % 例如 % \begin{quote} % |\CTEXoptions[indexname={总索引}]| % \end{quote} % 把索引的名字改为“总索引”。 % % % \subsubsection{其他设置} % % \paragraph{设置~\cs{today}~的日期格式} % 使用~|\CTEXoptions|~可以设置~|\today|~命令产生的日期格式。 % 支持的格式包括 % % \begin{enumerate} % % \item 阿拉伯数字加中文年月日 % \begin{quote} % |\CTEXoptions[today=small]| % \end{quote} % \CTEXoptions[today=small] % |\today|~生成的日期例子为“\today”。 % % \item 中文数字加中文年月日 % \begin{quote} % |\CTEXoptions[today=big]| % \end{quote} % \CTEXoptions[today=big] % |\today|~生成的日期例子为“\today”。 % % \item \LaTeX{}~标准格式 % \begin{quote} % |\CTEXoptions[today=old]| % \end{quote} % \CTEXoptions[today=old] % |\today|~生成的日期例子为“\today”。 % % \end{enumerate} % % % \paragraph{设置图表标题的分隔符} % 使用~|\CTEXoptions|~可以设置~|\caption|~命令产生的图表标题的分隔符。 % 这个分隔符缺省是使用冒号~:~。可以通过命令 % \begin{quote} % |\CTEXoptions[captiondelimiter={|\parg{string}|}]| % \end{quote} % 设置为任意的单个字符或者字符串~\parg{string}。 % % % \subsection{配置文件} % % 主要的配置文件有~\texttt{ctex.def}~和~\texttt{ctexcap.cfg}~以及几个字体 % 定义文件~\texttt{*.fd}。字体定义文件的内容请参考~\ref{sec:fontdef}~的 % 内容。 % % \texttt{ctex.def}~是一些中文字符串参数的定义,会被所有的宏包使用。 % 如果你想改用其他的中文字符,例如繁体字,可以修改这个文件。 % % \texttt{ctexcap.cfg}~是缺省中文标题格式的定义,当你使用~\texttt{cap}~ % 选项时就会使用这里的定义。你可以把它改为你经常使用的格式,这样就不用 % 每次都在正文中修改了。~\texttt{ctexcap.cfg}~中的设置都可以通过宏包提供 % 的设置命令在正文中进行修改。 % % 最后,宏包还将读入~\texttt{ctex.cfg}~文件,该文件中的设置将覆盖其他配置 % 文件中的设置。用户可以在该文件中加入自己的定义。 % % 在修改这些配置文件的时候,你可以修改系统目录中的文件,也可以拷贝一份放到 % 当前目录下,然后修改。~TeX~会优先使用当前目录下的同名文件。这样你可以针对 % 不同的应用设置不同的缺省配置文件。 % % % % % \StopEventually{ % } ^^A end StopEventually % % % % % \section{源代码说明} % % % \subsection{选项} % % % \begin{macro}{\ifCTEX@cct} % 用于判断是否使用~CCT~中文系统,缺省是不使用。 % \begin{macrocode} %<*ctex|cls> \newif\ifCTEX@cct \CTEX@cctfalse \DeclareOption{CCT}{\CTEX@ccttrue} % % \end{macrocode} % \end{macro} % % \begin{macro}{\ifCTEX@cctfont} % 用于判断~CCT~是使用传统~CCT~字库还是~CJK~字库,缺省是使用~CJK~字库。 % \begin{macrocode} %<*ctex|cls> \newif\ifCTEX@cctfont \CTEX@cctfontfalse \DeclareOption{CCTfont}{\CTEX@ccttrue\CTEX@cctfonttrue} % % \end{macrocode} % \end{macro} % % \begin{macro}{\ifCTEX@punct} % \changes{v0.2c}{2004/02/13}{增加判断是否调整中文标点宽度的选项} % 用于判断是否对中文标点宽度进行调整,缺省是调整。 % \begin{macrocode} %<*ctex|cls> \newif\ifCTEX@punct \CTEX@puncttrue \DeclareOption{punct}{\CTEX@puncttrue} \DeclareOption{nopunct}{\CTEX@punctfalse} % % \end{macrocode} % \end{macro} % % \begin{macro}{\ifCTEX@space} % 用于判断是否忽略汉字间的空格,缺省是忽略。 % \begin{macrocode} %<*ctex|cls> \newif\ifCTEX@space \CTEX@spacefalse \DeclareOption{space}{\CTEX@spacetrue} \DeclareOption{nospace}{\CTEX@spacefalse} % % \end{macrocode} % space~参数使得缺省的中文环境不会吃掉中文字符后面的空格。 % 这种情况下很容易造成汉字之间产生多余的空格,需要小心使用。 % \end{macro} % % \begin{macro}{\ifCTEX@caption} % 用于判断是否使用中文标题,缺省是使用。 % \begin{macrocode} %<*ctex|ctexcap|cls> \newif\ifCTEX@caption \CTEX@captiontrue \DeclareOption{nocap}{\CTEX@captionfalse} \DeclareOption{cap}{\CTEX@captiontrue} % % \end{macrocode} % \end{macro} % % \begin{macro}{\ifCTEX@indent} % 用于判断是否使用中文的缩进格式,缺省是使用。 % \begin{macrocode} %<*ctex|cls> \newif\ifCTEX@indent \CTEX@indenttrue \DeclareOption{noindent}{\CTEX@indentfalse} \DeclareOption{indent}{\CTEX@indenttrue} % % \end{macrocode} % \end{macro} % % \begin{macro}{\ifCTEX@psnfss} % 用于判断是否使用~PostScript~字体替代~CM~字体,缺省是不使用。 % psnfss~选项使得~\LaTeX{}~使用~PostScript~字体替代缺省的~CM~字体。 % \begin{macrocode} %<*ctex|cls> \newif\ifCTEX@psfont \CTEX@psfontfalse \DeclareOption{psfont}{\CTEX@psfonttrue} % % \end{macrocode} % \end{macro} % % \changes{v0.3b}{2004/05/11}{增加~fancyhdr~选项} % \begin{macro}{\ifCTEX@fancyhdr} % 用于判断是否使用~\texttt{fancyhdr}~宏包,缺省是不使用。 % fancyhdr~选项使得~\texttt{ctex}~宏包保持和~\texttt{fancyhdr}~宏包兼容。 % \begin{macrocode} %<*ctex|cls> \newif\ifCTEX@fancyhdr \CTEX@fancyhdrfalse \DeclareOption{fancyhdr}{\CTEX@fancyhdrtrue} % % \end{macrocode} % \end{macro} % % \changes{v0.7}{2005/11/25}{增加~fntef~选项} % \begin{macro}{\ifCTEX@fntef} % 用于判断是否使用~\texttt{CJKfntef}~或者~\texttt{CCTfntef}~宏包,缺省是不使用。 % fntef~选项为使用~\texttt{CJKfntef}~和~\texttt{CCTfntef}~宏包提供了统一接口。 % \begin{macrocode} %<*ctex|cls> \newif\ifCTEX@fntef \CTEX@fnteffalse \DeclareOption{fntef}{\CTEX@fnteftrue} % % \end{macrocode} % \end{macro} % % \changes{v0.1a}{2003/08/15}{修正~\texttt{ctex.sty}~中无法使用 % ~sub3section~和~sub4section~选项的问题} % \changes{v0.3}{2004/04/24}{修正~sub3section~和~sub4section~选项无效的问题} % 支持~|\subsubsection|~以下的小节标题编号,通过修改~|\paragraph|~和 % ~|\subparagraph|~实现。 % \begin{macrocode} %<*ctexcap|cls> \newcounter{CTEX@sectiondepth} \setcounter{CTEX@sectiondepth}{2} \DeclareOption{sub3section}{\setcounter{CTEX@sectiondepth}{3}} \DeclareOption{sub4section}{\setcounter{CTEX@sectiondepth}{4}} % % \end{macrocode} % % % 用于文档类的一些选项: % % \begin{macro}{\ifCTEX@sfoursize} % 用于判断是否使用中文小四号字,缺省是不使用。 % \begin{macrocode} %<*cls> \newif\ifCTEX@sfoursize \CTEX@sfoursizefalse \DeclareOption{cs4size}{\CTEX@sfoursizetrue\CTEX@fivesizefalse} % % \end{macrocode} % \end{macro} % % \begin{macro}{\ifCTEX@fivesize} % 用于判断是否使用中文五号字,缺省是使用。 % \begin{macrocode} %<*cls> \newif\ifCTEX@fivesize \CTEX@fivesizetrue \DeclareOption{c5size}{\CTEX@fivesizetrue\CTEX@sfoursizefalse} % % \end{macrocode} % \end{macro} % % \changes{v0.4}{2004/05/13}{如果指定了标准的~\LaTeX{}~字体大小,则不使用中文字号} % 如果指定了标准的~\LaTeX{}~字体大小(10pt/11pt/12pt),则不使用中文字号作为缺省大小。 % \begin{macrocode} %<*cls> \DeclareOption{10pt}{% \CTEX@sfoursizefalse\CTEX@fivesizefalse% \PassOptionsToClass{\CurrentOption}% %
{article}} % {report}} % {book}} \DeclareOption{11pt}{% \CTEX@sfoursizefalse\CTEX@fivesizefalse% \PassOptionsToClass{\CurrentOption}% %
{article}} % {report}} % {book}} \DeclareOption{12pt}{% \CTEX@sfoursizefalse\CTEX@fivesizefalse% \PassOptionsToClass{\CurrentOption}% %
{article}} % {report}} % {book}} % % \end{macrocode} % % % 把没有定义的选项传递给缺省的文档类 % \begin{macrocode} %\DeclareOption*{\PassOptionsToClass{\CurrentOption}% %
{article}} % {report}} % {book}} % \end{macrocode} % % 处理选项 % \begin{macrocode} %\ProcessOptions % \end{macrocode} % % % 如果使用中文的缺省字号大小,则需要传递合适的参数给标准的~\LaTeX{}~文档类。 % \begin{macrocode} %<*cls> \ifCTEX@sfoursize \PassOptionsToClass{12pt}% %
{article} % {report} % {book} \fi \ifCTEX@fivesize \PassOptionsToClass{10pt}% %
{article} % {report} % {book} \fi % % \end{macrocode} % % % 装入缺省的文档类 % \begin{macrocode} %
\LoadClass{article} %\LoadClass{report} %\LoadClass{book} % \end{macrocode} % % % % % \subsection{宏包} % % % \changes{v0.3a}{2004/04/30}{修改命令~\cs{CCTpuncttrue}~的拼写错误} % 我们需要使用的一些宏包,其中~cctbase~和~CJK~用来处理中文: % \begin{macrocode} %<*cct> \ifCTEX@cctfont \RequirePackage{cctbase}[2003/04/05] \else \RequirePackage[CJK]{cctbase}[2003/04/05] \fi \ifCTEX@punct \CCTpuncttrue \else \CCTpunctfalse \fi % %<*cjk> \RequirePackage{CJK}[2003/03/28] \RequirePackage{CJKnumb}[2003/03/28] \ifCTEX@punct \RequirePackage{CJKpunct}[2004/02/13] \fi % % % 以及一些其他工具宏包: %<*ctex|cls> \RequirePackage{keyval}[1999/03/16] \ifCTEX@indent \RequirePackage{indentfirst} \fi \ifCTEX@psfont \RequirePackage[T1]{fontenc} \RequirePackage{textcomp} \RequirePackage{mathptmx} \RequirePackage[scaled]{helvet} \RequirePackage{courier} \else \RequirePackage{type1cm} \fi % % \end{macrocode} % % fancyhdr~宏包,控制页眉页脚的设置 % \begin{macrocode} %<*ctex|cls> \ifCTEX@fancyhdr \RequirePackage{fancyhdr} \fi % % \end{macrocode} % % CCTfntef~宏包和~CJKfntef~宏包 % \changes{v0.7b}{2005/12/09}{调整宏包导入位置,解决~fntef~类宏包早于相应中文宏包导入的问题} % \changes{v0.7d}{2005/12/28}{在~fntef~类宏包后使用~\cs{normalem}~恢复~\cs{em}~宏的缺省定义} % \begin{macrocode} %<*cct> \ifCTEX@fntef \RequirePackage{CCTfntef} \normalem \fi % %<*cjk> \ifCTEX@fntef \RequirePackage{CJKfntef} \normalem \fi % % \end{macrocode} % % ctexcap~宏包需要先装入~ctex~宏包。 % \begin{macrocode} %<*ctexcap> \ifCTEX@caption \PassOptionsToPackage{cap}{ctex} \fi \RequirePackage{ctex} % % \end{macrocode} % % 文档类还需要的宏包: % \begin{macrocode} %<*cls> % % \end{macrocode} % % % % % \subsection{辅助定义} % % % 我们定义一些将在后面使用的宏。 % % \begin{macrocode} %<*ctex|cls> \DeclareRobustCommand\CTeX{C\kern-.05em\TeX{}} \newcommand*\CTEX@key{\define@key{CTEX}} \newcommand*\CTEXoptions[1][]{\setkeys{CTEX}{#1}} \newcommand*\CTEX@subkey[1]{\define@key{CTEX#1}} \newcommand*\CTEXsetup[2][]{\setkeys{CTEX#2}{#1}} % % \end{macrocode} % % % \begin{macrocode} %<*ctex|cls> %
\def\CTEX@cls@article{} %\def\CTEX@cls@report{} %\def\CTEX@cls@book{} %<*ctex> \@ifclassloaded{article}{\def\CTEX@cls@article{}}{} \@ifclassloaded{report}{\def\CTEX@cls@report{}}{} \@ifclassloaded{book}{\def\CTEX@cls@book{}}{} % \def\ifCTEX@cls#1{% \expandafter\ifx\csname CTEX@cls@#1\endcsname\relax \expandafter\@secondoftwo \else \expandafter\@firstoftwo \fi} % % \end{macrocode} % % % \changes{v0.7c}{2005/12/20}{增加对~\cs{if@mainmatter}~的判断,以兼容~amsbook~宏包} % \begin{macrocode} %<*ctexcap> \@ifundefined{if@mainmatter}{\let\if@mainmatter\iftrue}{} % % \end{macrocode} % % % \begin{macrocode} %<*ctex|cls> \def\CTEX@replacecommand#1#2#3{% \expandafter\expandafter\expandafter\let\expandafter \csname #1#3\expandafter\endcsname \csname #2#3\endcsname \expandafter\expandafter\expandafter\def\expandafter \csname #2#3\expandafter\endcsname {\csname #1#3\endcsname}} % % \end{macrocode} % % % % % \subsection{通用中文设置} % % % 和~CCT~以及~CJK~相关的内容分放在各自的~\texttt{.clo}~文件中 % \begin{macrocode} %<*ctex|cls> \ifCTEX@cct \input{ctexcct.clo} \else \input{ctexcjk.clo} \fi % % \end{macrocode} % % % \changes{v0.7}{2005/11/25}{将~ctex.def~文件和~ctexcap.cfg~文件的读取时间前移,使得可以在导言中使用设置命令} % 所有包含中文字符的定义都需要从~\texttt{ctex.def}~读入。 % \begin{macrocode} %<*ctex|cls> \AtEndOfPackage{% \makeatletter \InputIfFileExists{ctex.def}{}{% \PackageError{ctex}{% Can't find ctex.def}{% There will be unexpected errors if you continue.}} \makeatother} % % \end{macrocode} % % % 如果使用中文标题,则还要读入~\texttt{ctexcap.cfg}~的内容。 % \begin{macrocode} %<*ctexcap|cls> \ifCTEX@caption \AtEndOfPackage{% \makeatletter \InputIfFileExists{ctexcap.cfg}{}{% \PackageError{ctex}{% Can't find ctexcap.cfg}{% The english captions are used if you continue.}} \makeatother} \fi % % \end{macrocode} % % % \changes{v0.7a}{2005/11/28}{将~ctex.cfg~文件的读取时间前移,使得导言中的设置命令优先} % 最后再从~\texttt{ctex.cfg}~读入用户的自定义设置。 % \begin{macrocode} %<*ctex|cls> \AtEndOfPackage{% \makeatletter \InputIfFileExists{ctex.cfg}{}{% \PackageWarning{ctex}{% Can't find ctex.cfg}} \makeatother} % % \end{macrocode} % % % \begin{macro}{\CTEXindent} % \begin{macro}{\CTEXnoindent} % 段首缩进~2~个汉字的距离,需要考虑到字距。 % \begin{macrocode} %<*ctex|cls> \newcommand*\CTEXindent{\CTEXsetfont\parindent2\ccwd} \newcommand*\CTEXnoindent{\parindent\z@} \ifCTEX@indent \AtBeginDocument{\CTEXindent} \fi % % \end{macrocode} % \end{macro} % \end{macro} % % % \begin{macro}{\CTEX@spaceChar} % \changes{v0.2a}{2004/02/11}{加快处理速度,改善和~CJKpunct~的兼容性} % \begin{macrocode} %\def\CTEX@spaceChar{\hskip \f@size \p@} % \end{macrocode} % \end{macro} % % % \begin{macro}{\baselinestretch} % \changes{v0.2a}{2004/02/11}{增加对行距的设置} % \changes{v0.4b}{2004/07/13}{把行距参数从~1.2~改为~1.3} % 通常中文文档需要较宽的行距。 % \begin{macrocode} %\def\baselinestretch{1.3} % \end{macrocode} % \end{macro} % % % \subsubsection{中文字号} % % 首先给出中文字号和~\TeX{}~字体大小的对应关系。 % 定义中使用~pt~为单位。中文字号大小参考~Word~的定义。 % % 1 in = 72 bp = 72.27 pt % % 行距 = 字体大小 $\times$ 1.2 % % \changes{v0.2b}{2004/02/13}{修改缺省的行距} % \changes{v0.4}{2004/05/13}{中文字号定义改为直接使用~pt~为单位} % \begin{macrocode} %<*ctex|cls> \def\CTEX@fs@eight{5.02} \def\CTEX@fs@eightskip{6.02} %八号字 5bp \def\CTEX@fs@seven{5.52} \def\CTEX@fs@sevenskip{6.62} %七号字 5.5bp \def\CTEX@fs@ssix{6.52} \def\CTEX@fs@ssixskip{7.83} %小六号 6.5bp \def\CTEX@fs@six{7.53} \def\CTEX@fs@sixskip{9.03} %六号字 7.5bp \def\CTEX@fs@sfive{9.03} \def\CTEX@fs@sfiveskip{10.84} %小五号 9bp \def\CTEX@fs@five{10.54} \def\CTEX@fs@fiveskip{12.65} %五号字 10.5bp \def\CTEX@fs@sfour{12.05} \def\CTEX@fs@sfourskip{14.45} %小四号 12bp \def\CTEX@fs@four{14.05} \def\CTEX@fs@fourskip{16.86} %四号字 14bp \def\CTEX@fs@sthree{15.06} \def\CTEX@fs@sthreeskip{18.07} %小三号 15bp \def\CTEX@fs@three{16.06} \def\CTEX@fs@threeskip{19.27} %三号字 16bp \def\CTEX@fs@stwo{18.07} \def\CTEX@fs@stwoskip{21.68} %小二号 18bp \def\CTEX@fs@two{22.08} \def\CTEX@fs@twoskip{26.50} %二号字 22bp \def\CTEX@fs@sone{24.09} \def\CTEX@fs@soneskip{28.91} %小一号 24bp \def\CTEX@fs@one{26.10} \def\CTEX@fs@oneskip{31.32} %一号字 26bp \def\CTEX@fs@szero{36.14} \def\CTEX@fs@szeroskip{43.36} %小初号 36bp \def\CTEX@fs@zero{42.16} \def\CTEX@fs@zeroskip{50.59} %初号字 42bp % % \end{macrocode} % % 定义相应的数学字体的大小(用于上下脚标)。 % \begin{macrocode} %<*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} \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} % % \end{macrocode} % % % \begin{macro}{\zihao} % \changes{v0.1b}{2003/08/17}{删除多余的~\cs{newcount}~命令} % \changes{v0.4}{2004/05/13}{删除~\cs{CTEX@fontsize}~命令, % 改为直接使用~\cs{fontsize}~命令} % 这个命令用于改变中文字号。当前中文字号保存在~|\CTEX@zihao|~中。 % 注意,如果没用过~|\zihao|~命令,则~|\CTEX@zihao|~没有定义。 % \begin{macro}{\CTEX@zihao} % \begin{macrocode} %<*ctex|cls> \def\CTEX@zihao{} % \end{macrocode} % \end{macro} % 如果是负数,表示是小号字体 % \begin{macrocode} \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% % \end{macrocode} % 如果不在预定义的字号范围~(-0 -- -6)~,则报告一个错误 % \begin{macrocode} \else \PackageError{ctex}{% Undefined Chinese font size in command \protect\zihao}{% The old font size is used if you continue.}% \fi% % \end{macrocode} % 否则是正常字号 % \begin{macrocode} \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% % \end{macrocode} % 如果不在预定义的字号范围~(0 -- 8)~,则报告一个错误 % \begin{macrocode} \else \PackageError{ctex}{% Undefined Chinese font size in command \protect\zihao}{% The old font size is used if you continue.}% \fi% \fi% \selectfont\ignorespaces} % % \end{macrocode} % \end{macro} % % % \subsubsection{缺省字号大小} % % \changes{v0.2b}{2004/02/13}{修改缺省的字号大小} % \changes{v0.2d}{2004/04/23}{补上字号定义中行间距参数中缺少的~\cs{CTEX@bp}} % 缺省字体只对文档类有效,下面使用中文小四号字时的设置。 % % \begin{macrocode} %<*cls> \ifCTEX@sfoursize \renewcommand\normalsize{% 12bp \@setfontsize\normalsize{\CTEX@fs@sfour}{\CTEX@fs@sfourskip}% \abovedisplayskip 12\p@ \@plus3\p@ \@minus7\p@ \abovedisplayshortskip \z@ \@plus3\p@ \belowdisplayshortskip 6.5\p@ \@plus3.5\p@ \@minus3\p@ \belowdisplayskip \abovedisplayskip \let\@listi\@listI} \normalsize \renewcommand\small{% 10.5bp \@setfontsize\small{\CTEX@fs@five}{\CTEX@fs@fiveskip}% \abovedisplayskip 11\p@ \@plus3\p@ \@minus6\p@ \abovedisplayshortskip \z@ \@plus3\p@ \belowdisplayshortskip 6.5\p@ \@plus3.5\p@ \@minus3\p@ \def\@listi{\leftmargin\leftmargini \topsep 9\p@ \@plus3\p@ \@minus5\p@ \parsep 4.5\p@ \@plus2\p@ \@minus\p@ \itemsep \parsep}% \belowdisplayskip \abovedisplayskip} \renewcommand\footnotesize{% 9bp \@setfontsize\footnotesize{\CTEX@fs@sfive}{\CTEX@fs@sfiveskip}% \abovedisplayskip 10\p@ \@plus2\p@ \@minus5\p@ \abovedisplayshortskip \z@ \@plus3\p@ \belowdisplayshortskip 6\p@ \@plus3\p@ \@minus3\p@ \def\@listi{\leftmargin\leftmargini \topsep 6\p@ \@plus2\p@ \@minus2\p@ \parsep 3\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{% 15bp \@setfontsize\large{\CTEX@fs@sthree}{\CTEX@fs@sthreeskip}} \renewcommand\Large{% 18bp \@setfontsize\Large{\CTEX@fs@stwo}{\CTEX@fs@stwoskip}} \renewcommand\LARGE{% 22bp \@setfontsize\LARGE{\CTEX@fs@two}{\CTEX@fs@twoskip}} \renewcommand\huge{% 24bp \@setfontsize\huge{\CTEX@fs@sone}{\CTEX@fs@soneskip}} \renewcommand\Huge{% 26bp \@setfontsize\Huge{\CTEX@fs@one}{\CTEX@fs@oneskip}} \fi % % \end{macrocode} % % \changes{v0.2d}{2004/04/23}{修改缺省的字号大小} % 缺省字体使用中文五号字时的设置。 % % \begin{macrocode} %<*cls> \ifCTEX@fivesize \renewcommand\normalsize{% 10.5bp \@setfontsize\normalsize{\CTEX@fs@five}{\CTEX@fs@fiveskip}% \abovedisplayskip 10\p@ \@plus2\p@ \@minus5\p@ \abovedisplayshortskip \z@ \@plus3\p@ \belowdisplayshortskip 6\p@ \@plus3\p@ \@minus3\p@ \belowdisplayskip \abovedisplayskip \let\@listi\@listI} \normalsize \renewcommand\small{% 9bp \@setfontsize\small{\CTEX@fs@sfive}{\CTEX@fs@sfiveskip}% \abovedisplayskip 8.5\p@ \@plus3\p@ \@minus4\p@ \abovedisplayshortskip \z@ \@plus2\p@ \belowdisplayshortskip 4\p@ \@plus2\p@ \@minus2\p@ \def\@listi{\leftmargin\leftmargini \topsep 4\p@ \@plus2\p@ \@minus2\p@ \parsep 2\p@ \@plus\p@ \@minus\p@ \itemsep \parsep}% \belowdisplayskip \abovedisplayskip} \renewcommand\footnotesize{% 7.5bp \@setfontsize\footnotesize{\CTEX@fs@six}{\CTEX@fs@sixskip}% \abovedisplayskip 6\p@ \@plus2\p@ \@minus4\p@ \abovedisplayshortskip \z@ \@plus\p@ \belowdisplayshortskip 3\p@ \@plus\p@ \@minus2\p@ \def\@listi{\leftmargin\leftmargini \topsep 3\p@ \@plus\p@ \@minus\p@ \parsep 2\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{% 12bp \@setfontsize\large{\CTEX@fs@sfour}{\CTEX@fs@sfourskip}} \renewcommand\Large{% 15bp \@setfontsize\Large{\CTEX@fs@sthree}{\CTEX@fs@sthreeskip}} \renewcommand\LARGE{% 18bp \@setfontsize\LARGE{\CTEX@fs@stwo}{\CTEX@fs@stwoskip}} \renewcommand\huge{% 22bp \@setfontsize\huge{\CTEX@fs@two}{\CTEX@fs@twoskip}} \renewcommand\Huge{% 26bp \@setfontsize\Huge{\CTEX@fs@one}{\CTEX@fs@oneskip}} \fi % % \end{macrocode} % % % % % \subsection{~CCT~相关配置} % % % \begin{macrocode} %<*cct> % \end{macrocode} % % % \subsubsection{CCT~环境设置} % % \begin{macrocode} \ifCTEX@space \AtBeginDocument{\CCTspace} \else \AtBeginDocument{\CCTnospace} \fi % \end{macrocode} % % \begin{macro}{\CTEXspace} % \begin{macro}{\CTEXnospace} % \begin{macrocode} \def\CTEXspace{\CCTspace} \def\CTEXnospace{\CCTnospace} % \end{macrocode} % \end{macro} % \end{macro} % % % \subsubsection{常用的中文字体} % % \begin{macro}{\songti} % \begin{macro}{\heiti} % \begin{macro}{\fangsong} % \begin{macro}{\kaishu} % \begin{macro}{\lishu} % \begin{macro}{\youyuan} % 定义常用的中文字体命令:宋体、黑体、楷书、仿宋、隶书、幼圆。 % \begin{macrocode} \ifCTEX@cctfont\else \CCTdefziti A song song % 宋体 \CCTdefziti B hei song % 黑体 \CCTdefziti C kai song % 楷体 \CCTdefziti D fs song % 仿宋 \CCTdefziti E bs hei % 标宋 \CCTdefziti F li hei % 隶书 \CCTdefziti G you kai % 幼圆 \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 % \end{macrocode} % \end{macro} % \end{macro} % \end{macro} % \end{macro} % \end{macro} % \end{macro} % % % \subsubsection{中文字号} % % \begin{macro}{\set@fontsize} % \changes{v0.6}{2005/09/24}{cct~从~0.6180~开始将宏~\cs{oset@fontsize}~改为~\cs{CCT@set@fontsize}} % \changes{v0.6a}{2005/09/30}{增加对~\cs{CCT@set@fontsize}~的判断} % CCT~对~|\set@fontsize|~命令进行了重定义,我们需要修改这个定义, % 让中英文保持一致的大小,并及时更新字体信息。 % \begin{macrocode} \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} % \end{macrocode} % \end{macro} % % % \subsubsection{其他字体命令} % % \begin{macro}{\ziju} % \changes{v0.4a}{2004/05/15}{修改~CCT~的字距命令使得缩进保持一致} % 定义调整汉字字距的命令。 % \begin{macrocode} \let\CTEX@save@ziju\ziju \renewcommand*\ziju[1]{% 字距 \CTEX@save@ziju{#1}% \CTEXsetfont} % \end{macrocode} % \end{macro} % % % \begin{macro}{\CTEXsetfont} % |\CTEXsetfont|~获得当前的汉字信息。 % \begin{macrocode} \newcommand*\CTEXsetfont{% \ifdim\parindent=0pt\else\parindent2\ccwd\fi} % \end{macrocode} % \end{macro} % % % \subsubsection{CCTfntef~宏包接口} % % % 为~\texttt{CCTfntef.sty}~宏包的命令提供统一接口。 % \begin{macrocode} \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 % \end{macrocode} % % % \begin{macrocode} % % \end{macrocode} % % % % % \subsection{~CJK~相关配置} % % % \begin{macrocode} %<*cjk> % \end{macrocode} % % % \subsubsection{CJK~环境设置} % % % \changes{v0.7}{2005/11/25}{支持在导言中使用中文} % \begin{macrocode} \AtEndOfPackage{\CJK@makeActive} % \end{macrocode} % % % \changes{v0.5b}{2004/09/29}{改变设置~CJK~环境结束语句的 % ~\cs{AtEndDocument}~执行的位置,以减少宏包冲突} % \changes{v0.5c}{2004/09/29}{避免重复执行设置~CJK~环境结束语句} % \changes{v0.7f}{2006/04/12}{采用修改~\cs{AtBeginDocument}~和 % ~\cs{AtEndDocument}~命令的方式来设置~CJK~环境, % 以减少宏包冲突} % 缺省情况下,我们把整个文档都包含到~CJK~环境中。如果~|\ifCTEX@space|~ % 设置为~true,我们使用~CJK~环境,否则使用~CJK*~环境。 % \begin{macrocode} \ifCTEX@space \def\CTEX@beginCJK{\begin{CJK}{GBK}{rm}} \def\CTEX@endCJK{\clearpage\end{CJK}} \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} % \end{macrocode} % % % \begin{macro}{\CTEXspace} % \begin{macro}{\CTEXnospace} % \begin{macrocode} \def\CTEXspace{\CJKspace} \def\CTEXnospace{\CJKnospace} % \end{macrocode} % \end{macro} % \end{macro} % % % \subsubsection{常用的中文字体} % % % \begin{macro}{\songti} % \begin{macro}{\heiti} % \begin{macro}{\fangsong} % \begin{macro}{\kaishu} % \begin{macro}{\lishu} % \begin{macro}{\youyuan} % 定义常用的中文字体命令:宋体、黑体、楷书、仿宋、隶书、幼圆。 % \begin{macrocode} \newcommand*{\songti}{\CJKfamily{song}} % 宋体 \newcommand*{\heiti}{\CJKfamily{hei}} % 黑体 \newcommand*{\kaishu}{\CJKfamily{kai}} % 楷书 \newcommand*{\fangsong}{\CJKfamily{fs}} % 仿宋 \newcommand*{\lishu}{\CJKfamily{li}} % 隶书 \newcommand*{\youyuan}{\CJKfamily{you}} % 幼圆 % \end{macrocode} % \end{macro} % \end{macro} % \end{macro} % \end{macro} % \end{macro} % \end{macro} % % % \subsubsection{中文字号} % % % \begin{macro}{\CTEX@save@set@fontsize} % \begin{macro}{\set@fontsize} % 对~|\set@fontsize|~命令需要进行重定义,以便及时更新字体信息。 % \begin{macrocode} \let\CTEX@save@set@fontsize\set@fontsize \def\set@fontsize#1#2#3{% \CTEX@save@set@fontsize{#1}{#2}{#3}% \CTEXsetfont} % \end{macrocode} % \end{macro} % \end{macro} % % % \subsubsection{其他字体命令} % % % \begin{macro}{\ziju} % \changes{v0.2}{2004/02/11}{参数的单位由绝对距离改为相对于当前汉字大小的倍数} % 定义调整汉字字距的命令。 % \begin{macrocode} \newcommand*\ziju[1]{% 字距 \settowidth\@tempdima{\CTEX@spaceChar}% \renewcommand{\CJKglue}{\hskip #1\@tempdima}% \CTEXsetfont} % \end{macrocode} % \end{macro} % % % \begin{macro}{\ccwd} % |\ccwd|~是当前的汉字字宽。 % \begin{macrocode} \newdimen\ccwd % 字宽 % \end{macrocode} % \end{macro} % % % \begin{macro}{\CTEXsetfont} % \changes{v0.2}{2004/02/11}{\cs{CTEXfontinfo}~命令改为~\cs{CTEXsetfont}} % |\CTEXsetfont|~获得当前的汉字信息。 % \begin{macrocode} \newcommand*\CTEXsetfont{% \settowidth\ccwd{\CTEX@spaceChar\CJKglue}% \ifdim\parindent=0pt\else\parindent2\ccwd\fi} % \end{macrocode} % \end{macro} % % % \subsubsection{CJKfntef~宏包接口} % % % 为~\texttt{CJKfntef.sty}~宏包的命令提供统一接口。 % \begin{macrocode} \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 % \end{macrocode} % % % \begin{macrocode} % % \end{macrocode} % % % % % \subsection{中文数字处理} % % 由于脆弱命令的原因,CJK~提供的~|\CJKnumber|~在章节编号中直接使用 % 会引发不少问题。在生成目录和书签等辅助文件时,我们需要未经~CJK~ % 处理过的中文字符串,而不能是~|\CJKchar{...}|~的形式。此外,这些 % 中文数字必须在被使用之前就已经生成好。 % 于是我们修改了~\texttt{CJKnumb}~宏包中的一些定义来处理章节编号。 % % % 首先是一些基本数字,需要在~\texttt{ctex.def}~文件中重新定义。 % \begin{macrocode} %<*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{-} % % \end{macrocode} % % % \begin{macrocode} %<*ctex|cls> % \end{macrocode} % % % 一些条件定义和计数器 % \begin{macrocode} \newif\ifCTEX@zero@ \newif\ifCTEX@previous@ \newif\ifCTEX@null@ \newcount\CTEX@q \newcount\CTEX@r % \end{macrocode} % % % \begin{macro}{\CTEX@appendstring} % 中文数字处理命令~|\CTEX@appendstring|~用于拼接字符串。 % \begin{macrocode} \def\CTEX@appendstring#1#2{% \expandafter\def\expandafter#1\expandafter{#1#2}} % \end{macrocode} % \end{macro} % % % \begin{macro}{\CTEX@appendnumber} % 中文数字处理命令~|\CTEX@appendnumber|~用于拼接数字。 % \begin{macrocode} \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}% \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} % \end{macrocode} % \end{macro} % % % \begin{macro}{\CTEX@splitnumber} % 中文数字处理命令~|\CTEX@splitnumber|~将大的数字分为几段四位以内的数字。 % \begin{macrocode} \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 \xdef\CTEX@high{}% \xdef\CTEX@yi{}% \fi } % \end{macrocode} % \end{macro} % % % \begin{macro}{\CTEX@processnumber} % 中文数字处理命令~|\CTEX@processnumber|~处理四位以内的数字,并将得到的 % 中文数字存放在第一个参数中。 % \begin{macrocode} \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@q 100\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 \fi % \multiply\CTEX@q 100 \advance\CTEX@r -\CTEX@q \CTEX@q \CTEX@r % \divide \CTEX@q 10\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@q 10 \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} % \end{macrocode} % \end{macro} % % % \begin{macro}{\CTEXnumber} % \changes{v0.7e}{2006/03/22}{使用~\cs{DeclareRobustCommand}~命令来定义~\cs{CTEXnumber}} % 中文数字处理命令~|\CTEXnumber|~将第二个参数中的数字转换为中文并 % 保存在第一个参数中。 % \begin{macrocode} \DeclareRobustCommand\CTEXnumber[2]{% \def#1{}% \CTEX@null@false % \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}% this catches 100002345 \fi \fi \CTEX@processnumber{#1}{\CTEX@low}% \fi \fi} % \end{macrocode} % \end{macro} % % % \begin{macro}{\CTEX@getdigit} % \changes{v0.7e}{2006/03/22}{除去多余的空格} % 中文数字处理命令~|\CTEX@getdigit|~用于提取最高位的数字。 % \begin{macrocode} \def\CTEX@getdigit#1#2\@nil{% \edef\CTEX@tempa{#1}% \edef\CTEX@tempb{#2}} % \end{macrocode} % \end{macro} % % % \begin{macro}{\CTEXdigits} % \changes{v0.4a}{2004/05/15}{增加~\cs{CTEXdigits}~命令} % \changes{v0.7e}{2006/03/22}{除去多余的空格} % 中文数字处理命令~|\CTEXdigits|~将第二个参数中的数字串为中文数字串 % 并保存在第一个参数中。 % \begin{macrocode} \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} % \end{macrocode} % \end{macro} % % % \begin{macro}{\CTEXcounter} % \changes{v0.7e}{2006/03/22}{使用~\cs{DeclareRobustCommand}~命令来定义~\cs{CTEXcounter}} % ~|\CTEXcounter|~用于生成对应于计数器~|\FOO|~的中文数字~|\cc@FOO|。 % \begin{macrocode} \DeclareRobustCommand\CTEXcounter[1]{% \@ifundefined{c@#1}{}{% \CTEXnumber{\reserved@a}{\@arabic\csname c@#1\endcsname}% \expandafter\expandafter\expandafter\def% \expandafter\expandafter\csname cc@#1\endcsname% \expandafter{\reserved@a}}} % \end{macrocode} % \end{macro} % % % \begin{macro}{\setcounter} % \begin{macro}{\addtocounter} % \begin{macro}{\stepcounter} % \changes{v0.1d}{2003/09/27}{将对~\cs{setcounter}~和~\cs{addtocounter}~ % 的修改放到导言的最后以和其他宏包兼容} % \changes{v0.4c}{2004/07/26}{增加判断以避免嵌套定义~\cs{setcounter}~和~ % \cs{addtocounter}} % \changes{v0.8}{2006/06/09}{增加对~\cs{stepcounter}~的重定义,以和~\texttt{calc}~宏包兼容} % 重新定义~|\setcounter|~和~|\addtocounter|~以及时更新~|\cc@FOO|。 % \begin{macrocode} \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} % \end{macrocode} % \end{macro} % \end{macro} % \end{macro} % % % \begin{macro}{\chinese} % ~|\chinese|~用于获得计数器~|\FOO|~对应的中文数字~|\cc@FOO|。 % \begin{macrocode} \def\chinese#1{% \@ifundefined{cc@#1}{\CTEX@null}{\csname cc@#1\endcsname}} % \end{macrocode} % \end{macro} % % % \begin{macrocode} % % \end{macrocode} % % % \subsection{中文化的标题结构} % % 在中文标题的处理上,需要修改~\LaTeX{}~标准文档的定义来实现中文标题。 % 这个功能最早是通过~\texttt{GB.cap}~来实现的,但是~CJK~提供的文件只能 % 配合~koma-script~文档类使用而不支持标准文档类。原因是标准文档类需要 % 作出较大的改动。我们最早尝试过把对标准文档类的修改也放到~GB.cap~文件 % 中,在简单应用中可以达到目的。但是我们还是意识到由于受到~GB.cap~文件 % 装入时间的限制,这种方案不可避免的带有兼容性问题。解决的方法就是通过 % 自定义的文档类来实现这个功能。此外,中文的标题格式也和英文有所不同, % 这些都只有修改标准文档类的定义才能实现,于是就有了下面这些代码。 % % % \subsubsection{章节标题基本结构} % % 以下定义章节标题的基本结构单元。 % % % \begin{macrocode} %<*ctexcap|cls> % \end{macrocode} % % % \begin{macro}{\CTEX@defsecname} % 对于每种章节类型~|FOO|,我们都要定义一个章节名字~|\CTEXtheFOO|, % 由~|\CTEX@preFOO|、~|\CTEX@theFOO|~和~|\CTEX@postFOO|~组成。 % 所以我们用下面的这个命令来完成这些重复工作。 % \begin{macrocode} \def\CTEX@defsecformat#1{% % \end{macrocode} % 首先是无格式信息的章节标题。 % \begin{macrocode} \expandafter\def\csname CTEX@pre#1\endcsname{}% \expandafter\def\csname CTEX@post#1\endcsname{}% \expandafter\def\csname CTEX@the#1\endcsname{% \csname the#1\endcsname}% \expandafter\def\csname CTEXthe#1\endcsname{% \csname CTEX@pre#1\endcsname% \csname CTEX@the#1\endcsname% \csname CTEX@post#1\endcsname}% % \end{macrocode} % 然后是包含格式信息的章节标题,先定义一些用于控制格式的宏: % \begin{description} % \item~|\CTEX@FOO@format|~作用于整个标题,一般用于控制对齐方式; % \item~|\CTEX@FOO@nameformat|~作用于整个章节名字(|\CTEXtheFOO|); % \item~|\CTEX@FOO@numberformat|~作用于章节编号(|\CTEX@theFOO|); % \item~|\CTEX@FOO@aftername|~作用于章节名字后的部分,一般用于控制章节 % 名字和章节标题内容之间是否换行等; % \item~|\CTEX@FOO@titleformat|~用于控制标题内容的格式。 % \end{description} % ~|\CTEX@FOOname|~则是在~|\CTEXtheFOO|~中加入了上面的这些格式控制得到的。 % \begin{macrocode} \expandafter\def\csname CTEX@#1@format\endcsname{}% \expandafter\def\csname CTEX@#1@nameformat\endcsname{}% \expandafter\def\csname CTEX@#1@numberformat\endcsname{}% \expandafter\def\csname CTEX@#1@aftername\endcsname{}% \expandafter\def\csname CTEX@#1@titleformat\endcsname{} \expandafter\def\csname CTEX@#1name\endcsname{% \csname CTEX@#1@nameformat\endcsname% \csname CTEX@pre#1\endcsname% \begingroup% \csname CTEX@#1@numberformat\endcsname% \csname CTEX@the#1\endcsname% \endgroup% \csname CTEX@post#1\endcsname% \csname CTEX@#1@aftername\endcsname}% % \end{macrocode} % 然后是标题上下的空距和缩进: % \begin{macrocode} \expandafter\def\csname CTEX@#1@beforeskip\endcsname{}% \expandafter\def\csname CTEX@#1@afterskip\endcsname{}% \expandafter\def\csname CTEX@#1@indent\endcsname{}% } % \end{macrocode} % \end{macro} % % % 标准的七种章节类型都需要定义。 % \begin{macrocode} \CTEX@defsecformat{part} \CTEX@defsecformat{chapter} \CTEX@defsecformat{section} \CTEX@defsecformat{subsection} \CTEX@defsecformat{subsubsection} \CTEX@defsecformat{paragraph} \CTEX@defsecformat{subparagraph} % \end{macrocode} % % 缺省的一些设置,在不使用中文标题的时候使用。 % \begin{macrocode} \def\CTEX@prepart{Part\space} \def\CTEX@prechapter{Chapter\space} % \end{macrocode} % % part~的缺省格式 % \begin{macrocode} %\ifCTEX@cls{article}{ %<*ctex|article> \def\CTEX@part@format{\raggedright} \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|report|book> \def\CTEX@part@format{\centering} \def\CTEX@part@nameformat{\huge\bfseries} \def\CTEX@part@aftername{\par\vskip 20\p@} \def\CTEX@part@titleformat{\Huge\bfseries} % %} % \end{macrocode} % % chapter~的缺省格式 % \begin{macrocode} \def\CTEX@chapter@format{\raggedright} \def\CTEX@chapter@nameformat{\huge\bfseries} \def\CTEX@chapter@aftername{\par\nobreak\vskip 20\p@} \def\CTEX@chapter@titleformat{\Huge\bfseries} \def\CTEX@chapter@beforeskip{50\p@} \def\CTEX@chapter@afterskip{40\p@} \def\CTEX@chapter@indent{\z@} % \end{macrocode} % % section~的缺省格式 % \begin{macrocode} \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@} % \end{macrocode} % % subsection~的缺省格式 % \begin{macrocode} \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@} % \end{macrocode} % % subsubsection~的缺省格式 % \begin{macrocode} \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@} % \end{macrocode} % % 支持~|\subsubsection|~以下的小节标题编号 % paragraph~的缺省格式 % \begin{macrocode} \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@} % \end{macrocode} % % subparagraph~的缺省格式 % \begin{macrocode} \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 % \end{macrocode} % % % % % \begin{macro}{\CTEX@appendixname} % 附录的标题 % \begin{macrocode} %\ifCTEX@cls{article}{ %<*ctexcap|article> \def\CTEX@appendixname{} % %}{ %<*ctexcap|report|book> \def\CTEX@appendixname{Appendix\space} % %} % \end{macrocode} % \end{macro} % % \begin{macro}{\CTEX@appendixnumber} % 附录的编号格式,缺省是大写英文字母。 % \begin{macrocode} %\ifCTEX@cls{article}{ %<*ctexcap|article> \def\CTEX@appendixnumber{\@Alph\c@section} % %}{ %<*ctexcap|report|book> \def\CTEX@appendixnumber{\@Alph\c@chapter} % %} % \end{macrocode} % \end{macro} % % % \begin{macro}{\CTEX@save@appendix} % \begin{macro}{\appendix} % 重定义~|\appendix|~命令以改变附录标题 % \begin{macrocode} \let\CTEX@save@appendix\appendix %\ifCTEX@cls{article}{ %<*ctexcap|article> \renewcommand*\appendix{\CTEX@save@appendix% \gdef\CTEX@presection{\CTEX@appendixname}% \gdef\CTEX@thesection{\CTEX@appendixnumber}% \gdef\CTEX@postsection{}}% % %}{ %<*ctexcap|report|book> \renewcommand*\appendix{\CTEX@save@appendix% \gdef\CTEX@prechapter{\CTEX@appendixname}% \gdef\CTEX@thechapter{\CTEX@appendixnumber}% \gdef\CTEX@postchapter{}}% % %} % \end{macrocode} % \end{macro} % \end{macro} % % % \begin{macrocode} % % \end{macrocode} % % % % % \subsubsection{part~的标题} % % % 以下一段修改标准~\LaTeX{}~文档类以实现中文标题需要的结构。 % % part~的标题修改,首先是~article~类: % \begin{macrocode} %\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}% \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 % \vskip 3ex \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 % \vskip 3ex \vskip \CTEX@part@afterskip \@afterheading} % % \end{macrocode} % % 然后是~report~和~book~类: % \begin{macrocode} %}{ %<*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 % \huge\bfseries\partname\nobreakspace\thepart\par\vskip 20\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} % %} % \end{macrocode} % % % % % \subsubsection{chapter~的标题} % % % \changes{v0.1c}{2003/08/19}{去掉生成的~\texttt{.out}~文件里 % 章的标题前的多余空格} % ~chapter~的标题修改,首先是~report~类的 % \begin{macrocode} %\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 {\normalfont \parindent \CTEX@chapter@indent \CTEX@chapter@format \ifnum \c@secnumdepth >\m@ne % \huge\bfseries\@chapapp\space\thechapter\par\nobreak\vskip 20\p@ \CTEX@chaptername \fi \interlinepenalty\@M % \Huge \bfseries #1\par\nobreak \CTEX@chapter@titleformat #1\par\nobreak % \vskip 40\p@ \vskip \CTEX@chapter@afterskip }} % %}{} % \end{macrocode} % % 然后是~book~类的 % \begin{macrocode} %\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 {\normalfont \parindent \CTEX@chapter@indent \CTEX@chapter@format \ifnum \c@secnumdepth >\m@ne \if@mainmatter % \huge\bfseries\@chapapp\space\thechapter\par\nobreak\vskip 20\p@ \CTEX@chaptername \fi \fi \interlinepenalty\@M % \Huge \bfseries #1\par\nobreak \CTEX@chapter@titleformat #1\par\nobreak % \vskip 40\p@ \vskip \CTEX@chapter@afterskip }} % %}{} % \end{macrocode} % % 有一些是~report~类和~book~类共有的 % \begin{macrocode} %<*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 % \vskip 40\p@ \vskip \CTEX@chapter@afterskip }} % % \end{macrocode} % % % % % \subsubsection{section~的标题} % % % \begin{macrocode} %<*ctexcap|cls> % \end{macrocode} % % % 下面修改节的标题的显示方式 % \changes{v0.6b}{2005/11/07}{将节以下编号和标题之间的空距定义转移到相应的~aftername~变量中} % \begin{macrocode} \def\@seccntformat#1{% \@ifundefined{CTEX@#1name}% {\csname the#1\endcsname\quad}% {\csname CTEX@#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}% \fi \@tempskipa #5\relax \ifdim \@tempskipa>\z@ \begingroup #6{% \@hangfrom{\hskip #3\relax\@svsec}% % \interlinepenalty \@M #8\@@par}% \interlinepenalty \@M \csname CTEX@#1@titleformat\endcsname #8\@@par}% \endgroup \csname #1mark\endcsname{#7}% \addcontentsline{toc}{#1}{% \ifnum #2>\c@secnumdepth \else % \protect\numberline{\csname the#1\endcsname}% \protect\numberline{\@ifundefined{CTEXthe#1}% {\csname the#1\endcsname}% {\csname CTEXthe#1\endcsname}}% \fi #7}% \else \def\@svsechd{% #6{\hskip #3\relax % \@svsec #8}% \@svsec \csname CTEX@#1@titleformat\endcsname #8}% \csname #1mark\endcsname{#7}% \addcontentsline{toc}{#1}{% \ifnum #2>\c@secnumdepth \else % \protect\numberline{\csname the#1\endcsname}% \protect\numberline{\@ifundefined{CTEXthe#1}% {\csname the#1\endcsname}% {\csname CTEXthe#1\endcsname}}% \fi #7}}% \fi \@xsect{#5}} % \end{macrocode} % % 通常中文章节标题编号会比较长,因此目录中的缩进距离也要调整。 % 我们通过修改~|\numberline|~命令来实现。 % \begin{macrocode} \def\numberline#1{% \settowidth\@tempdimb{#1\hspace{0.5em}}% \ifdim\@tempdima<\@tempdimb% \@tempdima=\@tempdimb% \fi% \hb@xt@\@tempdima{#1\hfil}} % \end{macrocode} % % \begin{macrocode} \renewcommand\section{\@startsection{section}{1}% {\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}} % \end{macrocode} % % % \begin{macrocode} % % \end{macrocode} % % % % % \subsubsection{页眉信息的修改} % % % \changes{v0.3}{2004/04/27}{对页眉设置进行微调} % 修改页眉中的标题,首先是~article~类中的定义 % \begin{macrocode} %<*ctexcap> \ifCTEX@cls{article}{ % %<*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 ##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 % % \end{macrocode} % % 然后是~report~类中的页眉定义 % \begin{macrocode} %}{\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 ##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 % % \end{macrocode} % % 然后是~book~类中的页眉定义 % \begin{macrocode} %}{ %<*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}% \let\@mkboth\markboth \def\chaptermark##1{% \markright {\MakeUppercase{% \ifnum \c@secnumdepth >\m@ne \if@mainmatter % \@chapapp\ \thechapter. \ % \CTEXthechapter \quad % \fi \fi ##1}}}} \fi % %<*ctexcap> }} % % \end{macrocode} % % 让前面的页眉定义生效: % \begin{macrocode} %\pagestyle{headings} % \end{macrocode} % % % \begin{macro}{\ps@fancy} % \changes{v0.3}{2004/04/27}{解决与~\texttt{fancyhdr}~的冲突} % \changes{v0.4d}{2004/08/14}{增加对~mainmatter~的判断} % 如果使用了~\texttt{fancyhdr}~宏包,需要修改其定义的宏,以正确显示中文页眉。 % \begin{macrocode} %<*ctexcap|cls> \@ifundefined{ps@fancy}{}{% \def\ps@fancy{% \@ifundefined{@chapapp}{\let\@chapapp\chaptername}{}%for amsbook \@ifundefined{MakeUppercase}{\def\MakeUppercase{\uppercase}}{}% \@ifundefined{chapter}{\def\sectionmark##1{\markboth {\MakeUppercase{\ifnum \c@secnumdepth>\z@ % \thesection\hskip 1em\relax \fi ##1}}{}}% \CTEXthesection\quad \fi ##1}}{}}% \def\subsectionmark##1{\markright {\ifnum \c@secnumdepth >\@ne % \thesubsection\hskip 1em\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} } % % \end{macrocode} % \end{macro} % % % \subsubsection{标签引用的中文化} % % \begin{macro}{\refstepcounter} % \changes{v0.1e}{2003/11/05}{修正~\cs{ref}~命令后多出空格的问题} % \changes{v0.4d}{2004/08/14}{修改~\cs{ref}~命令,不再包含除编号外的内容} % \changes{v0.7}{2005/11/25}{删除在~.aux~文件中加入的~CJK~环境} % 为了支持直接将中文数字写入~\texttt{.aux}~文件而做的修改。 % \begin{macrocode} %<*ctex|cls> \ifCTEX@caption \let\CTEX@save@refstepcounter\refstepcounter \def\refstepcounter#1{\stepcounter{#1}% \protected@edef\@currentlabel {\csname p@#1\endcsname% \@ifundefined{CTEX@the#1}% {\csname the#1\endcsname}% {\csname CTEX@the#1\endcsname}% }}% \fi % % \end{macrocode} % \end{macro} % % % % % \subsubsection{其他中文标题定义} % % % \begin{macrocode} %<*ctexcap|cls> % \end{macrocode} % % % 除了章节标题,还有一些其他标题如目录、插图等,也都需要中文化。 % 标题中使用的中文都保存在以~|\CTEX@|~开头的宏中,这里先用英文初始化, % 真正的中文定义放在~\texttt{ctexcap.cfg}~文件中。 % % \begin{macro}{\CTEX@contentsname} % \begin{macro}{\CTEX@listfigurename} % \begin{macro}{\CTEX@listtablename} % 目录、插图目录、表格目录的标题 % \begin{macrocode} \def\CTEX@contentsname{Contents} \def\CTEX@listfigurename{List of Figures} \def\CTEX@listtablename{List of Tables} % \end{macrocode} % \end{macro} % \end{macro} % \end{macro} % % \begin{macro}{\CTEX@figurename} % \begin{macro}{\CTEX@tablename} % 插图和表格的标题 % \begin{macrocode} \def\CTEX@figurename{Figure} \def\CTEX@tablename{Table} % \end{macrocode} % \end{macro} % \end{macro} % % \begin{macro}{\CTEX@abstractname} % \begin{macro}{\CTEX@indexname} % \begin{macro}{\CTEX@bibname} % 摘要、索引和参考文献的标题 % \begin{macrocode} \def\CTEX@abstractname{Abstract} \def\CTEX@indexname{Index} \def\CTEX@bibname{Bibliography} % \end{macrocode} % \end{macro} % \end{macro} % \end{macro} % % % 然后修改原始的标题定义: % % \begin{macro}{\contentsname} % \begin{macro}{\listfigurename} % \begin{macro}{\listtablename} % 目录、插图目录、表格目录的标题 % \begin{macrocode} \renewcommand*\contentsname{\CTEX@contentsname} \renewcommand*\listfigurename{\CTEX@listfigurename} \renewcommand*\listtablename{\CTEX@listtablename} % \end{macrocode} % \end{macro} % \end{macro} % \end{macro} % % \begin{macro}{\figurename} % \begin{macro}{\tablename} % 插图和表格的标题 % \begin{macrocode} \renewcommand*\figurename{\CTEX@figurename} \renewcommand*\tablename{\CTEX@tablename} % \end{macrocode} % \end{macro} % \end{macro} % % \begin{macro}{\abstractname} % ~\texttt{book}~类中没有定义摘要,所以要先判断是否在使用~\texttt{book}~类。 % \begin{macrocode} \@ifundefined{abstractname}{}{ \renewcommand*\abstractname{\CTEX@abstractname}} % \end{macrocode} % \end{macro} % % \begin{macro}{\partname} % \begin{macro}{\chaptername} % \begin{macro}{\appendixname} % 章节的标题,主要是为了和其他宏包的兼容性。 % \begin{macrocode} \renewcommand*\partname{\CTEX@thepart} \@ifundefined{chaptername}{}{ \renewcommand*\chaptername{\CTEX@thechapter}} \renewcommand*\appendixname{\CTEX@appendixname} % \end{macrocode} % \end{macro} % \end{macro} % \end{macro} % % \begin{macro}{\indexname} % 索引的标题 % \begin{macrocode} \renewcommand*\indexname{\CTEX@indexname} % \end{macrocode} % \end{macro} % % \begin{macro}{\refname} % \changes{v0.1f}{2003/12/24}{修正~\texttt{article}~类中参考文献标题 % 没有使用中文的问题} % \begin{macro}{\bibname} % 参考文献的标题。~\texttt{article}~和~\texttt{book}~使用了不同的名字, % 所以要先判断是在使用哪个文档类 % \begin{macrocode} %\ifCTEX@cls{article}{ % \renewcommand*\refname{\CTEX@bibname} % }{ % \renewcommand*\bibname{\CTEX@bibname} % } % \end{macrocode} % \end{macro} % \end{macro} % % % \begin{macrocode} % % \end{macrocode} % % % % % \subsubsection{用户设置命令} % % % \begin{macrocode} %<*ctexcap|cls> % \end{macrocode} % % % 这里的命令提供给用户在正文中修改设置中文标题。首先要定义一些内部命令, % 用户可以通过~|\CTEXoptions|~的统一接口来访问这些内部命令。 % % \begin{macro}{\CTEX@setsecname} % 下面的命令用于重新定义章节标题 % \begin{macrocode} \def\CTEX@setsecname#1[#2,#3]{% \expandafter\def\csname CTEX@pre#1\endcsname{#2}% \expandafter\def\csname CTEX@post#1\endcsname{\ignorespaces#3}} % \end{macrocode} % \end{macro} % % \begin{macro}{\CTEX@setsecnumber} % 下面的命令用于重新定义章节格式 % \begin{macrocode} \def\CTEX@setsecnumber#1[#2]{% \expandafter\def\csname CTEX@the#1\endcsname{#2}} % \end{macrocode} % \end{macro} % % \begin{macro}{\CTEX@setsecformat} % 下面的命令用于重新定义章节格式 % \begin{macrocode} \def\CTEX@setsecformat#1#2[#3]{% \expandafter\def\csname CTEX@#1@#2\endcsname{#3}} % \end{macrocode} % \end{macro} % % \begin{macro}{\CTEX@addsecformat} % 下面的命令用于重新定义章节格式 % \begin{macrocode} \def\CTEX@addsecformat#1#2[#3]{% \expandafter\let\expandafter\reserved@a\csname CTEX@#1@#2\endcsname% \expandafter\expandafter\expandafter\def\expandafter\expandafter% \csname CTEX@#1@#2\endcsname\expandafter{\reserved@a#3}} % \end{macrocode} % \end{macro} % % \changes{v0.2}{2004/02/01}{增加部分修改标题格式设置的选项} % \changes{v0.2}{2004/02/01}{增加修改标题前后空距设置的选项} % 定义对应的~key,使得用户可以通过~|\CTEXsetup|~命令来访问。 % \begin{macrocode} \def\CTEX@defseckey#1{% \CTEX@subkey{#1}{name}{\CTEX@setsecname{#1}[##1]}% \CTEX@subkey{#1}{number}{\CTEX@setsecnumber{#1}[##1]}% \CTEX@subkey{#1}{format}{\CTEX@setsecformat{#1}{format}[##1]}% \CTEX@subkey{#1}{format+}{\CTEX@addsecformat{#1}{format}[##1]}% \CTEX@subkey{#1}{nameformat}{\CTEX@setsecformat{#1}{nameformat}[##1]}% \CTEX@subkey{#1}{nameformat+}{\CTEX@addsecformat{#1}{nameformat}[##1]}% \CTEX@subkey{#1}{numberformat}{\CTEX@setsecformat{#1}{numberformat}[##1]}% \CTEX@subkey{#1}{numberformat+}{\CTEX@addsecformat{#1}{numberformat}[##1]}% \CTEX@subkey{#1}{aftername}{\CTEX@setsecformat{#1}{aftername}[##1]}% \CTEX@subkey{#1}{aftername+}{\CTEX@addsecformat{#1}{aftername}[##1]}% \CTEX@subkey{#1}{titleformat}{\CTEX@setsecformat{#1}{titleformat}[##1]}% \CTEX@subkey{#1}{titleformat+}{\CTEX@addsecformat{#1}{titleformat}[##1]}% \CTEX@subkey{#1}{beforeskip}{\CTEX@setsecformat{#1}{beforeskip}[##1]}% \CTEX@subkey{#1}{afterskip}{\CTEX@setsecformat{#1}{afterskip}[##1]}% \CTEX@subkey{#1}{indent}{\CTEX@setsecformat{#1}{indent}[##1]}% } % \end{macrocode} % % \begin{macrocode} \CTEX@defseckey{part} \CTEX@defseckey{chapter} \CTEX@defseckey{section} \CTEX@defseckey{subsection} \CTEX@defseckey{subsubsection} \CTEX@defseckey{paragraph} \CTEX@defseckey{subparagraph} % \end{macrocode} % % 附录标题和编号的设置。 % \begin{macrocode} \CTEX@subkey{appendix}{name}{\def\CTEX@appendixname{#1}} \CTEX@subkey{appendix}{number}{\def\CTEX@appendixnumber{#1}} % \end{macrocode} % % 其它标题的设置。 % \begin{macrocode} \CTEX@key{contentsname}{\def\CTEX@contentsname{#1}} \CTEX@key{listfigurename}{\def\CTEX@listfigurename{#1}} \CTEX@key{listtablename}{\def\CTEX@listtablename{#1}} \CTEX@key{figurename}{\def\CTEX@figurename{#1}} \CTEX@key{tablename}{\def\CTEX@tablename{#1}} \CTEX@key{abstractname}{\def\CTEX@abstractname{#1}} \CTEX@key{indexname}{\def\CTEX@indexname{#1}} \CTEX@key{bibname}{\def\CTEX@bibname{#1}} % \end{macrocode} % % % \begin{macrocode} % % \end{macrocode} % % % \subsubsection{标题配置文件} % % \texttt{ctexcap.cfg}~文件中使用中文重新定义标题名称。 % 如果使用了中文标题的选项,则在~|\begin{document}|~ % 之后被自动载入。 % % \begin{macrocode} %<*cap> % \end{macrocode} % % 首先是章节标题名称。 % \begin{macrocode} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %% caption name %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % \end{macrocode} % % 目录、插图目录、表格目录的标题 % \begin{macrocode} \def\CTEX@contentsname{目录} \def\CTEX@listfigurename{插图} \def\CTEX@listtablename{表格} % \end{macrocode} % % 插图和表格的标题 % \begin{macrocode} \def\CTEX@figurename{图} \def\CTEX@tablename{表} % \end{macrocode} % % 摘要、附录、索引和参考文献的标题 % \begin{macrocode} \def\CTEX@abstractname{摘要} \def\CTEX@indexname{索引} \def\CTEX@bibname{参考文献} % \end{macrocode} % % \changes{v0.3}{2004/04/24}{对中文标题的章节编号格式进行调整,去掉~\cs{S}} % 章节标题,都以~pre~和~post~成对出现 % \begin{macrocode} \def\CTEX@prepart{第} \def\CTEX@postpart{部分} \def\CTEX@prechapter{第} \def\CTEX@postchapter{章} \def\CTEX@presection{} \def\CTEX@postsection{} \def\CTEX@presubsection{} \def\CTEX@postsubsection{} \def\CTEX@presubsubsection{} \def\CTEX@postsubsubsection{} \def\CTEX@preparagraph{} \def\CTEX@postparagraph{} \def\CTEX@presubparagraph{} \def\CTEX@postsubparagraph{} % \end{macrocode} % % 附录的标题 % \begin{macrocode} \ifCTEX@cls{article}{ \def\CTEX@appendixname{} }{ \def\CTEX@appendixname{附录~} } % \end{macrocode} % % 然后是章节编号的格式。 % \begin{macrocode} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %% caption number %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % \end{macrocode} % % \changes{v0.3}{2004/04/27}{修改为使用~\cs{chinese}~命令以避免产生错误} % 篇和章的编号格式,缺省是中文数字。 % \begin{macrocode} \def\CTEX@thepart{\chinese{part}} \def\CTEX@thechapter{\chinese{chapter}} % \end{macrocode} % % 节的编号格式,采用标准文档类的格式(阿拉伯数字)。 % \begin{macrocode} \def\CTEX@thesection{\thesection} \def\CTEX@thesubsection{\thesubsection} \def\CTEX@thesubsubsection{\thesubsubsection} \def\CTEX@theparagraph{\theparagraph} \def\CTEX@thesubparagraph{\thesubparagraph} % \end{macrocode} % % 附录的编号格式,缺省是大写英文字母。 % \begin{macrocode} \ifCTEX@cls{article}{ \def\CTEX@appendixnumber{\@Alph\c@section} }{ \def\CTEX@appendixnumber{\@Alph\c@chapter} } % \end{macrocode} % % 下面是章节标题的格式。 % \begin{macrocode} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %% caption format %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % \end{macrocode} % % part~的缺省格式 % \begin{macrocode} \ifCTEX@cls{article}{ \def\CTEX@part@format{\centering} \def\CTEX@part@nameformat{\Large\bfseries} \def\CTEX@part@aftername{\quad} \def\CTEX@part@titleformat{\Large\bfseries} \def\CTEX@part@beforeskip{4ex} \def\CTEX@part@afterskip{3ex} \def\CTEX@part@indent{\z@} }{ \def\CTEX@part@format{\centering} \def\CTEX@part@nameformat{\huge\bfseries} \def\CTEX@part@aftername{\par\vskip 20\p@} \def\CTEX@part@titleformat{\huge\bfseries} } % \end{macrocode} % % chapter~的缺省格式 % \begin{macrocode} \def\CTEX@chapter@format{\centering} \def\CTEX@chapter@nameformat{\huge\bfseries} \def\CTEX@chapter@aftername{\quad} \def\CTEX@chapter@titleformat{\huge\bfseries} \def\CTEX@chapter@beforeskip{50\p@} \def\CTEX@chapter@afterskip{40\p@} \def\CTEX@chapter@indent{\z@} % \end{macrocode} % % section~的缺省格式 % \begin{macrocode} \def\CTEX@section@format{\Large\bfseries\centering} \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@} % \end{macrocode} % % subsection~的缺省格式 % \begin{macrocode} \def\CTEX@subsection@format{\large\bfseries\flushleft} \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@} % \end{macrocode} % % subsubsection~的缺省格式 % \begin{macrocode} \def\CTEX@subsubsection@format{\normalsize\bfseries\flushleft} \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@} % \end{macrocode} % % paragraph~的缺省格式 % \begin{macrocode} \def\CTEX@paragraph@format{\normalsize\bfseries\flushleft} \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@} % \end{macrocode} % % subparagraph~的缺省格式 % \begin{macrocode} \def\CTEX@subparagraph@format{\normalsize\bfseries\flushleft} \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 % \end{macrocode} % % \begin{macrocode} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %% other configurations %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % \end{macrocode} % % \begin{macrocode} % % \end{macrocode} % % % % % \subsection{文档类} % % % \begin{macrocode} %<*cls> % \end{macrocode} % % 针对中文习惯,对文档类的缺省设置进行修改。 % % % % \begin{macrocode} % % \end{macrocode} % % % % % \subsection{其它功能} % % \subsubsection{中文日期格式} % % \begin{macro}{\CTEX@todayold} % \begin{macro}{\CTEX@todaysmall} % \begin{macro}{\CTEX@todaybig} % 几种常用的日期格式,都用~|\today|~进行初始化 % \begin{macrocode} %<*ctex|cls> \let\CTEX@todayold\today \let\CTEX@todaysmall\today \let\CTEX@todaybig\today % % \end{macrocode} % |\CTEX@todaysmall|~和~|\CTEX@todaybig|~使用中文,需要在 % ~\texttt{ctex.def}~中重新定义 % \begin{macrocode} %<*def> \def\CTEX@todaysmall{~\the\year~年~\the\month~月~\the\day~日} \def\CTEX@todaybig{% \CJKdigits{\the\year}年\CJKnumber{\the\month}月\CJKnumber{\the\day}日} % % \end{macrocode} % \end{macro} % \end{macro} % \end{macro} % % 缺省是使用阿拉伯数字的中文日期格式 % \begin{macrocode} %<*ctex|cls> \ifCTEX@caption \renewcommand*\today{\CTEX@todaysmall} \fi % \end{macrocode} % 定义修改~|\today|~格式的用户命令 % \begin{macrocode} \CTEX@key{today}{\CTEX@settoday{#1}} \newcommand*\CTEX@settoday[1]{% \@ifundefined{CTEX@today#1} {\PackageError{ctex}{% unknown today format}{% Available today format are "old", "small", and "big".}} {\renewcommand*\today{\csname CTEX@today#1\endcsname}}} % % \end{macrocode} % % % \subsubsection{图表标题的分隔符} % % \changes{v0.3}{2004/04/23}{增加对图表标题分隔符的设置} % \changes{v0.5a}{2004/09/06}{修改图表标题分隔符设置中的错误} % 重新定义图表标题的格式 % \begin{macrocode} %<*ctexcap|cls> \def\CTEX@caption@delimiter{: } \long\def\@makecaption#1#2{% \vskip\abovecaptionskip \sbox\@tempboxa{#1\CTEX@caption@delimiter #2}% \ifdim \wd\@tempboxa >\hsize #1\CTEX@caption@delimiter #2\par \else \global \@minipagefalse \hb@xt@\hsize{\hfil\box\@tempboxa\hfil}% \fi \vskip\belowcaptionskip} % \end{macrocode} % 定义修改~|\today|~格式的用户命令 % \begin{macrocode} \CTEX@key{captiondelimiter}{\CTEX@setcaptiondelimiter{#1}} \newcommand*\CTEX@setcaptiondelimiter[1]{% \def\CTEX@caption@delimiter{#1}} % % \end{macrocode} % 配置文件中给出缺省的分隔符定义 % \begin{macrocode} %<*cap> \def\CTEX@caption@delimiter{: } % % \end{macrocode} % % % % % \subsection{用标准字体命令修改中文字体} % % % \subsubsection{字体定义文件} \label{sec:fontdef} % % % 本节的内容用于生成中文字体定义文件,这些定义文件将被~\ctex{}~宏包 % 做为缺省字体设置装入,用于在改变英文字体时相应的改变中文字体。 % ~\texttt{c19rm.fd}~文件定义的字体将在使用~|\rm|~系列字体命令时使用。 % 类似的,~\texttt{c19sf.fd}~文件定义的字体将在使用~|\sf|~系列字体命 % 令时使用;~\texttt{c19tt.fd}~文件定义的字体将在使用~|\tt|~系列字体 % 命令时使用。 % % % 首先,使用~\LaTeX{}~的~\texttt{NFSS}~命令定义新的字体名称, % 都使用~GBK~编码。 % \begin{macrocode} %<*fd> %\DeclareFontFamily{C19}{rm}{\hyphenchar \font\m@ne} %\DeclareFontFamily{C19}{sf}{\hyphenchar \font\m@ne} %\DeclareFontFamily{C19}{tt}{\hyphenchar \font\m@ne} % \end{macrocode} % % % \changes{v0.8a}{2007/05/06}{增加~bold~字体的定义} % 然后定义在各种情况下对应的真正汉字字体。 % 中文正常字体加黑都采用黑体代替,意大利体采用楷书代替, % 意大利体加黑采用隶书代替。 % ~\texttt{rm}~字体中的普通字体采用宋体: % \begin{macrocode} %<*rm> \DeclareFontShape{C19}{rm}{m}{n}{<-> CJK * gbksong}{} \DeclareFontShape{C19}{rm}{b}{n}{<-> CJK * gbkhei}{} \DeclareFontShape{C19}{rm}{bx}{n}{<-> CJK * gbkhei}{} \DeclareFontShape{C19}{rm}{m}{sl}{<-> CJK * gbksongsl}{} \DeclareFontShape{C19}{rm}{b}{sl}{<-> CJK * gbkheisl}{} \DeclareFontShape{C19}{rm}{bx}{sl}{<-> CJK * gbkheisl}{} \DeclareFontShape{C19}{rm}{m}{it}{<-> CJK * gbkkai}{} \DeclareFontShape{C19}{rm}{b}{it}{<-> CJKb * gbkkai}{\CJKbold} \DeclareFontShape{C19}{rm}{bx}{it}{<-> CJKb * gbkkai}{\CJKbold} % % \end{macrocode} % ~\texttt{sf}~字体中的普通字体采用幼圆: % \begin{macrocode} %<*sf> \DeclareFontShape{C19}{sf}{m}{n}{<-> CJK * gbkyou}{} \DeclareFontShape{C19}{sf}{b}{n}{<-> CJKb * gbkyou}{\CJKbold} \DeclareFontShape{C19}{sf}{bx}{n}{<-> CJKb * gbkyou}{\CJKbold} \DeclareFontShape{C19}{sf}{m}{sl}{<-> CJK * gbkyousl}{} \DeclareFontShape{C19}{sf}{b}{sl}{<-> CJKb * gbkyousl}{\CJKbold} \DeclareFontShape{C19}{sf}{bx}{sl}{<-> CJKb * gbkyousl}{\CJKbold} \DeclareFontShape{C19}{sf}{m}{it}{<-> CJK * gbkyou}{} \DeclareFontShape{C19}{sf}{b}{it}{<-> CJKb * gbkyou}{\CJKbold} \DeclareFontShape{C19}{sf}{bx}{it}{<-> CJKb * gbkyou}{\CJKbold} % % \end{macrocode} % ~\texttt{tt}~字体中的普通字体采用仿宋: % \begin{macrocode} %<*tt> \DeclareFontShape{C19}{tt}{m}{n}{<-> CJK * gbkfs}{} \DeclareFontShape{C19}{tt}{b}{n}{<-> CJKb * gbkfs}{\CJKbold} \DeclareFontShape{C19}{tt}{bx}{n}{<-> CJKb * gbkfs}{\CJKbold} \DeclareFontShape{C19}{tt}{m}{sl}{<-> CJK * gbkfssl}{} \DeclareFontShape{C19}{tt}{b}{sl}{<-> CJKb * gbkfssl}{\CJKbold} \DeclareFontShape{C19}{tt}{bx}{sl}{<-> CJKb * gbkfssl}{\CJKbold} \DeclareFontShape{C19}{tt}{m}{it}{<-> CJK * gbkfs}{} \DeclareFontShape{C19}{tt}{b}{it}{<-> CJKb * gbkfs}{\CJKbold} \DeclareFontShape{C19}{tt}{bx}{it}{<-> CJKb * gbkfs}{\CJKbold} % % % \end{macrocode} % 这些字体对应关系以后有可能根据用户意见做出调整。 % % % \subsubsection{字体命令修改} % % % \begin{macro}{\rmfamily} % \begin{macro}{\ttfamily} % \begin{macro}{\sffamily} % \begin{macro}{\CTEX@save@rmfamily} % \begin{macro}{\CTEX@save@ttfamily} % \begin{macro}{\CTEX@save@sffamily} % 重新定义标准的字体命令,使得中文字体随着英文字体改变。 % \begin{macrocode} %<*cjk> \let\CTEX@save@rmfamily\rmfamily \renewcommand*\rmfamily{\CTEX@save@rmfamily\CJKfamily{rm}} \let\CTEX@save@sffamily\sffamily \renewcommand*\sffamily{\CTEX@save@sffamily\CJKfamily{sf}} \let\CTEX@save@ttfamily\ttfamily \renewcommand*\ttfamily{\CTEX@save@ttfamily\CJKfamily{tt}} \let\CTEX@save@normalfont\normalfont \renewcommand*\normalfont{\CTEX@save@normalfont\CJKfamily{rm}} % % \end{macrocode} % \end{macro} % \end{macro} % \end{macro} % \end{macro} % \end{macro} % \end{macro} % % % \Finale % % \setcounter{IndexColumns}{2} % \IndexPrologue{\section*{索引} {\it 意大利体的数字表示描述对应索引项的页码; % 带下划线的数字表示定义对应索引项的代码行号; % 罗马字体的数字表示使用对应索引项的代码行号。}} % % \GlossaryPrologue{\section*{版本更新}} % % \PrintIndex \PrintChanges \endinput