最近接触到了OverLeaf这个在线LaTeX编辑器,就顺手把一些基本的LaTeX语法简单总结一下,以方便以后查阅。其实LaTeX并不陌生,博客里所有的公式都是使用LaTeX写出来的。
1.什么是LaTeX
LaTeX(英文意思为乳胶)是一种基于ΤΕΧ的排版系统,由美国计算机学家莱斯利·兰伯特(Leslie Lamport)在20世纪80年代初期开发。其对于生成复杂表格和数学公式这一点有显著优势。因此它非常适用于生成高印刷质量的科技和数学类文档,在国外科技论文写作中应用比较广泛。在国内一般会用Word。
而至于LaTeX和Word谁更好,各有各的粉丝,网上也有很多争论,这就不在本博客的讨论范围了。个人觉得对用户而言这两者并非对立,一个把可视化排版做到极致(所见即所得),一个把非可视化排版做到极致(内容版式隔离),针对的用户和领域不同而已。你无法理解为什么Word(LaTeX)那么好用还会有人用LaTeX(Word),也许只是因为你还没有涉及到Word(LaTeX)擅长的领域或者自己用的不熟,需要了、用的方便自然就会用了。这种问题就像是Windows已经这么好用了,为什么还要用Linux(Ubuntu)?所以本着“技多不压身”的原则,多了解一下LaTeX也不是一件坏事。既会Word又会LaTeX岂不美哉?
当然最后还是提醒一句:不管是Word还是LaTeX,终究只是个排版工具而已,没有什么高端、低端之分,决定文章最终质量的还是你的内容。
另外想说的是刚开始学LaTeX或多或少都会觉得别扭,实际很多需求自己搞不定,这是正常现象,静下心来慢慢学,不要放弃。不要想着说这个功能我用Word妙妙钟搞定,还用LaTeX在这弄半天,何必呢。而且很有可能等你学了一段时间以后还是用的还是没Word好,遇到实际问题自己还是解决不了,就觉得学这个没用。打个比方,你用Word写文档可以得80分,但你学了一段时间LaTeX写文档只能得60分。但人家不会管你用的什么,只会看你最终得分,于是你就很泄气,觉得学了半天还是白搭,然后你就觉得没用了。不要有这样的想法,学习一个新东西总会有个过程,不可能一蹴而就。遇到问题多百度。想想你Word用了多少年,你最初学Word的时候不也是什么都不会吗?会了LaTeX你的平均分就是70,而只会Word是40分。我一开始学Markdown的时候也是,觉得这样多此一举,等写了这多篇博客熟练了以后就会觉得Markdown真是个好东西。
2.什么是OverLeaf
前面介绍了LaTeX,那么就需要可以编辑LaTeX的编辑器。本地离线的有如TeXLive等,在线的有OverLeaf等。当然OverLeaf不仅仅是在线编辑器,还可以多人协作、同步到GitHub等等。这里就不多介绍了,感兴趣去官网看即可。这里推荐使用在线编辑器,好处是不需要配置LaTeX环境、使用方便等等。当然本机也应该装一个环境,以防万一。OverLeaf的编辑页面如下所示。 如果经常用VS Code写Markdown的话对这种界面应该不陌生(比如我),一边写内容一边开个预览窗口看效果。
3.LaTeX基本语法
对于LaTeX的基本语法这里主要以列举为主,就和之前这篇介绍Markdown的博客一样,因为确实也没有什么需要多说的。
(1)基本文档结构
基本文档结构主要分为序言(Preamble)和正文(Document),在功能和意义上都类似于Html中的Head
和Body
标签。
序言
序言(Preamble)部分主要用来申明你写的文档类型、文档语言、文档使用的包(类似于Python中的import
)等。一个常见的序言如下:
\documentclass[12pt, letterpaper]{article}
\usepackage[utf8]{inputenc}
所有LaTeX文档第一行都需要\documentclass
来指定文档类型,它会影响整个文档的表现。中括号内是一些可选参数,如字体大小(默认10pt)、纸张样式(默认A4纸)等,以英文逗号隔开。花括号内是必写参数,用于说明文档类型,最一般的是article
,其它常用的有book
、report
等。
第二行是用\usepackage
命令引入文档使用的包,这里引入了inputenc
包,指定编码类型为utf-8。
正文
对于正文内容使用\begin{ducument}
和\end{document}
标签进行控制,在标签内就可以进行写作了,写在标签外的内容是不会展示出来的。和Markdown一样,换行需要按两次Enter
。\begin{abstract}
和\end{abstract}
可以在正文中添加摘要。
(2)添加文档属性
在序言部分(Preamble)可以向文档中添加各种属性:
-
\title{your title}
:添加文档标题 -
\author{your name}
:添加作者 -
\thanks{funded by ...}
:添加致谢信息,必须在author
的花括号里面才有用 -
\date{your date}
:添加日期,\today
表示设置成编译文档那一天的日期
下面代码添加了属性信息,并利用\maketitle
将其展示出来。
\documentclass{article}
\title{This is a title}
\author{
Zhao Xuhui\thanks{thanks 1},
Xuhui Zhao\thanks{thanks 2}}
\date{\today}
\begin{document}
\maketitle
This is test text.
\end{document}
效果如下:
(3)注释
在LaTeX中添加注释使用百分号,和Matlab的语法一样。LaTeX文档默认不支持中文,但注释中可以有中文,编译不会报错。正文要想使用中文见第四部分内容。
(4)字体修饰
-
加粗:
\textbf{...}
-
斜体:
\textit{...}
-
下划线:
\underline{...}
-
强调:
\emph{...}
,与上下文字体相反,上下文常规它就是斜体,上下文斜体它就是常规 -
居中:
\centerline{...}
,居中显示文本
(5)添加图片
LaTeX添加图片需要在序言部分导入graphicx
包。简单插入图片只需调用\includegraphics
,而带有图号、图名的图片则需要\begin{figure}
和\end{figure}
来实现。LaTeX自动管理图号,我们只需要输入图名即可。在OpenLeaf中需要点击项目页面中的左上角的图标来上传图片。
示例如下:
\documentclass{article}
\usepackage{graphicx}
\begin{document}
This is a test of image insertion.
\begin{figure}[h] % 必须要有[h]否则插入的图片都在文字前面
\centering % 图像居中
\includegraphics[width=4cm]{test/cover31.jpg} %[]里可以指定影像大小
\caption{Electronic} % 图名
\label{fig_electronic} % 用于内部引用的图名
\end{figure}
It is a great figure.
\end{document}
简单说一下,图片名称可以不带后缀名,LaTeX也可以找得到。最终效果如下:
(6)列表
无序列表使用itemize
,有序列表使用enumerate
。简单示例如下:
\documentclass{article}
\begin{document}
This is a test of list.
\begin{itemize}
\item The individual entries are indicated with a black dot, a so-called bullet.
\item The text in the entries may be of any length.
\end{itemize}
\begin{enumerate}
\item This is the first entry in our list
\item The list numbers increase with each entry we add
\end{enumerate}
\end{document}
效果如下所示:
(7)数学公式
这一部分是相对熟悉的了,因为博客里所有的公式都是用LaTeX的语法打出来的。LaTeX公式分为行内(inline)与展示(display)两种类型。前者是文本中的一部分,后者是单独占一行。行内公式有三种方式:反斜线小括号、$
和$
、\begin{math}
和\end{math}
,博客里使用的是第二种方式。而展示型公式有四种方式:反斜线中括号、\begin{equation}
和\end{equation}
、\begin{displaymath}
和\end{displaymath}
、双美元标志。在博客里使用的是最后一种,但OverLeaf文档里并不推荐使用这种,说是容易出错。博客里的公式都是在这个网页上写好,然后自动转成LaTeX格式的字符串贴过来的。
简单示例如下:
\documentclass{article}
\begin{document}
The mass-energy equivalence is described by the famous equation
\[ E=mc^2 \]
discovered in 1905 by Albert Einstein.
In natural units ($c = 1$), the formula expresses the identity
\begin{equation}
E=m
\end{equation}
\end{document}
(8)章节
用\section{}
来表示章节,从当前section
开始直到下一个section
出现,这期间的内容都属于当前section
,花括号内是章节标题。章节号是LaTeX自动生成的。不同的标题级数对应如下:
\documentclass{article}
\begin{document}
\section{Introduction}
This is the first section.
Lorem ipsum dolor sit amet, consectetuer adipiscing
elit. Etiam lobortisfacilisis sem. Nullam nec mi et
neque pharetra sollicitudin. Praesent imperdietmi nec ante.
Donec ullamcorper, felis non sodales...
\section{Second Section}
Lorem ipsum dolor sit amet, consectetuer adipiscing elit.
Etiam lobortis facilisissem. Nullam nec mi et neque pharetra
sollicitudin. Praesent imperdiet mi necante...
\subsection{First Subsection}
Praesent imperdietmi nec ante. Donec ullamcorper, felis non sodales...
\section*{Unnumbered Section}
Lorem ipsum dolor sit amet, consectetuer adipiscing elit.
Etiam lobortis facilisissem
\end{document}
效果如下:
(9)表格
一个常规的表格使用示例如下:
\documentclass{article}
\begin{document}
Table \ref{table:data} is an example of referenced \LaTeX{} elements.
\begin{table}[h]
\centering
\begin{tabular}{||c c c c||}
\hline
Col1 & Col2 & Col2 & Col3 \\ [0.5ex]
\hline\hline
1 & 6 & 87837 & 787 \\
2 & 7 & 78 & 5415 \\
3 & 545 & 778 & 7507 \\
4 & 545 & 18744 & 7560 \\
5 & 88 & 788 & 6344 \\ [1ex]
\hline
\end{tabular}
\caption{Table to test captions and labels}
\label{table:data}
\end{table}
\end{document}
效果如下: 如果真的需要输入很复杂的表格,建议先可视化设计好再转成LaTeX格式。这个网站即可实现在线转换,十分方便。
(10)目录
添加目录的命令是\tableofcontents
,示例如下:
\documentclass{article}
\title{Test title}
\author{Zhao Xuhui}
\date{\today}
\begin{document}
\maketitle
\tableofcontents
\section{Introduction}
This is the first section.
Lorem ipsum dolor sit amet, consectetuer adipiscing
elit. Etiam lobortisfacilisis sem. Nullam nec mi et
neque pharetra sollicitudin. Praesent imperdietmi nec ante.
Donec ullamcorper, felis non sodales...
\addcontentsline{toc}{section}{Unnumbered Section}
\section*{Unnumbered Section}
Lorem ipsum dolor sit amet, consectetuer adipiscing elit.
Etiam lobortis facilisissem. Nullam nec mi et neque pharetra
sollicitudin. Praesent imperdiet mi necante...
\section{Second Section}
Lorem ipsum dolor sit amet, consectetuer adipiscing elit.
Etiam lobortis facilisissem. Nullam nec mi et neque pharetra
sollicitudin. Praesent imperdiet mi necante...
\end{document}
效果如下:
4.LaTeX注意事项
(1)正文中文
上面说了,在文档正文中默认是不支持中文的(注释中可以)。要想在正文中支持中文,首先需要设置文档类型为ctexart
,并且修改文档的编译器为XeLaTeX
或LuaLaTeX
。下面是一段示例:
\documentclass{ctexart}
\begin{document}
\tableofcontents
\begin{abstract}
这是简介及摘要。
\end{abstract}
\section{ 前言 }
\section{关于数学部分}
数学、中英文皆可以混排。You can intersperse math, Chinese and English (Latin script) without adding extra environments.
這是繁體中文。
\end{document}
效果如下:
更多关于LaTeX中文的内容可参考这个网页。
(2)图片表格公式相关格式
论文的图号、表号一般要求是按章节分,如图2.1这种。LaTeX默认则是递增,关于这个问题,简单来说就是引入包\usepackage{amsmath}
,然后设置\numberwithin{figure}{section}
(图片)、\numberwithin{table}{section}
(表格)、\numberwithin{equation}{section}
(公式)即可。效果可以参考这个网页。
关于并排插入图片以及去掉图片编号可以看这个网页。
修改编号前缀可以参考这个网页。
画三线表可以参考这个网页。
总结了字体、引用、脚注、交叉引用等常用操作的网页,点击查看1、点击查看2。
(3)分栏
简单来说可以使用multicol
这个包,然后在正文中\begin{multicols}(2)
和\end{multicols}
编译器即会根据内容自动填充两栏了。效果可以看这个网页。
以上便是LaTeX的全部笔记了。遇到问题多看看文档,找找资料,一般都可以解决的。
[2019-09-18更新]
在尝试使用了一段时间LaTeX之后简单说说感想。
首先就是在实际使用中,完全没必要从零开始写起,没必要而且难度也很大。问了导师的建议是需要投哪个期刊就在网上直接找那个期刊的LaTeX模板,然后直接改内容就好了。 例如Overleaf中的MDPI的模板注释非常详细,基本照着注释修改就不会有错了,并不需要你从头写起。
其次是LaTeX并不适合编辑结构非常复杂的表格,尤其是各种对齐、缩进、行之间宽度不等的表格等,这样最终写出来的Latex代码非常复杂,也很不直观。然而这些在Word中分分钟搞定。
最后就是我觉得它并不适合中文排版或者说不适合中文期刊投稿,很多在Word中如同空气般理所应当的事情在LaTeX下都变得麻烦起来,比如字体加粗,可能会因为各种原因无法加粗、中文无法输入等等。 而且国内期刊很多要求提交的就是可修改的Word文件,而不是LaTeX源文件或是生成的PDF。某种程度上来说,只需要你按照投稿的基本格式(字体、段落等)设置一下,就好了,并不需要你分栏,插入页码什么的,真正出版排版并不是你操心的事情。
所以觉得对于LaTeX掌握到会改模板,一些小问题可以解决的程度就OK了,完全没有必要花费大量时间学习。找到一个好的、合适的模板,比你自己在那里写半天要来的快的多。
[更新结束]
5.参考资料
-
[1]https://www.overleaf.com/learn/latex/Learn_LaTeX_in_30_minutes
-
[2]https://www.overleaf.com/learn/latex/Chinese
本文作者原创,未经许可不得转载,谢谢配合