Latex学习笔记(五)——Latex模板学习总结

前言:

        最近参加了数学建模大赛,整个论文都是使用Latex工具排版的,至此感觉到了它的魅力。但是由于论文模板是主办方提供的,在排版格式定义文件(.cls文件)中已经设置好了所有环境,因此用起来还是很简单的。比赛结束以后,打算学习模板的制作过程,因此研读了该大赛模板的 cls 文件。

 

一、宏包Listings的使用

       Listings 是专用于代码排版的 Latex 宏包,可对代码中的关键词、注释和字符串等使用不同的字体和颜色,也可以为代码添加边框、背景等风格。 Listings 有许多参数控制输出,如果它不支持内置的编程语言,我们还可以自己定义。

       下面显示的代码 Lstlisting 环境用于设置随附的源代码。我们将 LATEX代码放入 texstudio 编辑器中,然后通过 elatex 运行它。latex源代码如下:

Latex学习笔记(五)——Latex模板学习总结_第1张图片

在生成的PDF中的显示效果如下:

Latex学习笔记(五)——Latex模板学习总结_第2张图片

1.1 显示行号索引

     我们可以代码片段加上行号索引,行号可用于所有显示的列表,例如:左边的每个小数字,与程序代码的距离为5pt:

Latex学习笔记(五)——Latex模板学习总结_第3张图片

在pdf中的显示效果为:

Latex学习笔记(五)——Latex模板学习总结_第4张图片

1.2 制表符

       如果程序的代码中包含制表符,则可能会在pdf中获得意想不到的输出效果。为了更好地说明,我们来比较使用tabsize = 2和tabsize = 4的区别。 请注意,\ lstset 会修改同一环境中所有后续代码的值。 这不是问题,如果想要单独更改某个程序代码的设置,请使用可选参数。

tabsize = 2 的设置效果如下:

Latex学习笔记(五)——Latex模板学习总结_第5张图片

编译后的显示效果:

Latex学习笔记(五)——Latex模板学习总结_第6张图片

tabsize = 6 的设置效果如下:

Latex学习笔记(五)——Latex模板学习总结_第7张图片

编译后的显示效果:

Latex学习笔记(五)——Latex模板学习总结_第8张图片

 

1.3 添加边框

          aboveskip and belowskip 参数分别控制上边距和下边距,frame 选择是否为代码添加边框,其可选的值有: none 、leftline、 topline、bottomline、lines (top and bottom)、 single ( for single frames )、or shadowbox。

          例如我们现在给代码添加 ‘single’ 形式的边框,如下:

Latex学习笔记(五)——Latex模板学习总结_第9张图片

编译后的效果如下所示:
Latex学习笔记(五)——Latex模板学习总结_第10张图片

然后给代码添加 ‘lines’ 形式的边框,如下:

Latex学习笔记(五)——Latex模板学习总结_第11张图片

编译后的效果:

Latex学习笔记(五)——Latex模板学习总结_第12张图片

1.4 背景颜色

      我们可以给代码设置背景颜色,不过需要先导入颜色包,然后可以通过backgroundcolor =(颜色命令)请求彩色背景。有多种方法可以手动将颜色定义为所需的色调,接下来先介绍如何进行自定义颜色。

     在Latex文档中使用颜色的最简单方法是导入宏包 color 或 xcolor 。 两个包都提供了一组用于颜色操作的通用命令,但后者更灵活,并支持更多的颜色模型。首先我们自定义几种颜色,使用 \definecolor 来自定义颜色的方法如下:

\usepackage{xcolor}

\definecolor{cRed}{RGB}{0,255,0}
\definecolor{cBlue}{rgb}{0,0,1}
\definecolor{gray}{rgb}{0.5,0.5,0.5}

\colorlet{Mycolor1}{gray!10!}
% 创建了一种名为 Mycolor1 的新颜色,此颜色具有原始gray强度的10%
% 我们可以将其视为10%gray和90%白色的混合物

\color{Mycolor1}{我是自定义的颜色}

     命令\ definecolor有三个参数:新颜色的名称,模型和颜色定义。粗略地说,每个数字代表您添加到构成最终颜色的混合中的每种颜色的数量。rgb:红色,绿色,蓝色。在0和1之间的三个逗号分隔值定义颜色的组件。RGB:与rgb相同,但数字是0到255之间的整数。

Latex学习笔记(五)——Latex模板学习总结_第13张图片

编译后的效果如下:

Latex学习笔记(五)——Latex模板学习总结_第14张图片

1.5 设置外观

       basicstyle = (style){ } 可以设置基本的风格,我们可以使用  \footnotesize、\small、 \itshape、 \ttfamily或者它们的组合作为style。此外,还有设置注释、字符串以及关键词的显示风格的参数,如:commentstyle=(style) { }、stringstyle=(style){ } 、keywordstyle=(style){ }。

如下所示:

Latex学习笔记(五)——Latex模板学习总结_第15张图片

编译后的效果:

Latex学习笔记(五)——Latex模板学习总结_第16张图片

1.6 总结

        其他更加详细的内容请参照宏包listings的用户手册。我在我的 cls 文件里面设置 lstset 环境如下:

