LaTeX入门学习与案例展示

本文最后更新于:2024年11月12日 晚上


Useful sites:
Create LaTeX tables online – TablesGenerator.com
Overleaf, 在线LaTeX编辑器
在线LaTeX公式编辑器-编辑器


前言

LaTeX是一种“非所见即所得”的排版系统,用户需要输入特定的代码,保存在后缀为.tex的文件中,通过编译得到所需的pdf文件。

例如以下代码:

1
2
3
4
5
6
7
\documentclass{article}

\begin{document}

Hello, world!

\end{document}

最后输出的结果是一个pdf文件,内容是Hello, world!

如何理解“非所见即所得”呢?在这里举个“所见即所得”的例子:Word。Word的界面就是一张A4纸,输入的时候是什么样子,最后呈现出来就是什么样子。这给了我们极高的自由度,也非常容易上手,但是有如下问题:对于对细节不敏感的用户,Word的排版常常会在细节存在问题,比如两段话之间行间距不同、字体不同、标题样式不同等;对于撰写论文的用户,Word的标题、章节、图表、参考文献等无法自动标号,也很难在正文中引用;对于有公式输入需求的用户,Word自带的公式不稳定,而公式插件效果常常不好。

相比之下,使用LaTeX进行排版,就像是在铺好的轨道上驾驶火车一样。使用LaTeX没有办法像Word一样非常自由,但是可以保证规范性,这使得LaTeX非常适合用于论文的排版。在学习的过程中,也将会感受到这一点。

无论是LaTeX还是Word,其归根结底都只是排版工具,用Word也可以排出LaTeX的效果,用LaTeX也可以排出Word的效果。另外,笔者最建议的书写工具是Markdown,其书写的过程中可以不在意排版,也支持使用LaTeX语法输入公式,与LaTeX之间的转换非常方便。

准备工作:安装LaTeX与配置环境

安装Tex Live

官方的地址是http://mirror.ctan.org/systems/texlive/Images/texlive2021.iso,但是可能速度较慢,以下是一些国内的镜像地址:

清华大学:https://mirrors.tuna.tsinghua.edu.cn/CTAN/systems/texlive/Images/

上海交通大学:https://mirrors.sjtug.sjtu.edu.cn/ctan/systems/texlive/Images/

其中的iso文件可以使用压缩软件解压,或者加载到光盘,接下来直接安装就行了。

安装教程:
一份简短的关于 LATEX 安装的介绍

选择TeX编辑器

对于新手,最推荐的编辑器是TeXworks,非常适合用来上手,也避免了配置环境带来的问题。如果想要提高效率的话,可以选用:

  • TeXstudio,安装地址为TeXstudio - A LaTeX editor (sourceforge.net);
  • 宇宙第一的Visual Studio Code,这是笔者最建议的TeX编辑器,不过需要手动配置LaTeX,较为麻烦;
  • 另外,也有在线的编辑器,如Overleaf, 在线LaTeX编辑器

简单语法介绍

文档类型

TeX有多种文档类型可选,笔者较常用的有如下几种类型:

对于英文,可以用bookarticlebeamer
对于中文,可以用ctexbookctexartctexbeamer,这些类型自带了对中文的支持。
不同的文件类型,编写的过程中也会有一定的差异,如果直接修改文件类型的话,甚至会报错。以下统一选用ctexart。在编辑框第一行,输入如下内容来设置文件类型:

1
\documentclass{ctexart}

另外,一般也可以在\documentclass处设置基本参数,笔者通常设置默认字体大小为12pt,纸张大小为A4,单面打印。需要将第一行的内容替换为:

1
\documentclass[12pt, a4paper, oneside]{ctexart}

文件的正文部分需要放入document环境中,在document环境外的部分不会出现在文件中。

1
2
3
4
5
6
7
\documentclass[12pt, a4paper, oneside]{ctexart}

\begin{document}

这里是正文.

\end{document}

宏包

为了完成一些功能(如定理环境),还需要在导言区,也即document环境之前加载宏包。加载宏包的代码是\usepackage{}。本份教程中,与数学公式与定理环境相关的宏包为amsmathamsthmamssymb,用于插入图片的宏包为graphicx,代码如下:

