1. 程式人生 > >用 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\[email protected]\@plus6\[email protected]\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\[email protected]\@plus6\[email protected] \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
    \[email protected]@\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 
    \[email protected]@\hsize{\hfil\box\@tempboxa\hfil}%
  \fi
  \vskip\belowcaptionskip}
\makeatother

★★★結束語★★★

到這裡,每個人都需要知道的東西已經基本上介紹完了。如果你仔細讀了這些文 字,並且按照它去設定了你的論文格式,我想應該差不多了。當然,不同學科的 論文有各自的特點和要求,肯定還有很多具體的問題沒有涉及。例如計算機專業 的可能經常要用到程式碼抄錄環境,文科的論文可能要使用章末注,等等。這些問 題也是版上經常問到的,在本版精華區中大都能找到解答,這裡就不再贅述。

希望費了不少時間寫的這些東西能對大家有所幫助。最後,祝大家TeX越用越熟 練,都能寫出漂亮的論文!

from: http://blog.sciencenet.cn/blog-351115-304643.html

相關推薦

LaTeX 漂亮學位論文

序 一直覺得有必要寫這樣一篇文章,因為學位論文從格式上說更像一本書,與文章 的排版不同,不僅多出目錄等文章沒有的部分,而且一般要設定頁首頁尾方便閱 讀查詢。學校有時會提出具體的格式要求,雖然復旦的要求非常簡單,而且事實 上並不嚴格執行,但自己的論文畢竟是自己的孩子,還是要敝帚自珍的,大家都 希望做得漂亮一

latex中文小論文的模板及一些問題彙總

1. 中文模板想找到好看又直接拿來用的比較費時,所以我的策略是花一些時間找到一個自己滿意的、能用的,然後一直用下去。目前找到的比較滿意的是下面這個,介面清爽,複製貼上就能用。照例,要給出引用來源並對原作者的勞動表示感謝:Xue Shengke部落格。當論文中有中文時此模板需要

PLDA的原理和em訓練(為了be user friendly開始latex公式)

最近一直在學習和操作PLDA,感覺這個演算法太有才了,對身份驗證如人臉識別,聲紋識別,OCR都有用.   先對自己的工作和麵試別人以及被面試有一份感悟: 1.數學太重要了,有些人看論文難啃的原因就是公式看不懂,公式看不懂就是數學不好,後面要慢慢補起來 2.感覺工程能力太重要

latex論文visio生成eps圖片格式方法及去除邊框方法

方法一:1. 將visio另存為pdf.2. 用Adobe acrobat pro開啟。3. 點左側的page thumbnails-------選中當前頁面------右擊----crop pages----Remove White Margins----OK---Save

大連理工大學碩士學位論文latex模板的使用

首先,論文模板的壓縮包我放到了百度網盤上, 連結: https://pan.baidu.com/s/1o9HKrbG 密碼: 1yx1 其次,不建議沒用過latex的人使用這個模板,畢竟馬上要畢業了,以後也用不上,學使用latex還需要花點時間。 最後就是這個模板是2012年往屆的畢業生做的,所

究極大福利!Python一個抖音漂亮小姐姐發掘器!原始碼送給你!

最近沉迷於抖音無法自拔,常常連續花好幾個小時在抖音漂亮小姐姐身上。手動尋找費時費力,為了高效、直接地找到漂亮小姐姐,我用 Python + ADB 做了一個 Python 抖音機器人 Douyin-Bot。自動翻頁+顏值識別,瞬間覺得關注列表不夠用了!原理開啟《抖音短視訊》APP,進入主介面獲取手機截圖,並對

Latex排版論文(2)《自動化學報》Latex模版使用時需要注意的問題

    H老師佈置作業,要求寫一篇關於神經網路的論文,論文格式以國內著名期刊之一為準。我尋思上學期把計算機三大學報(計算機學報、軟體學報、計算機研究與發展)的Word格式都練過了,這學期就學習下主流的排版技術Latex。百度了一下國內期刊,《自動化學報》高瞻遠矚地採用lat

latex論文更方便的幾個工具

1. LaTeX轉word Pandoc 可以轉換的檔案型別有: reStructuredText, textile, HTML, DocBook, LaTeX, MediaWiki markup, TWiki markup, OPML, Emacs Org-Mode, Txt2T

