Latex_note_1

Latex_note_1

Charles Lv7

Latex_note_1

部分参考改编于专栏——Mac OS下的LaTeX技巧 - 知乎 (zhihu.com)

latex_basic

课程代码

1
2
3
4
5
6
7
8
9
10
11
12
13
% 导言区
\documentclass{article}%book,report,letter
\title{My first Document}
\author{Du jinyang}
\date{\today}
% 正文区(文稿区)
\begin{document}
\maketitle%这一行用于出现导言区定义的title,author,date等信息
Hello World!%下面的一行空行可以形成两段文字的换行。

% here is my big formula
Let $f(x)$ be defined by the formula $$f(x)=3x^2+x-1$$ which is a polynomial of degree 2.
\end{document}

课程内容细节:

  1. letter不含有\maketitle部分。
  2. 对于文章中需要修改的部分,建议使用直接注释掉的方法。
  3. 在latex中可以使用$$包含数学公式进行编写,同时可以使用双​$$进行公式书写并换行。(单$表示行内公式,双$表示行间公式)
  4. 如果需要在两段文字间换行,可以在两段文字间加入一行空行,且多个空行在pdf中依然只表示一个换行符。(这行空行不可以写注释,影响换行)
  5. 一个latex有且只有一个document环境。
  6. latex在导言区进行全局设置,在正文区进行文稿编写。

课程代码效果图:

image-20230201222135901

详细解读

文档类

第一行,是固定的\documentclass{}.这个大括号里填的东西叫文档类。我们常用的LaTeX文档类有article, report, minimal. 比如说,使用了article, 一般就用不了chapter,只能用section, subsection, 使用report就可以用chapter. 同时,在排版时也会有一些自动调整的东西,比如说一个叫book的文档类,生成以后的文档就会自动分左页右页。我们最常用的,是article文档类,也是我们之后的文章里默认使用的文档类。此外,minimal文档类,则就相当于一个布料,它啥也没给你预设,就是一个最简单的纸。此外,如果我们要在LaTeX中使用中文,则应使用ctexart文档类。而使用了ctexart文档类之后,编译器就知道该怎么输出中文了。

\documentclass具体介绍

当 latex 处理源文件时, 首先需要知道的就是作者所要创建的文档类型。 文档类型可由\documentclass 命令来指定。

1
\documentclass[option]{class}

clsss 指定想要的文档类型。表1给出了一些用到的文档类型。通过options 参数可以定制文档类的属性。 不同的选项之间须用逗号隔开。

1
2
% 这行是用来说明当前文档的文档类型的,加个fontset=windows是中文输入时不想让它报warning
\documentclass[fontset=windows]{article}

文档类型:

article 排版科学期刊、 演示文档、 短报告、 程序文档、 邀请函……
proc 一个基于 article 的会议文集类
minimal 非常小的文档类。 只设置了页面尺寸和基本字体。 主要用来查错。
report 排版多章节长报告、 短篇书籍、 博士论文……
book 排版书籍。
slides 排版幻灯片。 该文档类使用大号 sans serif 字体。 也可以选用 FoilTEXa 来得到相同的效果。

文档类常用选项:

10pt, 11pt, 12pt 设置文档中所使用的字体的大小。 如果该项没有指定, 默认使用10pt 字体。
a4paper, letterpaper, . . . 定义纸张的尺寸。 缺省设置为letterpaper。 此外, 还可以使用a5paper, b5paper, executivepaper 以及legalpaper。
fleqn 设置行间公式为左对齐, 而不是居中对齐。
leqno 设置行间公式的编号为左对齐, 而不是右对齐。
titlepage, notitlepage 指定是否在文档标题(document title) 后另起一页。 article 文档类缺省设置为不开始新页, report 和book 类则相反。
onecolumn, twocolumn latex 以单栏(one column) 或双栏(two column) 的方式来排版文档。
twoside, oneside 指定文档为双面或单面打印格式。 article 和report 类为单面(single sided) 格式, book 类缺省为双面(double sided) 格式。 注意该选项只是作用于文档样式, 而不会通知打印机以双面格式打印文档。
landscape 将文档的打印输出布局设置为 landscape 模式。
openright, openany 决定新的一章仅在奇数页开始还是在下一页开始。 在文档类型为article 时该选项不起作用, 因为该类中没有定义“章” (chapter)。 report 类默认在下一页开始新一章而book 类的新一章总是在奇数页开始。