%-----------------------------导入必要的宏包------------------------------------
% 页面布局
\RequirePackage{geometry}
% 数学宏包
\RequirePackage{amsmath}
\RequirePackage{amsfonts}
\RequirePackage{amssymb}
\RequirePackage{bm}

% 设置颜色
\RequirePackage{xcolor}
% 插入图片
\RequirePackage{graphicx} 
% 表格
\RequirePackage{tabularx,array}
%% 长表格
\RequirePackage{longtable}
%% booktabs 提供了\toprule 等命令.
\RequirePackage{booktabs}
%% multirow 支持在表格中跨行
\RequirePackage{multirow}
%% 调整间隔, 让表格更好看些
\RequirePackage{bigstrut}
%% 在跨行表格中输入定界符
\RequirePackage{bigdelim}
% 保护脆落命令
\RequirePackage{cprotect}

%-----------------------------导入必要的宏包------------------------------------



%---------------设置latex中插入的程序代码格式----------------------------------------

%导入listings宏包
\RequirePackage{listings}

%先自定义三种颜色
\definecolor{dkgreen}{rgb}{0,0.6,0}
\definecolor{gray}{rgb}{0.5,0.5,0.5}
\definecolor{mauve}{rgb}{0.58,0,0.82}

%设置lstset环境
\lstset{
	frame=tb,
	aboveskip=3mm,
	belowskip=3mm,
	showstringspaces=false,
	columns=flexible,
	framerule=1pt,
	rulecolor=\color{gray!35},
	backgroundcolor=\color{gray!5},
	basicstyle={\small\ttfamily},
	numbers=left,
	numberstyle=\tiny\color{gray},
	keywordstyle=\color{blue},
	commentstyle=\color{dkgreen},
	stringstyle=\color{mauve},
	breaklines=true,
	breakatwhitespace=true,
	tabsize=3,
}

%---------------设置latex中插入的程序代码格式---------------------------------------

 这部分代码可以设置好了在tex文件中添加程序代码的格式。

 

二、设置目录页的格式 

           我们可以通过下面的代码定制自己的目录样式:


%----------------------------设置目录格式-----------------------------------------------

% 节的目录格式
\titlecontents{section}[0pt]{\vspace{2mm}\bfseries\heiti}
{\thecontentslabel\hskip.5em}{}{\titlerule*[0.5pc]{.}\contentspage}
% 小节的目录格式
\titlecontents{subsection}[30pt]{\songti}
{\thecontentslabel\hskip.5em}{}{\titlerule*[0.5pc]{.}\contentspage}

\titlecontents{subsubsection}[55pt]{\songti}
{\thecontentslabel\hskip.5em}{}{\titlerule*[0.5pc]{.}\contentspage}


% itletoc 宏包用于自定义目录样式,其中最常用的是下面这条目录样式命令。
% \titlecontents 命令来设置不同级别目录项的格式:
% \titlecontents{章节名称}[左端距离]{标题字体、与上文间距等}{标题序号}{空}{引导符和页码}[与下文间距]
% (1) 其中0pt([左端距离])是目录项到版芯左边界的距离;\vspace{2mm}表示与上文留出一定的垂直距离,该距离为2mm;
% \bfseries\heiti 把整条目录项的字体设为黑体。
% (2) 后面一项是设置目录项的头部,并在其后留出一个汉字宽度的距离。紧跟的是设置目录项主体的格式,
% 这里因为跟目录项头部相同而空置。
% (3) 再后面是设置填充命令和页码。这里用\titlerule*命令画出填充点,
% 这里是把垂直居中的实心圆点作为填充符号(习惯上中文不采用居下的填充点), 
% 并以10pt为包含一个填充符号的水平盒子的宽度,即这个宽度越小,填充点越紧密; 填充点后加上页码 \contentspage。

% 注意:用 titlesec 宏包可以在标题中加一些填充物,比如:一条水平线、一排连续或不连续的点等等。用以下三个命令来实现:
% (1) \titleline[]{}
% 其中中  表示对齐方式,有三个参数 l、c、r,分别代表左对齐、居中对齐、右对齐;
%  是要填充的材料,可以是文字、符号等等。
% (2) \titlerule []:表示在标题中添加一条水平线, 是线的宽度。
% (3) \titlerule ∗[]{}:用于在标题中添加一条填充物, 为填充物的宽度, 为填充的文字或符号。

%----------------------------设置目录格式-----------------------------------------------

 

三、中文章节标题设置

    当然,每一个标题、子标题的格式我们也可以设置,如下:

%--------------------------------中文标题格式设置-------------------------------------------------------------

% 通过 setcounter 命令来控制目录深度,如显示三级目录
\setcounter{secnumdepth}{3}
\def\@seccntformat#1{\csname the#1\endcsname\ \ }

% 更改节、子节等的标题前序号的格式
\renewcommand\thesection{\arabic{section}.}
\renewcommand\thesubsection{\arabic{section}\thinspace.\thinspace\arabic{subsection}}
\renewcommand\thesubsubsection{\thesubsection\thinspace.\thinspace\arabic{subsubsection}}

% 节标题格式, 居中,字体采用 \normalfont,大小采用 \normalsize
\renewcommand\section{\@startsection{section}{1}{\z@}%
 	{2.5ex \@plus -1ex \@minus -.2ex}%
	{2.3ex \@plus.2ex}%
	{\bfseries\centering\zihao{4}\heiti}}
