首頁>Club>
9
回覆列表
  • 1 # 一個人的MTV

    文件編寫的介紹從第三部分開始,文件的命令從第四部分開始,引數的傳遞從第五部分開始。

    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的值}…

  • 中秋節和大豐收的關聯?
  • 如果馬琳帶劉詩雯和陳夢去奧運會這塊金牌會丟嗎?