导言区

在文档类和\begin{document}之间,是导言区(preamble) . 导言区是干什么的呢?是进行文档预设的。在LaTeX中,这些文档叫做宏包(package), 用指令\usepackage{}来调用。这些宏包大都与时俱进,经常有更新,那我们从哪知道这牌子最新的内容呢?就需要包管理器。我们下载下来的LaTeX发行版中,除了配有TeXworks, TeXShop这类的编辑器,还有包管理器,也就是TeX live. 这个包管理器中管理着所有我们可以使用的宏包,我们也可以利用这个软件进行宏包更新。此外,每个宏包里都有许多配套的指令供我们使用,这些配套的指令,也是写在导言区里的。一个宏包的指令可能有几十甚至几百个,我们只需要记得常用的一两个就行了。那么其他指令该怎么查呢?每个宏包都有它配套的说明书。这时候texdoc就派上它的用场了。Windows系统打开命令提示符,在里面写上

1
texdoc xxx 

其中"xxx"为所要查找的宏包的名字。

输入以后,就会弹出一个pdf,就是宏包的说明文档了。

总得来说,导言区是由各种各样的指令构成的。指令分为无参数指令、有参数指令及环境三类。其基本格式为

1
\command[option]{parameter}

每个指令,都是由一个反斜杠\开头,然后跟着指令的名称,接下来中括号中写选项,大括号中写参数。

  • 无参数指令,比如说\LaTeX, 输出的是排版好的LaTeX(正如本文的题图); \bfseries,使其所在的作用域内的文字全部变成黑体;\maketitle输出标题;

  • 有参数指令,比如说\textit{}, 将其参数内的文字全部变成意大利斜体; \author{}将作者名存储到一个叫author的变量中,在后续输出标题时会被调用。

  • 环境,就是\begin{env}\end{env}. 这两个永远是配套使用的 。比如说\begin{document}\end{document}之间的就是正文环境,\begin{table}\end{table}之间的就是表格环境。

而填在中括号内的可选的选项,也是指令的组成部分之一。比如说,\begin{table}[H],就是一个以H类型浮动的表格;\usepackage[ruled]{algorithm2e}就是使用被画在框框里的算法格式。

\usepackage这个命令,只能在导言区使用。其余的命令,大都可以在正文内使用。

\usepackage具体介绍

排版文档时, 你可能会发现某些时候基本的LATEX 并不能解决你的问题。 如果想插入图形(graphics)、 彩色文本(coloured text) 或源代码到你的文档中, 你就需要使用宏包来增强LATEX 的功能。 可使用如下命令调用宏包

1
\usepackage[options]{package}

这里package 是宏包的名称, options 是用来激活宏包特殊功能的一组关键词。很多宏包随LATEX 基本发行版一起发布。