\renewcommand\subsection{\@startsection{subsection}{2}{\z@}%
	{1.25ex\@plus -1ex \@minus -.2ex}%
	{1.25ex \@plus .2ex}%
	{\normalfont\normalsize\bfseries}}
\renewcommand\subsubsection{\@startsection{subsubsection}{3}{\z@}%
	{1.25ex\@plus -1ex \@minus -.2ex}%
	{1.2ex \@plus .2ex}%
	{\normalfont\normalsize\bfseries}}
\renewcommand\paragraph{\@startsection{paragraph}{4}{\z@}%
	{3.25ex \@plus1ex \@minus.2ex}%
	{-1em}%
	{\normalfont\normalsize\bfseries}}
\renewcommand\subparagraph{\@startsection{subparagraph}{5}{\parindent}%
	 {3.25ex \@plus1ex \@minus .2ex}%
	 {-1em}%
	 {\normalfont\normalsize\bfseries}}
 
 

%-------------------------------中文标题格式设置-------------------------------------------------------------

 

四、插图、表格、列表以及伪代码等浮动体的环境设置

      类似于插图、表格、算法等浮动题的格式我们也可以设置,如下:

%------------------------浮动环境设置-----------------------------------------------------------
% 下面给出的命令用来控制一页中有多大比例的区域可用来放置浮动对象(这里的比例是指浮动对象的高度除以正文高度\textheight)。
% 前面三个命令只作用于文本页,而最后一个命令只作用于浮动页。这些命令的值可以用 \renewcommand 来修改。
% (1) \textfraction:页面中必须用来排放文本的最小比例。缺省值为 0.2,即要求每页的文字至少占据 20%。
% 而这通常不是我们想要的, 我们将这个要求降低到 5%。
% (2) \topfraction:页面顶部可以用来放置浮动对象的高度与整个页面高度的最大比例。缺省值为 0.7,即
% 放置在页顶部的浮动对象所占的高度不得超过整个页面高度 70%。
% (3) \bottomfraction: 页面底部可以用来放置浮动对象的高度与整个页面高度的最大比例。缺省值为 0.3。
% 有时如果多个浮动环境连续放在一起, latex也会将它们分在几个不同页,即使它们可在同一页放得下。
% 我们可以通过修改 \topfraction 和 \bottomfraction 分别设置顶端和底端的浮动环境的最大比例。
% (4) \floatpagefraction: 浮动页中必须由浮动对象占用的最小比例。因此在一浮动页中空白所占的比例
% 不会超过 1 - \floatpagefraction。缺省值为 0.5。
% 有时 LaTeX 会把一个浮动环境单独放在一页,我们通过设置要求这个环境至少要占据 85% 才能单独放在一页。

 \renewcommand*{\textfraction}{0.05}
 \renewcommand*{\topfraction}{0.9}
 \renewcommand*{\bottomfraction}{0.8}
 \renewcommand*{\floatpagefraction}{0.85}

%------------------------浮动环境设置----------------------------------------------------------- 
 
 
 
%------------------------插图、表格以及列表环境设置----------------------------------------------------------- 
 
% 关于图片宏包graphicx,如果图片没有指定后缀, 依次按下列顺序搜索
\DeclareGraphicsExtensions{.pdf,.eps,.jpg,.png}

 % 设置图表搜索路径, 可以给图表文件夹取如下名字
\graphicspath{{figures/}{figure/}{pictures/}{picture/}{pic/}{pics/}{image/}{images/}}

% 声明标题的字体、字号
\DeclareCaptionFont{song}{\songti}
\DeclareCaptionFont{minusfour}{\zihao{-4}}  

% 如果文章中有section,那么插图标题标签将是1.1, 1.2, 2.1等。 
% 我们可以如下设置,该命令指定了一个将更改的标签(如: \thefigure )以及希望显示的标签
% 类型(如:\arabic{figure} ), 也就是说要将插图的序列号显示为阿拉伯数字,如1, 2, 3等。
\renewcommand{\thefigure}{\thesection.\arabic{figure}}

% 可以使用 \captionsetup 设置标题样式,这样后面所有的标题样式都是根据 \captionsetup 重新设置的,
% 即 \captionsetup[FLOAT_TYPE]{OPTIONS}
% 其中可选参数FLOAT_TYPE 可以是table、subtable、figure、subfigure等。
\captionsetup[figure]{ 
	format=hang,                     % 标题从第二行开始都有缩进, 应该和 justification=raggedright 的效果一样.
	labelsep=quad,                   % 分隔符是一个空格,指标题名称和序号直接的空隙
	font={song,minusfour,bf},        % 将fugure环境中的字体设置为: 宋体小四
	position=bottom                  % position=bottom, 不代表标题放在下面, 标题仍放在你放\caption的位置
}


% 表格环境设置
\captionsetup[table]{%
	format=hang,   % 标题从第二行开始都有缩进, 应该和 justification=raggedright 的效果一样.
	labelsep=quad, % 分隔符是一个空格
	font={song,minusfour,bf}, % 表的字体, 宋体小四
	position=top % position=bottom, 不代表标题放在下面, 标题仍放在你放\caption的位置.
}


