%% Copyright (c)2003-2007 CTeX and all the Contributors to CTeX FAQ. %% All rights reserved. %% %% CTeX 以及 CTeX FAQ 的作者拥有版权 (c)2003。保留所有权利。 %% %% Permission is granted to copy, distribute and/or modify this %% document under the terms of the GNU Free Documentation License, %% Version 1.2 or any later version published by the Free Software %% Foundation; with the Invariant Sections being Contributors, no %% Front-Cover Texts, and no Back-Cover Texts. %% %% 你可以拷贝、发布或者修改这份文档,但必须遵守自由软件组织颁布的 %% GNU 自由文档许可证 1.2 或者以后版本的条款。Invariant Sections %% 包括 Contributors,没有 Front-Cover Texts 和 Back-Cover Texts。 %% %% You should have received a copy of the GNU Free Documentation %% License along with this document; if not, write to the Free %% Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, %% MA 02111, USA. %% %% 你应该随这份文档收到一份 GNU 自由文档许可证的拷贝;如果没有, %% 写信到自由软件组织,地址: 59 Temple Place - Suite 330, Boston, %% MA 02111, USA。 %% %% %% Maintainers: 吴凌云 (aloft@ctex.org) %% %% $Id: ctex-faq.tex 82 2007-01-30 09:45:46Z aloft $ %% \def\faqversion{0.4} \def\betaversion{ beta} \documentclass[a4paper]{article} \usepackage{ctex-faq}[2009/05/24] \RCS $Revision: 82 $ \RCS $Date: 2007-01-30 17:45:46 +0800 (鏄熸湡浜? 30 涓€鏈?2007) $ \topmargin -0.5 true cm \oddsidemargin 0 true cm \evensidemargin 0 true cm \textheight 23 true cm \textwidth 16.5 true cm \makeindex \begin{document} % 设置 PDF 文件属性 \hypersetup{pdftitle={CTeX\ FAQ},% pdfauthor={aloft@ctex.org},% pdfsubject={Chinese\ TeX\ FAQ},% pdfkeywords={TeX\ LaTeX\ CCT\ CJK\ Chinese}} % 含有中文的定义必须包含在 CJK 环境中 \def\cmdname{命令~(Commands)} \def\pkgname{宏包~(Packages)} \def\envname{环境~(Environments)} \def\Qname{\it 问题} \def\CTeXWWW{\href{http://www.ctex.org}{\CTeX{}~网站}} \def\CTeXBBS{\href{http://bbs.ctex.org}{\CTeX{}~论坛}} \def\CTeXFTP{\href{http://ftp.ctex.org}{\CTeX{} FTP}} % 页眉页脚 \fancypagestyle{plain}{% \fancyhf{}% \renewcommand{\headrulewidth}{0pt}% \renewcommand{\footrulewidth}{0pt}% \fancyfoot[L]{\small \CTeX{} FAQ (常见问题集)~v\faqversion\betaversion} \fancyfoot[R]{\small Copyright \copyright 2003--\the\year{} \CTeX{}.ORG} } \pagestyle{fancy} \fancyhf{} \fancyhead[L]{\small \leftmark} \fancyhead[R]{\small \thepage} \fancyfoot[L]{\small \CTeX{} FAQ (常见问题集)~v\faqversion\betaversion} \fancyfoot[R]{\small Copyright \copyright 2003--\the\year{} \CTeX{}.ORG} \title{{\bf\Huge \CTeX{} FAQ (常见问题集)}\\[1.0ex] \textsf{Version\ \faqversion\betaversion \hspace*{.5em}(\ref*{lastquestion})}} \author{\contrib[aloft@ctex.org]{吴凌云}} \date{\sf\small \RCSDate\hspace*{1em}Rev. \RCSRevision} \maketitle 本文的大部分内容都来自于~\CTeXBBS~上的讨论。 版本号为~\faqversion,一共收录有~\ref*{lastquestion}~个问题。 这份常见问题集会不断更新,请到~\CTeXWWW~的主页下载它的最新版本。 本文档的主要目的是帮助你快速的找到问题的答案, 因此可能不是非常详细。如果你想系统的学习~\TeX{}~和~\LaTeX{}~请参考专门的资料 (见~\Qref{Q-doc-zh}~和~\Qref{Q-doc-en}~)。 \begin{advanced}\small \danger\\符号表示后面的内容需要比较深的~\LaTeX{}~知识。\enddanger \ddanger\\表示后面的内容带有试验性质,有时会带来意想不到的结果,应尽量避免在实际中使用。\enddanger \end{advanced} \begin{lined}{\textwidth}\small \begin{description} \item[新增]~\listofnewfaqs \item[修订]~\listofrevfaqs \end{description} \end{lined} \begin{center} \hyperlink{copyright}{\small Copyright \copyright 2003--\the\year{} \CTeX{} and all the Contributors to \CTeX{} FAQ. All rights reserved.} \end{center} \tableofcontents \section{关于~FAQ} \Question[Q-about-ctex]{\CTeX{}~是干什么的?}{0.1}{0.1} \CTeX{}~是一个关于~\TeX{}~的中文网站,~\CTeX{}~是中文~\TeX{}~的缩写。 ~\CTeX{}~的宗旨是为中国广大的~\TeX{}~用户提供力所能及的帮助。 目前~\CTeX{}~的主要工作包括维护~\CTeXWWW~,为用户提供学习交流的场所; 开发中文~\TeX{}~系统安装配置软件;致力于~\TeX{}~文档的中文化工作。 ~\CTeX{}~的服务器和网络接入得到了中国科学院数学与系统科学研究院的支持。 \Question[Q-about-sites]{\CTeX{}~网站包括几个部分?}{0.1}{0.1} 目前~\CTeX{}~主要有三个部分: \begin{itemize} \item \url{http://www.ctex.org} \quad 主页,发布最新软件、消息 \item \url{http://bbs.ctex.org} \quad 论坛,提问、讨论问题 \item \url{ftp://ftp.ctex.org} \quad FTP,提供软件资料下载、交流 \end{itemize} \Question[Q-about-faq]{这个~FAQ~的目的是什么?}{0.1}{0.4} 本~FAQ~是为了收集~\CTeXBBS~上经常出现的问题以及解答, 以便大家遇到问题时能方便迅速地找到帮助。 本文档也适合初学者作为学习~\TeX{}~和~\LaTeX{}~的参考资料。 ~FAQ~中的解答力求正确完整,大部分都经过试验确认。 除了常见问题,本文档也收录一些难题和当前为止比较好的解决方法。 如果你对~FAQ~中的问题有更好的方法,欢迎到~\CTeXBBS~上提出, 或者联系本文档的维护人。在经过确认以后,你的方法将被收录到~FAQ~的新版本中。 \Question[Q-about-license]{我可以打印、传播、转载这份文档的内容吗?}{0.1}{0.1} 可以。本文档采用\href{http://www.gnu.org} {自由软件组织}颁布的~\href{http://www.gnu.org/licenses/fdl.html} {GNU~自由文档许可证}。因此,你可以在保证文档的完整性前提下自由拷贝、 传播这份文档。 你也可以摘录、转载这份文档中的部分内容,但是要注明来源以及保证所有包含 摘录内容的文档也都是自由文档,也就是可以免费得到的。详情请阅读 ~\href{http://www.gnu.org/licenses/fdl.html}{GNU~自由文档许可证}。 \section{基本概念} \Question[Q-info-tex]{什么是~\TeX{}?}{0.1}{0.1} 电子排版系统的出现给印刷出版业带来了一场革命,利用电子计算机及各种辅助设备, 可以完成从文稿、图表的录入、编辑、修改、组版, 直至得到各种不同用途、不同质量的输出结果。利用电子排版系统,可以减轻劳动强度,缩短出版周期。 目前世界上有许多电子排版系统。这些系统各有特点,也各有自己的适用范围。 ~\TeX{}~就是一种优秀的电子排版系统。 \TeX{}~提供了一套功能强大并且十分灵活的排版语言,它多达~900~多条指令,并且 ~\TeX{}~有宏功能,用户可以不断地定义自己适用的新命令来扩展~\TeX{}~系统的功能。 许多人利用~\TeX{}~提供的宏定义功能对~\TeX{}~进行了二次开发, 其中比较著名的有美国数学学会推荐的非常适合于数学家使用的~\AMSTeX{}~ 以及适合于一般文章、报告、书籍的~\LaTeX{}~系统。 \TeX{}~系统是公认的数学公式排得最好的系统。 美国数学学会~(AMS)~鼓励数学家们使用~\TeX{}~ 系统向它的期刊投稿。世界上许多一流的出版社如~Kluwer、 ~Addison-Wesley、牛津大学出版社等也利用~\TeX{}~系统出版书籍和期刊。 大部分的~\TeX{}~系统都是免费的。~Knuth~教授还公开了他的全部源程序。 ~\TeX{}~系统目前已经在数百种计算机系统上得到实现。 ~\TeX{}~系统的排版结果~DVI (DeVice Independent)~文件与输出设备无关。~DVI~ 文件可以显示、打印、照排,几乎可以在所有的输出设备上输出。 ~\TeX{}~排版源文件及结果在各种计算机系统上互相兼容。 \Question[Q-info-latex]{\LaTeX{}~是什么?}{0.1}{0.1} Leslie Lamport~开发的~\LaTeX{}~是当今世界上最流行和使用最为广泛的 ~\TeX{}~宏集。它构筑在~Plain \TeX{}~的基础之上, 并加进了很多的功能以使得使用者可以更为方便的利用~\TeX{}~ 的强大功能。使用~\LaTeX{}~基本上不需要使用者自己设计命令和宏等,因为 ~\LaTeX{}~已经替你做好了。因此,即使使用者并不是很了解 ~\TeX{},也可以在短短的时间内生成高质量的文档。对于生成复杂的数学公式, ~\LaTeX{}~表现的更为出色。 \LaTeX{}~自从八十年代初问世以来,也在不断的发展。最初的正式版本为 ~2.09,在经过几年的发展之后,许多新的功能,机制被引入到~\LaTeX{}~中。 在享受这些新功能带来的便利的同时,它所伴随的副作用也开始显现,这就是不兼容性。 标准的~\LaTeX{} 2.09,引入了“新字体选择框架”~(NFSS)~的~\LaTeX{}, \SLiTeX{},\AMSLaTeX{}~等等,相互之间并不兼容。 这给使用者和维护者都带来很大的麻烦。为结束这中糟糕的状况,~Frank Mittelbach~等人成立了~\LaTeX{}3~项目小组, 目标是建立一个最优的,有效的,统一的,标准的命令集合。 即得到~\LaTeX{}~的一个新版本~3。 这是一个长期目标,向这个目标迈出第一步就是在~1994~年发布的 ~\LaTeXe{}。~\LaTeXe{}~采用了~NFSS~作为标准,加入了很多新的功能, 同时还兼容旧的~\LaTeX{} 2.09。~\LaTeXe{}~每~6~个月更新一次, 修正发现的错误并加入一些新的功能。在~\LaTeX{}3~最终完成之前, ~\LaTeXe{}~将是标准的~\LaTeX{}~版本。 \Question[Q-info-amstex]{什么是~\AMSTeX{}/\AMSLaTeX{}?}{0.1}{0.1} \AMSTeX{}~是美国数学会提供的,在~Plain \TeX{}~基础上开发的~\TeX{}~ 宏集。它主要用于排版含有很多数学符号和公式的科技类文章或书籍。~\AMSTeX{}~ 给出了许多高级命令,可以让使用者很方便地排版大型的,复杂的数学公式。\AMSTeX{}~ 排版数学公式等的功能通过~\AMSLaTeX{}~中的宏包~\pkg{amsmath}~在~\LaTeX{}~ 中得到实现。~\AMSTeX{}~目前的版本为~2.1。 \AMSLaTeX{}~包括两部分,一是上面提到的~amsmath~ 宏包,主要的目的是用来排版数学符号和公式。另一部分是 ~amscls,提供了美国数学会要求的论文和书籍的格式。~\AMSLaTeX{}~ 目前的版本为~2.0。 在提供~\AMSTeX{}~和~\AMSLaTeX{}~ 的同时,美国数学会还提供一套数学符号的字库,~AMSFonts。这套字库中增加了很多 ~\TeX{}~的标准字库~Computer Modern~ 所没有的一些数学符号,粗体数学符号等。~AMSFonts~现在的版本为~2.2,有 ~Metafont~和~Type1~两种字库提供下载。 \Question[Q-info-texlatex]{\TeX{}~和~\LaTeX{}~是什么关系?}{0.1}{0.3} \LaTeX{}~是~\TeX{}~中的一种格式~(format)~,是建立在~\TeX{}~基础上的宏语言,也就是说, 每一个~\LaTeX{}~命令实际上最后都会被转换解释成几个甚至上百个~\TeX{}~命令。 但是,普通用户可以无需知道这中间的复杂联系。 就象编程的时候如果使用一些已经编译好的函数库和模板可以使我们仅仅用几个命令就实现 很多功能一样,~\LaTeX{}~根据人们排版文章的习惯,定义了许多命令和模板, 通过这些命令和模板,我们可以很快的得到漂亮的排版结果。 \Question[Q-info-latex2e]{\LaTeX{} 2.09~和~\LaTeXe{}~有什么区别?}{0.3}{0.3} \LaTeX{} 2.09~是~\LaTeX{}~在~\LaTeXe{}~之前的一个版本(参见~\Qref{Q-info-latex}~)。 \LaTeXe{}~对~\LaTeX{} 2.09~做了很大的改进,增加了很多新功能。 从文件内容上看,两者最显著的不同在于~\LaTeX{} 2.09~使用~\cmd{documentstyle}~命令定义文档类型 以及所包含宏包,如 \begin{code} \documentstyle[twoside,epsfig]{article} \end{code} 而~\LaTeXe{}~使用~\cmd{documentclass}~命令定义文档类型,用~\cmd{usepackage}~命令包含宏包,如 \begin{code} \documentclass[twoside]{article} \usepackage{epsfig} \end{code} 如果你使用的不是几十年前的老机器,你的系统的~\LaTeX{}~都是~\LaTeXe{}~版本。 ~\LaTeX{} 2.09~文件一般都可以在~\LaTeXe{}~系统中以兼容方式编译。 但是兼容方式编译速度慢,而且很多~\LaTeXe{}~的新功能无法使用。 如果你不是需要编译以前的~\LaTeX{} 2.09~文件,你根本无需使用~\LaTeX{} 2.09~, 也不用知道~\LaTeX{} 2.09~与~\LaTeXe{}~的差别。 大部分~\LaTeX{} 2.09~文件都可以通过用~\cmd{documentclass}~命令和~\cmd{usepackage}~命令 代替~\cmd{documentstyle}~命令修改为~\LaTeXe{}~格式。 有时可能需要一些特殊宏包,例如~\pkg{latexsym}~,对旧的~\LaTeX{} 2.09~命令提供支持。 \Question[Q-info-distribution]{\MiKTeX{}、~\fpTeX{}、~\teTeX{}、~\CTeX{}~又是什么关系?}{0.1}{0.1} \TeX{}~在不同的硬件和操作系统上有不同的实现版本。这就像~C~语言, 在不同的操作系统中有不同的编译系统,例如~Linux~下的~gcc,~Windows~下的 ~Visual C++~等。有时,一种操作系统里也会有好几种的~\TeX{}~系统。 目前常见的~Unix/Linux~下的~\TeX{}~系统是~\teTeX{}, ~Windows~下则有~\MiKTeX{}~和~\fpTeX{}。 ~\CTeX{}~指的是~\CTeX{}~中文套装的简称,是把~\MiKTeX{}~和一些常用的相关工具, 如~GSview,~WinEdt~等包装在一起制作的一个简易安装程序, 并对其中的中文支持部分进行了配置,使得安装后马上就可以使用中文。 \Question[Q-info-ctan]{什么是~CTAN~?}{0.3}{0.3} CTAN~是英文~Comprehensive \TeX{} Archive Network~的首字母缩写,直译成中文 就是\emph{综合~\TeX{}~文件网络},它包含有三个主服务器和几十个镜像服务器, 以~FTP~和~WWW~方式向所有的~\TeX{}~用户提供文件服务。~CTAN~可以说几乎 收罗了世界上所有的~\TeX{}~相关软件、文档,并保证不断更新。你可以访问 \faqurl{http://www.ctan.org} 来得到更详细的信息。在~CTAN~中搜索文件可以参见~\Qref{Q-search-ctan}~。 \section{安装升级} \Question[Q-download-ctex]{哪里可以下载~\CTeX{}~中文套装软件?}{0.1}{0.4} \CTeX{}~首页上的下载中心: \faqurl{http://www.ctex.org/CTeXDownload} 或者直接到~\CTeX{}~的~FTP~服务器上下载: \faqurl{ftp://ftp.ctex.org/pub/tex/systems/ctex/} \Question[Q-download-miktex]{哪里可以下载~\MiKTeX{}~的最新版本?}{0.1}{0.1} 可以到~\MiKTeX{}~的主页: \faqurl{http://www.miktex.org} 或者~\CTeX{}~提供的~CTAN~镜像中下载: \faqurl{ftp://ftp.ctex.org/CTAN/systems/win32/miktex/setup/setup.exe} 然后执行~setup.exe,在其提供的站点列表中选择合适的网站(~\href{ftp://ftp.ctex.org}{\CTeX{} FTP}~是列表中唯一的中国大陆网站),按照程序提示即可完成下载。 \Question[Q-search-ctan]{哪里能找到我想要的宏包?}{0.3}{0.4} CTAN~(见~\Qref{Q-info-ctan}~)可以说几乎收罗了世界上绝大多数的~\TeX{}~相关软件、文档,并保持更新, 为广大用户提供了方便。虽然~CTAN~的目录结构很有规则,并不算太难找, 但对于许多对其目录结构不熟悉的人来说,还是一个问题。 特别是很多初学者,经常找不到想要的东西。 CTAN~提供了一个搜索引擎 \faqurl{http://www.ctan.org/search.html} 通过它,你可以确定你需要的文件在~CTAN~目录中的相对位置, 然后就可以在任何一个~CTAN~镜像中下载了。~CTAN~在全世界有几十个镜像服务器, 每日同步更新,本站的~FTP~也是其中之一。你可以从搜索引擎提供的列表中挑选 一个离你最近服务器下载。 注意一点:不同的镜像服务器存放~CTAN~的根目录可能不同。例如,~\CTeXFTP~是在 \begin{prompt} /CTAN/ \end{prompt} 目录下。把搜索引擎的结果加到这个目录后面,就是这个文件在我们的~FTP~上的路径了。 \Question[Q-upgrade-miktex]{如何升级现有的~\MiKTeX{}?}{0.1}{0.1} 无论是~\CTeX{}~中文套装包含的~\MiKTeX{}~还是单独安装的~\MiKTeX{}~ 都可以使用以下方法升级(只适用于~\MiKTeX{} 2.2~以后版本) 运行开始菜单中~\MiKTeX{}~组中的~\MiKTeX{} Update Wizard,在其中提供的站点列表中选择合适的网站, 则程序会自动完成下载所需的文件并升级。也可以使用安装时的程序~setup.exe~ 把最新的内容下载到你的硬盘上以后,再运行~\MiKTeX{} Update Wizard~ 并选择从本地~(local folder)~升级。 \Question[Q-install-package]{我下载了一些新的宏包,该如何安装到我的系统中去?}{0.1}{0.3} 如果你得到的宏包已经是编译过的,也就是已经有~\texttt{.sty}~或者~\texttt{.cls}~文件, 你只需把这些文件放在 \begin{prompt} localtexmf\tex\latex\ \end{prompt} 下的某个子目录中,可以自己建一个。然后你还要让~\TeX{}~系统知道这个新的宏包的存在, 你需要刷新系统的文件名数据库(见~\Qref{Q-newbie-fndb}~)。现在你可以使用这个宏包了。 你也可以把这些宏包文件和你的~\TeX{}~源文件放在同一目录下, 这种情况下你不需要刷新系统的文件名数据库,但只有同一个目录下的文件可以使用这些宏包。 如果你拿到的是宏包的源文件,一般来说都包含两个文件:一个扩展名为~\texttt{.ins}, 另一个扩展名为~\texttt{.dtx}。 此外,通常会有一个~\texttt{readme.txt}~对宏包进行简要的说明。你应该先阅读这个文件, 接着对~\texttt{.ins}~文件运行~\LaTeX{}~命令,这会产生一个或者数个~\texttt{.sty}~ 文件以及其它相关文件。然后参照上面的方法结合宏包说明文件的要求,把生成的文件加入你的 ~\TeX{}~系统中。你还可以直接对~\texttt{.dtx}~文件运行~\LaTeX{}~从中产生宏包的帮助文档。 更详细的说明可以参见~lshort \cite{lshort-cn}。 \Question[Q-ctex-install-type]{\CTeX{}~中文套装软件的~Basic~和~Full~版本都有什么区别?}{0.4}{0.4} \CTeX{}~根据不同用户的要求制作了~Basic~和~Full~两个不同大小版本的~\CTeX{}~中文套装。 他们之间的区别仅在于其中的~\MiKTeX{}~包含的内容。~Basic~版本中的~\MiKTeX{}~只有 最基本的~\LaTeX{}~系统。你可以通过~\MiKTeX{}~提供的自动安装功能添加所需的~\LaTeX{}~组件和宏包。 Basic~版本所需的安装空间为一百多兆。 Full~版本中包含的是完整的~\MiKTeX{},适用于需要很多功能而且有较大硬盘空间的用户。 Full~版本需要六百多兆的安装空间。 \Question[Q-ctex-tools]{\CTeX{}-Fonts、~\CTeX{}-CS、~\CTeX{}-Ext~都是干什么的?和~\CTeX{}~中文套装有什么关系?}{0.4}{0.4} 除了~\CTeX{}~中文套装,~\CTeX{}~还制作了几个相关的安装包,分别是~\CTeX{}-Fonts、 ~\CTeX{}-CS~和~\CTeX{}-Ext。~\CTeX{}-Fonts~中包含了几种常用的中文字体的~Type1~ 字库和相应的配置文件。在没有安装~\CTeX{}-Fonts~时,~\CTeX{}~缺省使用~Windows~ 系统中的~TrueType~字库。关于两种字库的差别,参见~\Qref{Q-chinese-fonttype}~ 和~\Qref{Q-chinese-cjkfonts}。此外,对于~Windows 2000~以及之后的~Windows~操作 系统,安装~\CTeX{}-Fonts~还可以避开其中宋体字库的问题(参见~\Qref{Q-error-simsun}~)。 目前包含的字体有宋体、仿宋体、楷体、黑体、隶书和幼圆六种。 \CTeX{}-CS~是~\CTeX{}~套装中的中文安装部分,包括~CJK~和~CCT~的所有文件。对于使用 ~\CTeX{}~套装的用户,~\CTeX{}-CS~可以用于将中文相关的设置恢复到~\CTeX{}~套装的初始状态。 对于没有安装~\CTeX{}~套装的用户,则可以在用户自行安装的~\MiKTeX{}~中增加中文支持。 此外,~\CTeX{}-CS~还支持为~\fpTeX{}~(即~\TeXLive{}~)增加中文支持。 \CTeX{}-Ext~是~\CTeX{}~套装的扩展部分,用于一些~\TeX{}~相关工具的中文设置和安装。 目前的版本包括~\ConTeXt{}~的中文设置安装。 \section{新手入门} \Question[Q-newbie-install]{我是新手,该如何开始?}{0.3}{0.3} 首先,我们建议你至少阅读一些简单的教材,例如~lshort~中文版~\cite{lshort-cn}~, 对~\LaTeX{}~有一个基本的了解。 在安装系统方面,如果你不需要中文支持,可以安装~\MiKTeX{}~或者~\fpTeX{}~, 如果需要用到中文,建议使用~\CTeX{}~中文套装来学习使用。否则,光是中文的设置 安装就可能使你焦头烂额。在~Linux~下,你可以使用~\teTeX{}~。 在安装完系统以后,先输入一个最简单的例子(英文的例子参见~\Qref{Q-newbie-example}~, 中文的例子参见~\Qref{Q-chinese-cctexample}~和~\Qref{Q-chinese-cjkexample}~) 来看看系统是否正确安装了。之后你就可以开始使用了。 如果遇到问题,建议使用一个尽可能简单的例子来测试你的问题,否则的话, 在一个复杂文件里排除错误会花掉你很多的精力。 而且由于大的文档上下文的命令互相影响,会使得调试变得困难,特别是对初学者来说。 如果你使用的是别人的模板,那么遇到问题最好的解决办法就是问模板的作者,请求他的帮助。 如果是一般的问题,你可以到~\CTeXBBS~或者其他国内外的~\TeX{}~网站上请求帮助。 在~\CTeXWWW~上你可以找到这些网络链接。 \Question[Q-newbie-example]{能否举一个简单的英文排版例子?}{0.1}{0.4} \begin{code} \documentclass{article} \begin{document} This is a test file. \end{document} \end{code} 这个例子需要保存为~\texttt{.tex}~后缀的文件,然后用~\LaTeX{}~编译, 生成的~DVI~文件可以用~DVI~浏览器进行查看或者用~dvips~转换成~\PS~文件。 假设文件名是~\texttt{test.tex}~,生成~\PS~文件的完整编译过程是: \begin{prompt} latex test dvips test \end{prompt} \Question[Q-newbie-editors]{用什么编辑工具来编辑~\LaTeX{}~文件?}{0.3}{0.3} \LaTeX{}~文件是标准的文本文件,任何一个文本编辑工具都可以编辑~\LaTeX{}~文件。 但是有些编辑器针对~\LaTeX{}~文件作了设置和优化,例如增加可以直接调用~\LaTeX{}~ 编译程序的菜单或者按钮,使得你可以更方便的进行编辑、编译工作。 在~Windows~中对~\LaTeX{}~支持最好的是~WinEdt~,针对~\MiKTeX{}~和~\fpTeX{}~都有 预制好的菜单和工具条按钮,安装完就可以使用。~WinEdt~还可以通过工具条输入许多数学符号, 免去了记忆的烦恼。在各种细节上,例如项目管理、彩色关键字、括号匹配等等, ~WinEdt~对~\LaTeX{}~的支持都很完善,你可以在使用中慢慢发掘他的强大功能。 还有一部分用户喜欢使用~UltraEdit~和~Editplus~,这两个都是功能强大的通用编辑工具, 你可以针对~\LaTeX{}~定制菜单和工具条。缺点就是这些都要你自己动手,在一些细的方面, 也没有~WinEdt~考虑得周到,毕竟不是专门针对~\LaTeX{}~的编辑器。 此外,还有一些其他的编辑器,如~WinTeX~、~TeXnicCenter~等,如果你感兴趣, 可以一一尝试,挑一个自己喜欢的来编辑~\LaTeX{}~文件。 在~Linux/Unix~下,我们推荐使用~vi~或者~Emacs~作为~\LaTeX{}~编辑器。 \Question[Q-info-preamble]{什么是\faqindex{导言区}~(\faqindex{preamble})~?}{0.2}{0.2} \LaTeX{}~文档的标准结构是 \begin{code} \documentclass{article} ... \begin{document} ... \end{document} ... \end{code} 在~\verb|\begin{document}|~和~\verb|\end{document}|~之间的是我们的正文部分。 而在~\verb|\documentclass{article}|~和~\verb|\begin{document}|~之间的部分, 通常用于定义一些全局命令和参数,这个部分就称为{\it 导言区},英文是~{\it preamble}~。 在~\verb|\end{document}|~之后的部分会被~\LaTeX{}~完全忽略, 可以用来写一些关于文档的注释,或者暂时不想包含到正文中去的内容, 也有人把它叫做~postamble~,因为它和导言区~(preamble)~处在完全相对的位置。 \Question[Q-newbie-fndb]{什么是文件名数据库?怎么刷新?}{0.1}{0.1} \TeX{}~系统通过这个数据库记录了所需要的各种文件的名字和具体目录位置。 每次你往系统中添加文件后,都要记得刷新这个数据库, 否则~\TeX{}~有可能找不到需要的文件。 刷新文件名数据库的具体命令取决于你使用的~\TeX{}~系统。~\teTeX{}~和~\fpTeX{}~的命令是 \begin{prompt} texhash \end{prompt} \MiKTeX{}~用户可以在~Dos~窗口中输入以下命令 \begin{prompt} initexmf --update-fndb \end{prompt} 或者使用~\MiKTeX{}~提供的图形界面工具~\MiKTeX{} Options。在开始菜单中找到~\MiKTeX{} Options,打开点击~General~页上的~Refresh Now~按钮即可。 \section{中文支持} \Question[Q-chinese-cctcjk]{比较一下~CJK~与~CCT~的优缺点?}{0.1}{0.1} CJK~比~CCT~的优越之处有以下几点: \begin{enumerate} \item~字体定义采用~\LaTeX{} NFSS~标准,生成的~DVI~文件不必像~CCT~那样 需要用~patchdvi~处理后才能预览和打印。而且一般~GB~编码的文件也不必进行 预处理就可直接用~\LaTeX{}~命令进行编译。 \item~可使用多种~TrueType~字体和~Type1~字体,生成的~PDF~文件更清楚、漂亮。 \item~能同时在文章中使用多种编码的文字,如中文简体、繁体、日文、韩文等。 \end{enumerate} 当然,~CCT~在一些细节上,如字体可用中文字号,字距、段首缩进等更符合中文的习惯。 而~CJK~就没有针对中文习惯指定特殊的排版标准。 目前,~CCT~的作者已经推出了最新版的~CCT,可以使用~CJK~的字库,从而也避免了预处理 和~patchdvi~的过程,使用更方便,排版效果更美观了。最新版的~CCT~可以在 \faqurl{ftp://ftp.cc.ac.cn/pub/cct/} 下载,或者使用~\CTeX{}~提供的工具~\CTeX{}-CS~升级。 \Question[Q-chinese-cctexample]{能否举一个简单的~CCT~中文排版例子?}{0.2}{0.2} 一个简单的老版本~CCT~格式的例子是: \begin{code} \documentclass{cctart} \begin{document} \kaishu 这是中文楷体字。 \end{document} \end{code} 这个例子需要保存为~\texttt{.ctx}~后缀的文件,然后用~cct~命令进行预处理,生成同名 ~\texttt{.tex}~文件。再用~\LaTeX{}~编译,生成的~DVI~文件需要~patchdvi~进行处理后 才能用~DVI~浏览器进行查看或者用~dvips~转换成~\PS~文件。 假设文件名是~\texttt{test.ctx}~,完整的编译过程是: \begin{prompt} cct test latex test patchdvi -r600x600 -b test.dvi temp.dvi del test.dvi ren temp.dvi test.dvi dvips test \end{prompt} 新版的~CCT~除了保留原来的处理方式以外,增加了两种新的处理方式。 第一种是用~\TeX{}~的处理来代替原来的~cct.exe~的预处理。 这种方式的源文件和老的文件相同,但是不用再存成~\texttt{.ctx}~为后缀的文件, 也不用~cct~命令进行预处理。除此之外,其余和老的处理方式基本相同。 第二种处理方式是采用~CJK~的中文字库,需要在系统中安装好~CJK~字库。 与第一种方式的主要区别就在于去掉了~patchdvi~处理~DVI~文件的需要。 使用上,是在~\cmd{documentclass}~命令中加上参数~CJK~。 具体的例子如下: \begin{code} \documentclass[CJK]{cctart} \begin{document} \kaishu 这是中文楷体字。 \end{document} \end{code} 这个例子可以象英文文档一样的编译(见~\Qref{Q-newbie-example}~)得到正确的输出。 \Question[Q-chinese-cjkexample]{能否举一个简单的~CJK~中文排版例子?}{0.1}{0.2} 在安装好~CJK~的系统中,下面这个例子可以象英文文档一样的编译 (见~\Qref{Q-newbie-example}~)得到正确的输出。 \begin{code} \documentclass{article} \usepackage{CJK} \begin{document} \begin{CJK*}{GBK}{kai} 这是中文楷体字。 \end{CJK*} \end{document} \end{code} \Question[Q-chinese-cjkindent]{在~CJK~中如何使段首缩进两个中文字符宽度?}{0.1}{0.1} 在~CJK~环境中使用命令 \begin{latexcmd} \cmd{CJKindent} \end{latexcmd} \Question[Q-chinese-cjkglue]{在~CJK~中如何调整汉字的间距?}{0.3}{0.3} CJK~会在两个汉字之间插入一个~\cmd{CJKglue}~,因此我们修改~\cmd{CJKglue}~的定义 就可以调整汉字的间距。用法是 \begin{latexcmd} \cmd{renewcommand}\marg{\cmd{CJKglue}}\marg{\cmd{hskip} \parg{b} plus \parg{p} minus \parg{m}} \end{latexcmd} 其中~\parg{b}~、~\parg{p}~和~\parg{m}~都是~\TeX{}~长度,如~0.05pt~。执行以上命令后, 汉字的标准间距就是~\parg{b}~,在需要的时候向上向下调整,调整幅度分别不超过~\parg{p}~ 和~\parg{m}~。 CJK~的缺省值是~\verb|\hskip 0pt plus 0.08\baselineskip|~。 \Question[Q-chinese-cjkstar]{\env{CJK}~和~\env{CJK*}~有何不同?}{0.3}{0.3} \pkg{CJK}~宏包有两种不同的处理方式。一个是 \begin{code} \begin{CJK}.... ... \end{CJK} \end{code} 称为~\env{CJK}~模式;另一个是 \begin{code} \begin{CJK*}.... ... \end{CJK*} \end{code} 称为~\env{CJK*}~模式。两个模式的区别在于~\env{CJK*}~会忽略~CJK~字符之间 的空格,这是我们中文的习惯。而~\env{CJK}~则使用英文的习惯,即词之间保留空格, 当然如果空格多于一个,~\TeX{}~也会忽略多余的空格。 两种方式各有利弊。首先来看~\env{CJK}~模式,它的好处是符合~\TeX{}~的英文处理习惯, 无需对空格进行额外处理,坏处是不符合中文习惯。一个经常发生的问题就是, 由于~\TeX{}~将分行符也视为空格,因此就造成中文字符间产生多余的空格, 使得排版结果很难看。解决方法是在行尾加上注释字符~\%~来告诉~\TeX{}~ 忽略两行间的分行符。\emph{因此,我们不建议使用~\env{CJK}~模式。} \env{CJK*}~模式由于自动忽略中文字符之间的所有空格,因此没有上面的这种副作用。 但是这也带来了另一方面的问题,就是如果想在中文字符中间加入空格就必须加以保护, 避免被忽略。加保护的方法是在空格前面加上~\bs~字符。实际上~\env{CJK*}~模式 忽略中文字符后面的空格,因此中文后面如果接着英文,必须加上保护的空格~\verb|\ |~ 或者~\verb|~|~符号,否则可能造成断行错误(参见~\Qref{Q-chinese-linebreak}~)。 两种模式还可以通过命令互相转换,使用 \begin{latexcmd} \cmd{CJKnospace} \end{latexcmd} 则进入~\env{CJK*}~模式,用 \begin{latexcmd} \cmd{CJKspace} \end{latexcmd} 则进入~\env{CJK}~模式。 \Question[Q-chinese-linebreak]{中英文混排时为何无法正确分行?}{0.3}{0.3} 首先,英文标点符号后要留空格,这是英文的习惯,否则~\TeX{}~无法断句。 其次,要用空格隔开中英文字符,~\TeX{}~才能正确分行。 但是如果是用正常的空格,由于空格间隙太大,容易造成比较难看的排版效果。 因此,~\pkg{CJK}~宏包重新定义了符号~\verb|~|~的意义。 ~\verb|~|~的原始定义是不可断行的空格,~CJK~将其重定义成一个比较合适的弹性距离, 大约相当于四分之一个汉字宽度,用于分隔中英文字符。我们通过使用命令 \begin{latexcmd} \cmd{CJKtilde} \end{latexcmd} 来实现~\verb|~|~的重定义。如果要恢复原始定义,可以用命令 \begin{latexcmd} \cmd{standardtilde} \end{latexcmd} 注意:在~\env{CJK*}~模式下中文字符后面的空格会被忽略, 因此中文字符后面必须加上保护的空格~\verb|\ |~或者~\verb|~|~符号来隔开英文字符。 \Question[Q-chinese-fonttype]{什么是点阵字库和矢量字库?}{0.2}{0.2} 我们都知道,各种字符在电脑屏幕上都是以一些点来表示的,因此也叫点阵。 最早的字库就是直接把这些点存储起来,就是点阵字库。常见的汉字点阵字库有 ~16x16~,~24x24~等。点阵字库也有很多种,主要区别在于其中存储编码的方式不同。 点阵字库的最大缺点就是它是固定分辨率的,也就是每种字库都有固定的大小尺寸, 在原始尺寸下使用,效果很好,但如果将其放大或缩小使用,效果就很糟糕了, 就会出现我们通常说的锯齿现象。因为需要的字体大小组合有无数种, 我们也不可能为每种大小都定义一个点阵字库。于是就出现了矢量字库。 矢量字库是把每个字符的笔划分解成各种直线和曲线,然后记下这些直线和曲线的参数, 在显示的时候,再根据具体的尺寸大小,画出这些线条,就还原了原来的字符。 它的好处就是可以随意放大缩小而不失真。而且所需存储量和字符大小无关。 矢量字库有很多种,区别在于他们采用的不同数学模型来描述组成字符的线条。 常见的矢量字库有~\faqindex{Type1}~字库和~\faqindex{TrueType}~字库。 \Question[Q-chinese-cjkfonts]{在~\pkg{CJK}~中都可以使用哪些矢量字库?}{0.2}{0.2} 在~\pkg{CJK}~中可以使用~\faqindex{Type1}~字库和~\faqindex{TrueType}~字库, 都能产生很好效果的输出,但有许多细微的差别,输出结果取决于所用的工具。 下面根据转换工具和输出文件类型来比较它们的差异。 \begin{enumerate} \item~使用~dvips~生成~\PS~文件 \begin{itemize} \item~dvips~可以直接使用~Type1~字库,生成的~\PS~文件中包含了字符的矢量描述, 具有很好的缩放效果。 \item~dvips~不能直接使用~TrueType~字库,因此必须通过~ttf2pk~生成中间的pk字库, 这是一种点阵字库,所以生成的~\PS~文件在效果较差。 \end{itemize} \item~使用~dvipdfm~生成~PDF~文件和~dvips~类似,可以直接使用~Type1~字库或者 通过~ttf2pk~间接使用~TrueType~字库。 \item~使用~pdf\LaTeX{}~生成~PDF~文件可以直接使用两种字库,因此都可以产生效果很好的输出。 \item~使用~dvipdfmx~生成~PDF~文件可以直接使用两种字库,因此都可以产生效果很好的输出。 而且直接使用~TrueType~字库时生成的~PDF~文件是唯一能支持对中文内容进行正常拷贝粘贴的。 \end{enumerate} \Question[Q-chinese-fontconflict]{两种类型矢量字库会不会发生冲突?}{0.2}{0.2} 不会,每个工具都有自己的~config~和~map~文件按一定的顺序查询有哪些字库可以使用, 来决定使用哪种字库。 \Question[Q-chinese-pdfcopy]{如何生成支持中文拷贝粘贴的~\faqindex{PDF}~文件?}{0.2}{0.2} 生成可以拷贝粘贴中文的~PDF~文件目前只有~\faqindex{dvipdfmx}~(原名~dvipdfm-cjk~)可以做到, 它必须配置成直接使用中文~TrueType~字库。 \Question[Q-chinese-plaintex]{如何在~Plain \TeX{}~中使用中文?}{0.4}{0.4} CCT~支持~Plain \TeX{}~中使用中文。在最新版的~CCT~中,只需在~\TeX{}~源文件的开始加上如下命令: \begin{code} \let\CCTCJKfonts=1 \input CCT.sty \end{code} \section{文档排版} \Question[Q-typeset-indentfirst]{如何使首段段首也缩进?}{0.1}{0.1} 使用~indentfirst~宏包: \begin{latexcmd} \cs{usepackage}\marg{\pkg{indentfirst}} \end{latexcmd} \Question[Q-typeset-doublespace]{如何设置双倍或者更大的行间距?}{0.2}{0.3} 使用命令 \begin{latexcmd} \cmd{renewcommand}\marg{\cmd{baselinestretch}}\marg*{倍数} \end{latexcmd} \Question[Q-typeset-comments]{如何注释掉一大段内容,不做编译?}{0.1}{0.2} 用命令 \begin{latexcmd} \cmd{iffalse} \end{latexcmd} 和 \begin{latexcmd} \cmd{fi} \end{latexcmd} 把需要注释的内容包含起来,这样~\LaTeX{}~编译的时候就会忽略这些内容, 不做编译。 也可以使用~\pkg{verbatim}~宏包提供的~\env{comment}~环境: \begin{code} ... \usepackage{verbatim} ... \begin{comment} This is comment. \end{comment} ... \end{code} \Question[Q-multicol]{如何生成分栏的文档?}{0.1}{0.4} 如果全文都是双列分栏格式,可以在~\cmd{documentclass}~命令中加入参数~twocolumn。例如: \begin{code} \documentclass[twocolumn]{article} \end{code} 如果要生成单双列混合的分栏格式,或者超过两列的分栏格式,则要用到~\pkg{multicol}~宏包的 ~\env{multicols}~环境。 \begin{latexcmd} \cs{usepackage}\marg{\pkg{multicol}} \end{latexcmd} 然后将需要多列的地方使用: \begin{latexcmd} \cs{begin}\marg{\env{multicols}}\marg*{列数} \end{latexcmd} 和 \begin{latexcmd} \cs{end}\marg{\env{multicols}} \end{latexcmd} 包含起来。 \Question[Q-multicol-balance]{如何使得双栏文档保持底部对齐?}{0.3}{0.4} 在~\LaTeX{}~标准文档类中使用~twocolumn~选项产生双栏格式文档的时候, 如果一页的内容不足以排满页面时,~\LaTeX{}~的结果是先排满左栏, 然后再排版右栏。这样就造成了两栏的长度不相等,底部不齐。 很多时候我们不希望这种排版结果。 这个问题只有在用标准文档类的~twocolumn~模式的时候才会遇到, 使用~\pkg{multicol}~宏包就可以避免这个问题(参见~\Qref{Q-multicol}~)。 但是~\pkg{multicol}~宏包也有一些缺点,例如不允许单栏的浮动对象 (参见~\Qref{Q-float-multicol}~)。 要使标准文档类的~twocolumn~模式下也能做到双栏底部对齐,可以通过手工 调整分栏的位置。在~twocolumn~模式下~\cmd{newpage}~命令使~\LaTeX{}~ 开始在新的一栏上排版,如果单前栏是左栏,就换到右栏上开始排版。 在合适的地方使用~\cmd{newpage}~命令可以使得双栏底部对齐(注意, 不能用~\cmd{clearpage}~命令,这个命令会开始在新的一页上排版, 而不管当前在哪一栏上)。几乎没有人愿意使用这种方法,不仅因为它需要 你手工计算需要插入命令的位置,每次改动文档都有可能需要变动 ~\cmd{newpage}~命令的位置,而且对于一些自动生成的文档内容(例如参考 文献和索引),要插入~\cmd{newpage}~命令十分困难。 \pkg{flushend}~宏包通过修改~\LaTeX{}~核心定义来解决这个问题。 使用它提供的~\cmd{flushend}~命令可以使得双栏底部对齐,而~\cmd{raggedend}~ 命令则取消底部对齐。~\cmd{flushend}~命令会在宏包装入的时候自动运行。 \emph{\pkg{flushend}~宏包只对文档最后一页有效,也就是说所有中间的强制换页, 或者章节的自动换页导致的双栏底部不齐现象都无法解决。} \pkg{balance}~是另一个针对该问题的宏包,它比~\pkg{flushend}~宏包更加完善, 而且对整个文档的任何位置都有效。\pkg{balance}~宏包提供了~\cmd{balance}~ 命令来打开双栏底部对齐机制,~\cmd{nobalance}~命令来关闭这个机制。 和~\pkg{flushend}~宏包不同,它在装入的时候缺省不打开对齐机制, 因此需要在文档中加入~\cmd{balance}~命令来启用底部对齐。 在使用这些宏包的时候需要注意,单栏的浮动对象有可能破坏这些宏包的对齐机制。 这种时候需要手工调整浮动对象的位置来改善排版效果。这也是~\pkg{multicol}~ 宏包不支持单栏浮动对象的原因之一。 \Question[Q-multicol-abstract]{如何在双栏文档中使用通栏的摘要?}{0.3}{0.3} 在排版双栏文章的时候最经常遇到的一个问题就是如何产生通栏(不分栏)的摘要。 解决这个问题的方法是: \begin{code} \documentclass[twocolumn]{article} ... \begin{document} ... \title{...} \author{...} \twocolumn[ \begin{@twocolumnfalse} \maketitle \begin{abstract} ... \end{abstract} \end{@twocolumnfalse} ] ... \end{document} \end{code} \emph{注意,~\cmd{maketitle}~命令必须放在示例中的位置,否则标题结束后会另起一页。} 但是标题和作者的定义可以放在前面的位置。 上面这个方法会带来一个副作用,那就是~\cmd{thanks}~命令在~\cmd{title}~和~\cmd{author}~ 中失去了作用,无法产生脚注。这个问题可以通过附加一小段代码来解决: \begin{code} ... \title{...} \author{...\thanks{}} % 这里用一个空的 \thanks \twocolumn[ ... ] { \renewcommand{\thefootnote}{\fnsymbol{footnote}} %如果使用数字做脚注标号,则不需要这一行 \footnotetext[1]{真正的脚注内容} } ... \end{code} \pkg{abstract}~宏包提供了一个~\cmd{saythanks}~命令和~\env{onecolabstract}~环境 来简化这个稍嫌复杂的过程。它们的用法是: \begin{code} ... \title{...} \author{...\thanks{...}} \twocolumn[ \maketitle \begin{onecolabstract} ... \end{onecolabstract} ] \saythanks ... \end{code} \Question[Q-typeset-landscape]{如何产生全部横排的文档?}{0.3}{0.3} 使用文档类的~landscape~参数,例如 \begin{code} \documentclass[landscape]{article} \end{code} 为了产生正确的结果,~dvips~必须加上~\texttt{-t landscpae}~参数, ~dvipdfm/dvipdfmx~必须加上~\texttt{-l}~参数。 \Question[Q-typeset-lscape]{如何使文档中的某一页横排?}{0.3}{0.3} 使用~\pkg{lscape}~宏包提供的~\env{landscape}~环境,例如 \begin{code} ... \usepackage{lscape} ... \begin{landscape} This is a landscape page. \end{landscape} ... \end{code} 将产生一个横排的页面,但是只有在~\PS~或者~PDF~文件中才能看到正确的效果。 \Question[Q-font-times]{如何使用~New Time Roman~字体?}{0.3}{0.4} 用~\pkg{times}~宏包就可以把文本的缺省字体换成~Times New Roman~字体。 如果你安装有~MathTime~字库,那么还可以使用~\pkg{mathtime}~宏包来 把数学环境中的字体都变成~Times New Roman~字体。例如 \begin{code} \usepackage{times} \usepackage[mtbold,mtpluscal,mtplusscr]{mathtime} \end{code} \section{数学公式} \subsection{编号} \Question[Q-math-thmnum]{如何实现定理、定义、推论等的统一编号?}{0.1}{0.1} 现在很多文章的定理、定义、推论、例子都采用统一编号,不再是 独立编号。如定义~1.1,接下来可能是定理~1.2,然后推论~1.3,等等。 这可以用如下的定义来完成: \begin{code} \newtheorem{thm}{Theorem}[section] %如果不采用章节号做前缀,则不用[section] \newtheorem{defn}[thm]{Definition} %这句定义使得defn环境和thm共享编号 \newtheorem{lem}[thm]{Lemma} %这句定义使得lem环境和thm共享编号 \end{code} \Question[Q-math-numwithin]{如何让公式编号中使用当前章节编号做前缀?}{0.3}{0.3} 如果你想让~\LaTeX{}~产生的公式编号中包含当前的章节编号,例如第一节的公式编号 是~(1.1) (1.2)~,第二节的公式编号是~(2.1) (2.2)~等等,你可以重新定义 ~\cmd{theequation}~: \begin{code} \renewcommand{\theequation}{\thesection.\arabic{equation}} \end{code} 这么做有一个小问题,每当新的章节开始的时候,公式编号不会重新从~1~开始。 你不得不使用~\cmd{setcounter}~在新的章节开始的时候把公式编号的计数器清零。 \pkg{amsmath}~宏包提供了一个~\cmd{numberwithin}~命令来自动完成这些工作。 \begin{code} \numberwithin{equation}{section} \end{code} 使得公式编号和章节编号联系在一起,而且章节编号改变时公式编号自动清零。 \cmd{numberwithin}~命令不光可以用于修改公式编号的格式,也可以用于将任意的 两个计数器联系在一起。 \Question[Q-math-subeqn]{如何实现如~(1a) (1b)~这种公式编号?}{0.1}{0.3} 使用~\pkg{amsmath}~宏包中的~\env{subequations}~环境。例如: \begin{example} \begin{subequations} \begin{equation} A = B \end{equation} \begin{equation} C = D \end{equation} \end{subequations} \end{example} 所有在同一个~\env{subequations}~环境中的公式共享一个主编号(例子中的~\theequation~)。 如果想用数字代替字母作为公式的子编号,或者修改编号的格式,可以在~\env{subequations}~ 环境内部重新定义命令~\cmd{theequation}~,例如 \begin{example} \begin{subequations} \renewcommand{\theequation} {\theparentequation-\arabic{equation}} \begin{equation} A = B \end{equation} \begin{equation} C = D \end{equation} \end{subequations} \end{example} 公式的主编号使用计数器~parentequation~,子编号使用计数器~equation~。 如果这种公式很多,在每一个~\env{subequations}~中都加上这么一句命令不是一个好的方法。 你可以重新定义一个新的环境: \begin{code} \newenvironment{mysubequations} {\begin{subequations}\renewcommand{\theequation}{\theparentequation-\arabic{equation}}} {\end{subequations}} \end{code} 然后使用自定义的环境代替~\env{subequations}~就可以了。 \Question[Q-math-eqnumprime]{如何让一个公式编号表示为另一个公式编号的变化形式?}{0.3}{0.3} 我们经常使用一个公式编号加上某些符号如~$'$~来表示公式的一个变化。 这样的公式编号可以通过~\pkg{amsmath}~宏包的~\cmd{tag}~命令加上 ~\LaTeX{}~的引用机制来实现。例如 \let\refsave\ref \def\ref#1{\refsave*{#1}} \begin{example} \begin{equation} \label{eq:original} A = B \end{equation} ... \begin{equation} \tag{\ref{eq:original}$'$} \label{eq:origprime} A = B + 1 \end{equation} ...~公式~\ref{eq:origprime}~是由 公式~\ref{eq:original}~变化而来~... \end{example} \let\ref\refsave \let\refsave\relax 类似的,你也可以实现其他形式的编号变化。 \subsection{字体} \Question[Q-math-mathbb]{实数域~$\mathbb{R}$~或复数域~$\mathbb{C}$~等的字体该用什么命令?}{0.1}{0.3} 使用~\pkg{amsfonts}~宏包提供的 \begin{latexcmd} \cmd{mathbb}\marg*{字母} \end{latexcmd} 命令,例如: \begin{example} $x \in \mathbb{R}$ and $c \in \mathbb{C}$ \end{example} \Question[Q-math-bm]{书中向量常用斜体加黑体表示,该用什么字体命令排版?}{0.1}{0.3} 使用~\pkg{bm}~宏包提供的 \begin{latexcmd} \cmd{bm} \end{latexcmd} 命令,例如: \begin{example} ${\bm x}^T {\bm y}$ \end{example} \subsection{其它} \Question[Q-math-limits]{如何使上下限出现在求和、积分符号的上下方而不是右边?}{0.3}{0.3} 数学公式中求和、积分符号的上下限的位置取决于是行间公式还是独立公式。 在行间公式中,类似的上下限出现在符号的右边,而在独立公式中出现在符号的上下方。 这一规则可以通过命令 \begin{latexcmd} \cmd{limits} \end{latexcmd} 和 \begin{latexcmd} \cmd{nolimits} \end{latexcmd} 来改变。行间公式缺省使用~\cmd{nolimits}~而独立公式缺省使用~\cmd{limits}。 如果要改变缺省规则,就在符号后面,上下限之前加入上面的两个命令之一。 例如缺省情况是 \begin{example} $$\sum_{i=1}^{n} i^2 = 0$$ If $\sum_{i=1}^{n} i^2 = 0$ then ... \end{example} 我们可以修改为 \begin{example} $$\sum\nolimits_{i=1}^{n} i^2 = 0$$ If $\sum\limits_{i=1}^{n} i^2 = 0$ then ... \end{example} \Question[Q-math-extsymb]{如何实现上下方能输入公式文字且可伸长的等号或者箭头符号?}{0.3}{0.3} 宏包~\pkg{amsmath}~提供了两个可以伸长的单箭头符号 \begin{latexcmd} \cmd{xleftarrow}\oarg*{下方公式}\marg*{上方公式} \end{latexcmd} 和 \begin{latexcmd} \cmd{xrightarrow}\oarg*{下方公式}\marg*{上方公式} \end{latexcmd} 示例如下: \begin{example} $ A \xleftarrow{n=0} B \xrightarrow[T]{n>0} C $ \end{example} \begin{advanced} \makeatletter \def\ExtendSymbol#1#2#3#4#5{\ext@arrow 0099{\arrowfill@#1#2#3}{#4}{#5}} \def\RightExtendSymbol#1#2#3#4#5{\ext@arrow 0359{\arrowfill@#1#2#3}{#4}{#5}} \def\LeftExtendSymbol#1#2#3#4#5{\ext@arrow 6095{\arrowfill@#1#2#3}{#4}{#5}} \makeatother \newcommand\myRightarrow[2][]{\RightExtendSymbol{|}{=}{\Rightarrow}{#1}{#2}} \newcommand\myArrow[2][]{\ExtendSymbol{\Leftarrow}{=}{\Rightarrow}{#1}{#2}} \danger 至于其他样式的符号,我们可以利用~\pkg{amsmath}~提供的一些内部命令定义几个通用的 ~ExtendSymbol~命令来实现:\enddanger \begin{code} ... \usepackage{amsmath} ... \makeatletter \def\ExtendSymbol#1#2#3#4#5{\ext@arrow 0099{\arrowfill@#1#2#3}{#4}{#5}} \def\RightExtendSymbol#1#2#3#4#5{\ext@arrow 0359{\arrowfill@#1#2#3}{#4}{#5}} \def\LeftExtendSymbol#1#2#3#4#5{\ext@arrow 6095{\arrowfill@#1#2#3}{#4}{#5}} \makeatother \end{code} 三个命令的差别只在于符号上下的字符位置处理上。简单解释一下五个参数的意义: 前面三个参数用来组合生成最后的符号,第一个参数代表左端的符号, 第二个参数的代表中间重复的符号,第三个参数代表右端的符号。 最后两个参数分别是符号下的字符串和符号上的字符串。 现在我们就可以利用~ExtendSymbol~来定义我们想要的符号了。 例如,定义一个长的双箭头 \begin{code} \newcommand\myRightarrow[2][]{\RightExtendSymbol{|}{=}{\Rightarrow}{#1}{#2}} \end{code} 又如定义一个长的双向箭头 \begin{code} \newcommand\myArrow[2][]{\ExtendSymbol{\Leftarrow}{=}{\Rightarrow}{#1}{#2}} \end{code} 使用的时候可以用宽度为~0~的~rule~支撑指定符号的最小长度 也可以根据符号上下的字符长度来确定符号长度 \begin{example} $$ A \myRightarrow[\rule{3cm}{0cm}]{A=B} B $$ $$ A \myArrow[A=B^2]{B=A^2} B $$ $$ A \myArrow{B^2=A^2} B $$ \end{example} 大家可以举一反三。 \end{advanced} \section{图形表格} \subsection{图形} \Question[Q-graphics-how]{\LaTeX{}~如何使用图形?}{0.2}{0.4} 由于~DVI~文件经常被转为~\PS~文件,所以~\LaTeX{}~支持最好的是 ~EPS~格式(~Encapsulated PostScript~,是~\PS~语言的子集) 的图形。目前的~\LaTeXe{}~包含两个功能相同的图形宏包:~graphics~和 ~graphicx~宏包。两者的差异是~graphics~宏包使用标准的~\LaTeX{}~参数 语法规则,而~graphicx~版本则使用更为简便灵活的命名机制。 一个使用图形的简单例子是: \begin{code} \documentclass{article} \usepackage{graphicx} \begin{document} \includegraphics{file.eps} \end{document} \end{code} 因为~\cmd{includegraphics}~不会结束当前段落,所以它能够在文本行中放置图形。 如果需要放置独立的图形,则需要用到~figure~浮动环境。例如: \begin{code} \documentclass{article} \usepackage{graphicx} \begin{document} \begin{figure} \includegraphics{file.eps} \caption{This is caption of figure} \end{figure} \end{document} \end{code} 在~figure~环境中可以使用~\cmd{caption}~命令来制定图形的标题,这个标题将会出现在图形 的上方或者下方,还会通过使用~\cmd{listoffigures}~命令出现在一个图形目录中。 我们建议~\LaTeX{}~用户详细阅读《~\LaTeX{}~图形指南》\cite{lgraphics-cn}~一书, 可以使得你对在~\LaTeX{}~中使用图形有一个全面的了解,避免走弯路。 \Question[Q-graphics-type]{\LaTeX{}~支持哪些图形格式?}{0.2}{0.3} 目前~\LaTeX{}~只有~EPS~格式的图形在所有的~TeX~系统中都能得到全面的支持。 而其他的图形,如~JPEG~可以在某些系统中使用,这取决于所用的~DVI~转换程序。 因为一般最终要得到的都是~\PS~或者~PDF~格式的文件,因此先将图形转换为 ~EPS~格式仍然是最有效、最方便的图形处理方法。 \begin{advanced} \ddanger 虽然如此,我们在这里还是给出一个直接使用~JPEG~图形和~PNG~图形的方法。 假设我们有~ctex-j.jpg~和~ctex-p.png~图形,以及两个格式为\enddanger \begin{prompt} %%BoundingBox: 0 0 width height \end{prompt} 的~ctex-j.bb~和~ctex-p.bb~文件,其中的~width~为对应图形的宽度, ~height~为高度。这个文件也可以用~\faqindex{ebb}~程序生成。 ~\faqindex{ebb}~是~dvipdfm~带的一个工具,专门用来生成图形文件的~BoundingBox~。 ~\MiKTeX{}~和~\fpTeX{}~中都已带有这个程序。然后编译下面的例子: \begin{code} \documentclass{article} \usepackage{graphicx} \DeclareGraphicsRule{.jpg}{eps}{.bb}{} \DeclareGraphicsRule{.png}{eps}{.bb}{} \begin{document} \includegraphics{ctex-j.jpg} \includegraphics{ctex-p.png} \end{document} \end{code} 在~\cmd{includegraphics}~命令中可以使用各种参数,和~EPS~图形一样。 编译后使用~dvipdfm~将~DVI~转换为~PDF~文件可以看到图形已被正确插入。 用最新的~\MiKTeX{}~中的~dvips~转换为~\PS~文件或者用~DVI~预览工具~yap 0.99e~也可以看到图形,不过图形的大小和颜色都不正确。 而~\fpTeX{}~的~DVI~预览工具~windvi~就完全看不见图形。 \end{advanced} \Question[Q-graphics-dvieps]{\faqindex{DVI}~里不能显示~\faqindex{EPS}~图片?}{0.2}{0.2} 这是正常现象,因为~EPS~图形并没有真正被加到~DVI~文件中, 它是在从~DVI~到~\PS~转换时才被加到生成的~\PS~文件中的。 因此,所有用到的~EPS~文件必须和~DVI~文件在一起。 大多数旧版本的~DVI~浏览器不支持显示~EPS~图形。这时, ~DVI~浏览器一般会将~EPS~图形的~BoundingBox~用一方框显示出来, 以方便使用者对图形进行定位。目前版本的一些~\TeX{}~软件如~\MiKTeX{}~、 ~\fpTeX{}~和~\teTeX{}~等所带的~DVI~浏览器~(Yap, Windvi, Xdvi)~ 可以借助于~Ghostscript~来显示~EPS~图形。即使是这样, 它们对~EPS~的支持仍然是有限的,不支持~psfrag~之类的~\PS~特殊处理效果, 而且经常会出现不正常的显示。此时并不是你的~DVI~文件或者~DVI~浏览器损坏了, 而是要将~DVI~文件转换成~\PS~文件或者~PDF~文件进行察看和打印, 才能得到最终的真正效果。 \subsection{表格} \Question[Q-table-pcol]{表格中使用~p~参数的列如何改变对齐方式?}{0.3}{0.3} 表格的列参数中的~p~参数可以指定列的宽度,但是由于无法和其他控制对齐方式的 参数同时作用在一个列上,因此需要使用额外的方法来控制这些列的对齐方式。 常用的控制对齐方式命令有:~\cmd{centering}~(居中)、~\cmd{flushleft}~ (左对齐)和~\cmd{flushright}~(右对齐)等。 真正的麻烦并不在这里,而在于换行命令。当~p~参数被用在最后一列时, 如果在这一列中使用上面的这些对齐命令,例如 \begin{code} ... & \centering ... \\ \end{code} 就会遇到 \begin{prompt} ... misplaced \noalign ... \end{prompt} 或者类似的编译错误。问题的原因是换行命令~\cmd{\bs}~在不同的环境下有着 不同的定义。在~\env{tabular}~环境中,这个命令被重新定义以适合于控制表格 的显示,而~\cmd{centering}~、~\cmd{flushleft}~和~\cmd{flushright}~命令 把它修改成了另一个不兼容的定义。因为表格的每一个格子都是通过一个盒子 (~box~)来实现的,格子内的定义在分隔符~\verb|&|~或者~\cmd{\bs}~之后都 不再有效,因此上面的这个问题只会出现在每一行的最后一列上。 \LaTeX{} 2.09~的解决方法是保存并在稍后恢复~\cmd{\bs}~的定义: \begin{code} \def\PBS#1{\let\temp=\\% #1% \let\\=\temp} \end{code} 用法是 \begin{code} ... & \PBS\centering ... \\ \end{code} 这种技巧在使用~\pkg{array}~宏包提供的格式化列参数方法中也可以使用 \begin{code} \begin{tabular}{...>{\PBS\centering}p{50mm}} ... \end{tabular} \end{code} 而~\LaTeXe{}~则通过公开~\cmd{\bs}~在表格中的内部定义来解决这个问题。 这个定义被保存在命令 \begin{latexcmd} \cmd{tabularnewline} \end{latexcmd} 中。于是你可以使用 \begin{code} ... & \centering ... \tabularnewline \end{code} \Question[Q-table-fixwidth]{如何生成固定宽度的表格?}{0.3}{0.3} 在~\LaTeX{}~中生成固定宽度的表格有两种方法,一种是通过扩展列之间的空隙, 另一种是扩展某些指定的列。 第一种方法通过~\env{tabular*}~环境来实现。在~\env{tabular*}~环境的第一个 参数中指定表格的总宽度,然后在表格的列格式参数中使用~\cmd{extracolsep}~ 命令来增加列之间的空隙。 \begin{example} \begin{tabular*}{5cm}{@{\extracolsep{\fill}}lllr} \hline 1 & 2 & 3 & 4 \\ 21 & 22 & 23 & 24 \\ \hline \end{tabular*} \end{example} 这种方法的一个缺点是列之间如果加入分隔符,则列之间的空隙是放在下一列的左边 而不是在两列之间平均分配。我们来看上面的例子加入分隔符后的样子 \begin{example} \begin{tabular*}{5cm} {@{\extracolsep{\fill}}|l|l|l|r|} \hline 1 & 2 & 3 & 4 \\ 21 & 22 & 23 & 24 \\ \hline \end{tabular*} \end{example} 另一种方法可以通过使用~\env{tabular}~环境的列格式参数之一~p\parg{宽度}~ 来指定相应列的固定宽度。这种方法需要用户手工计算分配每个列的具体宽度。 另外,由于~p~参数不能和其他控制对齐方式的参数同时作用在一个列上, 因此需要使用额外的方法来控制这些列的对齐方式(参见~\Qref{Q-table-pcol}~)。 \pkg{tabularx}~宏包提供了一个自动计算分配列宽度的表格环境~\env{tabularx}~。 这个环境的使用方法和~\env{tabular*}~相同。不同之处在于它增加了一个~X~参数。 所有使用~X~参数的列会平均分配多余的空间,然后转换为~p~参数来指定列的宽度。 该宏包也提供了方法让你可以指定如何转换或者转换为其他的列参数。 该宏包需要~\pkg{array}~宏包的支持。 \pkg{ltxtable}~宏包则结合了~\pkg{longtable}~和~\pkg{tabularx}~宏包的特点。 但是它的用法有点复杂,请仔细阅读它的文档。 \subsection{浮动对象} \Question[Q-float-extraspace]{浮动对象和上下文之间的距离太大了,怎么办?}{0.3}{0.3} 经常有用户抱怨浮动对象~\env{figure}~或者~\env{table}~和上下文之间的距离太大了, 以至他们不得不手工调整这个距离。但是大多数人没有意识到是他们自己使用的代码 引入了这些额外的空间。 问题出在~\env{center}~环境(以及类似的~\env{flushleft}~和~\env{flushright}~ 环境)上面,这些环境都是基于~\LaTeX{}~的~\env{list}~定义的。 \env{list}~类型的环境都会在它们自己和上下文之间加入间隔,这个间隔的大小通过 许多参数来决定。因此,如果我们是用下面的代码: \begin{code} \begin{figure} \begin{center} \includegraphics{...} \caption{...} \end{center} \end{figure} \end{code} 或者更糟糕的 \begin{code} \begin{figure} \begin{center} \includegraphics{...} \end{center} \caption{...} \end{figure} \end{code} 那么就会多出一些无法预料的空白。 解决的方法是使用一些基本命令,而不是使用它们经过~\env{list}~类型环境包装后的格式。 例如 \begin{code} \begin{figure} \centering \includegraphics{...} \caption{...} \end{figure} \end{code} 这个方法适合于所有的~\LaTeX{}~宏包,除了一些过时的~\LaTeXe{}~之前的宏包,如 ~\pkg{psfig}~和~\pkg{epsf}~。 \Question[Q-float-multicol]{分栏文档中如何使用单栏或者通栏浮动对象?}{0.3}{0.3} 如果你使用的是~\LaTeX{}~标准文档类的~twocolumn~模式,那么使用~\env{figure}~ 和~\env{table}~环境可以产生单列的浮动图形或者表格,而使用~\env{figure*}~ 和~\env{table*}~环境则可以产生通栏的浮动图形或者表格。 如果你使用的是~\pkg{multicol}~宏包提供的~\env{multicols}~环境,那么就有一点小问题了。 ~\env{figure}~和~\env{table}~在这种方式下无法正常工作,会导致图形或者表格丢失。 但是,~\env{figure*}~和~\env{table*}~仍然可以正常工作,产生通栏的浮动图形或者表格, 就像在标准文档类的~twocolumn~模式下一样。 要在~\env{multicols}~环境中使用单栏的图形或者表格,可以使用~\pkg{float}~宏包提供的 ~[H]~位置选项。例如 \begin{code} \begin{figure}[H] ... \caption{...} \end{figure} \end{code} 但是要注意的是,这种方式产生的对象是不能“浮动”的,也就是说位置是固定的。 因此,有时候你必须仔细调整它的位置,以免造成分栏的底部参差不齐。 \Question[Q-float-multicol-place]{分栏文档中为何不能设定通栏浮动对象的位置?}{0.3}{0.3} 如果你在在分栏的文档中设定一些通栏的浮动对象(参见~\Qref{Q-float-multicol}~) 的位置选项,你会发现~[htbp]~四个选项中的~h~和~b~选项是不起作用的。也就是说, 通栏的浮动对象只能在页面的顶部(~t~选项)或者单独的页面上(~p~选项)。 以上是对标准文档类的~twocolumn~模式而言。如果使用~\pkg{multicol}~宏包的 ~\env{multicols}~环境,~b~选项是有效的,但~h~选项也是不起作用。 对于在标准文档类的~twocolumn~模式中需要把通栏浮动对象放置在页面底部, 也就是让~b~选项有效,可以使用宏包~\pkg{stfloats}~。 而要让~h~选项有效,目前还没有好的办法。~\pkg{midfloat}~宏包提供的~\env{strip}~ 环境可以作为一种近似的解决方案,但效果并不是很好。 \section{参考文献} \Question[Q-bib-overcite]{如何将文献引用作为上标出现?}{0.2}{0.2} 将文献引用作为上标出现可以使用~overcite~宏包 \begin{latexcmd} \cs{usepackage}\marg{\pkg{overcite}} \end{latexcmd} 或者使用~natbib~宏包的~super~参数 \begin{latexcmd} \cs{usepackage}\oarg{super}\marg{\pkg{natbib}} \end{latexcmd} 但是,这两种方法产生的上标引用都没有括号。要增加括号, 可以修改这两个宏包中的相应定义。更简单的一个方法是使用如下命令 \begin{code} \makeatletter \def\@cite#1#2{\textsuperscript{[{#1\if@tempswa , #2\fi}]}} \makeatother \end{code} 而不需使用任何宏包。 \Question[Q-bib-cites]{如何排序并压缩连续的引用,产生如~[2,4--8]~形式的引用?}{0.3}{0.3} 如果你在~\LaTeX{}~中使用~\cmd{cite}\marg{a,b,c,d,e,f}~则~\LaTeX{}~ 不会对条目进行排序,因此,可能会产生象~[6,2,5,8,4,7]~这样很难看的 排版效果。大多数人都希望对引用的条目进行排序,并且对连续的条目使用 压缩的表示方式,即用~[2,4--8]~表示上面的例子。使用~\pkg{cite}~宏包 可以解决这个问题。另一种方法是使用宏包~\pkg{natbib}~并指定选项 ~numbers~和~sort\&compress~,可以得到一样的效果。如果使用~\BibTeX{}~ 则必须使用~\pkg{natbib}~所带的数字式参考文献风格(~plainnat.bst~和 ~unsrtnat.bst~)。 在使用~\pkg{hyperref}~宏包来生成超链接的时候会有点问题。~\pkg{cite}~ 宏包会完全失效,产生没有排序和压缩的引用。而~\pkg{natbib}~则可以得到 排序但没有压缩的引用效果。如果你想得到排序而且压缩的效果,可以在加入 ~\pkg{natbib}~宏包后再使用宏包~\pkg{hypernat}~。 \Question[Q-bib-makebst]{如何定制自己的参考文献样式?}{0.3}{0.3} \index{makebst} 用户可以自己编写参考文献的样式文件(~\texttt{.bst}~文件)。 但并不是所有的用户都能迅速掌握用于编写参考文献样式文件的语言。 在这种情况下,修改现有的样式文件比较适合对该语言不熟悉的普通用户。 如果你需要的样式和现有样式的差别不是太大的话,你可以考虑使用 ~custom-bib~工具。这个工具包含一个~\texttt{makebst.tex}~文件。 在命令行上输入命令 \begin{prompt} latex makebst \end{prompt} 在回答一系列问题之后,一个按照你的要求定制的参考文件样式文件就诞生了。 \Question[Q-bib-bibtext]{如何才能把参考文献条目放在正文中?}{0.3}{0.3} 一些学术期刊和出版社要求把参考文献条目放在正文中,而另一些可能要求放在 脚注里。可以帮助你把参考文献条目放入正文中的宏包有 \begin{itemize} \item 宏包~\pkg{bibentry}~,该宏包对你使用的~\texttt{.bst}~文件产生的 参考文献条目格式有一些限制,但除此之外没有要求使用特定的样式文件。 \item 宏包~\pkg{inlinebib}~,该宏包要求必须使用它自带的 ~\texttt{inlinebib.bst}~样式文件。 \item 宏包~\pkg{jurabib}~,该宏包也要求使用它自带的四个样式文件之一。 \end{itemize} 而用于把参考文献条目放入脚注中的宏包有 \begin{itemize} \item 宏包~\pkg{footbib} \item 宏包~\pkg{jurabib} \end{itemize} \Question[Q-bib-backref]{能否生成反向引用(从参考文献指向引用的正文)?}{0.3}{0.3} 可以。有两个宏包可以使用,一个是~\pkg{citeref}~,另一个是~\pkg{backref}~宏包。 ~\pkg{citeref}~的代码似乎相对简单些(因此可能更稳定些),但是不能配合 ~\pkg{hyperref}~生成超链接。而~\pkg{backref}~是~\pkg{hyperref}~宏包附属的。 ~\pkg{backref}~有四个选项可以选择,缺省是~pageref~: \begin{itemize} \item ref~选项得到引用所在的节编号 \item pageref~选项得到引用所在的页码 \item hyperref~选项是超链接形式的~ref \item hyperpageref~选项是超链接形式的~pageref \end{itemize} 配合~\pkg{hyperref}~宏包使用时可以通过指定~\pkg{hyperref}~的~backref~或者 ~pagebackref~选项来自动装入~\pkg{backref}~宏包。 两个宏包都只能产生没有压缩的引用(如~[5,6,7]~不会被输出成~[5--6]~), 同时对于对该参考文献多次引用的页面,也不会重复出现。 \Question[Q-bib-chapterbib]{如何让每章或者每节都有单独的参考文献?}{0.3}{0.3} 使用~\pkg{chapterbib}~宏包可以让你在一个文档里产生多个参考文献。 不过并不像它的名字所表示的那样,这些参考文献并不是和章或者节联系在一起, 而是和~\cmd{include}~命令包含的子文件联系在一起。也就是说,每一个通过 ~\cmd{include}~命令包含的子文件可以拥有一个单独的参考文献, \pkg{bibunits}~宏包则允许用户使用~\cmd{bibliographyunit}~命令选择让每章 还是每节拥有一个单独的参考文献。也可以通过它提供的~\env{bibunit}~环境和 ~\cmd{putbib}~命令使得任意的一段文档内容拥有一个单独的参考文献。 \pkg{bibunits}~必须配合~\BibTeX{}~使用。详细的用法请参考宏包使用说明。 \Question[Q-bib-multibib]{如何产生多个参考文献列表?}{0.3}{0.3} 如果你想让文档的某些部分(如章、节)拥有单独的参考文献,请参考 ~\Qref{Q-bib-chapterbib}~。这里讨论的是如何将文档的参考文献分割 为多个部分,有三种方法可以选择,都必须配合~\BibTeX{}~使用。 \pkg{multibbl}~宏包通过对标准命令的扩展来支持多个参考文献并存。用户可以用 ~\cmd{newbibliography}~来定义一个新的参考文献,该命令的参数将会用来生成 单独的~\texttt{.aux}~文件,同时用在其他的相关命令中使得~\LaTeX{}~知道使用 哪个参考文献。而标准的参考文献命令和引用命令都被修改,增加额外的参数来区分 不同的参考文献。其中~\verb|\bibliography|~命令还增加了用于修改参考文献的标题 的参数。该宏包没有包含在~\MiKTeX{}~中,用户可以从~CTAN~下载并安装。 而宏包~\pkg{multibib}~则通过~\cmd{newcites}~命令让用户定义新的参考文献分类 以及分类的标题,而每定义一个新的分类都会产生这个分类专用的参考文献命令。 例如,当用户定义了一个新的分类~sec~,就会产生四个相应的命令: ~\verb|\bibliographysec|~、~\verb|\bibliographystylesec|~、 ~\verb|\citesec|~和~\verb|\nocitesec|~。使用这些命令,你就可以把来自一个 或者多个参考文献库(~\texttt{.bib}~文件)的引用放入任意一个参考文献分类中。 与上面的两个宏包不同,\pkg{bibtopic}~宏包采用另外一种解决方案。用户把参考文献 按照自己的分类放入不同的参考文献库(~\texttt{.bib}~文件)中,然后通过宏包提供 的~\env{btSect}~环境指定对应的参考文献库来生成参考文献列表。一个例子如下: \begin{code} \begin{btSect}{english} % 使用 english.bib \section{References (English)} \btPrintCited \end{btSect} \begin{btSect}{chinese} % 使用 chinese.bib \section{参考文献(中文)} \btPrintCited \end{btSect} \begin{btSect}{chinese} % 使用 chinese.bib \section{未引用的参考文献(中文)} \btPrintNotCited \end{btSect} \end{code} \Question[Q-bib-mcite]{如何将多篇参考文献合并在一个条目中列出?}{0.4}{0.4} 可以使用~\pkg{mcite}~宏包和~\texttt{phaip.bst}~样式文件。\pkg{mcite}~宏包 修改了标准宏包的~\cmd{cite}~定义,在前面加了~*~号的文献将和它前面的文献 合并到同一个条目。例如 \begin{code} \cite{paper1, paper2, *paper3, *paper4, paper5, *paper6} \end{code} 将只产生三个参考文献条目。第一个条目为文献~paper1,第二个条目包含文献 ~paper2、~paper3~和~paper4,第三个条目包含文献~paper5~和~paper6。 \section{其它专题} \subsection{脚注} \Question[Q-footnote-tab]{如何在表格中使用脚注?}{0.3}{0.3} 在标准的~\LaTeX{}~表格环境中使用~\cmd{footnote}~会使得脚注内容被吞掉, 而不是出现在页面底部。因此脚注无法在表格中使用。如果你用的是浮动表格环境 ~\env{table}~,那么你只有将表格放到一个~\env{minipage}~环境中, 这样所有的脚注会出现在表格的下方,例如 \begin{example} This is text ... \begin{minipage}{\textwidth} \begin{tabular}{|c|c|c|} \hline aaa\footnote{test} & bbb & ccc \\ \hline \end{tabular} \end{minipage} This is another text ... \end{example} 另外一个办法是使用宏包~\pkg{threeparttable}~中定义的表格。 如果你没有使用浮动环境而只是用了~\env{tabular}~环境, 那么可以使用下面几种方法对表格进行注释。 \begin{enumerate} \item 使用 \begin{latexcmd} \cmd{footnotemark}\oarg*{编号} \end{latexcmd} 命令在需要的位置放置脚注的标记,然后在结束~\env{tabular}~环境以后使用命令 \begin{latexcmd} \cmd{footnotetext}\oarg*{编号}\marg*{文字} \end{latexcmd} 来加上脚注的内容。这是~Lamport~的书~\cite{manual}~中给出的方法。 但是如果要做大量的脚注,这个方法就显得有点笨拙了。 \item 使用~\LaTeXe{}~的标准宏包~\pkg{tabularx}~或者~\pkg{longtable}~。 这会比用标准的~\env{tabular}~环境麻烦一点,但是可以正常的使用脚注。 \item 使用~\pkg{footnote}~宏包,把~\env{tabular}~环境放入一个~\env{savenotes}~ 环境中,或者在导言区使用 \begin{latexcmd} \cmd{makesavenoteenv}\marg{tabular} \end{latexcmd} 这样表格中的脚注就会被正确处理。 \item 把表格放在~\env{minipage}~环境中,这种方法使得所有的脚注都出现在表格的下方 (见上面的例子),比较难看。 \item 使用~\pkg{threeparttable}~宏包提供的表格。但该宏包是设计为浮动的表格使用的, 用在非浮动的表格时会显得有些奇怪。 \item 使用~\pkg{mdwtab}~宏包提供的表格,也可以正确处理脚注,还有一些独特功能。 但会使得某些和表格有关的宏包无法正常工作。 \end{enumerate} \Question[Q-footnote-sec]{如何在章节标题中使用脚注?}{0.3}{0.3} \cmd{footnote}~是一个脆弱的~(fragile) \LaTeX{}~命令, 这使得当它出现在~\cmd{section}~这类命令的参数中时无法正常工作。 在~\cmd{footnote}~之前使用~\cmd{protect}~命令来保护它可以使得 ~\LaTeX{}~正常编译,但是会有副作用:这些脚注标记会 出现在目录上,甚至在页眉上,这会进一步带来意想不到的结果! 你无法控制单独这些标记是否只出现在目录或者只出现在页眉上, 但可以通过以下的方法使得脚注不出现在目录和页眉上。 \begin{itemize} \item 使用章节标题命令的可选参数,这样只有可选参数中的内容才会出现在目录和 页眉中。例如 \begin{latexcmd} \cmd{section}\oarg*{标题}\marg{\parg{标题}\cmd{footnote}\marg*{脚注}} \end{latexcmd} \item 使用~\pkg{footmisc}~宏包并加上~stable~参数。这样就可以避免脚注出现在目录和页眉上。 \end{itemize} \Question[Q-footnote-cap]{如何在图表的标题中使用脚注?}{0.3}{0.3} 在命令~\cmd{caption}~的参数中使用脚注相当麻烦,可以说是~\Qref{Q-footnote-tab}~ 和~\Qref{Q-footnote-sec}~的混合体,此外还有它自己的问题。 所以决定在标题中使用脚注前最好认真考虑一下是否真的有必要这么做。 你必须用可选参数或者其他方法来使得文件能够被~\LaTeX{}~处理 而且脚注不会出现在目录中,同时也要把浮动的对象放入一个 ~\env{minipage}~环境以使得脚注能够被显示出来。 同时你要小心你的脚注是否被打印了两次。假如你使用下面的语句 \begin{code} \begin{figure} \begin{minipage}{\textwidth} ... \caption[目录中的标题]{真正的标题\footnote{脚注}} \end{minipage} \end{figure} \end{code} 而其中“真正的标题”足够长(具体的说,需要两行甚至更多行来排版)的时候, ~\LaTeX{}~的结果中就会出现两个一样的脚注。这个讨厌的现象可以通过使用 \emph{不带}~caption2~参数的~\pkg{ccaption}~宏包来避免。 \Question[Q-footnote-rep]{如何重复使用相同内容的脚注?}{0.3}{0.3} 如果具有相同内容的脚注在文档中多次出现在不同地方,简单地重复输入脚注内容 不是一个好办法。我们可以通过半自动的方法来避免重复输入,或者对需要重复的 脚注加上标签然后在其他地方加以引用。但是没有完全自动的解决方法(自动发现 重复的脚注并加以处理)。 如果你的整个文档只有一个脚注,而且需要重复使用,那么最简单的方法就是使用 ~\cmd{footnotemark}~命令的可选参数,例如 \begin{code} ...\footnote{需要重复使用的脚注内容} ... ...\footnotemark[1] \end{code} 可以这么做的原因就是因为我们知道只有一个编号为~1~的脚注。 如果脚注不止一个,但是顺序和位置是固定的,那么可以使用类似的技巧, 只需重复使用~\LaTeX{}~给相应的脚注分配的编号即可。但是大多数时候这么做 会比较麻烦,因为文档内容的改变经常会导致脚注之间的关系改变。 这时候,使用标签是一个更好的办法。 一个手工标签的方法是使用计数器来记住脚注的编号: \begin{code} \newcounter{fnnumber} ... ...\footnote{需要重复使用的脚注内容}% \setcounter{fnnumber}{\thefootnote}% ... ...\footnotemark[\thefnnumber] \end{code} 经常这么做确实有点繁琐。~\LaTeX{}~的标签引用机制可以帮助我们简化工作 \begin{code} ...\footnote{需要重复使用的脚注内容\label{fn:repeat}} ... ...\footnotemark[\ref{fn:repeat}] \end{code} 但是又有另外一个问题,~\LaTeX{}~会在第一次运行时报告~\cmd{footnotemark}~ 命令的参数为空的错误,这是因为~\cmd{ref}~命令无法确定标签的内容而返回了 一个空值造成的。这个错误会在第二次运行~\LaTeX{}~命令后消失。 \pkg{footmisc}~宏包和~\pkg{memoir}~文档类中定义了一个~\cmd{footref}~命令 来解决这个问题。这个命令还有一个额外的好处就是即使脚注使用了非数字的标记, 它也能正确工作。使用~\cmd{footref}~命令后我们的例子变成了 \begin{code} ...\footnote{需要重复使用的脚注内容\label{fn:repeat}} ... ...\footref{fn:repeat} \end{code} 这可能是最简洁的解决方法了。需要注意的是在以上的例子里 ~\emph{\cmd{label}~命令必须放在~\cmd{footnote}~的参数中}。 \pkg{fixfoot}~宏包提供了另外一种解决机制:使用~\cmd{DeclareFixedFootnote}~命令 预先定义好你需要重复使用的脚注,一般都放在导言区中,然后每次只需简单地使用 定义好的命令就可以了。 \begin{code} \DeclareFixedFootnote{\rep}{需要重复使用的脚注内容} ... ...\rep{} ...\rep{} \end{code} 这个宏包会保证每个重复的脚注在每一页最多出现一次。但是通常你需要运行多次 ~\LaTeX{}~来除去多余的脚注。 \subsection{目录} \Question[Q-typeset-addcontents]{怎样象第几章一样,将参考文献也加到目录?}{0.1}{0.1} 在参考文献部分之前加入 \begin{code} \clearpage %双面打印 (openright) 用 \cleardoublepage \addcontentsline{toc}{chapter}{参考文献} \end{code} 语句即可。类似的,你也可以手工加入其它目录项。 \Question[Q-typeset-contentsref]{手工加入的目录项页码错误,生成的书签链接也不对,怎么回事?}{0.1}{0.1} 这是因为~\cmd{addcontentsline}~命令后面的命令换页造成的页码不一致。 需要在~\cmd{addcontentsline}~命令之前加上 \begin{latexcmd} \cmd{clearpage} \end{latexcmd} 如果是~book~类或者用了~openright~参数的~report~类文档,新的章总是从奇数页开始, 则要把命令改成 \begin{latexcmd} \cmd{cleardoublepage} \end{latexcmd} 如果使用了~hyperref~宏包来生成~PDF~文件的书签链接,则还需要在上面的命令后再加上 \begin{latexcmd} \cmd{phantomsection} \end{latexcmd} \subsection{特殊符号} \Question[Q-circum-tilde]{如何输出~\textasciicircum~和~\textasciitilde~符号?}{0.3}{0.3} \textasciicircum~和~\textasciitilde~符号都是~\LaTeX{}~的特殊符号, 可以在~\env{verbatim}~环境得到符号本身,例如 \begin{example} \verb|^| and \verb|~| is special characters. \end{example} 还可以使用命令 \begin{latexcmd} \cmd{textasciicircum} \end{latexcmd} 得到~\textasciicircum~符号,用 \begin{latexcmd} \cmd{textasciitilde} \end{latexcmd} 得到~\textasciitilde~符号。 \Question[Q-visible-space]{如何显示可见的空格符号~\textvisiblespace~?}{0.3}{0.3} 可以使用 \begin{latexcmd} \cmd{textvisiblespace} \end{latexcmd} 命令,例如 \begin{example} Hello\textvisiblespace world\textvisiblespace ! \end{example} \Question[Q-circled-char]{如何显示带圈的符号?}{0.3}{0.3} 可以使用 \begin{latexcmd} \cmd{textcircled}\marg*{letter} \end{latexcmd} 为了产生比较美观的符号,可能要对其中的字体大小做一定的调整。 \begin{example} \textcircled{\scriptsize 1} \textcircled{\scriptsize 2} \textcircled{3} \textcircled{4} \textcircled{\scriptsize a} \textcircled{\scriptsize b} \textcircled{c} \textcircled{d} \end{example} 实际上版权符号~\copyright~就是这么产生的, 只是为了方便用户专门预定义了命令~\cmd{copyright}~。 你也可以为自己常用的一些符号定义一个简短的命令。 \Question[Q-per-thousand]{如何显示千分号~\textperthousand~?}{0.4}{0.4} 可以使用~textcomp~宏包提供的 \begin{latexcmd} \cmd{textperthousand} \end{latexcmd} 命令,例如 \begin{example} within 1\textperthousand{} error \end{example} \section{高级技术} \Question[Q-adv-atletter]{\cmd{makeatletter}~和~\cmd{makeatother}~是干什么用的?}{0.1}{0.1} 一些~\LaTeX{}~内部命令含有~@~字符,如~ \cmd{@addtoreset},如果需要在文档中使用这些内部命令, 就需要借助于另两个命令~\cmd{makeatletter}~和~\cmd{makeatother}。 下面的例子可以实现公式编号与节号的关联: \begin{code} \documentclass{article} ... \makeatletter % @ is now a normal "letter" for TeX \renewcommand\theequation{\thesection.\arabic{equation}} \@addtoreset{equation}{section} \makeatother % @ is restored as a "non-letter" character for TeX \begin{document} ... \end{code} \Question[Q-adv-latexdef]{如何查询~\LaTeX{}~命令和参数的缺省定义?}{0.3}{0.3} 首先你可以直接搜索相应的~\LaTeX{}~宏包以及同一目录下的其他文件。 如果你有宏包的源文件~(\texttt{.dtx})~的话,搜索源文件会更方便些。 而且源文件中会有详细的说明。对于这些源文件,可以直接用~\LaTeX{}~编译, 产生说明文档。~\LaTeX{}~宏包的源文件一般放在 \begin{prompt} texmf\source\latex\ \end{prompt} 目录下。例如~\LaTeX{}~标准文档类的源文件就是 \begin{prompt} texmf\source\latex\base\classes.dtx \end{prompt} 如果这些文件里都找不到定义,则有可能在~\LaTeX{}~内核中定义。你可以搜索 \begin{prompt} texmf\source\latex\base\ \end{prompt} 目录下的其他~\texttt{.dtx}~文件,所有的~\LaTeX{}~内核定义都在那里了。 如果还没有的话,那就可能是~\TeX{}~的基本命令或者定义了,查询 ~Donald E. Knuth~的~The \TeX{}book \cite{texbook}~,~\CTeXFTP~上可以下载 该书的源文件。 \section{辅助工具} \Question[Q-winedt-reg]{WinEdt~和~GSview~经常出现过期和注册提示,如何解决?}{0.1}{0.1} WinEdt~和~GSview~是共享软件,需要注册才能使用全部功能, 如果你不能忍受它的提示,那就只有花钱注册了。 \Question[Q-winedt-wrap]{如何去掉~\faqindex{WinEdt}~的自动断行和自动续行?}{0.1}{0.1} 点击~WinEdt~状态栏上的~Wrap~使其变为灰色可以完全禁止~WinEdt~的自动断行和自动续行。 在行首加入空格或者~Tab~符可以防止自动续行(将本行并入上一行)。 在~WinEdt~的菜单~Options~下选择~Perferences,在弹出的对话框中的~Editor~页的右下角 可以设置~Right Margin~来修改~WinEdt~判断自动断行的字符数。 \Question[Q-winedt-lineno]{如何让~\faqindex{WinEdt}~显示行号?}{0.4}{0.4} 点击~WinEdt~状态栏上的总行数(左数第四格)可以打开和关闭行号的显示。 \Question[Q-yap-color]{\faqindex{Yap}~里如何预览带有颜色的~\faqindex{EPS}~图片?}{0.1}{0.1} 打开~Yap~的菜单~Views~下的~Options,在弹出的对话框中选择~PostScript, 然后在~Quality~的下拉框中选择~16 million colors。 \section{错误处理} \Question[Q-error-simsun]{Error: pdflatex (file simsun.ttf): can't find table `maxp'}{0.4}{0.4} 这个错误是因为中文~Windows 2000~及以后的操作系统的宋体字库使用了新的~TrueType~格式的文件 ~simsun.ttc~,而~pdflatex~不支持该文件格式。解决方法可以选以下四种之一: \begin{enumerate} \item 不使用~pdflatex~而改用其他方法生成~PDF~文件 \item 不使用宋体改用其他字体 \item 不使用~TrueType~字库而改用~Type1~字库(安装~\CTeX{}-Fonts~) \item 从中文~Windows 98~下拷贝一个~simsun.ttf~到~Windows~安装目录下的~fonts~目录或者 ~\CTeX~的安装目录下的~locatexmf~的相应子目录下 \end{enumerate} \section{帮助文档} \Question[Q-doc-zh]{能否推荐一些比较好的中文资料?}{0.1}{0.3} 目前~\TeX{}~和~\LaTeX{}~的中文资料还不是很多,特别是相对大量的英文资料而言。 如果你刚开始学习~\LaTeX{},我们推荐你使用《~lshort~中文版》~\cite{lshort-cn}。 这是一份很好的入门学习教材。它的最新版本可以在~\CTeXWWW{}~免费下载。 如果你需要一本详细的~\LaTeX{}~命令手册, 我们推荐使用邓建松等人翻译整理的《~\LaTeXe{}~科技排版指南》一书~\cite{lmanual-cn}。 这本书可以说是目前国内正式出版的~\LaTeX{}~书籍中最值得购买的一本。 它的一份电子版初稿也可以在~\CTeXWWW{}~免费下载。 另外一本值得推荐的书是《~\LaTeXe{}~插图指南》\cite{lgraphics-cn}。 它是由~\CTeX{}~的王磊在~Keith Reckdahl~编写的~Using Import graphics in \LaTeXe{} (Ver. 2, Dec. 1997)~一书的基础上翻译整理的。该书目前尚未正式出版, 其电子版可以在~\CTeXWWW{}~免费下载。 \Question[Q-doc-en]{能否推荐一些比较好的英文资料?}{0.3}{0.3} 如果你刚开始学习~\LaTeX{},我们推荐使用~lshort (The Not So Short Introduction to \LaTeXe{}) \cite{lshort}~。与其他的书相比,这份小册子相对比较简短,但覆盖了所有常用的~\LaTeXe{}~命令, 而且附有大量的实例。~lshort~一直在不断更新,而且有十几个语言的翻译版本。 你可以把英文版和中文版~\cite{lshort-cn}~对照着看,这样会对一些专业名词更加容易理解。 如果你打算详细全面的学习~\LaTeX{}~,最经典的教材莫过于~\LaTeX{}~的作者 ~Leslie Lapmport~的著作~\LaTeX{}: A Document Preparation System \cite{manual}~了。 另一本更加详细的介绍~\LaTeX{}~及其宏包的书就是~The \LaTeX{} Companion \cite{companion}~, 这本~500~多页的书中包含了超过~150~个宏包的描述。这两本书没有在国内出版, 但是你可以在一些图书馆中借到。~The \LaTeX{} Companion~的第八章是关于数学公式排版的介绍, 有一份电子版可以在~CTAN~上下载,路径是 \begin{prompt} CTAN:/info/companion-rev \end{prompt} 或者用~ch8.pdf~在~CTAN~上进行搜索(参见~\Qref{Q-search-ctan}~)。 \LaTeX{}~系统自带了许多文档,除了各个宏包的说明以外,还有一些是关于~\LaTeX{}~系统的说明。 这些文档都放在 \begin{prompt} texmf\doc\latex\base \end{prompt} 目录下。其中,~\LaTeXe{} for Authors \cite{usrguide}~是 介绍如何用~\LaTeXe{}~来排版的,~\LaTeXe{} for Class and Package Writers \cite{clsguide}~ 则介绍了如何利用~\LaTeXe{}~来编写宏包,这两份文档侧重点都在于描述~\LaTeXe{}~的新特性。 如果你是~\LaTeX{} 2.09~的用户,这两份文档会有很大的帮助。 ~\LaTeXe{} Font Selection \cite{fntguide}~则介绍了~\LaTeXe{}~的字体选择方案, 它会帮助你了解~\LaTeXe{}~是如何定义、使用字体的。 如果你对~\LaTeX{}~底层的东西开始感兴趣,或者你开始想自己修改或者编写一些~\LaTeX{}~宏包, 那么~\TeX{}~的作者~Donald E. Knuth~的巨著~The \TeX{}book~实在是必不可少。 ~The \TeX{}book~同时也是一部漂亮的排版杰作,而且还能让我们接触到一代宗师 ~Knuth~卓越不凡的思想与理念。 \Question[Q-doc-pkg]{有没有关于~\LaTeX{}~宏包的详细说明?}{0.1}{0.3} \TeX{}~系统安装时候带的~\LaTeX{}~宏包,都可以在~\TeX{}~的安装目录下的 \begin{prompt} texmf\doc\latex \end{prompt} 目录下找到帮助文件和例子。 \CTeX{}~的~\href{http://www.ctex.org/modules.php?op=modload&name=Sections&file=index&req=listarticles&secid=4}{在线文档}~ 提供了一份关于常见的~\LaTeX{}~宏包的列表和说明。另外,~Graham Williams~维护的~ The TeX Catalogue \cite{catalogue}~是一份全面的~\TeX{}~和~\LaTeX{}~宏包分类目录, 这份文档可以在~CTAN~的镜像服务器上下载 (参见~\Qref{Q-info-ctan}~和~\Qref{Q-search-ctan}~)。 \Question[Q-comments]{我的问题没找到答案,或者有答案但是解决不了我的问题,怎么办?}{0.1}{0.3} 欢迎到~\CTeXBBS~上提出你的问题,也欢迎指出这份文档中不正确或者不准确的地方。 提问的时候请提供尽可能详细的信息,例如使用的~\TeX{}~系统、操作系统、 使用的文档类和宏包命令、简单而又可以重复错误现象的例子等等, 而不是仅仅说“为什么我的~DVI~中看不到中文”这样一句话, 这种问题没有人能够回答你。 \label{lastquestion} \appendix \begin{thebibliography}{99} \bibitem{lshort-cn} \CTeX{}~翻译小组。 \newblock {\bf \href{http://project.ctex.org/lshort-cn/lshort-cn.pdf}{lshort~中文版~3.20}}, \newblock ~2003。 \bibitem{lmanual-cn} 邓建松,彭冉冉,陈长松。 \newblock {\bf ~\LaTeXe{}~科技排版指南}, \newblock 科学出版社,书号:~7-03-009239-2/TP.1516,~2001。 \bibitem{lgraphics-cn} 王磊。 \newblock {\bf \href{http://www.ctex.org/documents/latex/graphics/}{~\LaTeXe{}~插图指南}}, \newblock ~2000。 \bibitem{cct-new} 张林波。 \newblock {\bf \href{ftp://ftp.cc.ac.cn/pub/cct/README.pdf}{关于新版~CCT~的说明}}, \newblock ~2003。 \bibitem{lshort} Tobias Oetiker, Hubert Partl, Irene Hyna and Elisabeth Schlegl. \newblock {\bf \href{http://people.ee.ethz.ch/~oetiker/lshort/lshort.pdf} {The Not So Short Introduction to \LaTeXe{} 4.12}}, \newblock 2003. \bibitem{manual} Leslie Lamport. \newblock {\bf \LaTeX{}: A Document Preparation System}. \newblock Addison-Wesley, Reading, Massachusetts, second edition, 1994, ISBN~0-201-52983-1. \bibitem{texbook} Donald E. Knuth. \newblock {\bf The \TeX{}book,} Volume~A of \textit{Computers and Typesetting}. \newblock Addison-Wesley, Reading, Massachusetts, second edition, 1984, ISBN~0-201-13448-9. \bibitem{companion} Michel Goossens, Frank Mittelbach and Alexander Samarin. \newblock {\bf The \LaTeX{} Companion}. \newblock Addison-Wesley, Reading, Massachusetts, 1994, ISBN~0-201-54199-8. \bibitem{usrguide} \LaTeX3 Project Team. \newblock {\bf \LaTeXe{} for Authors}. \newblock \LaTeXe{}~随机文档~\texttt{usrguide.tex} \bibitem{clsguide} \LaTeX3 Project Team. \newblock {\bf \LaTeXe{} for Class and Package Writers}. \newblock \LaTeXe{}~随机文档~\texttt{clsguide.tex} \bibitem{fntguide} \LaTeX3 Project Team. \newblock {\bf \LaTeXe{} Font Selection}. \newblock \LaTeXe{}~随机文档~\texttt{fntguide.tex} \bibitem{catalogue} Graham Williams. \newblock {\bf The \TeX{} Catalogue}. \newblock ~一份全面的~\TeX{}~和~\LaTeX{}~宏包分类目录,在线访问 ~\texttt{CTAN:/help/Catalogue/catalogue.html} \bibitem{uktugfaq} Robin Fairbairns. \newblock {\bf The UK \TeX{} FAQ}. \newblock ~英国~\TeX{}~用户协会~FAQ. \end{thebibliography} \printindex \clearpage \section{Contributors} \contrib[aloft@ctex.org]{吴凌云} \contrib[nosferuda@hotmail.com]{Neals} \begin{small} \vfill \noindent \rule{0.3\textwidth}{0.5pt} \hypertarget{copyright}{} \noindent Copyright \copyright 2003--\the\year{} \CTeX{} and all the Contributors to \CTeX{} FAQ. All rights reserved. \noindent \CTeX{}~以及~\CTeX{} FAQ~的作者拥有版权~\copyright 2003--\the\year{}。保留所有权利。 \noindent Permission is granted to copy, distribute and/or modify this document under the terms of the \href{http://www.gnu.org/licenses/fdl.html}{GNU Free Documentation License}, Version 1.2 or any later version published by the \href{http://www.gnu.org}{Free Software Foundation}; with the Invariant Sections being Contributors, no Front-Cover Texts, and no Back-Cover Texts. \noindent 你可以拷贝、发布或者修改这份文档,但必须遵守\href{http://www.gnu.org} {自由软件组织}颁布的~\href{http://www.gnu.org/licenses/fdl.html} {GNU~自由文档许可证}~1.2~或者以后版本的条款。 Invariant Sections~包括~Contributors,没有~Front-Cover Texts~和~Back-Cover Texts。 \end{small} \FAQChangeList \end{document}