由于简书的markdown对latex语法支持不太好, 因此推出我的个人博客链接:https://nymrli.top/2020/11/28/%E7%86%9F%E6%82%89Latex%E5%86%99%E4%BD%9C/
首先开始的便是文档定义:
\documentclass[bachelor]{njupthesis}
% \documentclass[option]{class}
% class有article, proc, minimal, book, slides
% option: a4paper(纸张大小)、10pt(字体大小)、fleqn(行间公式对齐方式)、leqno(行间公式的编号对齐方式)、onecolumn(单栏)、titlepage(文档标题后另起一页)
\end{document}
查看: 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文件可以提供什么内容,基本上是万年不变的,如下:
\ProvidesClass{resume}[Mylatex] % 其中,[ ]中的内容可以随便填写呀~ \NeedsTeXFormat{LaTeX2e}
-
第二部分,宏定义,这部分内容则是各取所需了,如果有需要,可以在此进行简单的定义,我在此定义了两个\newif,用于判断中文简历和英文简历:
\newif\ifChinese \newif\ifEnglish
-
第三部分,处理输入数据,也就是上文提到的
\documentclass[a4paer,12pt]{article}
中的a4paper和12pt这两条数据~~~格式如下:\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}
-
第四部分,会先导入需要用到的包,之后将上面的零散语句贴上去。在tex文件中,导入包通常使用\usepackage命令,但是在cls中,一般要使用\RequirePackage的方式将其导入,如:
% 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
\ProvidesClass{njupthesis}
\LoadClass[12pt, openany, twoside]{book}
- ProvidesClass为定义出的模板class名
- LoadClass为documentclass中原先指定的参数
\DeclareOption
\DeclareOption{bachelor}{
\renewcommand{\chinesedegreename}{本科}
\renewcommand{\chinesebooktitle}{本科生毕业设计(论文)}
\renewcommand{\englishbooktitle}{Bachelor Thesis}
}
关于\documentclass
的option设置
\newcommand
% 姓名的字体较大,且加粗,实现方式:
\newcommand{\name}[1]{
\huge {\textbf{#1}}
}
% tex中调用方式为: \name{Zhang San}
\newcommand{\wanted}[1]{
\normalsize {\textbf{申请职位:}} #1
% \textbf 为加粗
% \normalsize 为设置常规字号
}
\newcommand{\address}[1]{
\normalsize
\raisebox{-3pt}{\includegraphics[height=#1]{#2}} #3
% \includegraphics 为插图的命令: \includegraphics[选项]{文件}
% \raisebox: 升高或者降低text盒子: \raisebox{上移量}[高度][深度]{文本}
% #1表示要显示图标的高度
% #2表示图标文件完整路径
% #3表示图标后要显示的文字
}
% tex中调用方式为: \address{12pt}{add.png}{Nanjing, China}
\newcommand{\edusubsection}[3]{
\subsection{\textbf{#1} \hfill #2}
% \sunsection 预设了较大的字体
% \hfill 设置弹性长度
\vspace{-4pt}
% \vspace{宽度大小} 设置垂直间距
{\normalfont\normalsize #3}
\vspace{-10pt}
}
最后一个\edusubsection
的效果图
分析下语法:\newcommand
为自定义命令: \newcommand{<自命名指令>}[<参数个数>][<首参数默认值>]{<具体的定义行为>}
注:
- 命令只能由字母组成,不用以\end{}结尾
- 取参数时,从1开始索引
p.s. \renewcommand
重新定义已有命令, 语法跟\newcommand
相同
\DeclareCaptionFormat
设置题目标题格式
\DeclareCaptionFormat{algrule}{%
{\@hangfrom{#1#2}%
\doublespacing
\small
\advance\caption@parindent\hangindent
\advance\caption@hangindent\hangindent
\caption@@par#3\par}%
}
\graphicspath
设置图片路径
\graphicspath{{./pic/}}
\titleformat
设置各个title格式
\titleformat{\chapter}[block]
{\centering\fontsize{15pt}{15pt}\selectfont\heiti\thispagestyle{fancy}}{\thechapter}{2pc}{}
\titleformat{\section}[block]
{\fontsize{14pt}{14pt}\selectfont\heiti}
{\thesection}{7pt}{}
\titleformat{\subsection}[block]
{\fontsize{14pt}{14pt}\selectfont\heiti}
{\thesubsection}{7pt}{}
\titleformat{\subsubsection}[block]
{\fontsize{12pt}{12pt}\selectfont\heiti}
{\thesubsubsection}{6pt}{}
\newtheorem
\newtheorem{theorem}{Theorem}[Chapter]
引用
\citing
设置引用
当代生活\citing{pedregosa2011scikit}是严肃文学大师的作品。
\bibliography
\bibliographystyle{IEEEtran} % 按照IEEEtran.bst的样式引用
\bibliography{cog} % 引用文件制定为cog.bib
\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。
\documentclass{article}
\pagestyle{empty}
\setlength\textwidth{3in}%限制文本宽度使得较少的文字就容易看出断行的效果
\newenvironment{Abstract}{
\begin{center}\normalfont\bfseries Abstract\end{center}
\begin{quote}\par
}%开始部分定义
{\end{quote}}%结束部分定义
\begin{document}
\begin{Abstract}
This abstract explain the approach userd to solve the problems at hand.
\end{Abstract}
Some text following the abstract. Some text following the abstract. Some text following the abstract.
\end{document}
njupthesis
\makecover
封面
\newcommand{\makecover}{
\thispagestyle{empty}
\setlength{\extrarowheight}{36pt}
\begin{center}
\fontsize{36pt}{36pt}\selectfont{\heiti 南京邮电大学 \\ 毕{}业{}设{}计(论{}文)\\}
\vspace{2cm}
\begin{tabular}{>{\fontsize{16pt}{16pt}\kaiti}l
>{\centering\arraybackslash\fontsize{15pt}{15pt} \kaiti}
p{11.53cm}}
题\chinesespace\chinesespace 目{}{} & \thetitle \\
\cline{2-2}
专\chinesespace\chinesespace 业{}{} & \themajor \\
\cline{2-2}
学生姓名{}{} & \theauthor \\
\cline{2-2}
班级学号{}{} & {\large \thestudentid} \\
\cline{2-2}
指导老师{}{} & \theadvisor \\
\cline{2-2}
指导单位{}{} & \theschool \\
\cline{2-2}
\end{tabular}
\vspace{5cm}
\fontsize{16pt}{16pt}\selectfont{\kaiti 日期:\quad \thebegindate {} 至\hspace{.5pc} \thefinishdate \\}
\end{center}
\newpage
\thispagestyle{empty}
\noindent
\begin{center}
\fontsize{16pt}{16pt}\selectfont{\heiti
毕业设计(论文)原创性声明
} \\[48bp]
\end{center}
\begin{spacing}{2.0}
郑重声明:所提交的毕业设计(论文),是本人在导师指导下,独立进行研究工作所取得的成果。除文中已注明引用的内容外,本毕业设计(论文)不包含任何其他个人或集体已经发表或撰写过的作品成果。对本研究做出过重要贡献的个人和集体,均已在文中以明确方式标明并表示了谢意。\\ \\
\hspace*{7cm} 论文作者签名:
\hspace*{7cm} 日期:\quad\quad 年\quad\quad 月\quad\quad 日
\end{spacing}
\newpage
\setcounter{page}{0}
\setcounter{pseudopage}{0}
\setlength{\extrarowheight}{5pt}
}
\thesistableofcontents
目录
% TODO: 更改目录样式
\newcommand{\thesistableofcontents}{
\pdfbookmark{目录}{toc}
\tableofcontents
\thispagestyle{empty}
}
\thesisappendix
附录
\newcommand{\thesisappendix}{
\chapter*{附\chinesespace\chinesespace 录}
\setcounter{section}{0}
\addcontentsline{toc}{chapter}{附录}
\markboth{附录}{附录}
\thispagestyle{fancy}
\renewcommand{\theequation}{a-\arabic{equation}}
\renewcommand{\thetable}{a-\arabic{table}}
\renewcommand{\thefigure}{a-\arabic{figure}}
}
\thesisacknowledgement
致谢
\newcommand{\thesisacknowledgement}{
\renewcommand\thesection{\arabic{section}}
\addtocontents{toc}{\protect\setcounter{tocdepth}{0}}
\setcounter{section}{0}
\chapter*{致\chinesespace\chinesespace 谢}
\addcontentsline{toc}{chapter}{致谢}
\markboth{致谢}{致谢}
\thispagestyle{fancy}
}
\thesischapterexordium
章绪论
\newcommand{\thesischapterexordium}{
\newpage
\addtocontents{toc}{\protect\setcounter{tocdepth}{2}}
\standardhead
\pagenumbering{arabic}
\setcounter{page}{1}
}
\thesisloadbibliography
reference引用
\newcommand{\thesisloadbibliography}[2][]{
\ifthenelse{
\equal{#1}{nocite}
}{
\nocite{*}
}{}
\bibliographystyle{njupthesis}
\bibliography{#2}
}
总结:
-
{}
中的大多为具体内容,[]
中的大多为option选项设置 -
\newcommand{\xxx}
相当于一个宏定义替换, 在tex中直接使用指令\xxxx
即可;\newenvironment{xxx}{}
相对而言复杂一点,在tex中需要用\begin{xxx} ... \end{xxx}