文件編寫的介紹從第三部分開始,文件的命令從第四部分開始,引數的傳遞從第五部分開始。
1.sty和cls文件簡介
a.可以使用docstrip生成sty和cls檔案
b.如果命令可以在其他tex檔案中使用,應該寫在sty檔案中。
如果命令(排版格式)只適合某一文件,應該寫在cls檔案中。
2.編寫sty和cls
a.tex命令包含三種格式
tex作者使用的,即一般tex檔案包含的命令,
sty和cls作者使用的,如\RequirePackge,
tex內部命令,如\@temcnta。
您不可以在tex檔案中使用後兩種命令。
b.魯棒性
為了增強文件魯棒性,使用較為嚴謹的命令。
檔案載入命令:
\LoadClass{cls file name} %載入cls檔案
\LoadClassWithOptions
\RequirePackage{sty file name} %載入所需要的包
\RequirePackageWithOptions
\input{file name}
不建議使用最後一種,會導致多次載入。
命令定義
\newcommand
\renewcommand
\providecommand
\CheckCommand
\def
上面四個差別不大,不建議使用第四種,會導致意外定義新命令
環境定義
\newenvironment
\renewenvironment
\def\foo{…} \def\endfoo{…}
上面兩個均可,不建議使用第三種
c.便攜性
文件名儘量不要超過8字元,不包括3個字元的副檔名,
不能和已有的latex標準包重名,
儘量加上首字母字首,比如XXX thesis.cls
d.重定義document
使用\AtBeginDocument和\AtEndDocument重定義docunment
3.cls和sty結構
一個完整的cls或者sty檔案通常包含以下的結構。
a.文件介紹
\NeedsTeXFormat{LaTeX2e}
\ProvidesPackage{包的名稱}[時間及其他資訊]
\ProvidesClass{類名稱}[時間及其他資訊]
時間使用YYYY/MM/DD格式
b.引用cls或者sty檔案
\RequirePackage[options]{package}[date]
\LoadClass[hoptionsi]{hclass-namei}[hdatei]
當載入的檔案中options和當前文件相同,使用以下命令:
\LoadClassWithOptions{article}
\RequirePackageWithOptions{graphics}
c.定義選項
使用如下命令定義選項
\DeclareOption{option}{code}
如果出現了選項,則會執行選項中的程式碼。
使用如下程式碼,將error變為warning
\DeclareOption*{%
\PackageWarning{fred}{Unknown option ‘\CurrentOption’}%
}
使用如下命令使定義的選項被文件呼叫執行
\ProcessOptions\relax
d.最小文件
文件必須包括四個內容:
\normalsize,\textwidth, \textheight,頁數的規範
一個最小文件如下例:
\ProvidesClass{minimal}[1995/10/30 Standard LaTeX minimal class]
\renewcommand{\normalsize}{\fontsize{10pt}{12pt}\selectfont}
\setlength{\textwidth}{6.5in}
\setlength{\textheight}{8in}
\pagenumbering{arabic} % needed even though this class will
% not show page numbers
1
2
3
4
5
6
7
信件文件如下例:(文件名為neplet.cls)
\ProvidesClass{neplet}[1995/04/01 NonExistent Press letter class]
\DeclareOption*{\PassOptionsToClass{\CurrentOption}{letter}}
\LoadClass[a4paper]{letter}
\renewcommand{\ps@firstpage}{%
\renewcommand{\@oddhead}{letterhead goes here}%
\renewcommand{\@oddfoot}{letterfoot goes here}%
8
9
10
11
4.文件命令
\NeedsTeXFormat {format-name} [release-date] %文件的定義
\ProvidesClass {class-name} [release-info]%表示當前文件提供了XX類的定義
\ProvidesPackage {package-name} [release-info]%表示當前文件提供了XX包的定義
\ProvidesFile {file-name} [release-info]%表示當前文件提供了XX檔案的定義
\RequirePackage [options-list] {package-name} [release-info]
\RequirePackageWithOptions {package-name} [release-info]%引用包
\LoadClass [hoptions-listi] {class-name} [release-info]
\LoadClassWithOptions {class-name} [release-info]%引用類
\DeclareOption {option-name} {code}%選項定義
\DeclareOption* {code}%對於所有選項都為執行
以下命令只在定義option的code中使用
\CurrentOption%引用當前選項
\OptionNotUsed%當前選項加入未使用選項列表
\PassOptionsToPackage {options-list} {package-name}
\PassOptionsToClass {options-list} {class-name}%意味著如果呼叫這個包,就會執行optionlist中的選項
\AtEndOfClass{code}
\AtEndOfPackage{code}%程式碼將在執行完整個包之後執行
\AtBeginDocument {code}
\AtEndDocument {code}%程式碼將在執行\begin{document}或者\end{docpment}時執行
\AtBeginDvi {specials}
\ProcessOptions%
\ProcessOptions*
\@options%
\ExecuteOptions {hoptions-listi}
以上只在code中使用
\IfFileExists {file-name} {true} {false}%定義檔案不存在時如何操作,這個命令本身不會載入檔案
\InputIfFileExists {file-name} {true} {false}%如果存在,執行True中程式碼,然後載入檔案,否則執行faulse
\ClassError {class-name} {error-text} {help-text}
\PackageError {package-name} {error-text} {help-text}%如果在引入包中出現錯誤,將顯示text的內容。
%\protect加在命令之前,使得其被列印而不是執行,\MessageBreak列印換行,\space列印空格。
\ClassWarning {class-name} {warning-text}
\PackageWarning {package-name} {warning-text}
\ClassWarningNoLine {class-name} {warning-text}
\PackageWarningNoLine {package-name} {warning-text}
\ClassInfo {class-name} {info-text}
\PackageInfo {package-name} {info-text}
\DeclareRobustCommand {cmd} [num] [default] {definition}
\DeclareRobustCommand* {cmd} [num] [default] {definition}%定義更加魯棒的命令,和renewcommand類似。
\CheckCommand {cmd} [num] [default] {definition}
\CheckCommand* {cmd} [num] [default] {definition}%定義的同時會檢查,如果不同則會產生warning
\paperheight
\paperwidth%設定頁面大小
\MakeUppercase {text}
\MakeLowercase {text}%大小寫轉換
\ignorespacesafterend%取消空格
\normalsfcodes%恢復字間距
\if@compatibility
可能需要重新定義如下命令
\rm \sf \tt \bf \it \sl \sc
\normalsize
@normalsize
需要重新定義如下命令
\tiny \footnotesize \small \large
\Large \LARGE \huge \Huge
\tenrm \elvrm \twlrm . . .
\tenbf \elvbf \twlbf . . .
\tensf \elvsf \twlsf . . .
可能需要替換如下命令
\vpt \vipt \viipt . . .
\prm, \pbf, \ppounds, \pLaTeX . . .
以下命令被移除
\footheight
@maxsep
@dblmaxsep
5.引數傳遞
引數傳遞使得tex寫作是不需要重複新增相同的資訊。(比如頁首上方的標題)。遺憾的是原文中並沒有介紹相關的內容。以下內容均來自於下方連結。
https://blog.csdn.net/RobertChenGuangzhi/article/details/50461514
在cls檔案中,使用以下命令定義引數
\newcommand{\@ang-name}{預設值}
引數名通常為\@後跟tex檔案中使用的名稱
在cls檔案中,使用以下命令關聯cls引數和tex引數
\newcommand{\tex-cmd}[引數數目][預設值]{
\renewcommand{\@avg-name1}{#1}
\renewcommand{\@avg-name2}{#2}
\renewcommand{\@avg-name3}{#3}
…
命令名通常為\加上tex檔案中引用的名稱。
在cls檔案中使用\@avg-name1…呼叫引數
在tex檔案中使用如下程式碼獲取引數:
\tex-cmd{引數1的值}{引數2的值}{引數3的值}…
文件編寫的介紹從第三部分開始,文件的命令從第四部分開始,引數的傳遞從第五部分開始。
1.sty和cls文件簡介
a.可以使用docstrip生成sty和cls檔案
b.如果命令可以在其他tex檔案中使用,應該寫在sty檔案中。
如果命令(排版格式)只適合某一文件,應該寫在cls檔案中。
2.編寫sty和cls
a.tex命令包含三種格式
tex作者使用的,即一般tex檔案包含的命令,
sty和cls作者使用的,如\RequirePackge,
tex內部命令,如\@temcnta。
您不可以在tex檔案中使用後兩種命令。
b.魯棒性
為了增強文件魯棒性,使用較為嚴謹的命令。
檔案載入命令:
\LoadClass{cls file name} %載入cls檔案
\LoadClassWithOptions
\RequirePackage{sty file name} %載入所需要的包
\RequirePackageWithOptions
\input{file name}
不建議使用最後一種,會導致多次載入。
命令定義
\newcommand
\renewcommand
\providecommand
\CheckCommand
\def
上面四個差別不大,不建議使用第四種,會導致意外定義新命令
環境定義
\newenvironment
\renewenvironment
\def\foo{…} \def\endfoo{…}
上面兩個均可,不建議使用第三種
c.便攜性
文件名儘量不要超過8字元,不包括3個字元的副檔名,
不能和已有的latex標準包重名,
儘量加上首字母字首,比如XXX thesis.cls
d.重定義document
使用\AtBeginDocument和\AtEndDocument重定義docunment
3.cls和sty結構
一個完整的cls或者sty檔案通常包含以下的結構。
a.文件介紹
\NeedsTeXFormat{LaTeX2e}
\ProvidesPackage{包的名稱}[時間及其他資訊]
\NeedsTeXFormat{LaTeX2e}
\ProvidesClass{類名稱}[時間及其他資訊]
時間使用YYYY/MM/DD格式
b.引用cls或者sty檔案
\RequirePackage[options]{package}[date]
\LoadClass[hoptionsi]{hclass-namei}[hdatei]
當載入的檔案中options和當前文件相同,使用以下命令:
\LoadClassWithOptions{article}
\RequirePackageWithOptions{graphics}
c.定義選項
使用如下命令定義選項
\DeclareOption{option}{code}
如果出現了選項,則會執行選項中的程式碼。
使用如下程式碼,將error變為warning
\DeclareOption*{%
\PackageWarning{fred}{Unknown option ‘\CurrentOption’}%
}
使用如下命令使定義的選項被文件呼叫執行
\ProcessOptions\relax
d.最小文件
文件必須包括四個內容:
\normalsize,\textwidth, \textheight,頁數的規範
一個最小文件如下例:
\NeedsTeXFormat{LaTeX2e}
\ProvidesClass{minimal}[1995/10/30 Standard LaTeX minimal class]
\renewcommand{\normalsize}{\fontsize{10pt}{12pt}\selectfont}
\setlength{\textwidth}{6.5in}
\setlength{\textheight}{8in}
\pagenumbering{arabic} % needed even though this class will
% not show page numbers
1
2
3
4
5
6
7
1
2
3
4
5
6
7
信件文件如下例:(文件名為neplet.cls)
\NeedsTeXFormat{LaTeX2e}
\ProvidesClass{neplet}[1995/04/01 NonExistent Press letter class]
\DeclareOption*{\PassOptionsToClass{\CurrentOption}{letter}}
\ProcessOptions\relax
\LoadClass[a4paper]{letter}
\renewcommand{\ps@firstpage}{%
\renewcommand{\@oddhead}{letterhead goes here}%
\renewcommand{\@oddfoot}{letterfoot goes here}%
}
1
2
3
4
5
6
7
8
9
10
11
1
2
3
4
5
6
7
8
9
10
11
4.文件命令
\NeedsTeXFormat {format-name} [release-date] %文件的定義
\ProvidesClass {class-name} [release-info]%表示當前文件提供了XX類的定義
\ProvidesPackage {package-name} [release-info]%表示當前文件提供了XX包的定義
\ProvidesFile {file-name} [release-info]%表示當前文件提供了XX檔案的定義
\RequirePackage [options-list] {package-name} [release-info]
\RequirePackageWithOptions {package-name} [release-info]%引用包
\LoadClass [hoptions-listi] {class-name} [release-info]
\LoadClassWithOptions {class-name} [release-info]%引用類
\DeclareOption {option-name} {code}%選項定義
\DeclareOption* {code}%對於所有選項都為執行
以下命令只在定義option的code中使用
\CurrentOption%引用當前選項
\OptionNotUsed%當前選項加入未使用選項列表
\PassOptionsToPackage {options-list} {package-name}
\PassOptionsToClass {options-list} {class-name}%意味著如果呼叫這個包,就會執行optionlist中的選項
\AtEndOfClass{code}
\AtEndOfPackage{code}%程式碼將在執行完整個包之後執行
\AtBeginDocument {code}
\AtEndDocument {code}%程式碼將在執行\begin{document}或者\end{docpment}時執行
\AtBeginDvi {specials}
\ProcessOptions%
\ProcessOptions*
\@options%
\ExecuteOptions {hoptions-listi}
以上只在code中使用
\IfFileExists {file-name} {true} {false}%定義檔案不存在時如何操作,這個命令本身不會載入檔案
\InputIfFileExists {file-name} {true} {false}%如果存在,執行True中程式碼,然後載入檔案,否則執行faulse
\ClassError {class-name} {error-text} {help-text}
\PackageError {package-name} {error-text} {help-text}%如果在引入包中出現錯誤,將顯示text的內容。
%\protect加在命令之前,使得其被列印而不是執行,\MessageBreak列印換行,\space列印空格。
\ClassWarning {class-name} {warning-text}
\PackageWarning {package-name} {warning-text}
\ClassWarningNoLine {class-name} {warning-text}
\PackageWarningNoLine {package-name} {warning-text}
\ClassInfo {class-name} {info-text}
\PackageInfo {package-name} {info-text}
\DeclareRobustCommand {cmd} [num] [default] {definition}
\DeclareRobustCommand* {cmd} [num] [default] {definition}%定義更加魯棒的命令,和renewcommand類似。
\CheckCommand {cmd} [num] [default] {definition}
\CheckCommand* {cmd} [num] [default] {definition}%定義的同時會檢查,如果不同則會產生warning
\paperheight
\paperwidth%設定頁面大小
\MakeUppercase {text}
\MakeLowercase {text}%大小寫轉換
\ignorespacesafterend%取消空格
\normalsfcodes%恢復字間距
\if@compatibility
可能需要重新定義如下命令
\rm \sf \tt \bf \it \sl \sc
\normalsize
@normalsize
需要重新定義如下命令
\tiny \footnotesize \small \large
\Large \LARGE \huge \Huge
\tenrm \elvrm \twlrm . . .
\tenbf \elvbf \twlbf . . .
\tensf \elvsf \twlsf . . .
可能需要替換如下命令
\vpt \vipt \viipt . . .
\prm, \pbf, \ppounds, \pLaTeX . . .
以下命令被移除
\footheight
@maxsep
@dblmaxsep
5.引數傳遞
引數傳遞使得tex寫作是不需要重複新增相同的資訊。(比如頁首上方的標題)。遺憾的是原文中並沒有介紹相關的內容。以下內容均來自於下方連結。
https://blog.csdn.net/RobertChenGuangzhi/article/details/50461514
在cls檔案中,使用以下命令定義引數
\newcommand{\@ang-name}{預設值}
引數名通常為\@後跟tex檔案中使用的名稱
在cls檔案中,使用以下命令關聯cls引數和tex引數
\newcommand{\tex-cmd}[引數數目][預設值]{
\renewcommand{\@avg-name1}{#1}
\renewcommand{\@avg-name2}{#2}
\renewcommand{\@avg-name3}{#3}
…
}
命令名通常為\加上tex檔案中引用的名稱。
在cls檔案中使用\@avg-name1…呼叫引數
在tex檔案中使用如下程式碼獲取引數:
\tex-cmd{引數1的值}{引數2的值}{引數3的值}…