% 列表环境设置
% 列表就是将所要表达的内容分为若干个条目并按一定的顺序排列,达到简明、直观的效果。在论文的写作中会经常使用到列表。
% LaTeX 中常见的列表环境有 enumerate、itemize 和 description。这三种列表环境的主要区别是列表项标签的不同。
% enumerate 是有序的列表; itemize 以圆点作为标签;description 是解说列表,可以指定标签。
\setlist{%
	topsep=0.3em, % 列表顶端的垂直空白
	partopsep=0pt, % 列表环境前面紧接着一个空白行时其顶端的额外垂直空白
	itemsep=0ex plus 0.1ex, % 列表项之间的额外垂直空白
	parsep=0pt, % 列表项内的段落之间的垂直空白
	leftmargin=1.5em, % 环境的左边界和列表之间的水平距离
	rightmargin=0em, % 环境的右边界和列表之间的水平距离
	labelsep=0.5em, % 包含标签的盒子与列表项的第一行文本之间的间隔
	labelwidth=2em % 包含标签的盒子的正常宽度;若实际宽度更宽,则使用实际宽度。
}

%------------------------插图、表格以及列表环境设置----------------------------------------------------------- 




%------------------------算法(伪代码)的环境设置---------------------------------------------------------- 

\floatname{algorithm}{算法}  
\renewcommand{\algorithmicrequire}{\textbf{输入:}}  
\renewcommand{\algorithmicensure}{\textbf{输出:}}  

%------------------------算法(伪代码)的环境设置---------------------------------------------------------- 

 

五、总结

       学习了各个部分的知识以后,我对模板的 cls 文件的内容做了整理,以后根据自己的需求,对 cls 文件的内容进行更改即可满足使用。整理后的模板 cls  文件内容如下:

\NeedsTeXFormat{LaTeX2e}[1995/12/01]

\ProvidesClass{gmcmthesis}
              [2018/09/11 v2.3 update  gmcmthesis by  latexstudio.net]


\newif\if@gmcm@bwprint\@gmcm@bwprintfalse
\newif\if@gmcm@preface\@gmcm@prefacetrue

\newcommand\gmcm@tokens@keywords{}
\newcommand*\gmcm@tokens@tihao{}
\newcommand*\gmcm@tokens@baominghao{}
\newcommand*\gmcm@tokens@schoolname{}
\newcommand*\gmcm@tokens@membera{}
\newcommand*\gmcm@tokens@memberb{}
\newcommand*\gmcm@tokens@memberc{}
\newcommand*\gmcm@tokens@supervisor{}
\newcommand*\gmcm@tokens@yearinput{}
\newcommand*\gmcm@tokens@monthinput{}
\newcommand*\gmcm@tokens@dayinput{}


\DeclareOption{colorprint}{\@gmcm@bwprintfalse}
\DeclareOption{bwprint}{\@gmcm@bwprinttrue}
\DeclareOption{withoutpreface}{\@gmcm@prefacefalse}
\DeclareOption*{\PassOptionsToClass{\CurrentOption}{ctexart}}

\ExecuteOptions{colorprint}
\ProcessOptions\relax



\LoadClass[a4paper,cs4size]{ctexart}
 
\RequirePackage{ifxetex}
\RequireXeTeX
\ifxetex\else
\ClassError{mcmthesis}{You must use the `xelatex' driver\MessageBreak Please choose `xelatex'}{%
Just choose `xelatex', no `pdflatex' or `latex' and so on.}
\fi



%---------------------导入必要的宏包----------------------------------------
% 数学宏包
\RequirePackage{amsmath}
\RequirePackage{amsfonts}
\RequirePackage{amssymb}
\RequirePackage{bm}

% 设置颜色
\RequirePackage{xcolor}
% 插入图片
\RequirePackage{graphicx} 
% 表格
\RequirePackage{tabularx,array}
%% 长表格
\RequirePackage{longtable}
%% booktabs 提供了\toprule 等命令.
\RequirePackage{booktabs}
%% multirow 支持在表格中跨行
\RequirePackage{multirow}
%% 调整间隔, 让表格更好看些
\RequirePackage{bigstrut}
%% 在跨行表格中输入定界符
\RequirePackage{bigdelim}
% 保护脆落命令
\RequirePackage{cprotect}


% 首行缩进
\RequirePackage{indentfirst}
% 设置浮动体的标题
\RequirePackage{caption}
% 定制列表环境
\RequirePackage{enumitem}
% 下划线 
\RequirePackage{ulem}
% 尺寸计算
\RequirePackage{calc}
\RequirePackage{titletoc,url}
%参考文献
\RequirePackage[numbers]{natbib}
\setlength{\bibsep}{0pt plus 0.3ex}

\RequirePackage{etoolbox}
\AtBeginEnvironment{thebibliography}{%
	\phantomsection
	\addcontentsline{toc}{section}{\refname}
}
% 超链接 hyperref 的设置
\RequirePackage{hyperref}

%---------------------导入必要的宏包----------------------------------------




%---------------设置latex中插入的程序代码格式----------------------------------------

%导入listings宏包
\RequirePackage{listings}

%先自定义三种颜色
\definecolor{dkgreen}{rgb}{0,0.6,0}
\definecolor{gray}{rgb}{0.5,0.5,0.5}
\definecolor{mauve}{rgb}{0.58,0,0.82}

