一些概念
TeX:是Donald E. Knuth(高德纳)发明的排版系统,本质上是一门宏语言,官网:https://ctan.org/,TeX用户组:https://tug.org/
LaTeX:LaTeX是TeX的扩展,又称为宏集,简单说就是TeX的命令太原始了,为了方便写作,Leslie Lamport给TeX语言加入了很多新的功能,这些他写的功能跟TeX加在一起被称为LaTeX。LaTeX当然也是一门语言,是基于TeX的一门语言,LaTeX工作组:https://www.latex-project.org/
TeX发行版:现今的两个主流发行版为TeX Live(团队负责,安装包大,https://tug.org/texlive/)和MiKTeX(个人项目,安装包小,https://miktex.org/),两者都集成了一个简单的LaTeX源代码编辑器TeXworks。用户在安装完毕后,可直接使用TeXworks编写和编译LaTeX源代码。
TeXstudio编辑器:是跨平台的免费软件,专门用来编辑 .tex 文件的,下载地址:https://texstudio.sourceforge.net/
在线手册:用texdoc命令调出,例如texdoc symbols
用来查看数学符号表,或https://texdoc.org/index.html
编译命令
文档格式 | plain TEX格式 | LATEX格式 | |
---|---|---|---|
TEX引擎 | DVI | tex | N/A |
pdfTEX引擎 | DVI | etex | latex |
pdftex | pdflatex | ||
XETEX引擎 | xetex | xelatex | |
LuaTEX引擎 | luatex | lualatex |
DVI:表示 “设备无关(Device Independent)”,用 dvipdfmx 命令可以将其转为 pdf。
xelatex:支持 UTF-8 编码和对 TrueType/OpenType 字体的调用。当前较为方便的中文排版解决方案基于 xelatex。
lualatex:底层调用的引擎是 LuaTEX,这个引擎在 pdfTEX 引擎基础上发展而来,除了支持 UTF-8 编码和对 TrueType/OpenType 字体的调用外,还支持通过 Lua 语言扩展 TEX 的功能。lualatex 编译命令下的中文排版支持需要借助 luatexja 宏包。
LaTeX语法规则
LaTeX语法规则非常简单,由命令和环境构成。LaTeX代码结构一般分为前导(preamble)和主体(body)两部分,前导部分主要用于申明文档类型、排版样式、所使用的宏包等;主体部分主要用于确定标题、章节、目录等文章结构及创作文档内容。
命令
LaTeX命令通常由三部分组成:\命令名[可选参数]{必选参数}
,对大小写敏感,以反斜线 \ 开头,有以下两种形式之一:
- 反斜线和后面的一串字母,如 \LaTeX。它们以任意非字母符号(空格、数字、标点等)为界限
- 反斜线和后面的单个非字母符号,如 $
有些命令的参数可以带一个星号 *,带星号和不带星号的命令效果有一定的差异。初次接触这些概念时,可以粗略地把星号看作一种特殊的可选参数。
字母形式的命令会忽略其后的所有连续空格。如果要人为引入空格,需要在命令后面加一对花括号阻止其忽略空格。
\documentclass{article}
\begin{document}
\TeX users
or \TeX{} users?
\end{document}
环境
用法为一对命令 \begin 和 \end:
\begin{⟨环境名⟩}[⟨可选参数⟩]{⟨必选参数⟩}
…
\end{⟨环境名⟩}
分组
LaTeX使用一对花括号 {} 作为分组,在分组中使用的命令被限制在分组内,不会影响到分组外的内容。
源代码结构
LaTeX源代码以一个 \documentclass 命令作为开头,它指定了文档使用的文档类。% 表示注释,在这个字符之后直到行末,所有的字符都被忽略。
以document环境为界,document环境前是导言部分,能设置全局参数;document环境内部是正文部分;环境之后的部分被忽略。
\documentclass[⟨可选参数⟩]{⟨文档类名⟩}
% 导言区
\begin{document}
% 正文内容
\end{document}
% 此后内容会被忽略
文档类
\documentclass 指定的文档类有很多种,其中LaTeX提供的三个标准文档类分别为:文章article、报告report、书籍book,支持中文排版的文档类:ctexart、ctexrep、ctexbook。
article类型文档字体大小默认为10pt,纸张大小默认为letterpaper,文字分栏默认为onecolumn(不分栏),打印时默认单面打印,可以根据需要进行设置:\documentclass[12pt, b5paper, twocolumn, twoside]{article}
\part{}创建篇、\chapter{}创建章(article类型文档不能使用该命令)、\section{}创建一级节、\subsection{}创建二级节、\subsubsection{}创建三级节。
\documentclass{ctexart}
\setcounter{secnumdepth}{0} % 表示自动编号章节层次仅包括\part和\chapter,1为\section 2为\subsection 3为\subsubsection默认值
\begin{document}
\title{文档标题}
\author{作者}
\date{2024-01-01}
\maketitle % 显示命令,用来显示导言区添加的相关信息
\begin{abstract}
这是摘要,这是摘要
\end{abstract}
\textbf{Keywords: keyword1, keyword2, keyword3} % 设置关键词
\newpage
% \setcounter{tocdepth}{0} % 设置目录层次仅包括\part 1为\section 2为\subsection 3为\subsubsection默认值
\tableofcontents % 自动创建一个目录,带*章节命令不会出现在目录中
\thispagestyle{empty} % 让目录页面不带有全文格式
\newpage
\setcounter{page}{1} % 设置目录页之后页码为1
\part{part名称}
\section{一级标题}
\subsection{二级标题}
\paragraph{段落标题}
带标题的段落,带标题的段落
\subparagraph{亚段落标题}
带标题的亚段落,带标题的亚段落
\section{一级标题2}
\subsection{二级标题2}
内容2,内容2
\section*{一级标题3} % 命令后加星号会取消自动编号
内容3,内容3
\end{document}
article类型文档纸张方向默认为portrait(纵向),可以调用lscape宏包中的\begin{landscape} \end{landscape}环境将默认纵向调整为landscape(横向)。
article类型文档页边距可以通过调用geometry宏包进行调整:\usepackage[margin = 25mm]{geometry}。
article类型文档章节标题字体格式可以通过调用sectsty宏包进行调整。
宏包
在使用LaTeX时,时常需要依赖一些扩展来增强或补充LaTeX的功能,,这些扩展称为宏包。调用宏包的方法非常类似调用文档类的方法:\usepackage[可选参数]{宏包名}
。
\usepackage 可以一次性调用多个宏包,在 宏包名 中用逗号隔开。这种用法一般不要指定选项。
CJK 宏包对中文字体的支持比较麻烦,已经不再推荐直接使用。xeCJK 及 luatexja 宏包封装了对汉字排版细节的处理功能。
ctex 宏包和文档类进一步封装了 CJK、xeCJK、luatexja 等宏包,使得用户在排版中文时不用再考虑排版引擎等细节。ctex 宏包本身用于配合各种文档类排版中文,而 ctex 文档类对 LaTeX 的标准文档类进行了封装,包括 ctexart、ctexrep、ctexbook 等。源代码须保存为 UTF-8 编码,并使用 xelatex 或 lualatex 命令编译。
文件的组织方式
LaTeX提供了命令 \include 用来在源代码里插入文件:\include{⟨filename⟩}
。
⟨filename⟩ 为文件名(不带 .tex 扩展名),如果和要编译的主文件不在一个目录中,则要加上相对或绝对路径。
值得注意的是 \include 在读入 ⟨filename⟩ 之前会另起一页。有的时候并不需要这样,可以用 \input 命令,它纯粹是把文件里的内容插入:\input{⟨filename⟩}
。
LaTeX还提供了一个 \includeonly 命令来组织文件,用于导言区,指定只载入某些文件。导言区使用了 \includeonly 后,正文中不在其列表范围的 \include 命令不会起效:\includeonly{⟨filename1⟩,⟨filename2⟩,…}
。
最后介绍一个实用的工具宏包 syntonly。加载这个宏包后,在导言区使用 \syntaxonly 命令,可令 LaTeX 编译后不生成 DVI 或者 PDF 文档,只排查错误,编译速度会快不少:
\usepackage{syntonly}
\syntaxonly
如果想生成文档,用 % 注释掉 \syntaxonly 命令即可。
参考:https://mirrors.zju.edu.cn/CTAN/info/lshort/chinese/lshort-zh-cn.pdf