用LaTeX寫漂亮學位論文用LaTeX寫漂亮學位論文(序) from: http://bbs./redirect.php?tid=64642&goto=lastpost 一直覺得有必要寫這樣一篇文章,因為學位論文從格式上說更像一本書,與文章的排版 不同,不僅多出目錄等文章沒有的部分,而且一般要設置頁眉頁腳方便閱讀查找。學校 有時會提出具體的格式要求,雖然復旦的要求非常簡單,而且事實上并不嚴格執(zhí)行,但 自己的論文畢竟是自己的孩子,還是要敝帚自珍的,大家都希望做得漂亮一點。 網上已經有不少學位論文的模板,其中大都出自一兩個最初的版本,針對各自學校的要 求作了一些改動。這些模板還是很方便的,如果對它們的排版效果感到完全滿意,那么 直接拿來用就可以了。不過如果想調整其中某些格式,就不得不仔細研究一下它們的代 碼或說明文檔,有時并不那么容易。而且這些模板的導言或cls或sty文件都寫得很長, 內容很多,盡可能的包含了大家有可能用到的功能,但其實具體到每個人只有一部分是 需要用到的。用一個包含“冗余”代碼的模板,總不是一件很舒服的事情。當然也許很 多人抱著能用就好的態(tài)度,并不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即單 面打印模式不同。兩者區(qū)別在于頁邊距和頁碼的位置。單面模式每頁的頁邊距都相同, 雙面模式則會在偶數頁將設置的左、右頁邊距調換。如果采用單面打印,則可在 \documentclass的方括號里加上oneside參數,并在geometry的選項中適當增加左邊距, 減少右邊距,以留出裝訂線的位置。但是不要忘了裝訂的時候右側一般會裁掉一點邊, 所以左、右邊距也不要相差過大。如果采用雙面打印,則geometry中的設置被解釋為奇 數頁的頁邊距,偶數頁的左、右邊距會自動互換。 還有幾個注意事項。首先,這里的奇數頁和偶數頁是針對當前page計數器的值來說的, 而不是在生成文件中總的頁碼。也就是說,假如當前頁在整個輸出中總排序是偶數頁, 但當前page計數器(即顯示的頁碼)為奇數,則當前頁的頁邊距是按奇數頁設置的。 其次,\documentclass還有一對選項openright和openany, book類默認是前者,即每一 章(包括目錄)都會在奇數頁開始,如果前一章的最后一頁是奇數頁,則會在其后插入一 頁空白頁,以確保新的一章仍然從奇數頁開始。這是書籍的排版規(guī)范,不建議改變,論 文頁數比較少的還可以借此增加頁數。:)這是雙面模式的情況,在單面模式下不存在這 個問題。經常有人問為什么自己明明是單面打印,卻仍然會在兩章之間有一頁空白頁, 請注意book類默認是雙面模式,除非你設為oneside, 記住告訴TeX你要的是什么! 另外,為了方便查看,頁碼應該放在書籍的外側。對于單面模式,外側就是右側,而對 于雙面模式,奇數頁右側是外側,偶數頁左側是外側。如何設置頁碼留到后面講設置頁 眉、頁腳時再詳細說。 至于到底是單面打印還是雙面打印,看你自己的喜好了。復旦的論文規(guī)范沒說,一般的 做法是博士雙面、碩士單面。反正總頁數少于50頁的話,就不要雙面了,否則顯得太單 薄,書脊的內容都很難打印。 最后提一個常見的問題。如果用pdf文件來打印,在Acrobat的打印對話框里有一項Page Scaling默認是Fit to paper, 這樣打印出來整個內容就會縮小一些,不再是設置的尺 寸。這是因為打印機的可打印范圍不能達到整個A4紙張的全部,而是比A4紙的規(guī)格要小 一些(具體的可打印范圍跟打印機型號有關), Fit to paper的意思就是把整個頁面調整 到可打印范圍上去,以保證所有頁面上的內容都能打印出來。因為可打印范圍總是小于 A4紙的尺寸,所以打印出來總是會縮小一些??s小的比例一般為95%左右,與打印機型號 有關。解決這個問題,只要選擇Page Scaling為None就可以了。 這一節(jié)講中文字體和中英文混排的問題。中文處理推薦使用CJK或新版CCT, 舊版CCT因為 年代久遠,有一些bug會導致莫名其妙的問題,不建議再使用。本文以CJK為例,中文環(huán) 境為 \begin{CJK*}{GBK}{song} ... \end{CJK*} 與英文習慣不同,中文排版一般沒有粗體的概念,而是用宋體、黑體、楷體、仿宋等不 同的字體來加強文本效果。在CJK默認的字體定義文件中,宋體對應的粗體是用\CJKbold 命令通過微小平移字形來實現的,不僅放大后能看到鋸齒,而且也不符合中文的排版習 慣。建議將宋體對應的粗體設為黑體,這樣文中所有粗體命令作用的環(huán)境中加粗的宋體 都會自動變成黑體,不需要再用\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, 則在導言區(qū)用 \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}開始中文環(huán)境后,應加上\CJKindent和\CJKtilde兩句。 前者將段首縮進設為兩個中文字符的寬度。后者則是為了解決中英文混排的美觀問題。 CJK*環(huán)境會吞掉跟在漢字后面的空格,從而使得源文件中的換行不會在相鄰漢字之間產 生空白。但是這樣一來,像下面這樣輸入的中英文內容 中文 abc 中文 就會產生如下效果 中文abc 中文 即abc兩側的空白不一樣,很不美觀。為解決這個問題,\CJKtilde重新定義了波浪符~的 意義,使得這個符號不再代表一個不可斷行的空格,而是一個可斷行的彈性距離,加在 中文和英文之間調整它們的距離。上面的中英文內容應該這樣輸入 中文~abc~中文 就能得到良好的效果。這個輸入方式最好一開始就形成習慣,否則后來再加會很麻煩。 當然你也可以這樣輸入 中文abc中文 這樣的話雖然中英文之間的距離太窄,但至少左右對稱,比上述第一種方式略好,是偷 懶的辦法。不過如果你比較在意排版質量的話,還是忍受一下輸入~的麻煩吧。 中英文混排有一些標點的問題要處理好。首先是在默認的CJK環(huán)境里,行末的中文標點不 能與邊界對齊,因為中文標點也被視為一個普通的全角字符,所以看起來行末就有了不 應該有的空白,這不符合中文的排版習慣。另外,當一行文字需要壓縮或拉伸時,逗號 與句號也應該區(qū)別對待,逗號后面留的空白應該比句號小一些。這兩個問題用CJKpunct 宏包就能很好地解決,只要加上\usepackage{CJKpunct}即可。 此外,中英文混排的時候是用中文標點還是英文標點呢?這并沒有統(tǒng)一的規(guī)范。不過比 較合理也比較通行的做法是,中文后用中文標點,英文后用英文標點。比較特殊的兩個 標點是句號和括號。一般數學文章習慣用全角的實心句點作為中文句號,這樣看起來與 英文的句號比較一致。全角的中文括號看起來不太好看,可以統(tǒng)一使用英文的括號,不 過左括號前面和右括號后面最好加上波浪符~以和前后的文字留出適當的距離。 上面說的這幾點也許比較瑣碎,不過也正是最能看出是否精心排版的地方。 下面幾節(jié)講怎樣用titlesec和titletoc宏包設置章節(jié)標題、頁眉頁腳和目錄的格式。設 置頁眉頁腳有一個很有名的宏包fancyhdr也可以用,不過titlesec提供的頁面設計命令 更方便與它的章節(jié)標題命令配合,功能更強大。這一節(jié)先講章節(jié)標題格式的設置。 在引用titlesec宏包時就可以指定幾個格式選項,例如 \usepackage[bf,small,center,indentafter,pagestyles]{titlesec} 其中bf設置章節(jié)標題的字體為黑體,這也是默認值,可以略去。此外,還可以設為rm(羅 馬體), sf(無襯線體), tt(打字機體), md(中等黑度), up(直立體), it(意大利斜體), sl(機械斜體), sc(小體大寫字母)。 small設置標題字體的尺寸,還可設為big(默認), medium, tiny。 center使標題居中,還可以設為raggedleft(居左,默認), raggedright(居右)。 indentafter相當于宏包indentfirst的作用,使標題下面的第一個段落正??s進。 pagestyles是申明后面要自定義頁面樣式。 下面就可以用\titleformat, \titlespacing, \titlelabel等命令來設置標題格式了。 因為這些命令里會用到中文,所以要在設置之前放一個空的CJK環(huán)境,如 \begin{CJK*}{GBK}{song} \end{CJK*} 下面的\titleformat命令設置了章標題的格式 \titleformat{\chapter}[hang]{\centering\LARGE\bfseries}{\chaptername}{1em}{} 其中\(zhòng)chapter可以換為\section, \subsection等,設置節(jié)、小節(jié)等標題的格式。 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。注意,在中文環(huán)境 里1em等于一個漢字的寬度。 最后一個花括號內是在排版標題前執(zhí)行的命令,這里空置。 然后用\titlespacing或\titlespacing*命令設置標題與四周的距離,例如 \titlespacing{\chapter}{0pt}{*0}{*4} 將章標題與左邊、上邊、下邊內容的距離分別設為0pt, *0, *4。這里*n表示彈性距離, 對上距離來說相當于n ex plus .3ex minus .06ex, 對下距離來說相當于n ex plus .1ex。彈性距離因為有一定的伸縮自由度,比較容易得到美觀的排版。如果想自己指定 用關鍵字plus, minus定義的彈性距離,可以用星號版本的命令,即 \titlespacing*{命令}{左距離}{上距離}{下距離} 上面設置了章標題的命令,用相同的命令也可以設置節(jié)、小節(jié)等的標題格式。但如果沒 有特殊的要求,只希望修改一下標題頭,可以用更加簡單的命令\titlelabel來設置。例 如 \titlelabel{\S\thetitle\quad} 將章節(jié)標題設置為類似“§1 標題內容”的格式。這里\quad等于\hspace{1em}, 即空 出一個漢字寬度的距離。注意,\titleformat命令的定義會覆蓋\titlelabel的定義,而 一般來說章跟節(jié)標題的格式不一樣,所以只要另外用\titleformat命令定義章標題的格 式,\titlelabel的定義就只能作用于節(jié)以下層次的標題了。 這一節(jié)接著講怎樣用titlesec宏包提供的命令設置頁眉、頁腳。下面命令定義了一個新 的頁面樣式并使用該樣式 \newpagestyle{main}[\small\kai]{ \sethead{}{}{\ifthechapter{\chaptername\quad}{}\chaptertitle\qquad\thepage} \setfoot{}{}{}\headrule} \pagestyle{main} 其中方括號內的格式設置\small\kai是對整個樣式的定義都有效的。在后面的定義中用 \sethead命令設置頁眉,格式為 \sethead[偶數頁左頁眉][偶數頁中頁眉][偶數頁右頁眉] {奇數頁左頁眉}{奇數頁中頁眉}{奇數頁右頁眉} 單面打印模式只要給出奇數頁的設置即可,雙面模式則需要將左、右頁眉做個調換。上 面給出的例子是單面模式的。對應地在雙面模式下可以寫為 \sethead[\thepage\qquad\ifthechapter{\chaptername\quad}{}\chaptertitle][][] {}{}{\ifthechapter{\chaptername\quad}{}\chaptertitle\qquad\thepage} \setfoot用來設置頁腳,格式與\sethead類似。 在頁眉、頁腳里可以顯示章節(jié)標題、頁碼等內容。如上面的例子就在頁眉中顯示了章標 題和頁碼。注意,\qquad相當于兩個\quad, 即\hspace{2em}。 \headrule是劃出頁眉線,類似地\footrule劃出頁腳線,不過比較少用。默認頁眉線的 寬度是0.4pt, 如果不滿意,可以用下面命令重新設置其寬度 \setheadrule{寬度} 最后,上面的代碼中用到了一個判斷語句\ifthechapter, 是為了解決在目錄、參考文獻 或以\chapter*命令生成的章,標題頭\chaptername不應顯示的問題。 此外,關于頁面樣式還有兩點需要注意。首先,盡管在上面例子中用\pagestyle{main} 使用了自定義的頁面樣式,但每一章的第一頁不受影響,仍然使用默認的plain樣式。在 這種頁面上,出于美觀的考慮,一般不加頁眉,而將頁碼放在頁腳(也有人喜歡不加頁 碼)。所以plain樣式(沒有頁眉,頁碼放在頁腳中間)已經基本符合要求,不必修改。如 果需要修改,可定義一個新的頁面樣式,再用下面命令重定義plain樣式 \renewpagestyle{plain}{新的頁面樣式} 其次,在雙面模式下,如果一章的最后一頁落在奇數頁上,系統(tǒng)就會自動在其后補上一 個空白頁,以使新的一章總是從奇數頁開始。但是這多加上的空白頁卻仍是有頁眉頁腳 的!這顯然很不好看,為了讓它徹底地“空白”,我們可以重定義\cleardoublepage(加 入空白頁的動作就是由這條命令來完成的)如下 \makeatletter \renewcommand\cleardoublepage{\clearpage\if@twoside \ifodd\c@page\else \hbox{}\thispagestyle{empty}\newpage\if@twocolumn\hbox{}\newpage\fi\fi\fi} \makeatother 目錄是學位論文的必要組成部分。只要在正文中適當的地方用 \tableofcontents 就可以自動生成目錄。但是目錄的格式不總是符合個人的要求,有時還要往其中加一些 條目。用titletoc宏包提供的命令可以方便地設置目錄的格式。 首先可以用 \renewcommand{\contentsname}{目\quad 錄} 將目錄部分的標題改為中文。然后,用\titlecontents命令來設置不同級別目錄項的格 式。例如,chapter層次的目錄項格式可設置如下 \titlecontents{chapter}[0pt]{\vspace{.5\baselineskip}\bfseries} {第\CJKnumber{\thecontentslabel}章\quad}{} {\hspace{.5em}\titlerule*[10pt]{$\cdot$}\contentspage} 其中0pt是目錄項到版芯左邊界的距離。緊跟其后的是在排版目錄項之前執(zhí)行的命令,這 里\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}{參考文獻} 這一節(jié)講前幾節(jié)尚未提到的一些文本排版問題。 首先是行間距的設置。學校的學位論文規(guī)范中提到行間距為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, 那樣的話行間距就會顯得過大了。 然后講一下論文首頁的設置。復旦的學位論文,裝訂的地方會按學校的模板制作封面, 就不用自己做了,不過規(guī)范中要求在扉頁注明指導小組成員名單,并且為了保持論文電 子版的完整性,最好還是做一個簡單的論文首頁(標題頁)。 沒有必要用\title, \author和\maketitle等命令自動生成論文的標題,因為那可能不太 符合你的要求。只要用 \begin{titlepage} 標題頁內容 \end{titlepage} 在標題頁內容中用上一些center環(huán)境、\vspace*和字體選擇命令就可以很容易地設計出 自己想要的格式了。 注意,上述標題頁是沒有頁碼的。而一般正文之前的部分,包括目錄、摘要等,習慣上 采用與正文部分不同的頁碼格式,如用羅馬數字表示,而從正文第一頁開始用阿拉伯數 字重新開始計算頁碼。要做到這一點,只要在標題頁后加上 \frontmatter 或 \pagenumbering{roman} 并在正文第一章前加上 \mainmatter 或 \pagenumbering{arabic} 就可以了。但是推薦使用\frontmatter和\mainmatter, 因為這兩個命令的用處不僅限于 此。前面說過,像中文摘要這種非正文的部分,可以用\chapter*命令加入,但當設置了 頁眉后就會發(fā)現一個問題,頁眉中的\chaptertitle沒有同步更新。要解決這個問題,一 個辦法是在\chapter*命令后加上一句\chaptermark, 例如 \chapter*{摘\quad 要}\chaptermark{摘\quad 要} 但假如我們使用了\frontmatter, \mainmatter以及與其配套的\backmatter, 就不需要 這么麻煩,只要直接用不帶星號版本的\chapter命令就可以了,對于\frontmatter與 \mainmatter之間的部分,以及\backmatter之后的部分,系統(tǒng)就會自動地跟正文部分的 章區(qū)別開來,不加上“第一章”這樣的章標題頭。一個典型的文檔結構示例如下 \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} 到這里文本排版講得差不多了。這一節(jié)再講講定理和證明環(huán)境的格式設置。 數學論文里經常使用大量的定理環(huán)境。LaTeX默認的定理環(huán)境已經不能滿足要求,amsthm 宏包提供了方便的命令用于設置定理環(huán)境的格式。例如下面的命令定義了一個定理樣式 mythm, 并用它來定義一些常用的定理環(huán)境 \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, 就同時把中文變?yōu)楹隗w,英文變?yōu)榇煮w了。注意, 如果前面沒有修改字體定義文件,而在這里用\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}表示用方括號中的附加內容作為定理頭部。用此樣式定義一 個新的定理環(huán)境(與前面定義過的thm環(huán)境統(tǒng)一編號) \theoremstyle{specthm} \newtheorem{sthm}[thm]{} 并在正文中使用 \begin{sthm}[定理~\thethm~(存在性定理)] 定理內容 \end{sthm} 就得到了想要的效果。 至于證明的排版,amsthm宏包提供了proof環(huán)境,但格式需要做一點調整。amsthm.sty中 對proof環(huán)境的定義如下 \newenvironment{proof}[1][\proofname]{\par \pushQED{\qed}% \normalfont \topsep6\p@\@plus6\p@\relax \trivlist \item[\hskip\labelsep \itshape #1\@addpunct{.}]\ignorespaces }{% \popQED\endtrivlist\@endpefalse } 為了符合一般中文證明環(huán)境的排版習慣,可以重新定義proof環(huán)境為(注意,因為這些命 令含有@字符,所以需要在前、后分別加上\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環(huán)境會自動在證明最后一行的最右邊加上一個證明結束符,默認為空心方塊,可以 重新定義\qedsymbol來修改它。需要注意的是,當證明以一個獨立公式結束時,證明結 束符會出現在下一行的最右邊,而不是在公式的同一行上,這不合乎習慣。這時只要在 公式環(huán)境內加上\qedhere即可。 最后還要講講浮動圖形和表格環(huán)境的中文化。首先把Figure和Table改為中文 \renewcommand{\figurename}{圖} \renewcommand{\tablename}{表} 然后需要對浮動環(huán)境的標題格式做一點修改。在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 ★★★結束語★★★ 到這里,每個人都需要知道的東西已經基本上介紹完了。如果你仔細讀了這些文字,并 且按照它去設置了你的論文格式,我想應該差不多了。當然,不同學科的論文有各自的 特點和要求,肯定還有很多具體的問題沒有涉及。例如計算機專業(yè)的可能經常要用到代 碼抄錄環(huán)境,文科的論文可能要使用章末注,等等。這些問題也是版上經常問到的,在 本版精華區(qū)中大都能找到解答,這里就不再贅述。 希望費了不少時間寫的這些東西能對大家有所幫助。最后,祝大家TeX越用越熟練,都能 寫出漂亮的論文! |
|