1
2
3
4
5
\usepackage{amsmath, amsthm, amssymb, graphicx}
``
另外,在加载宏包时还可以设置基本参数,如使用超链接宏包`hyperref`,可以设置引用的颜色为黑色等,代码如下:
``
\usepackage[bookmarks=true, colorlinks, citecolor=blue, linkcolor=black]{hyperref}

标题

标题可以用\title{}设置,作者可以用\author设置,日期可以用\date{}设置,这些都需要放在导言区。为了在文档中显示标题信息,需要使用\maketitle。例如:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
\documentclass[12pt, a4paper, oneside]{ctexart}
\usepackage{amsmath, amsthm, amssymb, graphicx}
\usepackage[bookmarks=true, colorlinks, citecolor=blue, linkcolor=black]{hyperref}

% 导言区

\title{我的第一个\LaTeX 文档}
\author{Dylaaan}
\date{\today}

\begin{document}

\maketitle

这里是正文.

\end{document}

正文

正文可以直接在document环境中书写,没有必要加入空格来缩进,因为文档默认会进行首行缩进。相邻的两行在编译时仍然会视为同一段。在LaTeX中,另起一段的方式是使用一行相隔,例如:

1
2
3
我是第一段. 

我是第二段.

这样编译出来就是两个段落。在正文部分,多余的空格、回车等等都会被自动忽略,这保证了全文排版不会突然多出一行或者多出一个空格。另外,另起一页的方式是:

1
\newpage

笔者在编写文档时,为了保证美观,通常将中文标点符号替换为英文标点符号(需要注意的是英文标点符号后面还有一个空格),这比较适合数学类型的文档。

在正文中,还可以设置局部的特殊字体:

字体 命令
直立 \textup{}
意大利 \textit{}
倾斜 \textsl{}
小型大写 \textsc{}
加宽加粗 \textbf{}

章节

对于ctexart文件类型,章节可以用\section{}\subsection{}命令来标记,例如:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
\documentclass[12pt, a4paper, oneside]{ctexart}
\usepackage{amsmath, amsthm, amssymb, graphicx}
\usepackage[bookmarks=true, colorlinks, citecolor=blue, linkcolor=black]{hyperref}

% 导言区

\title{我的第一个\LaTeX 文档}
\author{Dylaaan}
\date{\today}

\begin{document}

\maketitle

\section{一级标题}

\subsection{二级标题}

这里是正文.

\subsection{二级标题}

这里是正文.

\end{document}

目录
在有了章节的结构之后,使用\tableofcontents命令就可以在指定位置生成目录。通常带有目录的文件需要编译两次,因为需要先在目录中生成.toc文件,再据此生成目录。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
\documentclass[12pt, a4paper, oneside]{ctexart}
\usepackage{amsmath, amsthm, amssymb, graphicx}
\usepackage[bookmarks=true, colorlinks, citecolor=blue, linkcolor=black]{hyperref}

% 导言区

\title{我的第一个\LaTeX 文档}
\author{Dylaaan}
\date{\today}

\begin{document}

\maketitle

\tableofcontents

\section{一级标题}

\subsection{二级标题}

这里是正文.

\subsection{二级标题}

这里是正文.

\end{document}

图片

插入图片需要使用graphicx宏包,建议使用如下方式:

1
2
3
4
5
\begin{figure}[htbp]
\centering
\includegraphics[width=8cm]{图片.jpg}
\caption{图片标题}
\end{figure}

其中,[htbp]的作用是自动选择插入图片的最优位置,\centering设置让图片居中,[width=8cm]设置了图片的宽度为8cm,\caption{}用于设置图片的标题。

表格

LaTeX中表格的插入较为麻烦,可以直接使用Create LaTeX tables online – TablesGenerator.com来生成。建议使用如下方式:

1
2
3
4
5
6
7
8
9
\begin{table}[htbp]
\centering
\caption{表格标题}
\begin{tabular}{ccc}
1 & 2 & 3 \\
4 & 5 & 6 \\
7 & 8 & 9
\end{tabular}
\end{table}