%设置lstset环境
\lstset{
	frame=tb,
	aboveskip=3mm,
	belowskip=3mm,
	showstringspaces=false,
	columns=flexible,
	framerule=1pt,
	rulecolor=\color{gray!35},
	backgroundcolor=\color{gray!5},
	basicstyle={\small\ttfamily},
	numbers=left,
	numberstyle=\tiny\color{gray},
	keywordstyle=\color{blue},
	commentstyle=\color{dkgreen},
	stringstyle=\color{mauve},
	breaklines=true,
	breakatwhitespace=true,
	tabsize=3,
}

%---------------设置latex中插入的程序代码格式---------------------------------------



%-----------------------设置页面布局-------------------------------------
% 导入页面布局的宏包
\RequirePackage{geometry}
\geometry{top=30.0mm,bottom=25.0mm,left=31.7mm,right=31.7mm,headsep=8mm}
% 利用宏包 geometry设置上、下、左、右的页边距以及标题和正文之间的间距

\renewcommand*{\baselinestretch}{1.38}
% 将行间距调整为1.38倍行距
%-----------------------设置页面布局-------------------------------------



%----------------------设置首行缩进------------------------------
% 导入首行缩进用的宏包
\RequirePackage{indentfirst}	
% 每行缩进两个汉字
\setlength{\parindent}{2em}
%----------------------设置首行缩进------------------------------



%----------------------设置文章字体------------------------------
% 设置英文字体
\setmainfont{Times New Roman}    %衬线字体  
\setmonofont{Courier New}        %无衬线字体
\setsansfont{Arial}              %等宽字体,一般是打印机字体(中文都是等宽的)

% 设置中文字体
\setCJKmainfont[AutoFakeBold = {2.15},ItalicFont={[simkai.ttf]}]{SimSun}
\setCJKfamilyfont{xw}{STXinwei}


\ifx\lishu\undefined%
\setCJKfamilyfont{zhli}{LiSu}
\newcommand*{\lishu}{\CJKfamily{zhli}} 
\else
\fi
\newcommand*{\xinwei}{\CJKfamily{xw}} 
%\newcommand*{\lishu}{\CJKfamily{zhli}}

%----------------------设置文章字体------------------------------



% 修改tabular 环境, 设置表格中的行间距为正文行间距.
\let\gmcm@oldtabular\tabular
\let\gmcm@endoldtabular\endtabular
\renewenvironment{tabular}%
{\bgroup%
	\renewcommand{\arraystretch}{1.38}%
	\gmcm@oldtabular}%
{\gmcm@endoldtabular\egroup}

 
% 数学环境, 定理等设置
\newtheorem{definition}{\gmcm@cap@definition}
\newtheorem{theorem}{\gmcm@cap@theorem}
\newtheorem{lemma}{\gmcm@cap@lemma}
\newtheorem{corollary}{\gmcm@cap@corollary}
\newtheorem{assumption}{\gmcm@cap@assumption}
\newtheorem{conjecture}{\gmcm@cap@conjecture}
\newtheorem{axiom}{\gmcm@cap@axiom}
\newtheorem{principle}{\gmcm@cap@principle}
\newtheorem{problem}{\gmcm@cap@problem}
\newtheorem{example}{\gmcm@cap@example}
\newtheorem{proof}{\gmcm@cap@proof}
\newtheorem{solution}{\gmcm@cap@solution}



%------------------------浮动环境设置-----------------------------------------------------------

% 下面给出的命令用来控制一页中有多大比例的区域可用来放置浮动对象
% (这里的比例是指浮动对象的高度除以正文高度\textheight)。
% 前面三个命令只作用于文本页,而最后一个命令只作用于浮动页。这些命令的值可以用 \renewcommand 来修改。
% (1) \textfraction:页面中必须用来排放文本的最小比例。缺省值为 0.2,即要求每页的文字至少占据 20%。
% 而这通常不是我们想要的, 我们将这个要求降低到 5%。
% (2) \topfraction:页面顶部可以用来放置浮动对象的高度与整个页面高度的最大比例。缺省值为 0.7,即
% 放置在页顶部的浮动对象所占的高度不得超过整个页面高度 70%。
% (3) \bottomfraction: 页面底部可以用来放置浮动对象的高度与整个页面高度的最大比例。缺省值为 0.3。
% 有时如果多个浮动环境连续放在一起, latex也会将它们分在几个不同页,即使它们可在同一页放得下。
% 我们可以通过修改 \topfraction 和 \bottomfraction 分别设置顶端和底端的浮动环境的最大比例。
% (4) \floatpagefraction: 浮动页中必须由浮动对象占用的最小比例。因此在一浮动页中空白所占的比例
% 不会超过 1 - \floatpagefraction。缺省值为 0.5。
% 有时 LaTeX 会把一个浮动环境单独放在一页,我们通过设置要求这个环境至少要占据 85% 才能单独放在一页。

\renewcommand*{\textfraction}{0.05}
\renewcommand*{\topfraction}{0.9}
\renewcommand*{\bottomfraction}{0.8}
\renewcommand*{\floatpagefraction}{0.85}

