读懂LaTeX中cls文件
讀懂LaTeX中cls文件
cls文件都以
\NeedsTeXFormat{LaTeX2e} \ProvidesClass{selfbook}[2019/11/11 v0.1 Book Template for Self Use] \LoadClass{ctexbook} \RequirePackage{titlesec}這幾行代碼開始,其中第一行指定了LaTeX編譯器的版本需求。告訴了編譯器這個宏包或者說類文件是屬于哪個版本的。本文中宏包和類都指.cls文件。
第二行指出了這個宏包的版本修改日期,日期格式必須是代碼中所示的那樣。\ProvidesClass命令的第一個參數就是cls文件的名字,兩個必須一致;第二個參數是可選的,如果給出了第二個參數,則編譯器會檢查文檔所引用的類文件,如果引用的不是最新版本會給出警告,但是一般文檔中也不會指出具體的日期,所以作用不大。
第三行給出了該類所繼承的父類,一般宏包都是依托于其他宏包編寫的。這里給出依托的其他類名,這樣我們沒有設置格式的其他文章結構都會使用父類默認的格式。
第四行\RequirePackage命令指出該類需要使用的其他宏包,這個宏包和第三行的宏包不太一樣,這里的宏包提供了設置格式的功能,第三行的宏包一般是給出了各種設置的格式,如chapter、section等的格式。此外,\RequirePackage保證引用的宏包只被引入一次,類似于C++中的#pragma once。
之后的cls文件中,一般是各種格式的定義。這里記錄比較困惑的常見命令格式:
\makeatletter?&?\makeatother
這兩條命令括起來的內容中,@符號是一個普通的字符,不需要轉義或者進行其他處理,就和a~z等其他字符一樣。這是為了處理一些含有@符號的命令而設計的。
\@ifstar
這條命令是為了處理命令中含有*的命令而設計的。例如
定義了\mycmd和\mycmd*兩個命令,當使用\mycmd時,相當于調用了\mycmd@nostar命令,而使用\mycmd*時,相當于調用了\mycmd@star命令,當然,代碼中的\mycmd、\mycmd@nostar、\mycmd@star等命令名稱可以自己任意取,當似乎用@符號時,需要使用1中的兩條命令包起來。
glossaries宏包使用
如果文檔中有縮寫表、符號表或者術語表的編寫需要,可以使用nomencl、glossary、glossaries這三個宏包,其中前兩個宏包比較簡單,易于使用,但是功能也少,glossaries宏包功能豐富,使用起來也更復雜。
上面代碼是使用glossaries宏包的一個最簡單的例子。在TeXstudio中新建文件,粘貼進這些代碼,保存為任意的.tex文件,分別按F5(編譯)、F9(調用makeglossaries.exe)、F5(再次構建并預覽)即可看到運行得到的pdf文件。我主要編寫中文文檔,構建使用的是XeLaTeX,需要在texstudio中Options->Build中將Default Compiler更改為XeLaTeX。運行中可能遇到沒有perl解釋器的問題,報錯信息為makeglossaries.exe: The Perl interpreter could not be found.。需要搜索perl,去其官網下載perl解釋器并安裝。我下載的是ActivePerl-5.28.1.0000-MSWin32-x64-432e1938.msi文件,其他操作系統安裝相應版本即可。此外,我測試了安裝CTeX-2.9.2.164_Full.exe版本的ctex,當運行makeglossaries.exe時,會提示一大堆警告,大致是說makeglossaries使用了過時的perl語法,但是編譯結果是正確的。如果對一大堆警告不爽,可以安裝texlive2019.iso(win7 安裝texlive2019.iso時可以解壓后運行install-tl_windows.bat文件,但必須是管理員身份運行,否則安裝會報錯。),其對應的makeglossaries版本為4.41,本人測試,沒有任何問題,完美輸出。如下圖:
\graphicx
圖片處理功能需要的宏包,在texlive2019版本中,圖片名中含有中文時導致不識別,報錯信息為File `figures/inter中‘ not found. Font shape `TU/STXingkai(0)/bx/n undefined(Font)。實際上圖片是存在的,字體也是存在的,將圖片中的中文字符刪掉重新編譯就會正常輸出,懷疑可能與編碼有關系。另外使用CTeX-2.9.2.164_Full.exe安裝的latex版本,圖片中含有中文字符可以正常輸出。CTeX是TeX的中文套裝,包含了中文文檔編寫的工具及配置,對中文支持比較好,但網上搜索到的版本很老,估計很久沒更新了。而texlive怎么配置使其正常支持中文文件名,目前沒搜到好的解決方案,如果有人知道,求教。網絡上有很多人說有圖片但提示圖片找不到,可以看看圖片路徑或名稱中是否有中文。
? ? ? ? ?
?
總結
以上是生活随笔為你收集整理的读懂LaTeX中cls文件的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: JS重点整理之JS原型链彻底搞清楚
- 下一篇: net use \\192.168.54