论文杀器LaTeX用法汇总(3)——实战·ACM代码模板

这次让我们来做一个LaTeX的实例——ACM代码模板
ACM/ICPC是全球顶尖的算法赛事,比赛时选手可以自带纸质资料,因此我们可以带一些相对不好写、难记忆的算法和数据结构的模板。很多同学会选择用word之类的写模板,但是word实在是不美观了,可能影响赛场心情。这里我来教大家如何写一份属于自己的代码模板。
先附上我比较喜欢的一个ACM大神的代码模板。

论文杀器LaTeX用法汇总(3)——实战·ACM代码模板_第1张图片
Fig 1

论文杀器LaTeX用法汇总(3)——实战·ACM代码模板_第2张图片
Fig 2

那么再附上我们今天做的代码模板的图样:


论文杀器LaTeX用法汇总(3)——实战·ACM代码模板_第3张图片
Fig 3

论文杀器LaTeX用法汇总(3)——实战·ACM代码模板_第4张图片
Fig 4

论文杀器LaTeX用法汇总(3)——实战·ACM代码模板_第5张图片
Fig 5

相比于tls的模板,我写的将大部分转变成了中文,方便阅读。
那么我们开始来写这篇TeX文档吧。

1.常用宏包、环境

文档类型,宏包
\documentclass[twocolumn,a4]{article}  %两栏,A4大小
\usepackage{xeCJK} % 中文支持
\usepackage{amsmath, amsthm}
\usepackage{listings,xcolor}  %插入代码
\usepackage{geometry} % 设置页边距
\usepackage{fontspec}
\usepackage{graphicx}
\usepackage{fancyhdr} % 自定义页眉页脚

为了节省纸张,所以模板采用两栏形式。

环境参数
\setsansfont{Consolas} % 设置英文字体
\setmonofont[Mapping={}]{Consolas} % 英文引号之类的正常显示,相当于设置英文字体
\geometry{left=1cm,right=1cm,top=2cm,bottom=0.5cm} % 页边距
\setlength{\columnsep}{30pt}  %两栏之间的间距大小
% \setlength\columnseprule{0.4pt} % 分割线

\setsansfont和\setmonofont的作用相当于设置英文字体。
\geometry 可以手动调节页边距,这里是将下边距调成0.5,上边距调成2,左右各为1。
\setlength 调节两栏之间的间距大小,如果不调的话生成文档的两栏有重叠。
\setlength 可以生成两栏之间的分割线,默认是关闭的,如果需要可以设置。

2.页眉、页脚、代码格式设置

首先先介绍一下,LaTeX在排版时,缺省的定义了4种页眉页脚的格式:
empty:没有页眉和页脚
plain:没有页眉,页脚中部放置页码。
headings:没有页脚,页眉包含章节的标题和页码。
myheadings:没有页脚,页眉页码和使用者所定义的信息。

article 缺省使用 plain 格式,而 book 则使用 headings 格式。 也可用 \pagestyle 命令在你的文档中设定所用的格式,例如在文档中使用 \pagestyle{empty} 则使得此后的页面没有页眉和页脚。 一般情况下,这四种格式基本可满足排版的要求。但在某些情况下,特别是 使用者想定义自己的页眉和页脚格式时,就会遇到很多限制和麻烦。这时,使用fancyhdr宏包可以很容易地达到目的。

(以上内容来源于这里,需要了解更多请访问。)

页眉、页脚
% 页眉、页脚设置
\pagestyle{fancy}
% \lhead{CUMTB}
\lhead{\CJKfamily{hei} 中国矿业大学(北京)ACM校队}
\chead{}
% \rhead{Page \thepage}
\rhead{\CJKfamily{hei} 第 \thepage 页}
\lfoot{} 
\cfoot{}
\rfoot{}
\renewcommand{\headrulewidth}{0.4pt} 
\renewcommand{\footrulewidth}{0.4pt}

代码中只保留了页眉的左、右部分,舍弃了页脚(\lfoot,\cfoot,\rfoot)和页眉中间部分(\chead),如有需要可以自行添加。

\CJKfamily{hei} 将后面中文字体的格式为"黑体"。
\thepage 显示当前页数。
\renewcommand 是命令重定义指令,有点类似于C语言中的#define,这里是设置页眉实线(\headrulewidth)和页脚实线(\footrulewidth)的宽度。

代码格式
% 代码格式设置
\lstset{
    language    = c++,
    numbers     = left,
    numberstyle = \tiny,
    breaklines  = true,
    captionpos  = b,
    tabsize     = 4,
    frame       = shadowbox,
    columns     = fullflexible,
    commentstyle = \color[RGB]{0,128,0},
    keywordstyle = \color[RGB]{0,0,255},
    basicstyle   = \small\ttfamily,
    stringstyle  = \color[RGB]{148,0,209}\ttfamily,
    rulesepcolor = \color{red!20!green!20!blue!20},
    showstringspaces = false,
}

这里是设置生成的代码框的相关属性,比如使用语言,代码颜色,行号,代码框颜色等。需要提前引用\listings宏包。各参数详细定义请查看这里,或者搜索相关文档。

3.标题和目录

标题