%------------------------浮动环境设置----------------------------------------------------------- 

 
%------------------插图、表格以及列表环境设置--------------------------------------------------- 

% 关于图片宏包graphicx,如果图片没有指定后缀, 依次按下列顺序搜索
\DeclareGraphicsExtensions{.pdf,.eps,.jpg,.png}

% 设置图表搜索路径, 可以给图表文件夹取如下名字
\graphicspath{{figures/}{figure/}{pictures/}{picture/}{pic/}{pics/}{image/}{images/}}

% 声明标题的字体、字号
\DeclareCaptionFont{song}{\songti}
\DeclareCaptionFont{minusfour}{\zihao{-4}}  

% 如果文章中有section,那么插图标题标签将是1.1, 1.2, 2.1等。 
% 我们可以如下设置,该命令指定了一个将更改的标签(如: \thefigure )以及希望显示的标签
% 类型(如:\arabic{figure} ), 也就是说要将插图的序列号显示为阿拉伯数字,如1, 2, 3等。
\renewcommand{\thefigure}{\thesection.\arabic{figure}}

% 可以使用 \captionsetup 设置标题样式,这样后面所有的标题样式都是根据 \captionsetup 重新设置的,
% 即 \captionsetup[FLOAT_TYPE]{OPTIONS}
% 其中可选参数FLOAT_TYPE 可以是table、subtable、figure、subfigure等。
\captionsetup[figure]{ 
	format=hang,                     % 标题从第二行开始都有缩进, 应该和 justification=raggedright 的效果一样.
	labelsep=quad,                   % 分隔符是一个空格,指标题名称和序号直接的空隙
	font={song,minusfour,bf},        % 将fugure环境中的字体设置为: 宋体小四
	position=bottom                  % position=bottom, 不代表标题放在下面, 标题仍放在你放\caption的位置
}


% 表格环境设置
\captionsetup[table]{%
	format=hang,   % 标题从第二行开始都有缩进, 应该和 justification=raggedright 的效果一样.
	labelsep=quad, % 分隔符是一个空格
	font={song,minusfour,bf}, % 表的字体, 宋体小四
	position=top % position=bottom, 不代表标题放在下面, 标题仍放在你放\caption的位置.
}


% 列表环境设置
% 列表就是将所要表达的内容分为若干个条目并按一定的顺序排列,达到简明、直观的效果。在论文的写作中会经常使用到列表。
% LaTeX 中常见的列表环境有 enumerate、itemize 和 description。这三种列表环境的主要区别是列表项标签的不同。
% enumerate 是有序的列表; itemize 以圆点作为标签;description 是解说列表,可以指定标签。
\setlist{%
	topsep=0.3em, % 列表顶端的垂直空白
	partopsep=0pt, % 列表环境前面紧接着一个空白行时其顶端的额外垂直空白
	itemsep=0ex plus 0.1ex, % 列表项之间的额外垂直空白
	parsep=0pt, % 列表项内的段落之间的垂直空白
	leftmargin=1.5em, % 环境的左边界和列表之间的水平距离
	rightmargin=0em, % 环境的右边界和列表之间的水平距离
	labelsep=0.5em, % 包含标签的盒子与列表项的第一行文本之间的间隔
	labelwidth=2em % 包含标签的盒子的正常宽度;若实际宽度更宽,则使用实际宽度。
}

%------------------------插图、表格以及列表环境设置------------------------------------------ 




%------------------------算法(伪代码)的环境设置---------------------------------------------- 
\usepackage{algorithm}  
\usepackage{algpseudocode}  
\usepackage{amsmath}  
\floatname{algorithm}{算法}
\renewcommand{\algorithmicrequire}{\textbf{输入:}}   % Use Input in the format of Algorithm  
\renewcommand{\algorithmicensure}{\textbf{输出:}}    % Use Output in the format of Algorithm 
%------------------------算法(伪代码)的环境设置---------------------------------------- 




%----------------------------设置目录的超链接--------------------------------------------------------
% \AtBeginDocument{%
	 \hypersetup{%
		% % unicode=false, % hyperref 和 xetex 同时使用时不能开启 Unicode 选项.
		 hyperfootnotes=true,
		 hyperindex=true,
		 colorlinks=true,
		 bookmarksnumbered=true,
		 bookmarksopen=true,
 		 bookmarksopenlevel=0,
		 allcolors=black,
		 breaklinks=true}%
% }
% \if@gmcm@bwprint
% \AtBeginDocument{\hypersetup{hidelinks}}
% \else\relax\fi
\def\UrlAlphabet{%
      \do\a\do\b\do\c\do\d\do\e\do\f\do\g\do\h\do\i\do\j%
      \do\k\do\l\do\m\do\n\do\o\do\p\do\q\do\r\do\s\do\t%
      \do\u\do\v\do\w\do\x\do\y\do\z\do\A\do\B\do\C\do\D%
      \do\E\do\F\do\G\do\H\do\I\do\J\do\K\do\L\do\M\do\N%
      \do\O\do\P\do\Q\do\R\do\S\do\T\do\U\do\V\do\W\do\X%
      \do\Y\do\Z}