1
2
3
4
% 这里我们使用了UTF8的编码格式和ctex宏包来解决中文编码的问题
% \usepackage[UTF8]{ctex}
% 由于现在LaTeX对中文的支持已经很完善,因此我们可以直接使用\documentclass[UTF8]{ctexart},代表该文档是中文论文(ctex+article。推荐使用这种方式,因为对部分的宏包的支持较好。
\documentclass[UTF8,fontset=windows]{ctexart}

随LATEX一起发行的宏包:

宏包 描述
doc 排版LATEX 的说明文档。
exscale 提供了按比例伸缩的数学扩展字体。
fontenc 指明使用哪种LATEX 字体编码(font encoding)。
ifthen 提供如下形式的命令‘if . . . then do . . . otherwise do . . . .’
latexsym 提供LATEX 符号字体。
makeidx 提供排版索引的命令
syntonly 编译文档而不生成 dvi 文件
inputenc 指明使用哪种输入编码, 如 ASCII, ISO Latin-1, ISO Latin-2, 437/850IBM code pages, Apple Macintosh, Next, ANSI-Windows 或用户自定义编码。
页面样式pagestyle

LATEX 支持三种预定义的页眉/页脚(header/footer) 样式, 称为页面样式(pagestyle)。

使用方式:

\pagestyle{style}

其中的 style 参数确定了使用哪一种页面样式 。

1
2
3
\pagestyle{headings}
% 用这个来改变当前页面的页面样式
\thispagestyle{plain}

Latex预定义的页面样式:

页面样式 描述
plain 在页脚正中显示页码。 这是页面样式的缺省设置。
headings 在页眉中显示章节名及页码, 页脚空白。
empty 将页眉页脚都设为空白。

正文

\begin{document}\end{document}之间的,就是正文。 只有在这里面输入的东西,才会被输出。随着我们对LaTeX了解的深入,在正文里能写的东西会越来越多。

\begin…\end的结构像不像前端里的<p>.</p>标签。

1
2
3
\begin{document}
忆梅下西洲,折梅寄江北。
\end{document}

img

一些操作符号:

命令 作用
\ 另起一行,换行符。
\section{章节名} 开启一个章节,会自动编号。
\subsection{章节名} 开启一个子章节,会自动编号。
\subsubsection{章节名} 开启一个孙章节,会自动编号。
\paragraph{段落名} 开启一个段落。
\subparagraph{段落名} 开启一个子段落。

我们把\begin{document}前面的区域叫做导言区域。

1
2
3
4
5
6
7
8
9
10
11
12
% 编号格式
\CTEXsetup[name={第,章}]{section}
% 把章节放在左侧,而不是居中
\CTEXsetup[format={\zihao{-3}\raggedright\bfseries}]{section}
\begin{document}
\section{这是第一章节}
Hello World
\subsection{这是次级章节}
Hello World
\section{这是第二章节}
Hello World
\end{document}

img

这样我们就知道了Latex文件的基本构成部分。

latex中的中文处理方法

课程代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
% 导言区
% \documentclass{article}%book,report,letter

% \usepackage{ctex}%ctex宏包用于处理中文

\documentclass{ctexart}%ctexbook,ctexrep

\newcommand\degree{^\circ}%\newcommand用于定义新命令

\title{\heiti 杂谈勾股定理}
\author{\kaishu 张三}
\date{\today}
% 正文区(文稿区)
\begin{document}
\maketitle%这一行用于出现导言区定义的title,author,date等信息
勾股定理可以用现代语言表述如下:

直角三角形的斜边的平方等于两直角边的平方和。

可以用符号语言表述为:设直角三角形$ABC$,其中$\angle C=90\degree$ ,则有:
\begin{equation}
AB^2 = BC^2 + AC^2.
\end{equation}
\end{document}

课程内容细节:

  1. 要想编写中文,首先要保证latex原文件为UTF-8编码。并引入宏包(\usepackage{ctex})
  2. \newcommand用于定义新命令,如示例中度数的定义。
  3. 在写中文时可以在前面定义所写汉字的字体等信息。
  4. 示例中的equation环境用于产生带编号的公式。
  5. 在cmd输入texdoc +宏包名可以查阅相关的宏包说明手册。(lshort-zh是latex的入门说明文件,也可以通过这种方式访问)
  6. 可以使用\documentclass{ctexart}代替之前的宏包引入。

课程代码效果图:

image-20230201222213263

详细讲解

中文字体

如果要在文本中输入中文,首先需要使用文档类ctexart,或者ctexrep之类的,也就是把对应的英文文档类缩写,前面加ctex.

然后不需要再新引入宏包,直接使用命令setCJKmainfont{fontName}, setCJKsansfont{fontName}, setCJKmonofont{fontName}来分别设置正文的主中文字体族,无衬线中文字体族和打字机中文字体族。同时,我们也可以用\setCJKfamilyfont{newFontName}{fontName}来定义新中文字体,然后再正文中用\CJKfamily{newFontName}来使用新中文字体。

同样地,如果想单独设定某个字体族的字体形状,也可以模仿\setCJKmainfont[BoldFont=boldFontName, ItalicFont=italicFontName]{mainFontName}来设置。

顺便说一句,CJK的意思是Chinese, Japanese和Korean,代表中日韩三国文字。

Latex的字体设置

课程代码

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
% 导言区
\documentclass[10pt]{ctexart}%book,report,letter

\newcommand{\myfont}{\textit{\textbf{\textsf{Fancy Test}}}}


\title{My first Document}
\author{Du jinyang}
\date{\today}
% 正文区(文稿区)
\begin{document}
\maketitle
% 字体族设置(罗马字体、无衬线字体、打字机字体)
\textrm{Roman Family} \textsf{Sans Serif Family} \texttt{Typewriter Family}

{\rmfamily Roman Family} {\sffamily Sans Serif Family} {\ttfamily Typewriter Family}

{\sffamily who you are? you find self on everyone around .
take you as the same as others!}

{\ttfamily Are you wiser than others? definitely no.in some ways ,may it is true .What can you achieve? a luxurious house?
a brilliant car? an admirable career?who knows?}

% 字体系列设置(粗细、宽度)
\textmd{Medium Series} \textbf{Boldface Series}

{\mdseries Medium Series} {\bfseries Boldface Series}

% 字体形状(直立、斜体、伪斜体、小型大写)
\textup{Upright Shape} \textit{Italic Shape}
\textsl{Slanted Shape} \textsc{Small Caps Shape}

{\upshape Upright Shape} {\itshape Italic Shape}
{\slshape Slanted Shape} {\scshape Small Caps Shape}

% 中文字体
{\songti 宋体} \quad {\heiti 黑体} \quad {\fangsong 仿宋}
\quad {\kaishu 楷书}

中文字体的\textbf{粗体}与\textit{斜体}

%字体大小
{\tiny Hello}\\
{\scriptsize Hello}\\
{\footnotesize Hello}\\
{\small Hello}\\
{\normalsize Hello}\\
{\large Hello}\\
{\Large Hello}\\
{\LARGE Hello}\\
{\huge Hello}\\
{\Huge Hello}\\

% 中文字号设置命令
\zihao{-0} 你好!

\myfont

\end{document}

课程内容细节:

  1. 可以用大括号进行分组,以限制字体声明的范围。
  2. \quad为空格,\\为换行
  3. 可以在documentclass设置文档参数设置字体大小,正常只有10,11,12pt
  4. 建议使用定义newcommand来设置字体相关参数

课程代码效果图:

image-20230201222302747

详细解读

设置字体族

想要设置字体族,首先要在使用宏包fontspec, 即

1
\usepackage{fontspec}

然后分别可以用\setmainfont{fontName}, \setsansfont{fontName}, \setmonofont{fontName}来设置主字体族,无衬线字体族和打字机字体族。其中fontName就是上文提到的字体名称,需要去操作系统特定的地方去找,类似于"simsun", "Times new roman"等。

然后,在正文中,我们有如下几个命令:\textrm{}\rmfamily, \textsf{}\sffamily, \texttt{}\ttfamily, 可以让我们分别主动调用主字体族,无衬线字体族和打字机字体族。 注意到每一组命令都有两个,一个是带参数的,一个是不带参数的。带参数的命令是把参数变成对应的字体族,不带参数的命令是把该命令所在的作用域内的文字变成对应的字体族。

类似地,我们可以使用\textup{}\upshape, \textit{}\itshape来分别主动调用当前字体族的直立体与意大利斜体,用\textmd{}\mdseries, \textbf{}\bfseries来分别调用当前字体形状的正常体与粗体。

自定义字体族

而如果自己还想单独设置字体族对应的字体形状,可以仿照下面的例子:\setmainfont[BoldFont=boldFontName, ItalicFont=italicFontName]{mainFontName}来设置。

除此之外,我们可以在导言区用命令\newfontfamily\newfontname{fontName}来定义一个新字体,其中\newfontname就是你想用来使用新定义的字体的指令,fontName就是新字体的名字。接下来,就可以在正文中使用{\newfontname This is written in new font}来调用新字体。

字号

上述的是字体的设置,接下来讲一下字号的设置。

首先我们需要了解字号究竟代表什么意思呢?pt和em究竟是什么呢?

在现代排版学中,pt是字号的单位,中文译为磅。在Word中,1pt为1/72英寸。而在LaTeX中,1pt为1/72.27英寸。而磅与中文字号的转化关系为:初号42pt, 小初36pt, 一号26pt, 小一24pt, 二号22pt, 小二18pt, 三号16pt, 小三15pt, 四号14pt, 小四12pt, 五号10.5pt, 小五9pt

当前的字体大小被记作单位em, 也就是说,如果当前字号为12pt, 那当前1em=12pt.

LaTeX中的字号与Word中的字号在某些细微之处是不一样滴,请不要相同字号下用Word和LaTeX作比较

LaTeX提供了十个十分方便的命令:

1
\tiny, \scriptsize, \footnotesize, \small, \normalsize, \large, \Large, \LARGE, \huge, \Huge

这十个命令可以方便地改变其所在的作用域内的字体大小和行距。

此外,我们也可以用\fontsize{}{}\selectfont来设置字号(最后的\selectfont的含义不需要理解,反正记住只要改字号,在之后一定要加上\selectfont才能生效)。前者写字号的绝对大小,如10pt, 20pt. 后者写的是行距,一般是字号乘1.2。

除此之外,行距我们还可以使用空行完成,例如我们平时经常使用的1.5倍行距就可以表示为字体加上0.5倍空行,即

1
\setlength{\parskip}{0.5\baselineskip}

对于中文,我们可以用\zihao{-4}来表示小四号字体。

空格

对于英文文本来说,单词间的空格是有效的,但仅限于一个空格。在需要多个空格的时候,我们可以用指令\, 也就是反斜杠加空格,来实现空格。

比如说,我想输出的Hello和world!之间有五个空格,那么我在正文内可以写Hello\ \ \ \ \ world!

对于指令来说,其后的空格将会被省略。比如说,Hello \LaTeX world!,输出的时候LaTeX和world!之间将没有空格。为了解决这种情况,我们依然可以使用指令\, 即Hello \LaTeX\ world!

对于中文文本来说,中文汉字之间的空格默认被省略,你好你 好输出的效果是一样的。为了解决这一问题,我们可以类似地用你\ \ \ \ \ 好来解决。

对于中英文混排文本来说,默认会在中文和英文之间加一个空格,而这也是论文写作的规范。如果你不喜欢这样,可以在导言区内加入\CJKsetecglue{}这个命令(大括号内什么都不用写)。

如果要对空格更精细地控制,还有一些更加详细的操作。上述的\只是空格的一种,它产生的空格的宽度约为三分之一个字母"M"的宽度。 LaTeX中还有许多其他产生空格的方法。如果记一个"M"的宽度为m, \,产生1/6个m的宽度,\;产生2/7个m的宽度,\quad产生一个m的宽度,\qquad产生两个m的宽度。

附录

Latex语法及公式基础介绍

思路

将文字内容与排版格式分离

LaTeX语法

LaTeX参数

可选参数:中括号;必选参数:大括号

语句分类
  • 注释:以%开头

  • 命令:

    • 普通命令

      1
      2
      3
      % format: \command[option]{content}
      \documentclass{article}
      \usepackage[dvipdfm]{graphicx}
    • 环境

      1
      2
      3
      4
      5
      \begin{figure}[htbp]
      \centering
      \includegraphics[width=120pt]{avatar.jpg}
      \caption{This is Rick}
      \end{figure}
  • 数据

源码结构

分两个部分:序言(确定文档的类型、引用的包)、正文

文档类和宏包
1
2
\usepackage{syntonly}
\syntaxonly %只编译不生成pdf,提高排查错误的效率

功能

浮动体:figure和table,习惯上figure里放图片,table里放表格

层次结构
自动标号
1
2
3
4
5
6
7
\part{Part Name}
% \chapter{Chapter Name},只要编译就会报错,是因为article里是没有章的
\section{Section Name}
\subsection{Subsection Name}
\subsubsection{Subsubsection Name}
\paragraph{Paragraph Name}
\subparagraph{Subparagraph Name}
目录
1
2
\setcounter{tocdepth}{2} % 设定目录深度
\tableofcontents % 列出目录

插入图片

1
2
3
4
5
6
7
8
9
\usepackage{graphicx} %引入包
\includegraphics[option]{path} %插入图片

\begin{figure}[ht]
\centering
\includegraphics[scale=0.2]{avatar.jpg}
\caption{This is Rick}
\label{fig:avatar}
\end{figure}
参数 含义
width= 将图片缩放到宽度为
height= 将图片缩放到高度为
scale= 相比于原尺寸缩放
angle= 逆时针旋转

多图并排排列

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
\usepackage{subcaption} %引入包
\begin{figure}
\centering
\begin{minipage}[c]{0.3\textwidth} %minipage是一个盒子
\centering
\includegraphics[width=0.95\textwidth]{f1}
\subcaption{流程图}
\label{fig:sample-figure-a}
\end{minipage}
\begin{minipage}[c]{0.3\textwidth}
\centering
\includegraphics[width=0.95\textwidth]{f1}
\subcaption{流程图}
\label{fig:sample-figure-b}
\end{minipage}
\begin{minipage}[c]{0.3\textwidth}
\centering
\includegraphics[width=0.95\textwidth]{f1}
\subcaption{流程图}
\label{fig:sample-figure-c}
\end{minipage}
\caption{多图并排示例}
\label{fig:sample-figure}
\end{figure}

数学公式

介绍前先来安利一下这个在线的数学公式测试:

Online LaTeX Equation Editor - create, integrate and download (codecogs.com)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
\usepackage{amsmath}

This is an inline equation $F = ma$. %行内公式

%行间公式
%带编号
\begin{equation}
a^2 + b^2 = c^2 \label{pyth}
\end{equation}

%不带编号
\[
E = mc^2
\]

标题页

插入列表

计数符号可以自定义

有序列表

1
2
3
\begin{enumerate}
\item ...
\end{enumerate}

无序列表

1
2
3
\begin{itemize}
\item ..
\end{itemize}

描述

1
2
3
\begin{description}
\item[<item title>]
\end{description}

对齐

  • 环境对齐:center / flushleft / flushright
  • 命令对齐: \centering \raggedright \raggerleft

插入表格

1
2
3
4
5
6
7
8
9
10
11
12
\begin{table}[!htbp]
\caption{标准三线表格}\label{tab:001} \centering
\begin{tabular}{ccccc}
\toprule[1.5pt]
$D$(in) & $P_u$(lbs) & $u_u$(in) & $\beta$ & $G_f$(psi.in)\\
\midrule[1pt]
5 & 269.8 & 0.000674 & 1.79 & 0.04089\\
10 & 421.0 & 0.001035 & 3.59 & 0.04089\\
20 & 640.2 & 0.001565 & 7.18 & 0.04089\\
\bottomrule[1.5pt]
\end{tabular}
\end{table}

插入定理

除了 definition 环境,还可以使用 theorem 、lemma、corollary、assumption、conjecture、axiom、principle、problem、example、proof、solution 这些环境,根据论文的实际需求合理使用。

交叉引用

引用公式

\eqref

引用图片

$$ 参考markdown

引用文献

命令

连续空格被视为一个,开头空格忽略,空行会分段,等效于\par

代码 功能
\par 换行
\verb\ 输出单词
`` ‘’ 双引号
- 连字号,复合词
短破折
—- 长破折
\\ 换行
  • Title: Latex_note_1
  • Author: Charles
  • Created at : 2023-02-01 10:06:10
  • Updated at : 2023-08-20 11:04:36
  • Link: https://charles2530.github.io/2023/02/01/latex-note-1/
  • License: This work is licensed under CC BY-NC-SA 4.0.
Comments