包含标题名称、作者、创作时间。

\title{\CJKfamily{hei} \bfseries 中国矿业大学(北京)ACM校队模板}
\author{hymscott}
\renewcommand{\today}{\number\year 年 \number\month 月 \number\day 日}

\bfseries 加粗后面的内容
在生成目录前,我们先加入\begin{document},表示我们的正文从这里开始,在后面生成标题页。

\begin{document}\small
\begin{titlepage}
\maketitle
\end{titlepage}

这里的\begin{titlepage}和\end{titlepage}之间是标题页的内容,建议使用,因为这样在计算页码时不会将标题页计算上去。

目录
\newpage
\pagestyle{empty}
\renewcommand{\contentsname}{目录}
\tableofcontents %生成目录
\newpage\clearpage
\newpage
\pagestyle{fancy}
\setcounter{page}{1}   %从当前页开始计算页数

\newpage 是开启新页的指令。
\pagestyle{empty} 在上文中提到过,是去掉当前页(即目录页)的页眉页脚。
\renewcommand{\contentsname}{目录} 是将生成的"Content"改写成中文的"目录"。
\tableofcontents 生成目录
后面的\newpage\clearpage\newpage 是为了防止将正文页与目录页有重叠。
\pagestyle{fancy} 是将后面所有内容采用前面提到的 fancy 的页眉页脚格式。
\setcounter{page}{1} 从当前页(正文)开始计算页数,避免将目录页计算进页数中。

4.正文

正文就看自己的要求了,类似于:

\section{头文件}
\begin{lstlisting}
#include 
using namespace std;
int main(){
  cout<<"Hello,world!"<

每个代码放在\begin{lstlisting}和\end{lstlisting}之间。
记得在正文结束后,加上\end{document}啦。

\end{document}

5.总结

那么我们的ACM代码模板的LaTeX代码已经全部写完了,这样美观的模板在比赛时看应该也会心情愉悦吧。下次用法汇总将提供今年数学建模美赛的论文模板的LaTeX代码~先放几张效果图:

论文杀器LaTeX用法汇总(3)——实战·ACM代码模板_第6张图片
Fig 6

论文杀器LaTeX用法汇总(3)——实战·ACM代码模板_第7张图片
Fig 7

(论文名称和队伍号已去掉。)

下面给出今天的ACM代码模板的完整(除正文外)LaTeX代码,供参考~

%==============================常用宏包、环境==============================%
\documentclass[twocolumn,a4]{article}
\usepackage{xeCJK} % For Chinese characters
\usepackage{amsmath, amsthm}
\usepackage{listings,xcolor}
\usepackage{geometry} % 设置页边距
\usepackage{fontspec}
\usepackage{graphicx}
\usepackage{fancyhdr} % 自定义页眉页脚
\setsansfont{Consolas} % 设置英文字体
\setmonofont[Mapping={}]{Consolas} % 英文引号之类的正常显示,相当于设置英文字体
\geometry{left=1cm,right=1cm,top=2cm,bottom=0.5cm} % 页边距
\setlength{\columnsep}{30pt}
% \setlength\columnseprule{0.4pt} % 分割线
%==============================常用宏包、环境==============================%

%==============================页眉、页脚、代码格式设置==============================%
% 页眉、页脚设置
\pagestyle{fancy}
% \lhead{CUMTB}
\lhead{\CJKfamily{hei} 中国矿业大学(北京)ACM校队}
\chead{}
% \rhead{Page \thepage}
\rhead{\CJKfamily{hei} 第 \thepage 页}
\lfoot{} 
\cfoot{}
\rfoot{}
\renewcommand{\headrulewidth}{0.4pt} 
\renewcommand{\footrulewidth}{0.4pt}

% 代码格式设置
\lstset{
    language    = c++,
    numbers     = left,
    numberstyle = \tiny,
    breaklines  = true,
    captionpos  = b,
    tabsize     = 4,
    frame       = shadowbox,
    columns     = fullflexible,
    commentstyle = \color[RGB]{0,128,0},
    keywordstyle = \color[RGB]{0,0,255},
    basicstyle   = \small\ttfamily,
    stringstyle  = \color[RGB]{148,0,209}\ttfamily,
    rulesepcolor = \color{red!20!green!20!blue!20},
    showstringspaces = false,
}
%==============================页眉、页脚、代码格式设置==============================%

%==============================标题和目录==============================%
\title{\CJKfamily{hei} \bfseries 中国矿业大学(北京)ACM校队模板}
\author{hymscott}
\renewcommand{\today}{\number\year 年 \number\month 月 \number\day 日}

\begin{document}\small
\begin{titlepage}
\maketitle
\end{titlepage}

\newpage
\pagestyle{empty}
\renewcommand{\contentsname}{目录}
\tableofcontents
\newpage\clearpage
\newpage
\pagestyle{fancy}
\setcounter{page}{1}   %new page
%==============================标题和目录==============================%

%==============================正文部分==============================%
\section{头文件}
\begin{lstlisting}
#include 
using namespace std;
int main(){
  cout<<"Hello,world!"<

你可能感兴趣的:(论文杀器LaTeX用法汇总(3)——实战·ACM代码模板)