首先开始的便是文档定义:
1 | \documentclass[bachelor]{njupthesis} |
查看: https://blog.csdn.net/wei_love_2017/article/details/86617235
可以看到这边的documentclass是自定义的,原因是因为这个使用的是郭学长做的毕设latex模板, 因此借此机会也学习下Latex的模板制作, 主要是cls文件的编写
cls文件是什么?
LaTex中常见的文件格式有.tex, .bib, .cls, .sty, .bbl等。
- .tex文件也就是我们写文档内容的文件;
- .bib是使用bibligraphy方式导入参考文献时,写参考文献的文档;.bbl是其编译之后形成的文件;
- .sty是包文件,通常使用
\usepackage
导; - .cls是类文件,通过文档最前面的
\documentclass
命令导入
cls文件怎么写的?
cls文件可以分为四部分,我暂且分别称之为声明、宏定义、输入数据处理以及其他四部分
-
所谓声明,只是说明了编译cls文件需要什么样的TeX格式以及本cls文件可以提供什么内容,基本上是万年不变的,如下:
1
2\ProvidesClass{resume}[Mylatex] % 其中,[ ]中的内容可以随便填写呀~
\NeedsTeXFormat{LaTeX2e} -
第二部分,宏定义,这部分内容则是各取所需了,如果有需要,可以在此进行简单的定义,我在此定义了两个\newif,用于判断中文简历和英文简历:
1
2\newif\ifChinese
\newif\ifEnglish -
第三部分,处理输入数据,也就是上文提到的
\documentclass[a4paer,12pt]{article}
中的a4paper和12pt这两条数据1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
```latex
\DeclareOption{zh}{\Chinesetrue\Englishfalse}
\DeclareOption{en}{\Chinesefalse\Englishtrue}
\DeclareOption*{%
\PassOptionsToClass{\CurrentOption}{article}
}
\ProcessOptions\relax
\LoadClass{article}
% 对于zh,我进行的操作是将\Chinese这个变量设为true,\English这个变量设为false,以便在后续使用第二部分定义的\if,
% 第三条语句为将初zh, en之外的其余参数传至article类,供article类进行处理,最后呢,就是加载继承的article类;——如郭学长njupthesis所做的处理为: \LoadClass[12pt, openany, twoside]{book}
```
4. 第四部分,会先导入需要用到的包,之后将上面的零散语句贴上去。在tex文件中,导入包通常使用\usepackage命令,但是在cls中,一般要使用\RequirePackage的方式将其导入,如:
```latex
% Customize the section headers
\RequirePackage{titlesec}
% footnote
\RequirePackage{fancyhdr}
% Set the margins
\RequirePackage[margin=0.5in]{geometry}
\RequirePackage[T1]{fontenc}
```
最后,在.tex文件中通过`\documentclass{Mylatex}`来使用该cls文件即可
\ProvidesClass
1 | \ProvidesClass{njupthesis} |
- ProvidesClass为定义出的模板class名
- LoadClass为documentclass中原先指定的参数
\DeclareOption
1 | \DeclareOption{bachelor}{ |
关于\documentclass
的option设置
\newcommand
1 | % 姓名的字体较大,且加粗,实现方式: |
最后一个\edusubsection
的效果图
分析下语法:\newcommand
为自定义命令: \newcommand{<自命名指令>}[<参数个数>][<首参数默认值>]{<具体的定义行为>}
注:
- 命令只能由字母组成,不用以\end{}结尾
- 取参数时,从1开始索引
p.s. \renewcommand
重新定义已有命令, 语法跟\newcommand
相同
\DeclareCaptionFormat
设置题目标题格式
1 | \DeclareCaptionFormat{algrule}{% |
\graphicspath
设置图片路径
1 | \graphicspath{{./pic/}} |
\titleformat
设置各个title格式
1 | \titleformat{\chapter}[block] |
\newtheorem
\newtheorem{theorem}{Theorem}[Chapter]
引用
\citing
设置引用
1 | 当代生活\citing{pedregosa2011scikit}是严肃文学大师的作品。 |
\bibliography
1 | \bibliographystyle{IEEEtran} % 按照IEEEtran.bst的样式引用 |
\newenvironment
\newenvironment{新环境名称}[参数个数][参数默认值]{开始部分定义}{结束部分定义}
、\renewenvironment{新环境名称}[参数个数][参数默认值]{开始部分定义}{结束部分定义}
其中参数的用法和\newcommand 相同,最多允许9个参数,顺序使用#1、#2等引用参数。如果没有使用参数,则[0]可以省略。假设myenv环境的调用如下:\begin{myenv}{arg_1}…{arg_k}
则可以在“开始部分定义”中使用#1,…#k来引用参数,这是newenvironment传递参数的方式。需要特别注意的是,newenvironment的参数只有在“开始部分定义”中才能使用,即“结束部分定义”中的代码无法获取参数。因此,如果要在“结束部分定义”中使用新环境的参数,必须在“开始部分定义”中保存到寄存器中,比如通过\newsavebox 和\sbox 等命令。
举例:
先看一个简单的文章“摘要”(Abstract)的例子:假设,摘要的标题—摘要(Abstract)两个字加粗居中显示,正文使用quote格式,完整的示例文件参见2。
1 | \documentclass{article} |
njupthesis
\makecover
封面
1 | \newcommand{\makecover}{ |
\thesistableofcontents
目录
1 | % TODO: 更改目录样式 |
\thesisappendix
附录
1 |
|
\thesisacknowledgement
致谢
1 | \newcommand{\thesisacknowledgement}{ |
\thesischapterexordium
章绪论
1 | \newcommand{\thesischapterexordium}{ |
\thesisloadbibliography
reference引用
1 | \newcommand{\thesisloadbibliography}[2][]{ |
总结:
{}
中的大多为具体内容,[]
中的大多为option选项设置\newcommand{\xxx}
相当于一个宏定义替换, 在tex中直接使用指令\xxxx
即可;\newenvironment{xxx}{}
相对而言复杂一点,在tex中需要用\begin{xxx} ... \end{xxx}
Author: Mrli
Link: https://nymrli.top/2020/11/28/熟悉Latex写作/
Copyright: All articles in this blog are licensed under CC BY-NC-SA 3.0 unless stating additionally.