📄 ctex.dtx
字号:
%<*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
%</ctex|cls>
% \end{macrocode}
%
% fancyhdr~宏包,控制页眉页脚的设置
% \begin{macrocode}
%<*ctex|cls>
\ifCTEX@fancyhdr
\RequirePackage{fancyhdr}
\fi
%</ctex|cls>
% \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
%</cct>
%<*cjk>
\ifCTEX@fntef
\RequirePackage{CJKfntef}
\normalem
\fi
%</cjk>
% \end{macrocode}
%
% ctexcap~宏包需要先装入~ctex~宏包。
% \begin{macrocode}
%<*ctexcap>
\ifCTEX@caption
\PassOptionsToPackage{cap}{ctex}
\fi
\RequirePackage{ctex}
%</ctexcap>
% \end{macrocode}
%
% 文档类还需要的宏包:
% \begin{macrocode}
%<*cls>
%</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}}
%</ctex|cls>
% \end{macrocode}
%
%
% \begin{macrocode}
%<*ctex|cls>
%<article>\def\CTEX@cls@article{}
%<report>\def\CTEX@cls@report{}
%<book>\def\CTEX@cls@book{}
%<*ctex>
\@ifclassloaded{article}{\def\CTEX@cls@article{}}{}
\@ifclassloaded{report}{\def\CTEX@cls@report{}}{}
\@ifclassloaded{book}{\def\CTEX@cls@book{}}{}
%</ctex>
\def\ifCTEX@cls#1{%
\expandafter\ifx\csname CTEX@cls@#1\endcsname\relax
\expandafter\@secondoftwo
\else
\expandafter\@firstoftwo
\fi}
%</ctex|cls>
% \end{macrocode}
%
%
% \changes{v0.7c}{2005/12/20}{增加对~\cs{if@mainmatter}~的判断,以兼容~amsbook~宏包}
% \begin{macrocode}
%<*ctexcap>
\@ifundefined{if@mainmatter}{\let\if@mainmatter\iftrue}{}
%</ctexcap>
% \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}}
%</ctex|cls>
% \end{macrocode}
%
%
%
%
% \subsection{通用中文设置}
%
%
% 和~CCT~以及~CJK~相关的内容分放在各自的~\texttt{.clo}~文件中
% \begin{macrocode}
%<*ctex|cls>
\ifCTEX@cct
\input{ctexcct.clo}
\else
\input{ctexcjk.clo}
\fi
%</ctex|cls>
% \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}
%</ctex|cls>
% \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
%</ctexcap|cls>
% \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}
%</ctex|cls>
% \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
%</ctex|cls>
% \end{macrocode}
% \end{macro}
% \end{macro}
%
%
% \begin{macro}{\CTEX@spaceChar}
% \changes{v0.2a}{2004/02/11}{加快处理速度,改善和~CJKpunct~的兼容性}
% \begin{macrocode}
%<ctex|cls>\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}
%<ctex|cls>\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
%</ctex|cls>
% \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}
%</ctex|cls>
% \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}
%</ctex|cls>
% \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}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -