Posted on 2008-12-10 10:29
ZhouFeng 阅读(994)
评论(0) 编辑 收藏 所属分类:
转载 、
LaTeX
这是一篇关于介绍用 LaTeX 写学位论文的好文章, 非常建议有一定LaTeX基础的, 而又不想用以前的模板或者找不到合适的模板的朋友写学位论文参考适用, (这里有许多学位论文的模板). 关于如何自己设置学位论文的版式, 下面已经介绍得非常详细了, 文章有点长, 慢慢看吧. 原文地址在这里.
序
一直觉得有必要写这样一篇文章,因为学位论文从格式上说更像一本书,与文章 的排版不同,不仅多出目录等文章没有的部分,而且一般要设置页眉页脚方便阅 读查找。学校有时会提出具体的格式要求,虽然复旦的要求非常简单,而且事实 上并不严格执行,但自己的论文毕竟是自己的孩子,还是要敝帚自珍的,大家都 希望做得漂亮一点。
网上已经有不少学位论文的模板,其中大都出自一两个最初的版本,针对各自学 校的要求作了一些改动。这些模板还是很方便的,如果对它们的排版效果感到完 全满意,那么直接拿来用就可以了。不过如果想调整其中某些格式,就不得不仔 细研究一下它们的代码或说明文档,有时并不那么容易。而且这些模板的导言或 cls或sty文件都写得很长,内容很多,尽可能的包含了大家有可能用到的功能, 但其实具体到每个人只有一部分是需要用到的。用一个包含“冗余”代码的模板, 总不是一件很舒服的事情。当然也许很多人抱着能用就好的态度,并不care。
本文是为那些对论文格式有特殊要求或喜欢自己设置格式的人写的。如果你觉得 网上能找到的论文模板已经足以满足你的需要,并且对TeX本身也没有多少兴趣, 那么你没有必要花费宝贵的时间阅读本文。
阅读本文的基础是假定你已经了解怎样用LaTeX来写普通的文章。一般的 TeX/LaTeX命令不会再作解释,重点将放在学位论文与普通文章的不同点上,以及 怎样用一些宏包方便地设置其格式。其中大部分内容来源于网络资源、工具书以 及各个宏包的说明文档,恕不一一注明,在此一并致谢!
一
首先讲一下纸张大小和页边距的设置。根据复旦的格式要求,纸张大小为A4纸, 正文用小四号字,页边距按Word中的默认设置。小四号字即12pt, Word中默认的 页边距为
上边距=2.54cm, 下边距=2.54cm, 左边距=3.17cm, 右边距=3.17cm
或者换算成更容易记忆的
上边距=1in, 下边距=1in, 左边距=1.25in, 右边距=1.25in
如果我们用book类,第一句可以写
\documentclass[a4paper,12pt]{book}
然后用geometry宏包设置页边距
\usepackage[top=1in,bottom=1in,left=1.25in,right=1.25in]{geometry}
但其实这样设置的页边距极不美观,尤其是左右对称的页边距没有考虑装订的需 要,而且加上页眉后这样的上边距就显得过窄。所以注重美观的话还是自己调整 一下吧。
需要注意的是,book类默认是twoside即双面打印模式,与article类默认的 oneside即单面打印模式不同。两者区别在于页边距和页码的位置。单面模式每页 的页边距都相同,双面模式则会在偶数页将设置的左、右页边距调换。如果采用 单面打印,则可在\documentclass的方括号里加上oneside参数,并在geometry的 选项中适当增加左边距,减少右边距,以留出装订线的位置。但是不要忘了装订 的时候右侧一般会裁掉一点边,所以左、右边距也不要相差过大。如果采用双面 打印,则geometry中的设置被解释为奇数页的页边距,偶数页的左、右边距会自 动互换。
还有几个注意事项。首先,这里的奇数页和偶数页是针对当前page计数器的值来 说的,而不是在生成文件中总的页码。也就是说,假如当前页在整个输出中总排 序是偶数页,但当前page计数器(即显示的页码)为奇数,则当前页的页边距是按 奇数页设置的。
其次,\documentclass还有一对选项openright和openany, book类默认是前者, 即每一章(包括目录)都会在奇数页开始,如果前一章的最后一页是奇数页,则会 在其后插入一页空白页,以确保新的一章仍然从奇数页开始。这是书籍的排版规 范,不建议改变,论文页数比较少的还可以借此增加页数。 这是双面模式的情 况,在单面模式下不存在这个问题。经常有人问为什么自己明明是单面打印,却 仍然会在两章之间有一页空白页,请注意book类默认是双面模式,除非你设为 oneside, 记住告诉TeX你要的是什么!
另外,为了方便查看,页码应该放在书籍的外侧。对于单面模式,外侧就是右 侧,而对于双面模式,奇数页右侧是外侧,偶数页左侧是外侧。如何设置页码留 到后面讲设置页眉、页脚时再详细说。
至于到底是单面打印还是双面打印,看你自己的喜好了。复旦的论文规范没说, 一般的做法是博士双面、硕士单面。反正总页数少于50页的话,就不要双面了, 否则显得太单薄,书脊的内容都很难打印。
最后提一个常见的问题。如果用pdf文件来打印,在Acrobat的打印对话框里有一 项Page Scaling默认是Fit to paper, 这样打印出来整个内容就会缩小一些,不 再是设置的尺寸。这是因为打印机的可打印范围不能达到整个A4纸张的全部,而 是比A4纸的规格要小一些(具体的可打印范围跟打印机型号有关), Fit to paper 的意思就是把整个页面调整到可打印范围上去,以保证所有页面上的内容都能打 印出来。因为可打印范围总是小于A4纸的尺寸,所以打印出来总是会缩小一些。 缩小的比例一般为95%左右,与打印机型号有关。解决这个问题,只要选择Page Scaling为None就可以了。
二
这一节讲中文字体和中英文混排的问题。中文处理推荐使用CJK或新版CCT, 旧版 CCT因为年代久远,有一些bug会导致莫名其妙的问题,不建议再使用。本文以 CJK为例,中文环境为
\begin{CJK*}{GBK}{song}
...
\end{CJK*}
与英文习惯不同,中文排版一般没有粗体的概念,而是用宋体、黑体、楷体、仿 宋等不同的字体来加强文本效果。在CJK默认的字体定义文件中,宋体对应的粗体 是用\CJKbold 命令通过微小平移字形来实现的,不仅放大后能看到锯齿,而且也 不符合中文的排版习惯。建议将宋体对应的粗体设为黑体,这样文中所有粗体命 令作用的环境中加粗的宋体都会自动变成黑体,不需要再用\CJKfamily{hei}来转 换。
宋体的字体定义文件C19song.fd里典型的一段代码如下
\DeclareFontFamily{C19}{song}{}
\DeclareFontShape{C19}{song}{m}{n}{<-> CJK * gbksong}{}
\DeclareFontShape{C19}{song}{bx}{n}{<-> CJKb * gbksong}{\CJKbold}
\DeclareFontShape{C19}{song}{m}{it}{<-> CJK * gbksongsl}{}
\DeclareFontShape{C19}{song}{bx}{it}{<-> CJKb * gbksongsl}{\CJKbold}
\DeclareFontShape{C19}{song}{m}{sl}{<-> CJK * gbksongsl}{}
\DeclareFontShape{C19}{song}{bx}{sl}{<-> CJKb * gbksongsl}{\CJKbold}
这里C19代表GBK字符集的编码方式,m表示字符的粗细程度和宽紧程度均为中等 (medium), bx表示字符的属性为粗(bold)和松(expanded), n, it和sl分别表示正 常直立体(normal), 意大利斜体(italic)和机械斜体(slanted)。 \DeclareFontShape的最后两个参数分别是字体定义和命令序列。显然,上述语句 将宋体的粗体定义为用\CJKbold 生成。要将其改为黑体,只需将这段代码改为
\DeclareFontFamily{C19}{song}{}
\DeclareFontShape{C19}{song}{m}{n}{<-> CJK * gbksong}{}
\DeclareFontShape{C19}{song}{bx}{n}{<-> CJKb * gbkhei}{}
\DeclareFontShape{C19}{song}{m}{it}{<-> CJK * gbksongsl}{}
\DeclareFontShape{C19}{song}{bx}{it}{<-> CJKb * gbkheisl}{}
\DeclareFontShape{C19}{song}{m}{sl}{<-> CJK * gbksongsl}{}
\DeclareFontShape{C19}{song}{bx}{sl}{<-> CJKb * gbkheisl}{}
实际上,正式的中文排版也不应使用斜体,而应使用楷体或仿宋代替。所以也可 以类似地将上述语句中的gbksongsl改为gbkkai或gbkfs。
上述字体定义命令可以放在sty文件中(设保存文件名为thesis.sty, 则在导言区 用\usepackage{thesis}引用,后面所述的大部分命令也都可以放在sty文件中), 而不需要更改本地机器上的fd文件,以便在别的机器上也能产生同样的效果。
另外,为了方便可以定义几个简短的字体转换命令
\newcommand{\song}{\CJKfamily{song}}
\newcommand{\hei}{\CJKfamily{hei}}
\newcommand{\kai}{\CJKfamily{kai}}
\newcommand{\fs}{\CJKfamily{fs}}
以后就可以用\song, \hei, \kai和\fs在文中转换字体了。
在用\begin{CJK*}{GBK}{song}开始中文环境后,应加上\CJKindent和\CJKtilde 两句。前者将段首缩进设为两个中文字符的宽度。后者则是为了解决中英文混排 的美观问题。CJK*环境会吞掉跟在汉字后面的空格,从而使得源文件中的换行不 会在相邻汉字之间产生空白。但是这样一来,像下面这样输入的中英文内容
中文 abc 中文
就会产生如下效果
中文abc 中文
即abc两侧的空白不一样,很不美观。为解决这个问题,\CJKtilde重新定义了波 浪符~的意义,使得这个符号不再代表一个不可断行的空格,而是一个可断行的弹 性距离,加在中文和英文之间调整它们的距离。上面的中英文内容应该这样输入
中文~abc~中文
就能得到良好的效果。这个输入方式最好一开始就形成习惯,否则后来再加会很 麻烦。当然你也可以这样输入
中文abc中文
这样的话虽然中英文之间的距离太窄,但至少左右对称,比上述第一种方式略 好,是偷懒的办法。不过如果你比较在意排版质量的话,还是忍受一下输入~的麻 烦吧。
中英文混排有一些标点的问题要处理好。首先是在默认的CJK环境里,行末的中文 标点不能与边界对齐,因为中文标点也被视为一个普通的全角字符,所以看起来 行末就有了不应该有的空白,这不符合中文的排版习惯。另外,当一行文字需要 压缩或拉伸时,逗号与句号也应该区别对待,逗号后面留的空白应该比句号小一 些。这两个问题用CJKpunct 宏包就能很好地解决,只要加上 \usepackage{CJKpunct}即可。
此外,中英文混排的时候是用中文标点还是英文标点呢?这并没有统一的规范。 不过比较合理也比较通行的做法是,中文后用中文标点,英文后用英文标点。比 较特殊的两个标点是句号和括号。一般数学文章习惯用全角的实心句点作为中文 句号,这样看起来与英文的句号比较一致。全角的中文括号看起来不太好看,可 以统一使用英文的括号,不过左括号前面和右括号后面最好加上波浪符~以和前后 的文字留出适当的距离。
上面说的这几点也许比较琐碎,不过也正是最能看出是否精心排版的地方。
三
下面几节讲怎样用titlesec和titletoc宏包设置章节标题、页眉页脚和目录的格 式。设置页眉页脚有一个很有名的宏包fancyhdr也可以用,不过titlesec提供的 页面设计命令更方便与它的章节标题命令配合,功能更强大。这一节先讲章节标 题格式的设置。
在引用titlesec宏包时就可以指定几个格式选项,例如
\usepackage[bf,small,center,indentafter,pagestyles]{titlesec}
其中bf设置章节标题的字体为黑体,这也是默认值,可以略去。此外,还可以设 为rm(罗马体), sf(无衬线体), tt(打字机体), md(中等黑度), up(直立体), it(意大利斜体), sl(机械斜体), sc(小体大写字母)。
small设置标题字体的尺寸,还可设为big(默认), medium, tiny。
center使标题居中,还可以设为raggedleft(居左,默认), raggedright(居右)。
indentafter相当于宏包indentfirst的作用,使标题下面的第一个段落正常缩进。
pagestyles是申明后面要自定义页面样式。
下面就可以用\titleformat, \titlespacing, \titlelabel等命令来设置标题格 式了。因为这些命令里会用到中文,所以要在设置之前放一个空的CJK环境,如
\begin{CJK*}{GBK}{song}
\end{CJK*}
下面的\titleformat命令设置了章标题的格式
\titleformat{\chapter}[hang]{\centering\LARGE\bfseries}{\chaptername}{1em}{}
其中\chapter可以换为\section, \subsection等,设置节、小节等标题的格式。
hang表示标题头与标题内容在同一行,是默认值。而book类默认的章标题是标题 头与标题内容放在两个段落,对应于display选项。此外还有block, runin, leftmargin, rightmargin, frame, wrap等选项,一般不大用到。
\centering\LARGE\bfseries这一块是设置标题的排版格式,这里设置为居中、 \LARGE尺寸和黑体。
后面紧跟的是标题头的定义。book类里的标题头是英文,需要改成中文。如果希 望改成“第一章”这样的格式,则应先引用CJKnumb宏包,它提供了把阿拉伯数字转 换成中文数字的命令。然后定义
\renewcommand{\chaptername}{第\CJKnumber{\thechapter}章}
那么\titleformat里的标题头定义\chaptername就得到我们希望的效果。当然你 也可以不用中文数字而用阿拉伯数字,即定义
\renewcommand{\chaptername}{第~\thechapter~章}
跟在标题头定义后面的是标题头与标题内容之间的距离,这里是1em。注意,在中 文环境里1em等于一个汉字的宽度。
最后一个花括号内是在排版标题前执行的命令,这里空置。
然后用\titlespacing或\titlespacing*命令设置标题与四周的距离,例如
\titlespacing{\chapter}{0pt}{*0}{*4}
将章标题与左边、上边、下边内容的距离分别设为0pt, *0, *4。这里*n表示弹性 距离,对上距离来说相当于n ex plus .3ex minus .06ex, 对下距离来说相当于 n ex plus .1ex。弹性距离因为有一定的伸缩自由度,比较容易得到美观的排版。 如果想自己指定用关键字plus, minus定义的弹性距离,可以用星号版本的命令, 即
\titlespacing*{命令}{左距离}{上距离}{下距离}
上面设置了章标题的命令,用相同的命令也可以设置节、小节等的标题格式。但 如果没有特殊的要求,只希望修改一下标题头,可以用更加简单的命令 \titlelabel来设置。例如
\titlelabel{\S\thetitle\quad}
将章节标题设置为类似“§1 标题内容”的格式。这里\quad等于\hspace{1em}, 即 空出一个汉字宽度的距离。注意,\titleformat命令的定义会覆盖\titlelabel的 定义,而一般来说章跟节标题的格式不一样,所以只要另外用\titleformat命令 定义章标题的格式,\titlelabel的定义就只能作用于节以下层次的标题了。
四
这一节接着讲怎样用titlesec宏包提供的命令设置页眉、页脚。下面命令定义了 一个新的页面样式并使用该样式
\newpagestyle{main}{
\sethead{}{}{\kai\small\chaptername\quad\chaptertitle\qquad\thepage}
\setfoot{}{}{}\headrule}
\pagestyle{main}
其中\sethead命令设置页眉,格式为
\sethead[偶数页左页眉][偶数页中页眉][偶数页右页眉]
{奇数页左页眉}{奇数页中页眉}{奇数页右页眉}
单面打印模式只要给出奇数页的设置即可,双面模式则需要将左、右页眉做个调 换。上面给出的例子是单面模式的。
\setfoot用来设置页脚,格式与\sethead类似。
在页眉、页脚里可以显示章节标题、页码等内容。如上面的例子就在页眉中显示 了章标题和页码。注意,\qquad相当于两个\quad, 即\hspace{2em}。
\headrule是划出页眉线,类似地\footrule划出页脚线,不过比较少用。默认页 眉线的宽度是0.4pt, 如果不满意,可以用下面命令重新设置其宽度
\setheadrule{宽度}
此外,还有两种特殊情况需要处理。首先,尽管在上面例子中用 \pagestyle{main}使用了自定义的页面样式,但每一章的第一页不受影响,仍然 使用默认的plain样式。在这种页面上,出于美观的考虑,一般不加页眉,而将页 码放在页脚(也有人喜欢不加页码)。所以plain样式(没有页眉,页码放在页脚中 间)已经基本符合要求,不必修改。如果需要修改,可定义一个新的页面样式,再 用下面命令重定义plain样式
\renewpagestyle{plain}{新的页面样式}
其次,在目录、参考文献或以\chapter*命令生成的章,上面页眉定义中的标题头 \chaptername是不应该显示的。所以有必要定义一个页面样式在这种特殊的章使 用,例如可以定义
\newpagestyle{special}{
\sethead{}{}{\kai\small\chaptertitle\qquad\thepage}
\setfoot{}{}{}\headrule}
然后在文中适当的地方用\pagestyle{special}改用该样式。
五
目录是学位论文的必要组成部分。只要在正文中适当的地方用
\tableofcontents
就可以自动生成目录。但是目录的格式不总是符合个人的要求,有时还要往其中 加一些条目。用titletoc宏包提供的命令可以方便地设置目录的格式。
首先可以用
\renewcommand{\contentsname}{目\quad 录}
将目录部分的标题改为中文。然后,用\titlecontents命令来设置不同级别目录 项的格式。例如,chapter层次的目录项格式可设置如下
\titlecontents{chapter}[0pt]{\vspace{.5\baselineskip}\bfseries}
{第\CJKnumber{\thecontentslabel}章\quad}{}
{\hspace{.5em}\titlerule*[10pt]{$\cdot$}\contentspage}
其中0pt是目录项到版芯左边界的距离。紧跟其后的是在排版目录项之前执行的命 令,这里\vspace{.5\baselineskip}表示与上文留出一定的垂直距离,该距离为 当前单倍行间距的一半。\bfseries把整条目录项的字体设为黑体。
后面一项是设置目录项的头部,这里设为“第一章”这样的格式,并在其后留出一 个汉字宽度的距离。紧跟的是设置目录项主体的格式,这里因为跟目录项头部相 同而空置。
再后面是设置填充命令和页码。这里先用\hspace{.5em}在目录项内容后面留出一 点空白,以免跟其后的填充点靠得太近。然后用\titlerule*命令画出填充点,这 里是把垂直居中的实心圆点作为填充符号(习惯上中文不采用居下的填充点), 并 以10pt为包含一个填充符号的水平盒子的宽度,即这个宽度越小,填充点越紧密。 填充点后加上页码\contentspage。
类似地可以设置section层次的目录项格式如下
\titlecontents{section}[2em]{\vspace{.25\baselineskip}}
{\S\thecontentslabel\quad}{}
{\hspace{.5em}\titlerule*[10pt]{$\cdot$}\contentspage}
其中2em表示section层次的目录项距左边界有一个缩进。如果还有subsection等 层次,可以类似地定义。
但是\chapter*, \section*等命令生成的标题不会自动进入目录中。例如中文摘 要部分如果用下面命令开始
\chapter*{摘\quad 要}
那么可以紧跟其后加上
\addcontentsline{toc}{chapter}{中文摘要}
就可以将中文摘要作为一个chapter层次插入目录中。英文摘要、参考文献部分均 可照此处理。随便提一下,参考文献部分的标题可用如下命令改为中文
\renewcommand{\bibname}{参考文献}
六
这一节讲前几节尚未提到的一些文本排版问题。
首先是行间距的设置。学校的学位论文规范中提到行间距为20pt。其实不同尺寸 的字体行间距都不相同,而是成比例关系。这个20pt是对正文主要字体来说的。 在TeX中基本的行间距是\baselineskip, 对于12pt的字体,这个值等于14.5pt, 而真正的行间距是
\baselineskip * \baselinestretch
\baselinestretch默认为1, 但我们可以重新设置它的值,如
\renewcommand{\baselinestretch}{1.38}
就得到真正的行间距为14.5pt*1.38≈20pt。而这样定义之后,对不同尺寸的字体 都会按同样的比例因子1.38放大行间距,使得全文排版能协调一致。
那么\baselineskip的值是怎么知道的呢?在TeX源文件中加上命令
\showthe\baselineskip
编译时就会暂停下来显示当前字体的\baselineskip值。用这个方法可以知 道,10pt字体对应的\baselineskip为12pt, 11pt字体对应的\baselineskip为 13.6pt。
至于通常所说的1.5倍行间距和双倍行间距,一般理解为字体基准尺寸的1.5倍和 2倍,例如对于12pt字体, 1.5倍行间距和双倍行间距分别应为12pt*1.5=18pt, 12pt*2=24pt。那么\baselinestretch分别应设为18pt/14.5pt≈1.24, 24pt/14.5≈1.66, 而不是1.5和2, 那样的话行间距就会显得过大了。
然后讲一下论文首页的设置。复旦的学位论文,装订的地方会按学校的模板制作 封面,就不用自己做了,不过规范中要求在扉页注明指导小组成员名单,并且为 了保持论文电子版的完整性,最好还是做一个简单的论文首页(标题页)。
没有必要用\title, \author和\maketitle等命令自动生成论文的标题,因为那可 能不太符合你的要求。只要用
\begin{titlepage}
标题页内容
\end{titlepage}
在标题页内容中用上一些center环境、\vspace*和字体选择命令就可以很容易地 设计出自己想要的格式了。
注意,上述标题页是没有页码的。而一般正文之前的部分,包括目录、摘要等, 习惯上采用与正文部分不同的页码格式,如用罗马数字表示,而从正文第一页开 始用阿拉伯数字重新开始计算页码。要做到这一点,只要在标题页后加上
\frontmatter 或 \pagenumbering{roman}
并在正文第一章前加上
\mainmatter 或 \pagenumbering{arabic}
就可以了。但是推荐使用\frontmatter和\mainmatter, 因为这两个命令的用处不 仅限于此。前面说过,像中文摘要这种非正文的部分,可以用\chapter*命令加 入,但当设置了页眉后就会发现一个问题,页眉中的\chaptertitle没有同步更新。 要解决这个问题,一个办法是在\chapter*命令后加上一句\chaptermark, 例如
\chapter*{摘\quad 要}\chaptermark{摘\quad 要}
但假如我们使用了\frontmatter, \mainmatter以及与其配套的\backmatter, 就 不需要这么麻烦,只要直接用不带星号版本的\chapter命令就可以了,对于 \frontmatter与\mainmatter之间的部分,以及\backmatter之后的部分,系统就 会自动地跟正文部分的章区别开来,不加上“第一章”这样的章标题头。一个典型 的文档结构示例如下
\begin{document}
\begin{titlepage}
标题页内容
\end{titlepage}
\frontmatter % 开始正文之前的部分
\tableofcontents % 自动生成目录
\chapter[中文摘要]{摘\quad 要}
% 方括号中是在目录中显示的内容,相当于前面使用的\addcontentsline
中文摘要内容
\chapter[英文摘要]{Abstract}
英文摘要内容
\mainmatter % 开始正文部分
\chapter{第一章标题}
第一章内容
\backmatter % 开始正文之后的部分
\begin{thebibliography}{99}\addcontentsline{toc}{chapter}{参考文献}
参考文献内容
\end{thebibliography}
\chapter[致谢]{致\quad 谢}
致谢内容
\end{document}
七
到这里文本排版讲得差不多了。这一节再讲讲定理和证明环境的格式设置。
数学论文里经常使用大量的定理环境。LaTeX默认的定理环境已经不能满足要 求,amsthm 宏包提供了方便的命令用于设置定理环境的格式。例如下面的命令定 义了一个定理样式mythm, 并用它来定义一些常用的定理环境
\newtheoremstyle{mythm}{1.5ex plus 1ex minus .2ex}{1.5ex plus 1ex minus .2ex}
{\kai}{\parindent}{\song\bfseries}{}{1em}{}
\theoremstyle{mythm}
\newtheorem{thm}{定理~}
\newtheorem{lem}{引理~}
\newtheorem{prop}{命题~}
\newtheorem{cor}{推论~}
\newtheorem{defn}{定义~}
\newtheorem{conj}{猜想~}
\newtheorem{exmp}{例~}
\newtheorem{rem}{注~}
我们解释一下\newtheoremstyle命令里各项参数的意义。样式名称之后的两个长 度分别表示定理与上、下文之间的距离,这里均设为弹性距离。\kai是设置定理 内容的字体。\parindent是设置定理首行的缩进,在前面使用了\CJKindent的情 况下,它就等于2em。
紧随其后的\song\bfseries是设置定理头部即类似“定理 1”部分的格式,一般中 文使用黑体。因为我们在前面已经将宋体对应的粗体定义为黑体,所以这里将中 文字体设为宋体,再用选择粗体命令\bfseries, 就同时把中文变为黑体,英文变 为粗体了。注意,如果前面没有修改字体定义文件,而在这里用\hei改变字体, 再加上\bfseries就很可能会造成“黑上加黑”即黑体的加粗,这种拙劣的文本效果 是不应该出现的。
这之后的参数是设置紧跟定理头部的符号,英文中常设为一句点,而中文习惯不 加任何符号,所以这里空置。然后是设置定理头部与定理内容之间的空白距离, 这里设为1em, 即一个汉字的宽度。
最后一项是对定理头部的补充说明,这里空置。但如果我们希望得到类似“定理 1 (存在性定理)”这样的定理头部,那么可以再定义一种定理样式
\newtheoremstyle{specthm}{1.5ex plus 1ex minus .2ex}{1.5ex plus 1ex minus
.2ex}{\kai}{\parindent}{\song\bfseries}{}{1em}{\thmnote{#3}}
这里最后一项\thmnote{#3}表示用方括号中的附加内容作为定理头部。用此样式 定义一个新的定理环境(与前面定义过的thm环境统一编号)
\theoremstyle{specthm}
\newtheorem{sthm}[thm]{}
并在正文中使用
\begin{sthm}[定理~\thethm~(存在性定理)]
定理内容
\end{sthm}
就得到了想要的效果。
至于证明的排版,amsthm宏包提供了proof环境,但格式需要做一点调整。 amsthm.sty中对proof环境的定义如下
\newenvironment{proof}[1][\proofname]{\par
\pushQED{\qed}%
\normalfont \topsep6\p@\@plus6\p@\relax
\trivlist
\item[\hskip\labelsep
\itshape
#1\@addpunct{.}]\ignorespaces
}{%
\popQED\endtrivlist\@endpefalse
}
为了符合一般中文证明环境的排版习惯,可以重新定义proof环境为(注意,因为 这些命令含有@字符,所以需要在前、后分别加上\makeatletter和 \makeatother)
\makeatletter
\renewenvironment{proof}[1][\proofname]{\par
\pushQED{\qed}%
\normalfont \topsep6\p@\@plus6\p@ \labelsep1em\relax
\trivlist
\item[\hskip\labelsep\indent
\bfseries #1]\ignorespaces
}{%
\popQED\endtrivlist\@endpefalse
}
\makeatother
并且重新定义\proofname为
\renewcommand{\proofname}{证明}
proof环境会自动在证明最后一行的最右边加上一个证明结束符,默认为空心方 块,可以重新定义\qedsymbol来修改它。需要注意的是,当证明以一个独立公式 结束时,证明结束符会出现在下一行的最右边,而不是在公式的同一行上,这不 合乎习惯。这时只要在公式环境内加上\qedhere即可。
八
最后还要讲讲浮动图形和表格环境的中文化。首先把Figure和Table改为中文
\renewcommand{\figurename}{图}
\renewcommand{\tablename}{表}
然后需要对浮动环境的标题格式做一点修改。在book.cls中可以找到如下定义
\long\def\@makecaption#1#2{%
\vskip\abovecaptionskip
\sbox\@tempboxa{#1: #2}%
\ifdim \wd\@tempboxa >\hsize
#1: #2\par
\else
\global \@minipagefalse
\hb@xt@\hsize{\hfil\box\@tempboxa\hfil}%
\fi
\vskip\belowcaptionskip}
这段代码包括了一个判断选择结构,如果标题超过一行则直接显示,否则在一行 内居中显示。可以不理会这个,只要根据自己的格式要求修改#1(即\figurename 或\tablename) 和#2(标题内容)的格式,以及#1与#2之间的分隔符。例如,如果 希望把#1改为黑体,并把分隔符改为一个空格,可以这样设置
\makeatletter
\long\def\@makecaption#1#2{%
\vskip\abovecaptionskip
\sbox\@tempboxa{{\bfseries #1}\quad #2}%
\ifdim \wd\@tempboxa >\hsize
{\bfseries #1}\quad #2\par
\else
\global \@minipagefalse
\hb@xt@\hsize{\hfil\box\@tempboxa\hfil}%
\fi
\vskip\belowcaptionskip}
\makeatother
★★★结束语★★★
到这里,每个人都需要知道的东西已经基本上介绍完了。如果你仔细读了这些文 字,并且按照它去设置了你的论文格式,我想应该差不多了。当然,不同学科的 论文有各自的特点和要求,肯定还有很多具体的问题没有涉及。例如计算机专业 的可能经常要用到代码抄录环境,文科的论文可能要使用章末注,等等。这些问 题也是版上经常问到的,在本版精华区中大都能找到解答,这里就不再赘述。
希望费了不少时间写的这些东西能对大家有所帮助。最后,祝大家TeX越用越熟 练,都能写出漂亮的论文!