Posted on 2008-12-10 10:29
ZhouFeng 閱讀(1004)
評論(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越用越熟 練,都能寫出漂亮的論文!