Latex使用教程
目录
1 文档结构
% 指定文档类型,以%开头的行是注释行
\documentclass[a4paper,12pt]{article}
% 使用包,支持中文
\usepackage{ctex}
% 创建标题页的内容
\title{C语言程序设计}
\author{ldc}
\date{2019-5-1}
% 开始文档
\begin{document}
% 生成标题
\maketitle
% 文档内容
A sentence of text. 你好!
% 结束文档
\end{document}
\documentclass
: 这里指定文档类型 ,可用的类型包括:
article
:适合短篇的文档,比如论文,短篇报告等;report
:适合长篇带有章节(chapter)的文档,比如博士论文等;book
:带有章节的书籍等;slides
:生成演示文档
文档类型的属性选项options
,需要写在[ ]
里面:
-
纸张:
a4paper
:缺省设置;letterpaper
:某些发行版里是缺省设置a5paper
,b5paper
,executivepaper
,legalpaper
-
3种标准字体高度:
10pt
:缺省设置,11pt
,12pt
纸张方向,缺省是竖向。
可以用
geometry
包来设置更多的纸张大小以及页边距等更多排版格式。
\usepackage
:使用包
- ctex:支持中文
\date
是文章写作日期,这里使用\today
来自动生成编译时的日期,也可以用其他固定的日期来填充,如:\date{2019-5-2}
\maketitle
指令生成标题,对于article
,标题和正文都在一页,book
和report
则会生成标题页,正文在下一页。
单列还是多列显示,可选项包括:
onecolumn
:缺省,单列显示;twocolumn
:双列显示
可以用multicol
包来创建更复杂的多列显示文
公式显示选项,缺省是右对齐,公式编号在右边,可以设置下面的选项:
fleqn
:公式左对齐,leqno
:公式编号在公式左边
使用landscape
来设置横向,但是有点问题,显示时边距会过大,可以使用geometry
包来更好解决这个问题。
单面还是双面打印,对于单面打印,每一页的边距都一样,对于双面打印,奇数页和偶数页的边距会不同,更适合装订。
对于article
和report
类型的文档,其缺省的选项是单面,即oneside
;
对于book
,其缺省的选项是双面,即twoside
文档的标题页设置
对于article
,缺省是notitlepage
,也就是标题之后就是正文,之间不分页;
对于report
和book
,缺省是titlepage
,标题页之后会分页,正文在下一页。
每章是否新开页
对于report
,缺省是openany
,也就是新章可以在左边或者右边页面;
对于book
,缺省是openright
,也就是新章页面必须在右边页,如果有需要,会在左边页插入一页空白。
1-1 目录、页码
\begin{document}
% 生成目录
\tableofcontents
% 插入新页
\newpage
% 设置页码格式是阿拉伯数字
\pagenumbering{arabic}
\end{document}
\newpage
:插入新页
\pagenumbering
:设置页码格式
- arabic:阿拉伯数字
- roman:罗马数字
\tableofcontents
:插入目录
1-2 摘要
\begin{abstract}
Your abstract.
\end{abstract}
1-3 章节
\begin{document}
% 正文
\section{概述}
\section{算法}
\subsection{算法的定义}
% 附录
\appendix
\section{Proofs}
\section{Additional Experiments}
\end{document}
\section
和\subsection
创建章、节,可用的段落有:
\part
: 部,深度:-1,不能用在letter
;
\chapter
:章,深度:0,可以用在book
和report
;
\section
:节,深度:1,不能用在letter
;
\subsection
:小节,深度:2, 不能用在letter
;
\subsubsection
:小小节,深度:3,不能用在letter
;
\paragraph
:带标题的段落(用{ }
),深度:5,不能用在letter
;
\subparagraph
:带标题的次级段落(用{ }
),深度:6,不能用在letter
;
一般,深度5、6的不会计入目录(contents
)。
上面的格式一般都固定,重新修改会比较麻烦,可以使用ssection
和sectsty
包进行更好的设置。
注意,当设定标题(用{}
包含的)时候,在插入目录时会自动编入,但是如果太长或有格式异常,可以通过设置可选标题(用[]
来包含),在编入目录时如果有可选标题会自动选用,参考下例:
\section[编入目录的标题]{实际的太长的标题}
章节标题会自动编号,缺省设置如下:
对于part
:采用罗马数字编号,如:Part I, Part II, ...
;
对于chapter
和section
:采用 阿拉伯数字,如:Chapter 2
,2.1 xxx
等;
对于附录Appendix
:采用拉丁字母,如:Appendix A, Appendix B, ...
等;
可以设置下面两个参数来设定哪一级标题使用编号,以及目录采用哪一级的标题,如下设置只到section
(级别为1):
\setcounter{secnumdepth}{1}
\setcounter{tocdepth}{1}
若某级标题不需要进行编号(也就意味不会加入目录),可以加上*
,如下例:
\sebsection*{本小节不进行编号}
1-4 标签、引用
\label{sec11}
根据 第\pageref{sec11}页\ref{sec11}对算法的描述,可以归纳出三种基本算法结构,这些都有C语言的对应控制结构。
\label
:创建一个标签
\pageref
:交叉引用得到标签所在的页码
\ref
:交叉引用
- 在章节中,得到这个标签所在的章、节编号???
{fig:fat_boxplot}
在图片中,被替换为与标签相关联的图表的编号。
1-5 引用
\cite{greenwade93}
\bibliographystyle{alpha}
:文献引用风格
- 这里是使用了
alpha
风格,这种风格会用作者名字和出版年份的首字母进行标记,如[ABC01]
。你可以根据需要选择其他的风格,比如plain
、unsrt
等。
\bibliography{sample}
:参考文献数据库的文件名。sample.bib
是一个 BibTeX 数据库文件(一种用于管理参考文献的工具)。
2 文字样式结构
2-1 字体
\textit
设置斜体文本
latex
中采用的单位unit
:
pt
:一个点point
相当于1/72.27inch
,也就是大约0.0138inch
或0.3515mm
;
mm
:毫米; cm
:厘米; in
:英寸;
ex
:约等于当前字体中字母x
(小写)的高度;
em
:约等于当前字体中字母M
(大写)的宽度;
mu
:当前采用的数学字体为参考的em
,则1mu=1/18em
。
2-2 标点 空格 特殊字符
\dots
:
…
\dots
…
\cdots
:
⋯
\cdots
⋯
\chi^{2}
:
χ
2
\chi^{2}
χ2
\author{数据212\ \ 尹思凡}
\author{数据212~尹思凡}
\ \
表示一个标准的空格,而 ~
表示一个不会被断行的空格。
\quad
\verb|.bib| % 输出.bib
\verb
是用来显示原始文本的命令,通常用于显示代码、文件名等内容,它会直接将其内容以原始形式输出,而不对其中的特殊字符进行解释或格式化。
2-3 列表
无序
\begin{itemize}
\item xxx1
\item xxx2
\begin{itemize}
\item yxxx1
\item yxxx1
\begin{itemize}
\item zxxx1
\item zxxx2
\begin{itemize}
\item mxxx1
\item mxxx2
\end{itemize}
\end{itemize}
\end{itemize}
\end{itemize}
有序
\begin{enumerate}
\item xxx1
\item xxx2
\end{enumerate}
\begin{enumerate}[label=(\alph*)]
:小写字母
\begin{enumerate}[lable=(\arabic*)]
:阿拉伯数字
2-4 表格
LaTeX Table Editor and Generator - Table Convert Online
\begin{table}[H]
\begin{center}
\caption{}
\label{table:2}
\begin{tabular}{|c|c|c|c|c|}
\hline & $L_2$ & $L_1$ & $L_{max}$ & cos(x, $x_i$) \\
\hline $d_1$ & 0.14 & 0.2 & 0.1 & 1.000\\
\hline $d_2$ & 0.67 & 0.9 & 0.6 & 0.996\\
\hline $d_3$ & 0.28 & 0.4 & 0.2 & 0.997\\
\hline $d_4$ & 0.22 & 0.3 & 0.2 & 0.998\\
\hline $d_5$ & 0.61 & 0.7 & 0.6 & 0.965\\
\hline
\end{tabular}
\end{center}
\end{table}
\begin{table}[!ht]
\begin{tabular}{ p{6cm}p{4cm}p{3cm} } % |表示表格线,p表示表格宽(3cm)
\hline % 水平线
\multicolumn{3}{c}{Country List} \\ % 设置多列合并,c表示中间对齐,l表示左对齐,r表示右对齐
\hline
Country Name or Area Name& ISO ALPHA 2 Code &ISO ALPHA 3 \\ % \\ 表示换行
\hline
Afghanistan & AF &AFG \\
Aland Islands & AX & ALA \\
Albania &AL & ALB \\
Algeria &DZ & DZA \\
American Samoa & AS & ASM \\
Andorra & AD & AND \\
Angola & AO & AGO \\
\hline
\end{tabular}
\end{table}
在Typora中,LaTeX的对齐需要使用
\begin{}...\end{}
环境来实现。
\begin{table}
\begin{tabular}{ |p{6cm}|p{4cm}|p{3cm}| } % |表示表格线,p表示表格宽(3cm)
\hline % 水平线
\multicolumn{3}{|c|}{Country List} \\ % 设置多列合并,c表示中间对齐,l表示左对齐,r表示右对齐
\hline
Country Name or Area Name& ISO ALPHA 2 Code &ISO ALPHA 3 \\ % \\ 表示换行
\hline
Afghanistan & AF &AFG \\
Aland Islands & AX & ALA \\
Albania &AL & ALB \\
Algeria &DZ & DZA \\
American Samoa & AS & ASM \\
Andorra & AD & AND \\
Angola & AO & AGO \\
\hline
\end{tabular}
\end{table}
2-5 链接
\href{https://www.overleaf.com/learn}{help library}
\href{https://www.overleaf.com/user/subscription/plans}{choose your plan}.
\url{https://www.overleaf.com/contact}
3 算法
3-1 伪代码
这两个宏包是被设计成同时一起使用的,但也可以根据用户的特殊需要分开使用。其中 algorithm 宏包主要是为算法提供一个浮动体环境,也就是说,在 LaTeX 中算法和图像,表一样,都是浮动体。algorithmic 宏包主要是用来完成算法的描述功能,该宏包提供了我们描述算法常用的几种结构命令,如条件结构、循环结构等,但也可以客制化流程。
\usepackage{algorithm}
\usepackage{algorithmic}
\begin{algorithm}
\caption{Algorithm Title}
\begin{algorithmic}
\REQUIRE $n \geq 1$ %输入条件
\ENSURE $Sum = 1 + \cdots + n$ %输出
\STATE $Sum \leftarrow 0$ %\STATE 命名演示
\IF {$n < 1$} %条件语句
\PRINT {Input Error} %打印语句
\ELSE
\FOR {$i = 0$ to n} %FOR循环结构
\STATE $Sum = Sum + i$\\
\STATE $i = i + 1$
\ENDFOR
\ENDIF
\RETURN Sum
\end{algorithmic}
\end{algorithm}
\begin{algorithm}
\caption{Calculate $y = x^n$}
\label{alg3}
\begin{algorithmic}
\REQUIRE $n \geq 0 \vee x \neq 0$
\ENSURE $y = x^n$
\STATE $y \gets 1$
\IF{$n < 0$}
\STATE $X \gets 1 / x$
\STATE $N \gets -n$
\ELSE
\STATE $X \gets x$
\STATE $N \gets n$
\ENDIF
\WHILE{$N \neq 0$}
\IF{$N$ is even}
\STATE $X \gets X \times X$
\STATE $N \gets N / 2$
\ELSE[$N$ is odd] \STATE $y \gets y \times X$
\STATE $N \gets N - 1$
\ENDIF
\ENDWHILE
\end{algorithmic}
\end{algorithm}
3-2 代码块
\usepackage{listings}
\begin{lstlisting}[ % 进行参数设置
language=Python, % 设置语言
numbers=left, % 在左侧显示行号
basicstyle=\small\ttfamily, % 设置字体族
breaklines=true, % 自动换行
[frame=none] %无框
[frame=leftline,topline,rightline, bottomline] %分别对应只在左侧,上方,右侧,下方有竖线
[frame=trb] %t-top,r-right,b-bottom,l-left. 这是为框架只在上,右,下方
[frame=trBL] %大写表示双重线
columns=flexible %单词间隔调整
]
def anagramSolution1(s1, s2):
alist = list(s2)
pos1 = 0
stillOK = True
while pos1 < len(s1) and stillOK:
pos2 = 0
found = False
while pos2 < len(alist) and not found:
if s1[pos1] == alist[pos2]:
found = True
else:
pos2 = pos2 + 1
if found:
alist[pos2] = None
else:
stillOK = False
pos1 = pos1 + 1
return stillOK
\end{lstlisting}
4 公式
$$
% 正常在此处编写公式即可
$$
4-1 方程式
\usepackage{amsmath} % 自定义编号\begin{equation}
\begin{equation}
newguess=\frac{1}{2}×(oldguess+\frac{n}{oldguess})
\tag{2}
\end{equation}
4-2 公式组
\begin{aligned}
:用于排版多行公式并对齐。通常用 &
符号来指示对齐的位置。
\begin{array}{l}
:默认居中。{l}表示左对齐
\usepackage{amsmath} % 使用 amsmath 宏包以排版数学公式
\[
\begin{array}{l}
\text{我们已知}\mathbf{w}^* = (\mathbf X^\top \mathbf X)^{-1}\mathbf X^\top \mathbf{y}.\\
\end{array}
\]
使用了\[ \]
数学环境来包裹数学公式,同时使用\text{}
命令将汉字包裹在数学环境之外,这样汉字不会引发错误。
5 格式
如果你希望参数在整个文档中生效,通常会将命令放在导言区(即 \begin{document}
之前)。
如果你希望设置的长度参数只在文档的某个特定部分生效,那么可以将命令放在该部分的开始处。
5-1 间距
行间距?
\usepackage{setspace}
\begin{spacing}{1.0}
\end{spacing}
\hfill
:在排版多个元素时,用来平均分配它们之间的空间,从而使它们在一行中均匀分布,而不是紧凑在一起。
5-2 缩进
% 设置每段第一行的缩进
\setlength{\parindent}{4em}
% 用于在当前位置插入一个标准的缩进量,即与当前段落的缩进量相同。(在段落的中间位置手动插入一个额外的缩进,它会在当前位置插入一个新的缩进,而不另起一个新的段落。注意,\\换行后不属于下一段,而是段内。)
\indent
5-3 长度参数
\textwidth
: 表示当前文本区域的宽度。它通常用于设置图像或表格的宽度,以确保它们适应当前文本的布局。在一个页面中,\textwidth
是指除去页边距之外的可用文本区域的宽度。在单栏文档中,它等于页面宽度减去左右页边距的总和。在双栏文档中,\textwidth
则是两栏的宽度之一。
段落之间的宽度:
\setlength{\parskip}{1cm}
可以用下面的命令来设置段落每行之间的间距(下面设置为1.5倍行距):
\renewcommand{\baselinestretch}{1.5}
可以用\pagestyle{style}
设置每页的页眉(\header
)和页脚(\footer
)的设置,style
的可选项是:
\plain
:缺省,页码打印在页脚中间;
\headings
:页码,每章标题打印在页眉,页脚留空;
\empty
:设置页眉页脚为空。
对特定页可以用:\ thispagestyle{style}
可以设置 独立的页码页眉设置。
6 图片
\usepackage{graphicx}
\begin{figure}[htbp]
\centering
\includegraphics[scale=0.4]{img/后序表达式.png}
\caption{向右移动运算符,以得到后序表达式}
\label{figure}
\end{figure}
\centering
将图片居中显示;
\includegraphics{}
插入一张图片,花括号 {} 内就是图片的名称,方括号 [] 内同样是控制参数,但这里控制的是图片的显示大小;
\caption{}
图例信息;
\label{}
图的标签,在写论文时可以在正文中引用;
二者可以像下面一样写在一起:
\caption{\label{fig:frog}This frog was uploaded via the file-tree menu.}
图片位置控制参数:\begin{figure}[htbp]
- [h] 表示当前位置(here),也就是说图片将放在你设置的当前位置,但是如果这一页的空间不足以放下这个图片,此时图片会转到下一页;
- [t] 顶端(top),此时优先将图片放置在页面的顶部;
- [b] 底部(bottom)此时优先将图片放置在页面底部;
- [p] 将图片设置为浮动状态,系统会自动排版图片的位置;
- 一般推荐这几个参数结合使用,比如:[ht]、[htbp],此时这几种位置具有优先级。
\usepackage{algorithm}
\usepackage{algorithmic}
\begin{figure}[H] % 强制将浮动对象(如图表)放置在当前位置
图片大小控制参数:\includegraphics[scale=0.2]{girl.eps}
- [scale],表示按原图比例缩放,比如 scale=0.2 表示将原图缩小 5 倍,如果要放大只需要将 scale 设置为大于 1 即可;
- [height = 1cm, width = 2cm]:直接设置图片宽高。
6-1 subfigure子图
\usepackage{subcaption}
\begin{figure}[htbp]
\centering
\begin{subfigure}{0.45\textwidth} % 子图的宽度为当前文本区域宽度的 45%
\centering
\includegraphics[width=\textwidth]{img/age盒图.png}
\caption{age盒图}
\label{fig:age_boxplot}
\end{subfigure}
\hfill
\begin{subfigure}{0.45\textwidth}
\centering
\includegraphics[width=\textwidth]{img/fat盒图.png}
\caption{\%fat盒图}
\label{fig:fat_boxplot}
\end{subfigure}
\caption{age和\%fat的盒图}
\label{fig:boxplots}
\end{figure}
6-2 minipage
\begin{figure}
\centering
\begin{minipage}{0.48\textwidth}
\centering
\includegraphics[width=\textwidth]{img/age盒图.png}
\caption{age盒图}
\label{fig:age_boxplot}
\end{minipage}
\hfill
\begin{minipage}{0.48\textwidth}
\centering
\includegraphics[width=\textwidth]{img/fat盒图.png}
\caption{\%fat盒图}
\label{fig:fat_boxplot}
\end{minipage}
\caption{并排放置的盒图} % 这两行不要就不算做一个大图
\label{fig:boxplots} % 这两行不要就不算做一个大图
\end{figure}