列表

LaTeX中的列表环境包含无序列表itemize、有序列表enumerate和描述description,以enumerate为例,用法如下:

1
2
3
4
5
\begin{enumerate}
\item 这是第一点;
\item 这是第二点;
\item 这是第三点.
\end{enumerate}

另外,也可以自定义\item的样式:

1
2
3
4
5
\begin{enumerate}
\item[(1)] 这是第一点;
\item[(2)] 这是第二点;
\item[(3)] 这是第三点.
\end{enumerate}

定理环境

定理环境需要使用amsthm宏包,首先在导言区加入:

1
\newtheorem{theorem}{定理}[section]

其中{theorem}是环境的名称,{定理}设置了该环境显示的名称是“定理”,[section]的作用是让theorem环境在每个section中单独编号。在正文中,用如下方式来加入一条定理:

1
2
3
\begin{theorem}[定理名称]
这里是定理的内容.
\end{theorem}

其中[定理名称]不是必须的。另外,我们还可以建立新的环境,如果要让新的环境和theorem环境一起计数的话,可以用如下方式:

1
2
3
4
5
6
7
\newtheorem{theorem}{定理}[section]
\newtheorem{definition}[theorem]{定义}
\newtheorem{lemma}[theorem]{引理}
\newtheorem{corollary}[theorem]{推论}
\newtheorem{example}[theorem]{例}
\newtheorem{proposition}[theorem]{命题}
另外,定理的证明可以直接用proof环境。

页面

最开始选择文件类型时,我们设置的页面大小是a4paper,除此之外,我们也可以修改页面大小为b5paper等等。

一般情况下,LaTeX默认的页边距很大,为了让每一页显示的内容更多一些,我们可以使用geometry宏包,并在导言区加入以下代码:

1
2
\usepackage{geometry}
\geometry{left=2.54cm, right=2.54cm, top=3.18cm, bottom=3.18cm}

另外,为了设置行间距,可以使用如下代码:

1
\linespread{1.5}

页码

默认的页码编码方式是阿拉伯数字,用户也可以自己设置为小写罗马数字:

1
\pagenumbering{roman}

另外,aiph表示小写字母,Aiph表示大写字母,Roman表示大写罗马数字,arabic表示默认的阿拉伯数字。如果要设置页码的话,可以用如下代码来设置页码从0开始:

1
\setcounter{page}{0}

以上部分转载自 【LaTeX】新手教程:从入门到日常使用

数学公式的输入方式

https://yiliu1412.github.io/2023/02/18/MarkdownLearn/

实际案例展示与分享

课程报告模板

代码展示

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
\documentclass[a4paper,12pt]{ctexart}
\usepackage{graphicx}
\usepackage{geometry}
\usepackage{zhnumber} % 中文数字支持
\usepackage{titlesec}
\usepackage{microtype} % 改善断词和字距调整
\usepackage{hyperref} % 加载hyperref宏包


\geometry{
left=2.5cm,
right=2.5cm,
top=2.5cm,
bottom=2.5cm
}

% 修改默认数字序号为中文
\titleformat{\section}{\normalfont\Large\bfseries}{\zhnum{section}、}{0em}{}
\titleformat{\subsection}{\normalfont\large\bfseries}{(\zhnum{subsection})}{0em}{}

\raggedright % 左对齐文本并允许单词自动换行


\begin{document}

\begin{titlepage}
\centering
\vspace*{1cm}

\Huge\textbf{@@@}\\[3cm]

\includegraphics[width=4cm]{SJTU.png}
\vfill
\makebox[6em][l]{\large\textbf{姓名:}@@@}\\[-0.2cm]
\makebox[6em][l]{\large\textbf{学号:}@@@}\\[-0.2cm]
\makebox[6em][l]{\large\textbf{学院:@@@}}\\[-0.2cm]
\makebox[6em][l]{\large\textbf{专业:@@@}}\\[-0.2cm]
\makebox[6em][l]{\large\textbf{日期:@@@}}\\[1cm]
\end{titlepage}

\newpage

