目的:掌握latex的用法,能够应用其进行数学论文的排版。
背景:之前写论文的时候用到latex进行排版,最近帮朋友排版,突然发现主要内容忘记的差不多了,因此再次学习,这次争取掌握90%的用法,尽量熟练使用。
计划:复习基本用法,搜集模板【3小时】;练习【看情况,至少搞定三篇数学文章的排版】。
LaTeX是什么?
一个排版工具。由美国计算机科学家Leslie Lamport开发的基于TeX的排版系统,适用于大型论文排版和数学公式输入。
LaTeX能用来做什么?
主要是排版。生成从简单信件到完整书籍的各种文档,尤其适用于生成高印刷质量的科技和数学类文档。
怎么使用LaTeX?
安装配置
TeX套装:
TeX Live,支持不同的操作系统平台;MiKTeX,Windows系统;MacTeX,Mac系统。
TeX编辑器:
TexStudio- 开源免费的编辑器,界面集成度好。其源于:TeXmaker开源免费的编辑器。
TeXShop (Mac 版) - MacTeX 自带的编辑器,界面比较简洁,与 TeXworks 功能接近。
TeXPad(Mac 版) - Mac OS 平台下的收费编辑器。
在线LaTeX平台:【推荐使用,在线、易用、协作平台】
Overleaf:https://www.overleaf.com/
基本入门
命令和代码结构:
LATEX命令和环境LATEX中命令以反斜线\开头,后跟一串字母或者单个非字母符号
LATEX命令大小写敏感
LATEX中还包括环境,用以令一些效果在局部生效,或是生成特殊的文档元素。LATEX环境的用法为一对命令\begin和\end
源代码结构
\doucumentclass[<options>]{class-name} %指定文档类别,比如article/report/book...
%导言区,一般会使用\usepackage命令调用宏包,并进行文档的全局设置
\begin{document}
%正文内容
\end{document}
%此后内容会被忽略
文件的组织方式
编辑长文档时,可把源文件分割成若干个文件,然后在源代码里使用\include{<filename>}或\input{<filename>}来插入文件,区别在于\include命令会另起一页,\input命令会直接插入内容。
在导言区,\include{<filename1>,<filename2>,...}命令用于指定载入的文件,不在其列表范围内的文件即使在正文中使用了\include命令也不会出现。
在导言区,可调用syntonly包,使用\syntaxonly命令,令LaTeX编译后不生成文档,只排查错误,加快编译速度。
备注:使用LaTeX排版的过程是,我们调用结合了引擎和格式的编译命令,生成一定格式的文档。
文字排版
首先考虑文档的编码,根据需要选择不同的编码方式。比如,用于以英文为主的西文文档可使用ASCII编码,西欧语言可使用Latin-1编码,中文可使用GBK编码,LaTeX默认使用适用多国字符的UTF-8编码。在进行中文排版时,可使用ctex文档类和宏包,需注意的是源代码需要保存为UTF-8编码格式,并使用xelatex或lualatex编译。
其次,LaTeX中的字符,常用的有:
空格,空格键和TAB键都可以
转义符,\
注释符,%
省略号,\ldots或者\dots
分段,空行或者\par
手动换行,\\
另外,LaTeX会自动处理词距、行距、断行和断页的问题,但是也可以手动设置。比如:
~,输入一个不会断行的空格
\\[<length>],手动断行,且可在断行处向下增加垂直间距
\\*[<length>],禁止断行
\newline,手动断行,只能用于文本中,不可用于公式、表格
\newpage,手动断页,双栏排版中另起一栏
\clearpage,手动断页,另起一页
文档元素
LaTeX的三大类文档支持生成章节标题,且自动编号的命令,分别是:
\chapter{⟨title⟩} ,只在book和report文档类有定义。
\section{⟨title⟩}
\subsection{⟨title⟩}
\subsubsection{⟨title⟩}
\paragraph{⟨title⟩}
\subparagraph{⟨title⟩}
生成目录的命令是:\tableofcontents。另外,itletoc、tocloft等宏包提供了具体定制目录项格式的功能。
文档结构划分的命令:
\frontmatter前言部分,book文档类
\mainmatter正文部分,book文档类
\backmatter后记部分,book文档类
\appendix,附录
生成标题的命令:\maketitle,需要给定标题和作者等信息,\title{<title>},\author{<author>},\date{<date>}
交叉引用的命令:
\lable{<lable_name>}
\ref{<lable_name>}
\pageref{<lable_name>}
生成脚注和边注的命令:
\footnote{<footnote>}
\footnotemark + \footnotetext{<footnotetext>}
\marginpar[⟨left-margin⟩]{⟨right-margin⟩}
特殊环境
生成有序列表,最多嵌套四层:\begin{enumerate}\item...\end{enumerate}。其列表符号可由命令\labelenumi到\labelenumiv定义。
生成无序列表,最多嵌套四层:\begin{itemize}\item...\end{itemize}。其列表符号可由命令\labelitemi到\labelitemiv定义。
生成带关键字的列表,关键字以粗体显示:\begin{description}\item[⟨item title⟩]...\end{description}。
备注:enumitem宏包可定制各种列表间距。
对齐环境:\begin{center}...\end{center},居中对齐;\begin{flushleft}...\end{flushleft},左对齐;\begin{flushright}...\end{flushright},右对齐。
对齐命令:\centering ,居中对齐; \raggedright,右对齐; \raggedleft,左对齐。和对齐环境的区别是,对齐环境会在上下文中产生一个额外的间距,对齐命令不产生。
引用环境:quote,用于较短的文字,首行不缩进;quotation,用于引用若干段文字,首行缩进;verse,用于诗歌排版,首行悬挂缩进。
摘要环境:abstract,默认只在标准文档类中的article和report文档类可用,一般用于紧跟\maketitle命令之后介绍文档的摘要。如果文档类指定了titlepage选项,则单独成页;反之,单栏排版时相当于一个居中的小标题加一个quotation环境,双栏排版时相当于\section*定义的一节。
代码环境:verbatim,带星号的版本更进一步将空格显示成“␣”;要排版简短的代码或关键字,可使用\verb命令:\verb⟨delim⟩⟨code⟩⟨delim⟩。另外,有一些宏包可用与优化代码的输入,比如:
verbatim宏包,优化了verbatim环境的内部命令,并提供了\verbatiminput命令用来直接读入文件生成代码环境。
fancyvrb宏包提供了可定制格式的Verbatim环境。
listings宏包更进一步,可生成关键字高亮的代码环境,支持各种程序设计语言的语法和关键字。
表格环境:tabular
图片
LaTeX本身不支持插图功能,需要使用graphicx宏包辅助支持。命令是:\includegraphics[⟨options⟩]{⟨filename⟩},使用的时候注意编译命令支持的图像格式。
盒子
Latex可画各种盒子,包括水平盒子,带框的水平盒子,垂直盒子和标尺盒子。命令分别为:
水平盒子,\mbox{...},或者 \makebox[⟨width⟩][⟨align⟩]{...}
带框的水平盒子,\fbox{...},或者 \framebox[⟨width⟩][⟨align⟩]{...}
垂直盒子,\parbox[⟨align⟩][⟨height⟩][⟨inner-align⟩]{⟨width⟩}{...}, 或者 \begin{minipage}[⟨align⟩][⟨height⟩][⟨inner-align⟩]{⟨width⟩}...\end{minipage}
标尺盒子,\rule[⟨raise⟩]{⟨width⟩}{⟨height⟩}
浮动体
LaTeX预定义了两类浮动体环境,figure 和 table。一个浮动体内可放多张图表,可使用subfig宏包的\subfloat命令排版子图。
给浮动体加标题并自动加编号,\caption{...}
生成浮动体目录,\listoffigures 或 \listoftables
排版数学公式——LaTeX的强项
不复杂,就是需要记忆的内容多,但是也有规律,根据需要选用合适的宏包和命令
一个好用的宏包,\usepackage{amsmath},对多行公式排版提供了有力支持。
\usepackage{amssymb},有丰富的符号。
行内公式,$公式$
行间公式不带编号,\[公式\],或者equation*环境,或者displaymath环境
行间公式带编号,equation环境
多行公式对齐,align环境
多行公式不对齐,gather环境
公用编号的多行公式,amsmath宏包提供了诸如aligned、gathered等环境,与equation环境套用。split环境和aligned环境用法类似,也用于和equation环境套用,区别是split只能将每行的一个公式分两栏,aligned允许每行多个公式多栏。
排版样式设定
字体和字号
LaTeX中有常用的设置字体样式和字号的命令,比如\rmfamily 或 \textrm{...} 设置罗马无衬线字体,{\small ...} 设置小号字体。还有\fontsize{⟨size⟩}{⟨base line-skip⟩} 命令,可以设置任意大小的字号。还可以使用各种字体宏包来进行字体样式和字号的设置,比如使用fontspec宏包更改字体,在ctex宏包或文档类中更改中文字体,使用unicode-math宏包配置Unicode数学字体等。
文字装饰和强调
使用\underline命令可添加不能换行的下划线,ulem宏包的\uline命令可添加可换行的下划线。\epmh命令可把文字变为斜体以强调。
段落格式和间距
三个和长度有关的命令:
自定义长度的命令,\newlength{\⟨length command⟩}
给长度赋值的命令,\setlength{\⟨length command⟩}{⟨length⟩}
增加长度的命令,\addtolength{\⟨length command⟩}{⟨length⟩}
在导言区设置行距,命令 \linespread{⟨factor⟩},其中缺省的行距是1.2倍字号大小。如果想在段落中改变行距,需要用\selectfont命令使\linespread命令的改动立即生效,注意行距的改变直到文字分段时才生效,故一般需要在段落结束的花括号内添加\par分段命令。
段落的格式有左缩进、右缩进、首行缩进,设置长度的命令分别为:
\setlength{\leftskip}{⟨length⟩}
\setlength{\rightskip}{⟨length⟩}
\setlength{\parindent}{⟨length⟩}
控制段落缩进的命令为 \indent 和 \noindent。
水平间距:LaTeX默认将单词之间的空格转化为水平间距。也可调整水平间距,命令为 \hspace,生成的水平间距可能会因为断行而消失,\hspace*命令可避免这一情况。\quad 相当于\hspace{1em},\qquad 相当于 \hspace{2em}。命令\stretch{⟨n⟩}生成一个特殊弹性长度,参数⟨n⟩为权重。\fill命令相当于\strtch{1}。
垂直间距:在页面中,段落、章节标题、行间公式、列表、浮动体等元素之间的间距是LATEX预设的。比如\parskip,默认设置为0pt plus 1pt。也可人为增加段落之间的间距,命令为\vspace,为了避免段落之间的垂直间距因断页而被吞掉,可使用 \vspace*命令。\vspace也可用\stretch设置无限延伸的垂直长度。\vspace也可在段落内使用,不过不会断行。另外LATEX还提供了\bigskip,\medskip,\smallskip来增加预定义长度的垂直间距。
页面和分栏
页面的设置包括纸张大小、页边距的设置,可以使用长度命令\setlength调整。也可以使用宏包进行设置,比如调用geometry宏包进行页面设置,命令为:
\usepackage{geometry}
\geometry{⟨geometry-settings⟩}
也可以将参数指定为宏包的选项:\usepackage[⟨geometry-settings⟩]{geometry},其中⟨geometry-settings⟩多以⟨key⟩=⟨value⟩的形式组织。
举例:符合Microsoft Word习惯的页面设定是A4纸张,上下边距1英寸,左右边距1.25英寸,于是我们可以通过两种方式设置:\usepackage[left=1.25in,right=1.25in,top=1in,bottom=1in]{geometry}
% or like this:
\usepackage[hmargin=1.25in,vmargin=1in]{geometry}。
页面内容的垂直对齐:LaTeX默认将页面内容在垂直方向上分散对齐,也可在垂直方向向顶部对齐,命令分别为:\flushbottom ,\raggedbottom
分栏:切换单/双栏排版的命令,\onecolumn ,\twocolumn[⟨one-column top material⟩],可选参数,用于排版双栏之上的一部分单栏内容。另外,multical宏包提供了较好的分栏解决方案,它提供了简单的multicols环境自动产生分栏,如以下环境将内容分为3栏:\begin{multicols}{3}...\end{multicols}。multicol宏包能够在一页之中切换单栏/多栏,也能处理跨页的分栏,且各栏的高度分布平衡。但代价是在multicols环境中无法正常使用table和figure等浮动体环境,它会直接让浮动体丢失。multicols环境中只能用跨栏的table*和figure*环境,或者用float宏包提供的H参数固定浮动体的位置
页眉页脚
\pagestyle{⟨page-style⟩}命令\thispagestyle只影响当页的页眉页脚样式:\thispagestyle{⟨page-style⟩}⟨page-style⟩参数为样式的名称
LaTeX预设了四种页眉页脚的样式,可以通过命令 \pagestyle{<page_style>} 来修改全局样式,也可通过 \thispagestyle{<page_style>} 仅修改当前页的样式。可使用\markright{⟨right-mark⟩}或者\markboth{⟨left-mark⟩}{⟨right-mark⟩}命令,手动更改页眉页脚的内容。
\pagenumbering{<style>}命令令我们能够改变页眉页脚中的页码样式,默认为arabic,可改为roman或Ramon格式。
fancyhdr宏包改善了页眉页脚样式的定义方式,为设置页眉页脚提供了较好的解决方案。它自定义了样式名称fancy,使用fancyhdr宏包定义页眉页脚之前,通常先用\pagestyle{fancy}调用这个样式。
特色工具和功能
依靠一些辅助程序自动生成参考文献和索引,颜色和超链接的使用
参考文献命令和环境:
%引用参考文献的命令
\cite[option]{<citation>}
%生成参考文献的环境,不带编号的一节(article文档类)或一章(report/book文档类)
\begin{thebibliography}{⟨widest label⟩}
\bibitem[⟨item number⟩]{⟨citation⟩}...
...
\end{thebibliography}
BIBTEX数据库:
最流行的参考文献数据组织格式之一,除了数据库本身的有点外,很多网站和软件都支持BIBTEX 格式的参考文献的导入、导出和管理。它以.bib作为扩展名,其内容是若干个文献条目,基本格式为
@<type>{<citation>, <key1> = {<value1>}, <key2> = {<value2> }, ...}。
所有类别的文献条目格式请参考https://mirrors.tuna.tsinghua.edu.cn/CTAN/biblio/bibtex/base/btxdoc.pdf
BIBTEX样式:
BIBTEX用样式来管理参考文献的写法,样式文件的扩展名是.bst,使用样式文件的方法是在源代码内(一般在导言区)使用\bibliographystyle命令:\bibliographystyle{⟨bst-name⟩},这里⟨bst-name⟩为.bst样式文件的名称,不要带.bst扩展名。
BIBTEX数据库使用方法:准备数据库,在源代码中添加命令(设置参考文献格式\bibliographystyle{⟨bst-name⟩},引用参考文献\cite[option]{<citation>} ,列出参考文献\bibliography{⟨bib-name⟩}),编译。
支持人名——年份引用格式的宏包,natbib。biblatex宏包是一套基于LATEX宏命令的参考文献解决方案,提供了便捷的格式控制和强大的排序、分类、筛选、多文献表等功能。
索引,归纳关键词,方便查看,适用于大文档和书籍,使用方法:
1.调用makeidx宏包,命令:\usepackage{makeidx} \makeindex
2.在需要索引的地方输入命令\index{<index entry>},在需要输出索引的地方输入命令\printindex
3.编译
颜色
LaTeX本身不支持使用各种颜色,可调用color或xcolor宏包,给PDF输出各种颜色的指令。有关命令:
切换颜色,\color[<color-mode>]{<code>},或 \color{<color-name>}
自定义颜色名称,\definecolor{⟨color-name⟩}{⟨color-mode⟩}{⟨code⟩}
输入带颜色的文本可以用类似\textbf的命令:\textcolor[⟨color-mode⟩]{⟨code⟩}{⟨text⟩,或 \textcolor{⟨color-name⟩}{⟨text⟩}
构造一个带背景色的盒子,⟨material⟩为盒子中的内容:\colorbox[⟨color-mode⟩]{⟨code⟩}{⟨material⟩},或 \colorbox{⟨color-name⟩}{⟨material⟩}
构造一个带背景色和有色边框的盒子,⟨fcode⟩或⟨fcolor-name⟩用于设置边框颜色:\fcolorbox[⟨color-mode⟩]{⟨fcode⟩}{⟨code⟩}{⟨material⟩},或 \fcolorbox{⟨fcolor-name⟩}{⟨color-name⟩}{⟨material⟩}
超链接,hyperref宏包
为了尽可能减少冲突,习惯上把hyperref宏包放在其他宏包之后调用。
配置参数,\hypersetup{⟨option1⟩,⟨option2⟩={value},...}
直接书写超链接,\url{<url>}, 或 \nolinkurl{<url>},区别是后者的超链接没有彩色
把文字作为超链接,\href{<url>}{<text>}
对某个\lable定义的标签作超链接,\hyperref[⟨label⟩]{⟨text⟩}
手动生成PDF书签,\pdfbookmark[⟨level⟩]{⟨bookmark⟩}{⟨anchor⟩}
绘图
用代码表示图形
LaTeX本身有picture环境用于绘制基本图形,但功能有限,现在有各种绘图语言和宏包,按需搜索使用。
使用模板和以上的基础知识,已经能够制作出大多数需要的文档了,下面是根据个性化的需求制作自己的模板。
自定义LaTeX命令和功能
包括制作自己的模板,自定义宏包和类
\newcommand{\⟨name⟩}[⟨num⟩]{⟨definition⟩}
定义新命令,\newcommand{\<name>}[<num>]{<definition>}
修改命令定义,\renewcommand,或者\providecommand
定义新环境,\newenvironment{\<name>}[<num>]{<before>}{<after>}
修改环境定义,\renewenvironment
定义宏包:宏包文件以.sty做扩展名,同时需要在开头用命令\ProvidesPackage{⟨package name⟩}让LaTeX记录宏包的名字,需要注意的是 <package name>需要和宏包文件名一致。
在宏包中调用另外的宏包,\RequirePackage[<options>]{<package name>}。
定义文档类:文档类文件以.cls做扩展名,同时需要在开头需要用命令\ProvidesClass{<class name>}让LaTeX记录文档类的名字,需要注意的是<class name>需要和文档类文件名一致。
在文档类里调用另外的文档类,\LoadClass[<options>]{<class name>}。
定义计数器,\newcounter{<counter name>}[<parent counter name>]
修改计数器的数值:
\setcounter{⟨counter name⟩}{⟨number⟩}%将计数器的数值设置为number
\addtocounter{⟨counter name⟩}{⟨number⟩}%将计数器的数值加number
\stepcounter{⟨counter name⟩}%将计数器的数值加一,并将所有下一级计数器清零
重定义计数器的输出格式,\renewcommand\the<counter>{\XXX{<counter>}}
LaTeX中的计数器:有章节、列表、公式、浮动体、页码、脚注。
secnumdepth控制章节编号的深度,artile文档类默认为3,report和book类默认为2.
tocdepth控制目录的深度,默认数值同secnumdepth。
LaTeX使用过程中常见问题
在Overleaf上使用ctex文档类报错:我换了个方案,使用TexLive+texworks,在其中使用ctex文档类
章节标题格式更改:可以使用titlesec宏包
【公式编号更改】在ctexbook文档类里,默认公式编号是(节编号.公式编号),公式编号会在每一小节开始之后清零。我需要的是(章编号.节编号.公式编号)。思路是通过更改公式计数器的输出格式来实现。在导言区加入命令:
\renewcommand{\theequation}{\arabic{chapter}.\arabic{section}.\arabic{equation}}%重新设定equation计数器样式
\makeatletter
\@addtoreset{equation}{section}%当section计数器增加时,equation计数器清零
\makeatother
一些优秀的LaTeX使用案例和资源网站
一份简短的使用说明文档:https://mirrors.tuna.tsinghua.edu.cn/CTAN/info/lshort/chinese/lshort-zh-cn.pdf
推荐入门文档:https://liam.page/attachment/attachment/LaTeX-useful-tools/LaTeX_Docs_2014.zip
百度百科:https://baike.baidu.com/item/LaTeX/1212106?fr=aladdin
国内LaTex服务商,LaTeX工作室:https://www.latexstudio.net/articles/
知乎问答有关LaTeX的部分:
有什么好的锻炼自己 LaTeX 能力的方法?https://www.zhihu.com/question/26941928
一个很好的中文科技论文在线模板:https://www.overleaf.com/read/rzdpjzqwkdwb
我的练习与反思
1.根据模板排版一篇诗歌
2.排版一篇数学论文
3.排版数学书的一章