LaTeX 使用¶
约 5638 个字 794 行代码 5 张图片 预计阅读时间 29 分钟
介绍¶
-
TeX 是高德纳 (Donald E. Knuth) 为排版文字和数学公式而开发的软件
-
LaTeX 是一种使用 TeX 程序作为排版引擎的格式(format),可以粗略地将它理解成是对 TeX 的一层封装;与汉字 “拉泰赫” 或 “雷泰赫” 的发音相近
-
优缺点:
- 优点:专注于内容本身,排版(typesetting)效果好,数学公式排版强大,跨平台开源...
- 缺点:学习成本高,不容易排错,不容易定制样式,不所见即所得...
-
TeX 发行版:TeX Live / MacTeX(macOS 下定制的 TeX Live 版本)
-
TeX 编辑器:TeXstudio(Windows)、TeXShop(MacTeX 自带)、Texifier(macOS;有破解版)
参考资料¶
- 现代 LaTeX 入门讲座:GitHub - stone-zeng/latex-talk
- 《如何使用 LaTeX 排版论文》讲稿:GitHub - tuna/thulib-latex-talk
- lshort-zh-cn.pdf
- GitHub - wklchris/Note-by-LaTeX: 《简单粗暴 LaTeX》出版图书开源仓库
- LaTeX科技排版 - 华东师范大学
- 《科技论文排版技术》课程辅助教材 - Ultrafast Laser Lab - 天津大学
- GitHub - huangxg/lnotes: LaTeX Notes
- LaTeX 备忘清单 & latex cheatsheet & Quick Reference
- LaTeX 排版简要介绍:lec4.md
- 需设置网络代理:LaTeX 科技文档排版
- LaTeX专栏 - 八一考研数学竞赛
- 分类: LaTeX - 始终
- GitHub - zousiyu1995/Study-LaTeX: LaTeX学习笔记
- GitHub - xinychen/latex-cookbook: LaTeX论文写作教程 (中文版)
- LaTeX 入门与进阶
- GitHub - xinychen/latex-cookbook: LaTeX论文写作教程 (中文版)
- GitHub - Meiting-Wang/Awesome-LaTeX-cn: The LaTeX materials list I used
- 1.1 Awesome-LaTeX-cn - Meiting Wang
- GitHub - samcarter/tikzducks: A latex package to draw cute rubber ducks with TikZ
- LaTeX技巧 - Feng's Blog
- 常用 LaTeX 代码 - LaTeX 工作室
- GitHub - learnlatex/learnlatex.github.io: Learn LaTeX online
- 分类: LaTeX - 智朋的个人博客
- 自定义列表环境:LaTeX 自定义列表环境 - 智朋的个人博客
- Overleaf LaTeX 教程:Learn LaTeX in 30 minutes - Overleaf, Online LaTeX Editor
- Overleaf LaTeX 中文写作教程:Chinese - Overleaf, Online LaTeX Editor
- GitHub - guanyingc/latex_paper_writing_tips: Tips for Writing a Research Paper using LaTeX
- GitHub - xinychen/latex-cookbook: LaTeX论文写作教程 (中文版)
- latex相关笔记 - 我是谁
- 国外教授的讲义都是自己用 LaTeX 打出来的吗? - 知乎
- GitHub - AnMnv/eBook: LaTeX book with examples, open-source eBook
LaTeX 编辑器¶
-
Windows 端:TeXstudio
-
Mac 端:TeXShop
-
在线 LaTeX 编辑器
- 网页版 Overleaf
- 桌面端 Overleaf(有些像网页版的套壳):NativeOverleaf
- SJTU LaTeX 文档助手, 在线LaTeX编辑器
- LaTeX 在线编辑器:ScienHub, Online LaTex Editor
-
Overleaf 使用:
- 可使用 Vim 快捷键(组合键选项)
- OverLeaf 连接 GitHub 仓库需要升级 Pro(交大版无此功能),IEEE 白嫖 Pro 的方式已失效;可 Docker 部署的开源 OverLeaf 只有社区版
-
TeXstudio:工具 -- 清理辅助文件
-
LyX:
使用¶
工具¶
-
LaTeX 公式转 Word:LaTeX2Word - Convert LaTeX to Word
-
texdoc:查看 LaTeX 相关文档
texdoc texlive-en # 查看 TeX Live 指南
texdoc texlive-zh
texdoc package/class # 查看宏包、文档类帮助文档
texdoc symbols # 查看符号表
texdoc texcount # 查看 texcount 文档
-
VSCode 插件:
- LaTeX Workshop:语法高亮、实时编译 LaTeX,有字数统计功能
- LaTeX Utilities
- Overleaf Workshop
-
LaTeX OCR:
-
Markdown 宏包:以 Markdown 撰写文稿,以 LaTeX 排版
-
checkcites:检查在 bib 文件中但未引用的参考文献(TeX Live 已安装该工具)
-
GitHub - reproducible-reporting/bibsane:与 checkcites 功能类似,性能提升版本
-
格式化 LaTeX 文档:GitHub - WGUNDERWOOD/tex-fmt: An extremely fast LaTeX formatter written in Rust
cargo install tex-fmt # 安装
tex-fmt main.tex # 格式化并覆写
--check # 检查是否被正确格式化
--print # 输出到 STDOUT
--keep # 不自动换行
--stdin # 从 STDIN 读入,输出到 STDOUT
% tex-fmt: skip # 跳过该行
% tex-fmt: off # 不格式化该段内容
...
% tex-fmt: on
- latexindent.pl(格式化缩进;TeX Live 已安装该工具):GitHub - cmhughes/latexindent.pl: Perl script to add indentation (leading horizontal space) to LaTeX files
# macOS 安装
brew install perl
brew install cpanm
cpanm YAML::Tiny
cpanm File::HomeDir
# 使用
latexindent main.tex # 基本用法(默认缩进是制表符)
latexindent -l latexindent.yaml -w -s main.tex
# 参数
-l # 导入 yaml 配置文件
-w # 写入到文件中
-s # 备份
# latexindent.yaml 内容
defaultIndent: " " # 设置缩进为两个空格
- texcount:统计(Tex Live 自带)
- latexdiff:LaTeX 实现审阅效果(Tex Live 自带)
- 使用:
latexdiff old.tex new.tex > diff.tex
,编译diff.tex
- 若 tex 多个文件嵌套,会复杂许多
- 使用:
-
makeglossaries:Tex Live 自带,用于生成和管理文档中的术语表(glossaries)、缩略词表(acronyms)和符号表等
-
PyTeXMK(latexmk 替代工具):GitHub - YanMing-lxb/PyTeXMK: LaTeX 辅助编译命令行程序 LaTeX Auxiliary Compilation Command Line Tool
-
生成多种格式文献引用:BibGuru - A New FREE APA, Harvard, & MLA Citation Generator
-
GitHub - teatimeguest/setup-texlive-action: A GitHub Action to set up TeX Live
-
将 Microsoft Excel 中的表格转换为 LaTeX 代码:CTAN: Package Excel2LaTeX
-
适合用于个人简历中的技能部分(用 icon 表示掌握的技能):GitHub - AnMnv/latex-skill-icons: Skill icons in LaTeX
BibTeX 相关¶
GitHub - njzjz/tushuguan: A template to create a BibTeX Library
格式化 bib 文件¶
- GitHub - FlamingTempura/bibtex-tidy: Cleaner and Formatter for BibTeX files
- GitHub - Nickydusk/BibTeX-Formatter: Format your bibtex (.bib) file to help standardize citations for conference and journal submissions
npm install -g bibtex-tidy # 安装
bibtex-tidy refs.bib # 基本使用
# 常用参数
bibtex-tidy refs.bib \
--sort=-year,title \
--sort-fields \
--omit=abstract,keywords,file,urldate,langid,copyright,publisher,shorttitle \
--blank-lines \
--duplicates \
--escape \
--strip-comments \
--trailing-commas \
--no-wrap \
--remove-empty-fields \
--remove-dupe-fields \
--tidy-comments
# bib 中一些不需要的条目
sed -i '/abstract = {/d' xxx.bib
sed -i '/doi = {/d' xxx.bib
sed -i '/keywords = {/d' xxx.bib
doi 转 bib 格式¶
- GitHub - njzjz/wenxian: A tool to generate BibTeX files from given identifiers (DOI, PMID, or arXiv ID).(效果比较好)
- doi2bib(最直接方便;无摘要参数;中国人名的姓名前后顺序问题;article 后面的信息与官方期刊生成的 BibTeX 不一致)
- GitHub - thchr/DOI2BibTeX.jl(只能在 REPL 下输出格式才美观)
- GitHub - bibcure/doi2bib: get the bibtex string given a doi
# doi
julia> using DOI2BibTeX
julia> doi = "10.1103/PhysRevLett.45.494"
julia> doi2bib(doi)
# arxiv
julia> arxiv = "arxiv:1710.10324"
julia> arxiv2bib(arxiv)
# wenxian 安装与使用
pip install -U pipx
pipx run wenxian from 10.1063/5.0155600
ris 转 bib 格式¶
ris:Zotero 格式
- 在线网页版:Online RIS to BibTeX converter
- GitHub - harrisonlabollita/ris-2-bib: A command line tool to convert RIS files into bib files for LaTeX bibliographies
- GitHub - janberges/ris2bib: Convert bibliographies from RIS to BibTeX format
编译¶
- pdflatex 表示使用 pdfTeX 作为引擎、使用 LaTeX 格式来编译文档(还有 xelatex、lualatex 等)。这些命令行命令通常称为 “编译方式”;编译方式写成图标的形式
- 英文文档:用 pdflatex、xelatex、lualatex 编译;中文文档:用 xelatex、lualatex 编译编译
- ctexart 文档类需使用 xelatex 编译
- Overleaf 默认使用 pdflatex 编译
# 语法
xelatex [OPTION]... [TEXNAME[.tex]] [COMMANDS]
# .tex 扩展名可以省略
xelatex file.tex # xelatex file
xelatex -shell-escape file.tex
xelatex -shell-escape -synctex=1 %.tex
# 常用参数
-output-directory # 输出目录
-shell-escape # 开启 shell 转义,允许使用依赖于外部工具的宏包(如 minted 宏包实现代码高亮)
-synctex # 启用 SyncTEX 程序,编辑器可以使用 SyncTEX 的输出来实现源代码和 PDF 之间的相互跳转
# 命令
# 设置 graphicx 包为 draft 模式来加快编译速度
'\PassOptionsToPackage{draft}{graphicx}\input{main}'
- 含参考文献的文档编译:LaTeX 参考文献输出
- BibTeX 后端:
xe-bib-xe-xe
编译顺序 - biber 后端 + biblatex 宏包:使用
latexmk
或xe-biber-xe-xe
编译顺序
- BibTeX 后端:
# 可以略去扩展名
xelatex main.tex
bibtex main.aux
xelatex main.tex
xelatex main.tex
latexmk --xelatex main.tex
-
用 Makefile 编译 LaTeX 文档
-
使用 Github Actions 自动编译
-
使用 GitHub Actions 将编译的 pdf 文档作为 release 发布:release.yml
latexmk¶
latexmk [options] main.tex # .tex 后缀名可省略
# 常用参数
-outdir # 输出目录
-time # 显示执行时间统计信息
-file-line-error # 显示详细的错误位置
-halt-on-error # 遇到错误时停止执行
-interaction=nonstopmode # 不暂停,一直运行到结束
-pvc # 预览文档并持续更新
-silent # 安静模式
latex -c # 删除辅助文件
latex -C # 删除辅助文件 + PDF
.latexmkrc
:latexmk 配置文件;通常包含以下内容:
- 构建引擎的选择:如 pdfLaTeX、XeLaTeX 或 LuaLaTeX
- 构建参数:设置构建过程中的各种参数,如输出文件类型、编译次数、文件清理选项等
- 自定义构建规则:包括设置文件依赖关系、指定额外的编译步骤等
- 输出文件命名规则:定义输出文件的命名规则,以确保生成的文件按照特定的方式命名
- 文件监控选项:配置 latexmk 以在文件更改时自动重新构建文档,以提高工作效率
- 示例:
# Set timezone.
$ENV{'TZ'}='Asia/Shanghai';
# Ensure './texmf//' is in '$TEXINPUTS'.
ensure_path( 'TEXINPUTS', './texmf//' );
# PDF generate method
# - 1 pdfLaTeX
# - 3 LaTeX + DVIPDFMx
# - 4 LuaLaTeX
# - 5 XeLaTeX
$pdf_mode = 5;
# Add common patterns for tex engines.
set_tex_cmds( '-synctex=1 %O %S' );
# Always try to embed fonts, ignoring licensing flags, etc.
$xdvipdfmx = 'xdvipdfmx -E -o %D %O %S';
# Files to clean.
$clean_ext = 'bbl glo gls hd loa run.xml thm xdv synctex.gz';
语法¶
-
注释:以
%
开头 -
命令:以
\
开头,区分大小写;\command[...]{...}
:必选参数放在{...}
中,可选参数放在[...]
,多个参数以逗号分隔 -
有些命令会对后续内容产生影响,可以用
{}
限定作用范围,如{\bf bold}
-
环境:常用环境:列表与枚举、图片、表格、定理等
-
特殊符号需转义,如
\%
、\$
等
- 相关术语与概念:引擎、格式、编译命令
文档类和宏包¶
文档类¶
- 文档类:英文排版:article、report、book;中文排版 ctexart、ctexrep、ctexbook;幻灯片:beamer
- 可选参数:为文档类指定选项,以全局地规定一些排版的参数,如字号、纸张大小、单双面等;三个标准文档类可指定的选项如下
宏包¶
- 宏包:在使用 LaTeX 时,时常需要依赖一些扩展来增强或补充 LaTeX 的功能,比如排版复杂的表格、插入图片、增加颜色甚至超链接等
- 可一次性调用多个宏包,逗号隔开,这种用法一般不要指定选项
文件类型¶
- LaTeX 模板相关文件格式:
.sty
、.cls
、bst
、bib
- LaTeX 编译过程中生成相当多的辅助文件和日志,一些功能如交叉引用、参考文献、目录、索引等,需要先通过编译生成辅助文件,然后再次编译时读入辅助文件得到正确的结果,所以复杂的 LaTeX 源代码可能要编译多次
.sty # 宏包文件;宏包名称与文件名一致
.cls # 文档类文件;文档类名称与文件名一致
.bst # BibTeX 用到的参考文献格式模板
.bib # BibTeX 参考文献数据库文件
.log # 排版引擎生成的日志文件,供排查错误使用
.aux # 主辅助文件,记录交叉引用、目录、参考文献的引用等
.toc # 目录记录文件
.lof # 图形目录记录文件
.lot # 表格目录记录文件
.bbl # BibTeX 生成的参考文献记录文件
.blg # BibTeX 生成的日志文件
.idx # 供 makeindex 处理的索引记录文件
.ind # makeindex 处理 .idx 生成的用于排版的格式化索引文件
.ilg # makeindex 生成的日志文件
.out # hyperref 宏包生成的 pdf 书签记录文件
文件结构¶
文件结构¶
\documentclass{article} % 指明文档类型
% 导言区:设置文档样式
\usepackage{...} % 调用宏包
\newcommand{...} % 自定义命令
\begin{document}
% 正文
...
\end{document}
% 后续忽略
中文排版¶
- 使用 ctexart ctexrep ctexbook 等 ctex 文档类(源代码需保存为 UTF-8 编码)
- 引入 ctex 宏包
- 中文文档简略测试
文档部件¶
- 标题:
\title
、\author
、\date
→\maketitle
- 摘要:
abstract
环境 - 目录:
\tableofcontents
- 章节:
\chapter
、\section
、\subsection
等 - 文献:
\bibliography
注:abstract
环境只在 article 和 report 文档类有,report 文档类会单独成页,article 文档类会在标题下方
文档划分¶
- 分文件编译:
\include
、\input
- 两者区别在于
\include
命令将会插入\clearpage
再读取文件(即另起一页)
字符¶
-
空格:空格键和 Tab 键输入的空白字符视为“空格”。连续的若干个空白字符视为一个空格。一行开头的空格忽略不计。
-
换行:行末的换行符视为一个空格;但连续两个换行符,也就是空行,会将文字分段。多个空行被视为一个空行。也可以在行末使用
\par
命令分段。 -
中文的标点符号(绝大多数为非 ASCII 字符)使用中文输入法输入即可,一般不需要过多留意;而输入西文标点符号时,有不少地方需要留意
- 西文排版中经常会出现连字(ligatures),常见的有
ff/fi/fl/ffi/ffl
- 单引号 ' 和 ' 分别用 ` 和 ' 输入;双引号 “和” 分别用 `` 和 '' 输入
- 三种长度的横线:连字号
-
用来组成复合词;短破折号--
用来连接数字表示范围;长破折号---
用来连接单词,语义上类似中文的破折号 - 英文省略号用
\ldots
- 西文排版中经常会出现连字(ligatures),常见的有
-
拉丁文扩展与重音
% 加一对花括号的写法相当于提供了空的参数
% 否则它们可能会将后面的字符作为参数,形成重音效果
\# \$ \% \& \{ \} \_
\^{} \~{} \textbackslash
dif{}f{}icult f{}ind % 连字
``Please press the `x' key.'' % 单引号、双引号
\ldots \ldots{} % 省略号
% 三种长度的横线
daughter-in-law, X-rated \\
pages 13--67 \\
yes---or no?
% 特殊字符
Å \AA % 埃
断行和换页¶
-
单词间距:西文排版中,断行的位置优先选取在两个单词之间,即“空格”;文字在单词间的“空格”处断行时,“空格”生成的间距随之舍去。可使用字符
~
输入一个不会断行的空格,通常用在英文人名、图表名称等上下文环境 -
断行:
\\
可在表格、公式等地方用于换行,而\newline
只用于文本段落中 -
换页:
\newpage
、clearpage
-
命令
\newline
和\newpage
会在断行/断页位置填充适当的间距,但\linebreak
和\pagebreak
不能,使用这些命令强行断行/断页可能会制造出糟糕的排版效果,并导致 LaTeX 报Underfull \hbox
等警告 -
手动断词:对于绝大多数单词,LaTeX 能够找到合适的断词位置,在断开的行尾加上连字符
-
。手动使用\-
命令指定断词的位置
% 不会断行的空格
Fig.~2a \\
Donald~E. Knuth
\\[length] % 断行
\newline
\newpage % 换页
\clearpage
\linebreak[n] % 数字 n 代表适合/不适合的程度;0-4,缺省为 4
\nolinebreak[n]
\pagebreak[n]
\nopagebreak[n]
章节和目录¶
- 命令
\chapter
只在 report 和 book 文档类有定义 - article 文档类带编号的层级为
\section
、\subsection
、\subsubsection
三级 - report 和 book 文档类带编号的层级为
\chapter
、\section
、\subsection
三级 - article 文档类的 section 标题默认左对齐,ctexart 文档类的 section 标题默认居中,article 文档类 + ctex 宏包的 section 标题是左对齐的
- 正确生成目录项,一般需要编译两次源代码
\chapter
\section
\subsection
\subsubsection
% 定制章节标题的样式
\usepackge{titlesec}
\tableofcontents
\renewcommand{\contentsname}{目录}
% 定制目录的样式
\usepackge{titletoc}
标题页¶
-
\title
和\author
必需(不用\title
会报错;不用\author
会警告),\date
若省略或\date{\today}
会生成当天日期,\date{}
不显示日期 -
在
\title
、\author
等命令内可以使用\thanks
命令生成标题页的脚注,用\and
隔开多个人名 -
\title
、\author
、\date
可放在导言区或正文 -
article 文档类的标题默认不单独成页,book 和 report 文档类默认单独成页;可在
\documentclass
命令调用文档类时指定titlepage
或notitlepage
选项以修改默认的行为 -
titlepage 环境,生成不带页眉页脚的一页;生成自定义的标题页以替代
\maketitle
命令
引用与参考文献¶
- 参考文献由文献数据库(即
.bib
文件,条目会包含 key,用于引用)生成 - 注意特殊符号、公式等常常需要人工检查
-
需多次编译,推荐 latexmk
-
传统方法:BibTeX 后端(gbt7714 宏包)
\usepackage[sort&compress]{gbt7714}
\bibliographystyle{<style>} % 指定样式;gbt7714-numerical
\renewcommand{\bibname}{参考文献}
\cite{key1, key2} % 引用文献
\nocite{} % 列出未引用的文献
\nocite{*} % 列出所有未被引用的文献
\bibliography{bibfile} % 打印参考文献列表
-
现代方法:biber 后端 + biblatex 宏包(国家标准:biblatex-gb7714-2015 宏包)
-
biblatex 宏包:支持以
key=value
形式指定选项,包括参考文献样式 style、参考文献著录排序的规则 sorting- biblatex 使用的参考文献样式分为著录样式(bibliography style)和引用样式(citation style),分别以
.bbx
和.cbx
为扩展名。参考文献的样式在调用宏包时使用 style 选项指定,或者使用 bibstyle 或 citestyle 分别指定
- biblatex 使用的参考文献样式分为著录样式(bibliography style)和引用样式(citation style),分别以
% 参考文献相关设置
\usepackage[
backend = biber,
style = gb7714-2015,
defernumbers = true,
sorting = ymdnt, % Year in descending order
sorting = ynt, % Year in ascending order
maxbibnames = 3, % No. of listed names
citestyle = numeric-comp,
isbn = false, % controls whether the fields isbn/issn/isrn are printed
block = par,
doi = false, % do not show doi
url = false,
eprint = false,
giveninits = false,
gbnamefmt = lowercase, % 姓名大小写由输入信息确定
gbpub = false, % 禁用出版信息缺失处理
]{biblatex}
\renewcommand*{\bibfont}{\small}
\setlength{\bibitemsep}{0pt} % 文献条目间距
\addbibresource{refs.bib} % 导入参考文献数据库;需添加 bib 后缀
\cite{key1, key2} % 默认引用参考文献条目
\upcite % 右上角引用格式
\nocite % 列出未引用的参考文献
\citeauthor \citeyear \textcite \footcite
\supercite \parencite
% 打印参考文献列表
\printbibliography
\printbibliography[heading=bibintoc]
- natbib 宏包:可以生成用人名——年份的引用方式
列表¶
- 无序列表,有序列表
图片¶
\usepackage{graphicx}
% 指定图片目录
\graphicspath{{figures/}}
% 指定图片扩展名
\DeclareGraphicsExtensions{.pdf,.eps,.png,.jpg,.jpeg}
表格¶
- LaTeX 表格生成:Create LaTeX tables online(可生成三线表,在
table style
中选)
- 三线表:
booktabs
宏包
\usepackage{booktabs}
% 三线表
\begin{tabular}{ccc}
\toprule % 表格头部粗线
姓名 & 学号 & 性别 \\
\midrule % 表格中横线
1 & 2 & 3 \\
4 & 5 & 6 \\
\bottomrule % 表格底部粗线
\end{tabular}
- 斜线表:
diagbox
宏包
\usepackage{diagbox}
\begin{tabular}{|c|c|c|}
\hline
% 斜线表头
\diagbox{Header1}{Header2} & Column 1 & Column 2 \\
\hline
Row 1 & Data 1 & Data 2 \\
\hline
Row 2 & Data 3 & Data 4 \\
\hline
\end{tabular}
- 长表格:
longtable
宏包(支持跨页)
\usepackage{multirow} % \multirow 需调用此宏包
\multicolumn{num}{alignment}{content} % 水平合并单元格
% num 要合并的单元格数量
% alignment 对齐方式
% content 单元格中的内容
\multirow{num}{width}{content} % 垂直合并单元格
% width 单元格宽度,可使用 * 以自动调整宽度
\multicolumn{1}{c}{} % 单独控制表格 cell 的对齐方式
% 定义新的列类型
% p 可改成 m
% \centering 可改成 \raggedleft \raggedright
\newcolumntype{C}{>{\centering\arraybackslash}p{3cm}}
% 调整 LaTeX 中默认的表格行距
\usepackage{array}
\renewcommand{\arraystretch}{1.3}
\usepackage{makecell} % 在单元格内换行
浮动体¶
- 图片和表格有时会很大,在插入的位置不一定放得下,因此需要浮动调整;两类浮动体环境 figure 和 table
- 避免在文中使用「下图」、「上图」的说法,而是使用图表的编号,如:图
~\ref{fig:fig1}
h
当前位置 (here),t
顶部 (top),b
底部 (bottom),p
单独成页 (p)。LaTeX 的默认参数是 tbp!h
表示忽略一些限制,H 表示强制(强烈不建议)- 图标题一般在下方,表标题一般在上方,即
\caption{...}
应放在\begin{tabular}
前 \label
需写在\caption
后面,否则交叉引用会出现问题- 可通过修改
\figurename
和\tablename
的内容来修改标题的前缀,标题样式的定制功能由 caption 宏包提供
% 浮动表格
\begin{table}[!htbp]
...
\end{table}
% 浮动图片
\begin{figure}[!htbp]
...
\end{figure}
% 生成浮动表格、图片的目录
\listoftables
\listoffigures
% 修改标题的前缀
\renewcommand{\tablename}{newname}
\renewcommand{\figurename}{newname}
页面设置¶
页边距:geometry 宏包
通过 geometry 宏包设置的纸张大小是输出 PDF 文件的真实大小,而在文档类选项中设置的参数实际上只影响输出区域。
LaTeX 默认将页面内容在垂直方向分散对齐。
% geometry-settings 多以 key = value 的形式组织
% 方式 1
\usepackage{geometry}
\geometry{geometry-settings}
% 方式 2
\usepackage[geometry-settings]{geometry}
% Microsoft Word 习惯的页面设定:A4 纸张,上下边距 1 英寸,左右边距 1.25英寸
% 方式 1
\geometry{a4paper,left=1.25in,right=1.25in,top=1in,bottom=1in}
% 方式 2
\geometry{a4paper,hmargin=1.25in,vmargin=1in}
% 书籍等双面文档,习惯上奇数页右边、偶数页左边留出较大的页边距,而靠近书脊一侧的奇数页左边、偶数页右边页边距较小
\geometry{inner=1in,outer=1.25in}
\raggedbottom % 页面在垂直方向向顶部对齐
\flushbottom % 页面在垂直方向分散对齐
页眉页脚:fancyhdr 宏包,\pagestyle
,将页眉页脚分为左中右三个部分,页眉页脚处的横线粗细可以定义,默认页眉为 0.4pt、页脚为 0pt
页码:\pagenumbering
命令,有 arabic,[Rr]oman,[Aa]lph 五种页码形式
% 页眉页脚设置
\usepackage{fancyhdr}
\pagestyle{fancy}
\fancyhf{} % 清空页眉页脚的设置
\fancyhead[position]{} % 设置页眉
\fancyfoot[position]{} % 设置页脚
\lhead{} % 分别设置页眉左中右内容
\chead{}
\rhead{}
\lfoot{} % 分别设置页脚左中右内容
\cfoot{\thepage}
\rfoot{}
\renewcommand{\headrulewidth}{0.4pt} % 修改页眉横线宽度
\renewcommand{\footrulewidth}{0pt} % 去掉页脚横线
公式¶
参考: - 通用 LaTeX 数学公式语法手册 - UinIO.com 电子技术实验室 - LaTeX 公式排版超级备忘录 - 各类场景全覆盖 - LaTeX Math Wikibook
amsmath 允许用户在导言区用 \DeclareMathOperator
定义自己的算符,其中带星号的命令定义带上下限的算符
数学模式¶
math mode - Differences between \stackrel and \stackbin - TeX - LaTeX Stack Exchange
- 空格不起作用;不能有空行
- 取消公式编号:在环境名后加
*
$...$ % 行内(inline)公式
\(...\)
% 行间(display 独显)公式
\[ % 无编号
...
\]
$$ % 不要用(为什么?)
...
$$
\begin{equation*} % 无编号
...
\end{equation*}
\begin{equation} % 有编号
...
\end{equation}
\quad % 插入空格
\qquad
\hspace
\, % 相当于 3/18 \quad
% 常用数学字体命令
\mathrm{}
\mathit{}
\mathtt{}
\mathsf{}
\mathbf{}
\mathcal{}
\mathbb{}
\frac{}{} % 分式
\tfrac{}{} % \frac 行内公式等价于 \tfrac
\dfrac{}{} % 行间公式等价于 \dfrac
\binom{}{} % 二项式系数
\tbinom{}{} % 小型
\dbinom{}{} % 大型
^{} % 上下标
_{}
' % 导数
\prime
\overline{} % 上、下划线
\underline{}
\overbrace{} % 上、下大括号
\underbrace{}
\sqrt{} % 根式
\sqrt[n]{}
\sum % 求和;针对于行内行间公式取不同的尺寸, 上下限位置也可能不同
\int % 积分
\oint % 环路积分
\iint % 双重积分
\mathcal{} % 花体字;傅里叶变换 F、拉普拉斯变换 L和梅林变换 M,函数的阶 O
\operatorname{} % 正体字
\underset{}{} % 在数学符号的下/上方添加标记或符号
\overset{}{}
\stackrel{}{} % 相比 \underset 是过时的
%% 在数学模式中插入普通文本
% \rm{} \mathrm{} \text{} 之间的区别
\rm{} % 过时命令;将文本的字体改为罗马体
\mathrm{} % 在数学模式中将文本设置为直立的罗马体
\text{} % 来自 amsmath 宏包,在数学模式中插入正常文本;能自动调整字体大小和样式
\mbox{}
括号与定界符¶
(...) % 基本括号
[...]
{...}
|...| % 绝对值、范数
\vert...\vert
\Vert...\Vert
\langle...\rangle % Dirac 符号
|...\rangle
\left(...\right) % 自动调节括号大小
\big \Big \bigg \Bigg % 手动调节括号大小,1.5 2 2.5 3 倍;声明左中右,在命令后添加 l、m 或 r,如 \bigl
% 自带定界符的矩阵环境
pmatrix % 圆括号
bmatrix % 方括号
Bmatrix % 花括号
vmatrix % 绝对值
Vmatrix % 带范数
符号与数学字体¶
-
符号
- 最常用的额外字体包:amssymb
-
数学字体
- 「Times New Roman」:newtxmath 宏包
- 不要用 times 和 mathptmx 宏包
- 加粗:使用 bm 宏包的
\bm
命令(\mathbf
只有直立的字母)
-
新方案:unicode-math 宏包
多行公式¶
align
与 aligned
的区别:后者允许在数学环境内嵌套使用(如 equation
);gather
与 gathered
同理
multline % 多行公式,不对齐,只给一个公式编号
gather % 多个公式,可添加多个公式编号
align % 多个公式对齐,只能对齐公式内部的一个部分
flalign % 多个公式对齐,可对齐公式内的多个部分
split % 分割公式
字体¶
- 宏包:
fontspec
% 字体样式
\textbf{bold} \textit{italic} \texttt{typewriter}
\textsf{sans serif} \textsc{Small Caps} \textsl{slanted}
% 字号
{\tiny tiny} {\scriptsize scriptsize} {\footnotesize footnotesize}
{\small small} {\normalsize normalsize} {\large large}
{\Large Large} {\LARGE LARGE} {\huge huge} {\Huge Huge}
中英文字体设置
% 中文字体设置
\usepackage{xeCJK}
\setCJKmainfont{Source Han Sans SC}
\setCJKmainfont{Smiley Sans}
% 英文字体设置
\usepackage{fontspec}
\setmainfont{Times New Roman} % 新罗马字体
\setmainfont{Tex Gyre Termes} % 会报没有该字体的错
\setmainfont{PingFang SC} % 苹方字体
\setmainfont{libertinus} %
% 检查字体是否存在;不存在则使用默认字体
\usepackage{fontspec}
\IfFontExistsTF{Times New Roman}{
\setmainfont{Times New Roman}
}{
\typeout{Times New Roman font not found. Using default font.}
}
-
解决 Tex Gyre Termes 字体报错问题:
- 在当前项目路径下创建 tutgtermes.fd 和 texgyretermes.fontspec 文件
- 参考:texlive - How to install font Tex Gyre Termes - TeX - LaTeX Stack Exchange
-
NewComputerModern:NewComputerModern 字体
-
Linux Libertine(衬线体):简历、公式字体优选;Linux Libertine 字体介绍
\usepackage{newcomputermodern} % 会报错
\usepackage{libertine}
% 数学模式下使用 Linux Libertine
\usepackage[libertine]{newtxmath}
衬线字体(Serif)与非衬线字体 (Sans-Serif) 的区别:笔画开始和结束处有额外的装饰元素,称为衬线;非衬线字体没有衬线装饰,笔画末端简洁平直。
常见衬线字体:Times New Roman,宋体,仿宋(带“宋”字体),楷体 常见非衬线字体:Arial,黑体(带“黑”字体),幼圆
代码字体相关后缀
Mono 后缀:等宽字体(Monospaced Font) LF 后缀:连字(Ligature Font)(给常用的一些字符组合做特殊处理,让它们看起来更连贯,如“不等于”的渲染) - 默认带连字支持:JetBrains Mono、Cascadia Code 和 FiraCode 等 - 不带连字支持:Consolas、Monaco、Menlo 和 Hack
NL 不带连字
Nerd Font 自带图标字体 Nerd Font Mono:带 Mono 的 NF,其图标宽度和字母宽度一致。 NF 不带 Mono 的图标本身在排版上也是和字母严格等宽的,只是看起来大一点
代码字体主要是非衬线的,Fira Code 和 Cascadia Code 是衬线字体
WOFF2(Web Open Font Format 2)是一种专为网页上使用而设计的字体格式。
TerminalVector 字体
常用宏包¶
- 常用宏包简介:见 lshort-zh-cn.pdf 文件中附录 B.3 的内容
- hyperref 宏包:超链接、引用,由于它经常与其他宏包冲突,一般把它放在导言区的最后
\usepackage{hyperref}
\hypersetup{
pdftitle=..., % PDF 标题
pdfauthor=..., % PDF 作者
pdfsubject=..., % PDF 主题
pdfborder={0 0 0}, %
bookmarks=true, % 显示书签
bookmarksopen=true, % 书签展开
bookmarksnumbered=true, % 书签编号
hidelinks=true, % 隐藏链接方框
colorlinks=true, %
urlcolor=..., % 外部链接颜色
linkcolor=..., % 内部链接颜色
citecolor=..., % 文献引用颜色
filecolor=..., %
}
- xcolor 宏包:调用颜色
\usepackage{xcolor}
% 自定义颜色
\definecolor{colorname}{RGB}{34,34,250}
% 文本颜色
{\color{colorname}{text}}
\textcolor{red!70}{百分之70红色}
- hologo 宏包:可以输出许多 \(\TeX\) 家族标志
\usepackage{hologo}
% 大写 H 表示符号的首字母也大写
\hologo{XeLaTeX} \Hologo{BibTeX}
\providecommand{\XeTeX}{\hologo{XeTeX}}
\providecommand{\BibLaTeX}{\textsc{Bib}\LaTeX}
% LaTeX 标志
\TeX \LaTeX \LaTeXe
- comment 宏包:用于将其中的文本视为注释,从而使这些文本不会在生成的文档中显示(有时会导致编译出错)
- lipsum、zhlipsum 宏包:生成随机的英文、中文文本,主要用途是填充文档以便测试文档的版面布局
\usepackage{lipsum}
\usepackage{zhlipsum}
\lipsum % 插入默认的第一段到第七段的 Lorem Ipsum 文本
\lipsum[2-4] % 第 2-4 段
- tcolorbox 宏包:创建彩色盒子
\usepackage{tcolorbox}
% 接受一串 key-value 的参数列表
\begin{tcolorbox}[
title=..., % 盒子标题
colframe=...,
colback=...,
...
]
\tcblower % 增加了一条虚线,将盒子内容分成了上下两部分
...
\end{tcolorbox}
% 另一种写法
\usepackage[most]{tcolorbox}
\begin{tcolorbox}[
boxrule=0pt,
rightrule=0pt,
% toprule=0pt,
% bottomrule=0pt,
frame hidden,
% sharp corners, % rounded corners 圆角
enhanced,
borderline west={1pt}{0pt}{red}
]
% 文字、公式和符号
amsmath % AMS数学公式扩展
mathtools % 数学公式扩展宏包,提供了公式编号定制和更多的符号、矩阵等
amsfonts % AMS 扩展符号的基础字体支持
amssymb % 在 amsfonts 基础上将 AMS 扩展符号定义成命令
bm % 提供将数学符号加粗的命令 \bm
unicode-math % 使用 Unicode 数学字体
siunitx % 以国际单位规范排版物理量的单位
mhchem % 排版化学式和方程式
% 排版元素
ulem % 提供排版可断行下划线的命令 \uline 以及其它装饰文字的命令
multicol % 提供将内容自由分栏的 multicols 环境
multitoc % 生成多栏排版的目录
minitoc % 为章节生成独立的小目录
verbatim % 对原始的 verbatim 环境的改善。提供了命令 \verbatiminput 调用源文件
fancyvrb % 提供了代码排版环境 Verbatim 以及对版式的自定义
listings % 提供了排版关键字高亮的代码环境 lstlisting 以及对版式的自定义。类似宏包有 minted 等
algorithmic % 一个简单的实现算法排版的宏包。如果要生成浮动体的话,需要搭配 algorithm 宏包使用
algorithm2e % 较为复杂的、可定制的算法排版宏包。类似宏包有 algorithmicx 等
amsthm % 定制定理环境。类似宏包 theorem、ntheorem、thmtools 等
% 图表和浮动体
array % 对表格列格式的扩展
booktabs % 排版三线表
tabularx % 提供 tabularx 环境排版定宽表格,支持自动计算宽度的 X 列格式
diagbox % 排版斜线表头
longtable % 提供排版跨页长表格的 longtable 环境
graphicx % 支持插图
caption % 控制浮动体标题的格式。类似宏包有 keyfloat 等
subcaption % 提供子图表和子标题的排版。类似宏包有 subfigure 和subfig 等
float % 为浮动体提供不浮动的 H 模式;提供自定义浮动体结构的功能
% 修改版式
geometry % 修改页面尺寸、页边距、页眉页脚等参数
fancyhdr % 修改页眉页脚格式,令页眉页脚可以左对齐、居中、右对齐
titlesec % 修改章节标题 \chapter、\section 等的格式
titletoc % 修改目录中各条目的格式。类似宏包有 tocloft 等
tocbibind % 支持将目录、参考文献、索引本身写入目录项
抄录¶
- 抄录:指将键盘输入的字符(包括保留字符和空格)不经过 TeX 解释,直接输出到文档;默认字体是等宽字体
- 命令:
\verb
后用两个同样的符号将抄录内容括住(不能是星号) - 环境:
verbatim
\verb
以及verbatim
环境很脆弱,不能隐式地用于自定义环境,也一般不能用作命令的参数。- 宏包
verbatim
提供了更多的抄录支持 - 宏包
fancyvrb
提供\SaveVerb
,\UseVerb
命令,以及便于实现居中的BVerbatim
环境(置于center
环境内即可) - 宏包
shortverb
支持以一对符号代替\verb
命令
- 宏包
代码¶
一般使用 listings 或者 minted 宏包
% 代码展示设置
\usepackage{listings}
% \lstset{...}
\lstset{tabsize=4, keepspaces=true,
xleftmargin=2em,xrightmargin=0em, aboveskip=1em,
%backgroundcolor=\color{gray!20}, % 定义背景颜色
frame=none, % 表示不要边框
extendedchars=false, % 解决代码跨页时,章节标题,页眉等汉字不显示的问题
numberstyle=\ttfamily,
basicstyle=\ttfamily,
keywordstyle=\color{blue}\bfseries,
breakindent=10pt,
identifierstyle=, % nothing happens
commentstyle=\color{green}\small, % 注释的设置
morecomment=[l][\color{green}]{\#},
numbers=left,stepnumber=1,numberstyle=\scriptsize,
showstringspaces=false,
showspaces=false,
flexiblecolumns=true,
breaklines=true, breakautoindent=true,breakindent=4em,
escapeinside={/*@}{@*/},
}
排除错误¶
- 常见的 LaTeX 错误信息:见 lshort-zh-cn.pdf 文件中附录 B.1 的内容
! Undefined control sequences.
# 使用了未定义的命令。拼写错误是原因之一;
# 也有可能是没有调用某个宏包,但用了该宏包定义的命令。
! LaTeX Error: Can be used only in preamble.
# 由于将必须用于导言区的命令在 \begin{document} 之后使用而产生。
其他¶
- 文本上下标
\pagenumbering
默认参数是阿拉伯数字
arabic: 阿拉伯数字;roman: 小写罗马数字;Roman: 大写罗马数字;alpha: 小写英文字母;Alpha: 大写英文字母
假设在前言部分采用罗马数字,在剩余的正文部分用阿拉伯数字,则在前言部分使用命令 \pagestyle{roman}
,随后在新的章节后面采用 \chapter{…}\pagenumbering{arabic}
,还可以在后面接 \setcounter{page}{number}
来设定起始页码.
% 附录部分的标题和编号设置
% 会报该命令弃用的错
\CTEXsetup[name={附录},number={\Alph{section}}]{appendix}
30$\,^{\circ}$ 三角形 % 角度
37$\,^{\circ}\mathrm{C}$ % 摄氏度
LaTeX 默认在 \chapter
、\section
等章节标题命令之后的第一段不缩进(和 Typst 一样);ctex 宏包和文档类默认按照中文习惯保持标题后第一段的首行缩进
\textgreat \textless % 大于号,小于号
% 弹性长度
12pt plus 2pt minus 3pt % 表示基础长度为 12pt,可以伸展到 14pt,也可以收缩到 9pt
\\[6pt] \\*[6pt] % 在段落内的两行之间增加垂直间距
进阶¶
自定义命令¶
-
自定义命令使用
\name{arg1}{arg2}
来调用 -
LaTeX 不允许使用
\newcommand
定义一个与现有命令重名的命令。如果需要修改命令定义的话,使用\renewcommand
命令,其语法与\newcommand
相同。 -
带星号的命令称为短命令,其中参数不能有换段或空行,否则编译报错,但是短命令有利排错
-
在命令中如果包含数学命令,那么这条命令只能⽤于⽂本模式,不能⽤于数学模式(因为在数学模式中会被多加了⼀层
$ $
导致报错)。所以,在定义数学命令时,使⽤\ensuremath{code}
来定义,这样的命令在数学模式中时 code 本⾝,在⽂本模式中时$ code $
。
% 定义新命令
\newcommand{name}[num]{def}
\newcommand*{name}[num]{def}
% name - 带反斜线,必须符合命名规则
% num - 命令参数数量,最多 9 个,默认为 0,即不带任何参数
% def - 命令具体定义,涉及到参数时使用 `#n` 表示第 n 个参数。
% 修改已有命令
\renewcommand{name}[num]{def}
\renewcommand*{name}[num]{def}
% 命令未定义时,相当于 \newcommand;命令已定义时,沿用已有定义
\providecommand{name}[num]{def}
% 在常宏包和类文件的开发中
% \DeclareRobustCommand 与 name 间可以不用花括号
\DeclareRobustCommand{name}[num]{def}
% https://github.com/0382/util/blob/main/latex/physics.tex
% 摄氏度
\newcommand{\celsius}{\mathrm{^o\! C}}
% 量子力学 bra ket 符号
\newcommand{\bra}[1]{\langle{#1}|}
\newcommand{\ket}[1]{|{#1}\rangle}
\newcommand{\braket}[2]{\langle{#1}|{#2}\rangle}
% 尖括号平均值
\newcommand{\anglemean}[1]{\langle{#1}\rangle}
% 实数虚数
\renewcommand{\Re}[1]{\mathfrak{Re}(#1)}
\renewcommand{\Im}[1]{\mathfrak{Im}(#1)}
% 三种矩阵简写
\newcommand{\pmat}[1]{\begin{pmatrix}#1\end{pmatrix}}
\newcommand{\bmat}[1]{\begin{bmatrix}#1\end{bmatrix}}
\newcommand{\Bmat}[1]{\begin{Bmatrix}#1\end{Bmatrix}}
% 绝对值和范数
\newcommand{\abs}[1]{\vert #1 \vert}
\newcommand{\norm}[1]{\Vert #1 \Vert}
自定义宏包/文档类¶
参考:
- LaTeX 模板制作教程,从一份简历说起
- 参与开发 · ustctug/ustcthesis Wiki · GitHub
- Article-template/document.tex at main · Meiting-Wang/Article-template · GitHub
- 自定义宏包文件参考:PHYS6080-PS1/tex/mystyle.sty at main · singularitti/PHYS6080-PS1 · GitHub
自定义宏包¶
-
自定义宏包/文档类门槛较高
-
若定义了很多新的环境和命令,文档的导言区将变得很长,这种情况下,可以建立一个新的 LaTeX 宏包来存放所有定义的命令和环境,然后在文档中使用
\usepackage
命令来调用自定义的宏包 -
自定义宏包的基本工作就是将原本在文档导言区里很长的内容拷贝到
.sty
文件中 -
在宏包中调用其它宏包:LaTeX 允许在自己编写的宏包中调用其它宏包
自定义文档类¶
- 以
.cls
作扩展名,可以像调用宏包那样调用一个基本的文档类
\ProvidesClass{class}
\RequireClass[...]{class}
\LoadClass[...]{class}
\RequirePackage[...]{package} % 与 \usepackage 用法一致;在 .cls 文件中推荐使用
LaTeX 可定制的一些命令和参数¶
- 标题名称/前后缀:可以用
\renewcommand
来修改- 使用 ctex 宏包或文档类时,表中的标题会修改为中文标题
- 长度:可用
\setlength
来修改
模板¶
- 作业模板(较为简洁):hw1.tex
- 上海交通大学 Beamer 模版
- 上海交通大学 LaTeX 论文模板
- GitHub - ElegantLaTeX/ElegantPaper
- GitHub - ElegantLaTeX/ElegantBook
-
cls 文档类文件内容注释很详细:GitHub - CheckBoxStudio/BUAAThesis: 北航研究生学位论文模板(Word+LaTeX).
-
简历
- 推荐:GitHub - LiuX2018/CV
- GitHub - jankapunkt/latexcv: A collection of cv and resume templates written in LaTeX. Leave an issue if your language is not supported!
- 用的是 tectonic 引擎:GitHub - philipempl/modern-latex-cv: A professional and modern CV in LaTex
- GitHub - AntObi/academicCV: LaTeX template for academic CV
- GitHub - sinaatalay/rendercv: LaTeX CV generator from a YAML/JSON input file.
- 部分格式可作为参考将其转换成 Typst 写法:GitHub - Troublor/curriculum-vitae: My Curriculum Vitae (CV)
- GitHub - ml-evs/CV: My TeX CV built with moderncv.
- A Customised CurVe CV - Overleaf, Online LaTeX Editor
- GitHub - rasenior/CV: CV using CurVe in LaTeX
- GitHub - bocklund/resume: Brandon Bocklund Resume (适合学术用)
- GitHub - saadq/resumake.io: 📝 A website for automatically generating elegant LaTeX resumes.
- jsonresume.org
- GitHub - VatsalSy/Vatsal_CV: This is the LaTeX source code of my CV
-
国自然基金 LaTeX 模板:
-
某课题组论文 manuscript 模板:GitHub - CapraLab/lab-manuscript-template: An academic manuscript template with writing tips in both LaTeX and MS Word format generated by the Capra Lab (2/2022)
问题¶
-
The font "Cochineal-Roman" cannot be found:该字体不适用于 xelatex/lualatex,而适用于 pdflatex
-
如何将自定义命令参数设置为 key-value 形式
-
开启 draft 模式:不编译图片,在图片位置显示占位符,以加快编译速度
-
下划线
\newcommand
及粗细设置 -
去除超链接、交叉引用中的方框:hyperref - Remove ugly borders around clickable cross-references and hyperlinks - TeX - LaTeX Stack Exchange
-
LaTeX 如何在每个章节最后生成参考文献
% 此方法使用 ctexart 文档类会报错
\documentclass{article}
\usepackage{ctex}
\usepackage[
backend = biber,
bibencoding = utf8,
refsegment = section, % chapter
style = gb7714-2015,
firstinits = true,
isbn = false,
doi = false,
url = false,
clearlang = true,
defernumbers = true,
]{biblatex}
\addbibresource{biblatex-examples.bib}
\title{分节生成参考文献}
\begin{document}
\maketitle
\tableofcontents
\section{第一节}
第一节文献引用 \cite{wilde}。
\printbibliography[segment=\therefsegment,heading=subbibliography]
\section{第二节}
第二节文献引用 \cite{cicero}。
\printbibliography[segment=\therefsegment,heading=subbibliography]
\printbibliography
\end{document}
- 不同期刊的文献格式转换?(具体的期刊不行;可用不同期刊的 LaTeX 的模板)