\tableofcontents

\newpage


\newpage
\section{概述}
\hspace{2em}2022-2023学年是我来到交大的第一年,也是我来到上海的第一年。在第二学期,我继续进行进一步的课程学习,获取专业和各种学科交叉知识,提升个人软硬实力。同时,我积极参加志愿工作与勤工助学,丰富课余生活、实现个人价值。

\section{第一部分}
\hspace{2em}正文第一段

\hspace{2em}正文第二段

\section{第二部分}
\hspace{2em}正文

\subsection{第二部门第一小点}
\hspace{2em}正文

\subsection{第二部门第二小点}
\hspace{2em}正文

\end{document}

逐段分析

宏包

  • \documentclass[a4paper,12pt]{ctexart}中文article模板,设定纸张为A4 默认字号为12pt(小四
  • \usepackage{graphicx}插入图片
  • \usepackage{geometry}设置纸张格式
  • \usepackage{zhnumber} 中文数字支持,用于把默认数字编号修改为中文编号
  • \usepackage{titlesec} 提供标题设置
  • \usepackage{microtype} 改善断词和字距调整,避免出现英文单词过长超出行边缘
  • \usepackage{hyperref} 加载hyperref宏包,插入超链接

宏包参数设置

  • \geometry{left=2.5cm,right=2.5cm,top=2.5cm,bottom=2.5cm}修改为Word默认A4页边距

  • 修改默认数字序号为中文

    1
    2
    \titleformat{\section}{\normalfont\Large\bfseries}{\zhnum{section}、}{0em}{}
    \titleformat{\subsection}{\normalfont\large\bfseries}{(\zhnum{subsection})}{0em}{}
  • \raggedright % 左对齐文

\titleformat参数

LaTeX中的\titleformat命令用于自定义标题格式。它的一般语法如下:

1
\titleformat{command}[shape]{format}{label}{sep}{before-code}[after-code]

下面是各个参数的详细解释:

  • command:标题的命令,通常是\section\subsection等,表示要修改的标题级别。
  • shape(可选):标题的形状,可以选择以下几种:
    • hang:标题文本悬挂在标签后面。
    • block:标签和文本都垂直对齐。
    • display:标签和文本单独占据一行。
  • format:标题文本的格式,可以使用字体相关的命令,例如\normalfont\bfseries等。
  • label:标签的格式,用于显示标题的序号或编号。
  • sep:标签和标题文本之间的距离。
  • before-code:标题前的代码,可以用于添加额外的格式设置。
  • after-code:标题后的代码,可以用于添加额外的格式设置。

这些参数可以根据需要进行组合和调整,以满足你对标题格式的要求。请注意,在使用\titleformat命令之前,你需要引入使用该命令所需的相应宏包,例如titlesec宏包。

正文

设置封面

1
2
3
4
5
6
7
8
9
10
11
12
13
14
\begin{titlepage}
\centering 全部居中
\vspace*{1cm} 距页眉1cm

\Huge\textbf{@@@}\\[3cm] 大字号标题,空行3cm

\includegraphics[width=4cm]{SJTU.png} 插入4cm大小的校徽
\vfill
\makebox[6em][l]{\large\textbf{姓名:}@@@}\\[-0.2cm] 注意-0.2cm的参数是修改\makebox的行间距过大问题
\makebox[6em][l]{\large\textbf{学号:}@@@}\\[-0.2cm]
\makebox[6em][l]{\large\textbf{学院:@@@}}\\[-0.2cm]
\makebox[6em][l]{\large\textbf{专业:@@@}}\\[-0.2cm]
\makebox[6em][l]{\large\textbf{日期:@@@}}\\[1cm]
\end{titlepage}

插入新页面

这里采用\newpage插入新页面.

\newpage\clearpage都是用于在LaTeX文档中插入一个新的页面。它们之间的主要差别如下:

  1. 换页时处理浮动体的方式不同:

    • \newpage命令会将未处理的浮动体(如图片或表格)推迟到下一页。这意味着在换页之前,未处理的浮动体可能会堆积在当前页面底部。
    • \clearpage命令会立即开始新的一页,并将未处理的浮动体清除并放置在新页上。
  2. 对双面排版的处理方式不同:

    • 在单面排版(即默认情况下)下,\newpage\clearpage没有明显的区别,因为每个页面都是独立的。
    • 在双面排版下,\newpage将创建一个新的奇数页或偶数页。而\clearpage则会始终创建一个新的奇数页,以确保左右页面正确对齐。

因此,通常来说:

  • 如果您只是想创建一个新的页面,并且希望未处理的浮动体稍后出现,可以使用\newpage
  • 如果您希望立即开始新的页面,并且需要清除未处理的浮动体,或者在双面排版中确保正确的页面对齐,可以使用\clearpage

请注意,在使用\newpage\clearpage时,如果在当前页面上没有任何未处理的浮动体,则它们之间没有明显的区别。

插入图片

\includegraphics命令用于在LaTeX文档中插入图片。它的一般语法如下:

1
\includegraphics[options]{filename}

下面是常用的参数和选项的解释:

  • options:可以选择以下一些参数:
    • width=\textwidth:设置图片的宽度为当前文本的宽度。
    • height=\textheight:设置图片的高度为当前文本的高度。
    • scale=0.5:按比例缩放图片,值为缩放比例。
    • angle=90:旋转图片,值为旋转角度。
    • trim=left bottom right top:裁剪图片,指定需要保留的左、下、右、上的距离。
    • clip=true:根据裁剪参数裁剪图片。
  • filename:图片文件的名称(包括路径),可以是常见的格式,如PNG、JPEG、PDF等,如果文件和.tex文件在同一目录下,则可以省略相同路径直接书写文件名。

下面是一个示例,展示如何使用\includegraphics命令插入图片:

1
2
3
4
5
6
7
8
9
10
11
12
13
\documentclass{article}
\usepackage{graphicx}

\begin{document}

\begin{figure}[htbp]
\centering
\includegraphics[width=0.5\textwidth]{example.jpg}
\caption{示例图片}
\label{fig:example}
\end{figure}

\end{document}

在上面的示例中,使用了\includegraphics命令将名为example.jpg的图片插入到一个浮动环境figure中,并设置图片的宽度为当前文本宽度的一半。同时,使用了\caption命令为该插图添加了标题,并使用\label命令给它一个标签,以便在文档其他地方引用。

htbp 是在 LaTeX 中用于指定图片(或浮动对象)放置位置的一组选项。这些选项表示以下含义:

  • h (here): 尽量将图片放置在代码的当前位置。
  • t (top): 尽量将图片放置在页面的顶部。
  • b (bottom): 尽量将图片放置在页面的底部。
  • p (page): 将图片放置在一个单独的页面上。

这些选项告诉 LaTeX 在尝试放置图片时应考虑的位置。然而,这只是建议性的,LaTeX 会根据文档的整体布局和其他浮动对象的位置进行决策。

可以使用这些选项的任意组合,例如 [ht][bp] 或者 [htb] 等。默认情况下,如果没有指定任何选项,LaTeX 的默认行为是将图片放置在页面的顶部。

请注意,即使指定了这些选项,LaTeX 也可能会选择一个不同的位置来放置图片,以便更好地控制文档的版面。在某些情况下,您可能需要手动调整图片的位置,例如使用 \clearpage 命令强制将图片放置到下一页。

换行

\par\\都是LaTeX中用于换行的命令,但它们在使用方式和效果上有一些区别。

  • \par命令:\par命令用于开始新的段落。它通常在两个段落之间插入一个空行,并且会自动缩进下一个段落的首行(除非在段落开头使用了\noindent命令来取消缩进)。可以在任何地方使用该命令来创建新的段落。

  • \\命令:\\命令用于在当前行内进行换行,而不会开始新的段落。它主要用于在表格、标题、行内数学公式等特殊环境中,或者在紧凑的文本中插入简短的换行。注意,使用\\命令时,一般建议在其后面添加一个空格或者使用\newline命令,以确保正确的间距。

以下是一个示例,演示了\par\\的不同用法:

1
2
3
4
5
6
7
8
9
10
11
12
13
\documentclass{article}

\begin{document}

这是第一段文字。

这是第二段文字。\par
这是第三段文字。

这是第四段文字。\\
这是第五段文字。

\end{document}

在上面的示例中,第一段文字和第二段文字之间通过\par命令分隔为两个段落,而第三段文字与前两段在同一行。通过\\命令,第四段文字和第五段文字在同一行内换行。

创建章节

在LaTeX中,可以使用以下命令来创建各种级别的章节标题:

  • \part{title}:创建一个部分标题(Part)。
  • \chapter{title}:适用于文档类中支持章节一级标题的书籍类文件(如bookreport),用于创建章标题。
  • \section{title}:适用于任何文档类,用于创建节标题。
  • \subsection{title}:适用于任何文档类,用于创建小节标题。
  • \subsubsection{title}:适用于任何文档类,用于创建子小节标题。
  • \paragraph{title}:适用于任何文档类,用于创建段落标题。
  • \subparagraph{title}:适用于任何文档类,用于创建子段落标题。

这些命令中的title参数表示相应章节标题的文本。例如,使用\section{Introduction}将创建一个名为”Introduction”的节标题。

请注意,某些文档类可能不支持所有级别的章节标题,或者可能对它们的呈现方式有所不同。此外,章节标题的样式可以通过相应的文档类或宏包进行自定义设置。

以下是一个示例,展示了如何使用不同级别的章节标题命令:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
\documentclass{article}

\begin{document}

\section{Introduction}
这是一个节标题。

\subsection{Background}
这是一个小节标题。

\subsubsection{Method}
这是一个子小节标题。

\paragraph{Results}
这是一个段落标题。

\subparagraph{Conclusion}
这是一个子段落标题。

\end{document}

特殊的章节

\section\section*是LaTeX中用于创建章节标题的命令,它们在使用方式和效果上有一些区别。

  • \section{title}\section命令用于创建一个带编号的章节标题,并将其添加到文档的目录中。你需要在花括号中提供标题文本。该命令会自动给标题编号,并在标题前添加适当的间距。例如,使用\section{Introduction}会创建一个被编号为”1 Introduction”的章节标题。

  • \section*{title}\section*命令用于创建一个不带编号的章节标题,也不会将其添加到文档的目录中。你同样需要在花括号中提供标题文本。与\section不同,\section*创建的标题不会自动获得编号,并且标题前的间距也可能不同。通常,你可以使用\section*{title}来创建附录、参考文献或其他不需要编号的章节。

以下是一个示例,演示了\section\section*的不同用法:

1
2
3
4
5
6
7
8
9
10
11
\documentclass{article}

\begin{document}

\section{Introduction}
这是一个带编号的章节标题。

\section*{Conclusion}
这是一个不带编号的章节标题。

\end{document}

常见报错

I can’t write on file `@@@.pdf’. \maketitle

如果在使用 \maketitle 命令时遇到了无法写入文件 @@@NIMO2023.pdf 的问题,可能是由于以下原因导致的:

  1. 权限问题:请确保您有足够的权限来写入目标文件。尝试将输出文件保存到一个您拥有写入权限的位置,例如当前工作目录或其他合适的目录。

  2. 文件被其他程序占用:检查一下是否有其他程序正在使用 @@@.pdf 文件。关闭这些程序或者将输出文件更改为另一个名称。

  3. 文件路径错误:确认指定的文件路径和文件名是否正确。确保文件不存在或者目录存在以避免任何冲突。

  4. 运行环境限制:某些运行环境(如只读文件系统)可能限制了对文件的写入操作。确保您在能够写入文件的环境中运行代码。

  5. 编译器问题:尝试使用不同的编译器或更新您正在使用的编译器版本,以解决潜在的编译器相关问题。

拓展阅读

如果你想更详细的学习LaTex,欢迎点击下面的链接.


LaTeX入门学习与案例展示
http://yiliu1412.github.io/2023/08/28/LaTexLearn/
作者
逸流Mercurio
发布于
2023年8月28日
更新于
2024年11月12日
许可协议