Latex排版論文(3)《控制與決策》初稿LaTex模版編譯出現"\bibname undefined"解決辦法

    師姐要投NEU辦的《控制與決策》,我幫忙用LaTex排版。我下載了《控制與決策》官網提供的模板之後,嘗試編譯了一下,結果出現“\bibname undefined”的錯誤。官網給出了一個解決這個問題的辦法如下:     我嘗試了一下這個方法,要改的地方不只這一個問

Latex排版論文(1)如何將Visio畫圖檔案轉換成Latex支援的.eps檔案

選中刪除白邊距,然後點選確定就剪裁好了,如下圖所示: 按照下面的步驟執行:檔案->另存為->更多選項->內嵌式PostScript  這樣全部工作就完成了。因為Adobe Acrobat Pro的版本不同,可能步驟上有所差異,不過大體都差不多。希望對大家有幫助。 這裡還是要說一下,在lat

mac os下emacslatex

記錄一下mac os下用emacs寫latex檔案的注意事項: 下載安裝 mactex 和 auctex 參考B站教程https://www.bilibili.com/video/av31840518/?p=2安裝cdlatex 注意需要執行Emacs.app進入Em

如何高效的Word論文

建立樣式,使用樣式可以 一鍵套用 批量修改格式 文件結構導航 一鍵生成多級目錄 插入圖片,公式 單張圖片使用嵌入型 多張圖片使用表格法,將圖片固定在表格中 使用三線表(表格只有行分隔線,沒有列分隔

Latex 論文elsevier,手把手如何用Latex論文

這幾天在開始寫論文,準備發的是elsevier,這個網站的instruction有問題,下載的東西基本上好多的錯誤,所以我就寫部落格記錄。 在開始的時候需要先安裝工具 下載 這裡需要我們先安裝 Latex ,我安裝的是 Ctex 安裝地址是 CTEX 我

Latex模板簡歷

本文介紹如何使用Latex模板編寫簡歷。本人也是Latex新手,所以這篇文章不會深入過多,只是個人的總結,希望能夠幫助到有需要的人。 首先,需要去下載模板。可以考慮這個網站提供的模板moderncv:點選開啟連結。點選下載後,會得到一個壓縮包,解壓即可。 可以看到,資料夾裡

latex編寫 的論文模版

\documentclass[a4paper]{article} \usepackage{CJK}%中文 \usepackage{titlesec}%標題居中 \usepackage{indentfirst}%首行縮排 \usepackage{booktabs}% \use

[轉] 如何快速通過研究生學位論文的查重問題(留著,馬上就能到了)

回答:肯定軟體不會識別圖片中的文字,其實有非常簡單的辦法,將別人的東西,先打字到你版面中來,確定好位置、格式,最好是從行頭開始,即整塊(四邊形)的,那麼在你的版面中就確定了位置,完後,複製你的檔案,將別人的東西留下,其餘的全部刪除,存檔為另一個檔案,在桌面上,將只包含別人的文字的檔案,用右鍵複製(記住是圖示)

javascript計算器

一位 先來 itl else 對象 alt img 技術 value 本人新手,如果有什麽不足的地方,希望可以得到指點 今天嘗試用javascript寫一個計算器 首先把計算器的按鈕做出來,用button做好了,這樣可以不用設置太多的樣式 <button value

Onenote博客日誌

size 點擊 ack 程序 ima gin span logs -1 進入OneNote,選中要發布博客的分區,然後點擊菜單欄中的【文件】->【發送】->【發送至博客】 這時候會啟動word程序彈出下面的對話框(如果你從未設置過

awk遞歸

ron 一個棧 fun 例子 自然 int 可能 tran 為什麽 看到自己很多年前寫的一篇帖子,覺得有些意義,轉錄過來,稍加修改。 awk是一種腳本語言,語法接近C語言,我比較喜歡用,gawk甚至可以支持tcp/ip,用起來非常方便。 awk也支持遞歸,只是awk不支

Python一個批量生成賬號的函數(戶控制數據長度、數據條數)

shuf open 小寫 長度 數據 ase 函數 用戶控制 app # 1、寫一個函數,批量生成一些註冊使用的賬號:[email protected]/* */,長度由用戶輸入,產生多少條也由用戶輸入,用戶名不能重復,用戶名必須由大寫字母、小寫字母、數字組成