学会Latex写作

由于简书的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文件可以分为四部分,我暂且分别称之为声明、宏定义、输入数据处理以及其他四部分

  1. 所谓声明,只是说明了编译cls文件需要什么样的TeX格式以及本cls文件可以提供什么内容,基本上是万年不变的,如下:

    \ProvidesClass{resume}[Mylatex] % 其中,[ ]中的内容可以随便填写呀~
    \NeedsTeXFormat{LaTeX2e}
    
  1. 第二部分,宏定义,这部分内容则是各取所需了,如果有需要,可以在此进行简单的定义,我在此定义了两个\newif,用于判断中文简历和英文简历:

    \newif\ifChinese
    \newif\ifEnglish
    
  2. 第三部分,处理输入数据,也就是上文提到的\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}
    
  3. 第四部分,会先导入需要用到的包,之后将上面的零散语句贴上去。在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文件即可~~~

查看:【LaTex】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的效果图

image

分析下语法:\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}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,324评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,303评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,192评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,555评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,569评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,566评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,927评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,583评论 0 257
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,827评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,590评论 2 320
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,669评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,365评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,941评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,928评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,159评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,880评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,399评论 2 342