Latex中cls和sty檔案有何區別?

2022-06-09 11:51:10 字數 2426 閱讀 3520

latex中cls和sty檔案有何區別?

本文對 latex 中 .cls 和 .sty 檔案進行介紹,主要參考了 what are .cls and .sty files?how are they different? 以及 latex2e for class and package writers 。

一般來說,.cls.sty檔案都是增加 latex 功能的補足檔案。它們在我們排版文章是時對應的使用\documentclass{}\usepackage{}載入,在包內部則對應的使用\loadclass,\loadclasswithoptions\requirepackage,\requirepackagewithoptions載入。我們通常將.cls檔案稱之為類(classes)檔案,將.sty檔案稱之為風格(style)檔案或者包(package)。

雖然它們都可以包含任意的 tex 和 latex **,但是它們的使用方式不同。我們必須通過\documentclass載入乙個類檔案,並且在乙個 latex 檔案中只能出現一次,通常也是第乙個出現的命令。而另一方面,包是乙個可選項,它可以根據我們的需求載入任意多個(在開始文件之前)。

什麼時候編寫乙個類檔案?什麼時候編寫乙個風格檔案?或者說什麼命令應該放到.cls檔案?什麼命令應該放到.sty檔案中呢?乙個經驗法則是:

如果乙個命令是用來控制文件結構的,則應該放到類檔案中;否則應該放到包檔案中。

如果乙個命令可以被其他所有的文件使用,那麼將這個命令放置到乙個包中;如果不是,則將它放到乙個類檔案中。

當乙個命令使上述兩條規則衝突的時候,優先考慮第一條規則。如\section命令幾乎在所有的文件中都使用,但因為其是用來控制文件結構的,我們將其放置到類檔案中。

一般情況下,類檔案主要分為兩個部分:一種是標準類檔案,如:article,report或者letter;另一種是基於標準類檔案的擴充套件檔案,如基於articleproc檔案類。當然我們也可以不基於任何標準類編寫全新的類檔案,通常這比較複雜,需要我們重新定義大量常用的命令,因此不建議這麼做。

額外說明:如果我們要自己定義乙個不基於標準類的類檔案,應確保至少包含以下四個部分:定義\normalsize命令,設定\textwidth,\textheight的值以及設定頁編碼方式.下面給出乙個最小類檔案的例子,當然對於大部分類其包含的命令是遠遠多於以下類檔案的:

\needstexformat

\providesclass[

1995/10/30 standard latex minimal class

]\renewcommand\selectfont}

\setlength

\setlength

\pagenumbering % needed even though this

class

will

% not show page numbers

對於包,或者說是風格檔案,它用來提供所有其他類檔案不提供的命令。它們廣義上被分為兩類:對類檔案進行修正,或者新增額外功能。

例如graphicx包提供包含影象的方法和將所有圖形效果應用到文件元素中。這個包本質上可以應用到所有類檔案上。另乙個例子——sectsty包。該包提供了方法用來自定義標準類檔案(article,report,book)中的段落開頭(section headers)。所以,如果試圖將它和memoir包一起使用,將導致它重寫memoir的建立段落開頭的方法,進而導致出現嚴重錯誤。

.cls.sty檔案都可以使用 latex 中的任意**以提供一些功能和命令。類檔案一般用來控制文件的結構並提供該類特有的命令,如段落命令、字型命令、特定的頁首頁尾設定等。包檔案用來提供其他的所有的功能和命令。

大部分情況下我們應該考慮將我們的命令放置到包中,這樣我們可以根據需求任意的選擇是否載入這些包。如果我們真的需要編寫類檔案,應該基於現有的標準類檔案進行編寫,這樣可以節省我們很多命令的定義(如上面提到的section命令以及其他常用的字型選擇命令)。同時類檔案的內容不宜過多,當我們類檔案的內容過多時,我們應該考慮是否將其中部分命令單獨提取出來作為乙個包。

參考:

latex 中的cls檔案編寫

cls檔案可謂是整個latex排版中的最關鍵部分,怎麼變寫好他將是乙個十分重要的問題。在這裡為大家推薦乙個簡單的模板 編寫thesis.cls如下 needstexformat 2007 10 19 providesclass 2011 04 05 v0.1 thesis templatefordo...

python中self和cls的區別

1 self表示乙個具體的例項本身。如果用了staticmethod,那麼就可以無視這個self,將這個方法當成乙個普通的函式使用。2 cls表示這個類本身。class a object deffoo1 self print hello self staticmethod deffoo2 print...

python中cls和self的不同

class a object a a staticmethod deffool1 name print name deffool2 self,name print name classmethod deffool3 cls,name print name 首先定義了乙個類a,類a中有3個函式,foo...