看懂Latex模板(或定制专属模板)
一个简单的latex文档,我们只需要一个tex文件即可,但实际上我们在其中调用了文档类以及宏包。为了不在一个tex文件中将格式与正文堆在一起,我们可以自己设计专属的文档类(当然中间还是得使用人家的文档类),首先对tex中的文件类型进行说明:
文件类型 | 功能 |
.cls | 模版类文件,自定义的文档类 |
.cfg | 模板配置文件,为文档类服务 |
.bst | 参考文献样式文件,自定义参考文献格式 |
.bib | 参考文献库 |
.tex | 主文件或其他文件 |
.sty | 模板宏包文件,自定义的宏包 |
迈出第一步,设计cls文件制作自己的文档类。自己设计的文档类中同样也需要使用其他文档类和宏包。要标注一个文档类和宏包的开头,可以使用
ProvidesClass{<文档类名>}[<发布信息>]
ProvidesPackage{<文档类名>}{<发布信息>}
其中发布信息的内容是年/月/日加上空格和进一步的描述。一般地,在此之前,使用命令\NeedsTeXFormat告诉编译器这个宏包是属于LaTeX的哪个版本的。当前LaTeX的版本是LaTeX2e,几乎所有的发行版本都是用这个,实例如下
\NeedsTeXFormat{LaTeX2e}
\ProvideClass{mymodel}[2020/03/06 My custom model for homework]
类文件需要包含很多格式信息和内部设置,以使得LaTeX正常工作,但是我们并不想人工地输入所有的东西。相反地,我们可以调用已有的类文件和宏包。在cls文件中,调用宏包不能再使用\usepackage而是使用\RequirePackage命令。这样,我们的文档类便有了这些已有文档类和宏包的功能了。
对与这些已有的文档类和宏包,我们可以设置使用其全部属性或者只使用其中某些。
%声明一个宏包或类的选项
\DeclareOption{
\RequirePackage{htperref}
}
%使全部或指定的部分选项生效
\ProcessOptions
\ExecuteOptions{<选项列表>}
%使用命令在当前文档类或宏包末尾插入代码
\AtEndOfClass{<代码>}
此后,我们可以将格式设置在之后进行,包括但不限于标题格式、页眉页脚、封面、摘要页等。在cls文件中我们常用以下命令:
% def 为了书写方便
\def \ctitle {\Large \bfseries 这是题目}
% 设置新命令
\newcommand {name}{num}{define}
%name为新的命令,num为参数个数, difine为新命令完成的操作,其中参数使用#1 #2表示,其#最大数应为num
%重新定义已有命令
\renewcommand{}{}
cls的目的是设置自己的文档类,因此会对已有的格式进行重新设置
我们希望文档类文件在设置好后用户尽量不再更改,但是其中有一些因人而异的内容,如封面的名字,我们希望其格式在cls文件中设置,而参数由tex问件输入,可以使用下面命令
%为了在tex中输入,我们可以定义一个命令,把需要设置的值作为参数
%而我们希望在cls文件中调用这个参数,可以给它def一下,作为简便写法
% cls文件中
\newcommand{\cname}[1]{\def\@cname{#1}}
{\textbf{\@cname}}
% tex文件中
\cname{张三}
再说说cfg文件,它是cls的配置文件,因此可以在其中定义一些符号等,在cls文件中输入后即可使用,如
%cfg
\def \cover@cname{学生姓名:}
\def \cover@cmajor{学科专业:}
\def \cover@cinstitute{所在单位:}
\endinput
%cls
\begin{tabular}{l@{\extracolsep{0.2em}}c}
{\songti \bfseries \cover@cname} & \fillinblank{23em}{\textbf{\@cname}}\\
{\songti \bfseries \cover@cmajor} & \fillinblank{23em}{\textbf{\@cmajor}}\\
{\songti \bfseries \cover@cinstitute} & \fillinblank{23em}{\textbf{\@cinstitute}}
\end{tabular}
\AtEndOfClass{\input{DLreport.cfg}}
\endinput
最后在tex文件中使用\documentclass{mymodel}即可加载设置,实现干湿分离。当然,记得为正文和图片分别建一个文件夹,这样更美观。
比较复杂的模板如国科大的论文模板,初学者看北京交通大学的论文模板更容易理解,我为了深度学习作业设置了简单模板(pwe3)如下:
参考
[1] 一份不太短的latex教程
[2] 写一个latex类文件 [3] 北交大论文模板