LaTeX学习笔记

编程 · 2023-12-22 · 279 人浏览

一些概念

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引擎DVItexN/A
pdfTEX引擎DVIetexlatex
PDFpdftexpdflatex
XETEX引擎PDFxetexxelatex
LuaTEX引擎PDFluatexlualatex

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

LaTeX
Theme Jasmine by Kent Liao