\def\UrlDigits{\do\1\do\2\do\3\do\4\do\5\do\6\do\7\do\8\do\9\do\0}
\g@addto@macro{\UrlBreaks}{\UrlOrds}
\g@addto@macro{\UrlBreaks}{\UrlAlphabet}
\g@addto@macro{\UrlBreaks}{\UrlDigits}

%----------------------------设置目录的超链接--------------------------------------------------------


%----------------------------设置封面--------------------------------------------------------

% 重定义 \maketitle 命令,用于生成封面
\renewcommand{\maketitle}{\par
	\begingroup
	\newpage
	\global\@topnum\z@ % Prevents figures from going at top of page.
	\ge@maketitle      %
	\endgroup
	\global\let\thanks\relax
	\global\let\maketitle\relax
	\global\let\@maketitle\relax
	\global\let\@thanks\@empty
	\global\let\@author\@empty
	\global\let\@date\@empty
	\global\let\@title\@empty
	\global\let\title\relax
	\global\let\author\relax
	\global\let\date\relax
	\global\let\and\relax
}

\def\ge@maketitle{%
	\newpage
	\if@gmcm@preface
	\setcounter{page}{0}
	\def\thepage{0}
	\thispagestyle{empty}%
	\begin{center}
		{\includegraphics{logo}}
		
		\vskip2.75cm
		{\xinwei\zihao{2} \gmcm@ges@string@contents \par}
	\end{center}
	
	\vskip2em
	
	% \thispagestyle{gmcmheadings} 
	\renewcommand\arraystretch{1.3}
	\noindent \begin{tabularx}{\textwidth}{lX}
		\zihao{-2}\bfseries 学\qquad 校&\zihao{-2}\bfseries\gmcm@tokens@schoolname\\
		\hline\\[-15pt]
		\zihao{-2}\bfseries 参赛队号&\zihao{-2}\bfseries\gmcm@tokens@baominghao\\
		\hline\\[-15pt]
		\multirow{3}{*}{\zihao{-2}\bfseries 队员姓名}&\zihao{-2}\bfseries	 1. \gmcm@tokens@membera\hfill\null\\
		\cline{2-2}\\[-15pt]
		&\zihao{-2}\bfseries 2. \gmcm@tokens@memberb\hfill\null\\
		\cline{2-2}\\[-15pt]
		&\zihao{-2}\bfseries 3.  \gmcm@tokens@memberc\hfill\null\\
		\hline
	\end{tabularx}
	\makenametitle
}

\def\makenametitle{
	\newpage
	\setcounter{page}{1}
	\vspace*{2.3cm}
	\begin{center}
		%{\includegraphics[width=4cm]{logo}}
		
		\vskip.5\baselineskip%
		{\xinwei\zihao{2} \gmcm@ges@string@contents \par}
	\end{center}
	
	\vskip1.6cm%
	
	\begin{center}\begin{tabularx}{.95\textwidth}{@{}lX@{}}
			{\zihao{4} 题\qquad 目} &\hfill\zihao{3}\heiti \@title\hfill\null\\
			\cline{2-2}
		\end{tabularx}
	\end{center}
}

%--------------------------设置封面-------------------------------------------------------



%--------------------------------中文标题格式设置-----------------------------------------

% 通过 setcounter 命令来控制目录深度,如显示三级目录
\setcounter{secnumdepth}{3}
\def\@seccntformat#1{\csname the#1\endcsname\ \ }

% 更改节、子节等的标题前序号的格式
\renewcommand\thesection{\arabic{section}.}
\renewcommand\thesubsection{\arabic{section}\thinspace.\thinspace\arabic{subsection}}
\renewcommand\thesubsubsection{\thesubsection\thinspace.\thinspace\arabic{subsubsection}}

% 节标题格式, 居中,字体采用 \normalfont,大小采用 \normalsize
\renewcommand\section{\@startsection{section}{1}{\z@}%
	{2.5ex \@plus -1ex \@minus -.2ex}%
	{2.3ex \@plus.2ex}%
	{\bfseries\centering\zihao{4}\heiti}}
\renewcommand\subsection{\@startsection{subsection}{2}{\z@}%
	{1.25ex\@plus -1ex \@minus -.2ex}%
	{1.25ex \@plus .2ex}%
	{\normalfont\normalsize\bfseries}}
\renewcommand\subsubsection{\@startsection{subsubsection}{3}{\z@}%
	{1.25ex\@plus -1ex \@minus -.2ex}%
	{1.2ex \@plus .2ex}%
	{\normalfont\normalsize\bfseries}}
\renewcommand\paragraph{\@startsection{paragraph}{4}{\z@}%
	{3.25ex \@plus1ex \@minus.2ex}%
	{-1em}%
	{\normalfont\normalsize\bfseries}}
\renewcommand\subparagraph{\@startsection{subparagraph}{5}{\parindent}%
	{3.25ex \@plus1ex \@minus .2ex}%
	{-1em}%
	{\normalfont\normalsize\bfseries}}



%-------------------------------中文标题格式设置--------------------------------------




%--------------------------------重定义相关环境和变量-------------------------------------

% 摘要两个字设置为 4 号.
% 定义摘要环境
\renewenvironment{abstract}{%
	\if@twocolumn
	\section*{\abstractname}%
	\else
	\begin{center}%
		{\zihao{3}\lishu\abstractname\vspace{\z@}}%
	\end{center}%
	\quotation
	\fi}
{\if@twocolumn\else\endquotation\newpage\null\fi}
\renewenvironment{quotation}
{\list{}{\listparindent 2em%
		\itemindent \listparindent
		\rightmargin\z@
		\leftmargin\z@
		\parsep \z@ \@plus\p@}%
	\item\relax}
{\endlist}


\newcommand\keywords[1]{%
	\renewcommand{\gmcm@tokens@keywords}{#1}
	\par
	\vskip1ex
	{\noindent\zihao{-4}\heiti\gmcm@cap@keywordsname:}~{\gmcm@tokens@keywords}
}



\renewcommand\appendix{\par
	\setcounter{section}{0}%
	\setcounter{subsection}{0}%
	\gdef\thesection{\appendixname\@Alph\c@section}}		

\newcommand*\baominghao[1]{%
	\renewcommand{\gmcm@tokens@baominghao}{#1}}
\newcommand*\schoolname[1]{%
	\renewcommand{\gmcm@tokens@schoolname}{#1}}
\newcommand*\membera[1]{%
	\renewcommand{\gmcm@tokens@membera}{#1}}
\newcommand*\memberb[1]{%
	\renewcommand{\gmcm@tokens@memberb}{#1}}
\newcommand*\memberc[1]{%
	\renewcommand{\gmcm@tokens@memberc}{#1}}

%--------------------------------重定义相关环境和变量--------------------------


%----------------------------以中文重命名数学定理相关的常量---------------------------

%数学定理相关的常量
\newcommand*{\gmcm@cap@definition}{定义}
\newcommand*{\gmcm@cap@theorem}{定理}
\newcommand*{\gmcm@cap@lemma}{引理}
\newcommand*{\gmcm@cap@corollary}{推论}
\newcommand*{\gmcm@cap@assumption}{假设}
\newcommand*{\gmcm@cap@conjecture}{猜想}
\newcommand*{\gmcm@cap@axiom}{公理}
\newcommand*{\gmcm@cap@principle}{定律}
\newcommand*{\gmcm@cap@problem}{问题}
\newcommand*{\gmcm@cap@example}{例}
\newcommand*{\gmcm@cap@proof}{证明}
\newcommand*{\gmcm@cap@solution}{解}

%----------------------------以中文重命名数学定理相关的常量-----------------------------------



%----------------------------以中文重命名相关名称-----------------------------------------------

% 中文标题名称
\newcommand*{\gmcm@cap@abstractname}{摘\qquad\quad 要: }
% 中文关键字
\newcommand*{\gmcm@cap@keywordsname}{关键字}
% 以图片的形式显示 “第十五届华为杯数学建模大赛”那几个大字
\newcommand\gmcm@ges@string@contents{\includegraphics{title}}

%----------------------------以中文重命名相关名称-----------------------------------------------


 
 
%----------------------------设置目录格式-----------------------------------------------

% 节的目录格式
\titlecontents{section}[0pt]{\vspace{2mm}\bfseries\heiti}
{\thecontentslabel\hskip.5em}{}{\titlerule*[0.5pc]{.}\contentspage}
% 小节的目录格式
\titlecontents{subsection}[30pt]{\songti}
{\thecontentslabel\hskip.5em}{}{\titlerule*[0.5pc]{.}\contentspage}

\titlecontents{subsubsection}[55pt]{\songti}
{\thecontentslabel\hskip.5em}{}{\titlerule*[0.5pc]{.}\contentspage}


% itletoc 宏包用于自定义目录样式,其中最常用的是下面这条目录样式命令。
% \titlecontents 命令来设置不同级别目录项的格式:
% \titlecontents{章节名称}[左端距离]{标题字体、与上文间距等}{标题序号}{空}{引导符和页码}[与下文间距]
% (1) 其中0pt([左端距离])是目录项到版芯左边界的距离;\vspace{2mm}表示与上文留出一定的垂直距离,该距离为2mm;
% \bfseries\heiti 把整条目录项的字体设为黑体。
% (2) 后面一项是设置目录项的头部,并在其后留出一个汉字宽度的距离。紧跟的是设置目录项主体的格式,
% 这里因为跟目录项头部相同而空置。
% (3) 再后面是设置填充命令和页码。这里用\titlerule*命令画出填充点,
% 这里是把垂直居中的实心圆点作为填充符号(习惯上中文不采用居下的填充点), 
% 并以10pt为包含一个填充符号的水平盒子的宽度,即这个宽度越小,填充点越紧密; 填充点后加上页码 \contentspage。

% 注意:用 titlesec 宏包可以在标题中加一些填充物,比如:一条水平线、一排连续或不连续的点等等。用以下三个命令来实现:
% (1) \titleline[]{}
% 其中中  表示对齐方式,有三个参数 l、c、r,分别代表左对齐、居中对齐、右对齐;
%  是要填充的材料,可以是文字、符号等等。
% (2) \titlerule []:表示在标题中添加一条水平线, 是线的宽度。
% (3) \titlerule ∗[]{}:用于在标题中添加一条填充物, 为填充物的宽度, 为填充的文字或符号。

%----------------------------设置目录格式-----------------------------------------------

\pagestyle{plain}
\endinput




 

你可能感兴趣的:(LaTex)