【论文写作】--LaTeX详细入门教程1

本教程来自 LaTeX 工作室(国内最全中文教程站):LaTeX 基础 | LaTeX教程

介绍了 LaTeX 是什么以及它将如何工作,并解释了它与 Microsoft Word 或 LibreOffice Writer 等常见文字处理软件的不同之处。

  1. 编辑模式:标记语言 vs. 所见即所得
  • 非 WYSIWYG:LaTeX 不同于 Microsoft Word 或 LibreOffice Writer,不提供"所见即所得"的可视化编辑界面。

  • 纯文本与逻辑标记 :用户通过编辑纯文本并添加特定标记来工作。这种模式类似于 HTML,标记用于定义内容的逻辑含义 (例如使用 \section 命令对应 HTML 中的 <h2> 标签),而非直接控制视觉样式。

  1. 文件性质与交付形式
  • 源代码非成品:LaTeX 文件本质上是对文档结构和内容的"说明指令",而非最终文档本身,因此通常不直接分发源文件。

  • PDF 为交付标准 :必须通过处理程序(通常为 pdflatex)将源代码转换为 PDF 文件,生成的 PDF 才是供他人阅读的最终产物。

  1. 生成过程的定义
  • 编译 vs. 排版 :由于使用体验类似编写程序,该过程常被称为"编译"。但从专业角度看,"排版" 是更准确的术语,因为它强调的是文档格式的构建与渲染。
  1. 运行次数的差异性
  • 简单文档:仅需运行一次 LaTeX 即可生成完整的 PDF。

  • 复杂文档 :当文档包含交叉引用、引文、图片索引或目录等动态元素时,通常需要多次运行 LaTeX 才能正确解析所有依赖关系并生成完整文档。文中提示后续遇到此类情况会特别说明。

目录

1.LaTeX--运行条件

[1.1.TeX 发行版](#1.1.TeX 发行版)

1.2.文本编辑器

2.LaTeX--在线运行

3.LaTeX--文档结构

4.LaTeX--逻辑结构

4.1.结构与视觉

4.2.标题命令

4.2.列表

5.LaTeX--文档类

5.1.基本文档

5.2.富功能文档

5.3.幻灯片演示

6.LaTeX--扩展类

6.1.改变工作方式

6.2.改变设计

6.3.添加新功能

6.4.定义命令

7.LaTeX--插图

7.1.图片外观

7.2.浮动图片

8.LaTeX--表格

8.1.添加分割线

8.2.合并单元格


1.LaTeX--运行条件

与很多软件不同,LaTeX 并不是一个把「全部家当」打包起来的单独应用。相反,它是由一系列程序组成的复杂系统。通常来说,LaTeX 所需的程序可以分为两个部分:

  • TeX 发行版
  • 文本编辑器(常常是专门为 LaTeX 设计的)

1.1.TeX 发行版

要让 LaTeX 跑起来,核心就是要有一套 TeX 发行版。TeX 发行版是 LaTeX 工作所需的一组「后台」程序和文件,但是大多数情况下,并不需要直接「运行」它们。

在今天,主要有两大 TeX 发行版:MiKTeXTeX Live。无论是在 Windows、macOS 还是 Linux 平台上,这两个发行版均可使用。在 Windows 上,MiKTeX 具有更为深厚的背景;而在 macOS 上,TeX Live 则被进一步打包在了 MacTeX 软件套装中。每个发行版都各有其优势,LaTeX 项目组也给出了更多建议以供你参考。

由于 TeX Live 在所有常见平台上均可使用,并且具有一定的性能优势,因此如果不确定应该安装哪一个发行版,我们建议你选择 TeX Live

1.2.文本编辑器

LaTeX 文档只是纯文本文件,因此可以使用任何文本编辑器进行编辑。但是,使用专为 LaTeX 设计的编辑器将带来更多便利,因为它们往往会提供一键编译、内置 PDF 阅读器以及语法高亮等功能。几乎所有现代的 LaTeX 编辑器都提供 SyncTeX 这一强大的功能:在源代码点击鼠标即可跳转到 PDF 的对应位置,或者反过来,从 PDF 跳转回源代码。

LaTeX 编辑器的数量可能远超你的想象:StackExchange 上有一个详尽的列表。Windows 和 Linux 平台上的 TeX Live 和 MiKTeX 均包含有一个基本的编辑器 TeXworks,而 MacTeX 则打包了 TeXShop

无论你选择哪种编辑器,我们都建议你放在 TeX 发行版之后安装,以便该编辑器可以「找到」TeX 发行版并正确进行设置。

2.LaTeX--在线运行

如今,几个强大的在线系统使你完全不必再安装 TeX 发行版和 LaTeX 编辑器。这些网站允许你直接在网页中编辑文档,然后在后台运行 LaTeX,并显示生成的 PDF。

这些网站中的一部分将 LaTeX 与类似文字处理软件的功能结合在一起;而另一部分则偏重让你直接编写 LaTeX 代码,因此更接近本地安装。

有些网站无需登录便可使用,例如 TeXLive.net,这也是本网站编辑和运行示例代码所依赖的系统。对于更完整和复杂的工作,较为成熟的网站都会要求你事先注册。这样你就可以保存自己的工作,同时也能避免网站过载。我们已经配置好了链接,因此你也可以在 Overleaf 上面编辑示例代码。Overleaf 也是现在最流行的在线 LaTeX 服务。当然还有其他类似的网站,例如 Papeeria

overleaf的中文网站:在线LaTeX编辑器

3.LaTeX--文档结构

你的第一个 LaTeX 文档将非常简单:

目的是向你展示一个文档的外观和如何成功排版。

这也是你第一次看到如何使用 learnlatex.org 上的例子的机会。

在线系统,你可以直接点击例子中的 在 TeXLive.net 运行在 Overleaf 中打开 按钮进行尝试。

TypeScript 复制代码
\documentclass{article}
\usepackage[T1]{fontenc}

\begin{document}
Hey world!

This is a first document.
\end{document}

展示了基础知识。LaTeX 文档是文本和命令的混合体。命令以反斜线开始,有时在大括号里有参数(或有时在方括号中有可选参数)。然后你通过使用 LaTeX 对你的文件进行排版,得到一个输出的 PDF。

  1. 每个 LaTeX 文档都有一个**\begin{document} 和一个匹配的 \end{document}** 。在这两者之间是文档的主体,即你的内容所在。这里的正文有两个段落(在 LaTeX 中,你用一个或多个空行来分隔段落)。
  2. \begin{document} 之前是文档导言区(preamble) ,其中有设置文档布局的代码。\usepackage 命令将在后面的课程中介绍,
  3. LaTeX 还有其他 \begin{...}\end{...} 的搭配;我们称这些为环境(environments) 。你必须正确匹配它们,以便每一个 begin{x} 都有一个 end{x}

我们可以在 LaTeX 文件中添加以 % 开头的注释;让我们用它来显示结构:

TypeScript 复制代码
\documentclass[a4paper,12pt]{article} % 使用选项的的文档类
\usepackage[T1]{fontenc}
% 在导言区里的注释
\begin{document}
% 这是一个注释
This is   a simple
document\footnote{with a footnote}.

This is a new paragraph.
\end{document}

你可以看到上面我们有两个段落:注意,我们使用了一个空行来做到这一点。与此同时还注意到,多个空格被当作一个空格处理。

有时你可能还需要一个不跨行的「硬」空格(译者注:hard space,又叫 non-breaking space,不换行空格):在 LaTeX 中,我们可以用 ~ 来创建,把两段文字「绑」在一起。当我们在课程的后期开始创建交叉引用时,这一点特别有用。

4.LaTeX--逻辑结构

LaTeX 不仅提供了专注于文档逻辑结构的方式,也提供了直接修改外观的方式。大部分情况下,最好使用前者,因为前者在迫不得已的时候可以轻易地复用或更改外观。

4.1.结构与视觉

我们将从一个例子出发,展现 LaTeX 中最常见的逻辑标记命令之一------\emph:将文字变成斜体。(印刷界里,为了强调文字,经常会这么做。)

TypeScript 复制代码
\documentclass{article}
\usepackage[T1]{fontenc}
\begin{document}
Some text with \emph{emphasis and \emph{nested} content}.

Some text in \textit{italic and \textit{nested} content}.
\end{document}

\textit 让文字变成斜体,但是也 是变成斜体,不能嵌套使用,并且可以看到 \emph 能够嵌套使用。当然,也有强调格式不是斜体的情况:比如在幻灯片中,使用颜色来强调会更好。在使用逻辑标记的方法之后,我们就可以不用担心编写文档主体时格式设定上的细节问题。

4.2.标题命令

使用字处理器:为了开始一节,多数人的习惯是输入标题文字,然后简单地让它变大、变粗,换行继续。

在 LaTeX 中,使用逻辑标记的方式比这种手动设定格式的方式容易 得多------使用**\section** 命令:它不仅可以直接控制字体变化、纵向间距......,还可以让整个文章的格式统一。

TypeScript 复制代码
\documentclass{article}
\usepackage[T1]{fontenc}
\begin{document}
Hey world!

This is a first document.

\section{Title of the first section}

Text of material in the first section

Second paragraph.

\subsection{Subsection of the first section}

Text of material in the subsection.

\section{Second section}

Text of the second section.

\end{document}

使用标准的 article 配置时,LaTeX 会对节与小节进行编号,并把标题加粗。我们会在下一课对改变这种设计进行适当的讲述。

LaTeX 可以将文档分成好几个层级:

  • \chapter (启用它需要 \documentclass{book} 或者 \documentclass{report}
  • \section
  • \subsection
  • \subsubsection

更进一步来讲,再下一个层级就是 \paragraph,但是基本上这一层就会对目次划分得「太细」。(没错,\paragraph 是一个目次命令,不是开始新段落的命令!)

你可能在想对于文档标题应该怎么做。确实有一些特殊的命令来声明一个文档的标题,但并不是所有的文档都会使用标题,所以我们把这个知识放在了对应的进一步细节页面中。

4.2.列表

还有一种使用逻辑标记的很常见情况就是撰写列表。LaTeX 主要内置两种常见的列表类型。

TypeScript 复制代码
\documentclass{article}
\usepackage[T1]{fontenc}
\begin{document}

Ordered
\begin{enumerate}
  \item An entry
  \item Another One
  \item Wow! Three entries
\end{enumerate}

Unordered
\begin{itemize}
  \item An entry
  \item Another One
  \item Wow! Three entries
\end{itemize}

\end{document}

注意到我们使用 \item 来开始每一项,这样每一种列表所使用的标记或编号就会自动递增。

5.LaTeX--文档类

你或许注意到了,目前为止我们所创建的 LaTeX 文档都是从 \documentclass 一行开始的,并且 \documentclass{article} 是目前为止最常见的选择。所有 LaTeX 文档都需要这一行命令,并且(几乎)是你第一个要输入的命令。

文档类设置了文档的一般布局,比如:

  • 设计边距、字体、间隔......
  • 是否会有章这一级
  • 标题是否需要另起一页

更一般来讲,文档类也可以添加新的命令:特别是专用情形,比如创建幻灯片时。

文档类这一行也可以被设置一些全局选项 ------对整个文档起作用的选项。这些选项需要在方括号中给出:\documentclass[<选项>]{<文档类>}。许多 LaTeX 命令都会使用这种首先在方括号中给出可选信息的语法。

5.1.基本文档

LaTeX 提供了一系列标准文档类,它们看起来都相像,但也有些变化:

  • article
    不包含章的短文档
  • report
    含有章的长文档,单面印刷
  • book
    含有章的长文档,双面印刷,包含正文前材料(front-matter)和正文后材料(back-matter,比如索引)
  • letter
    不包含目次信息
  • slides
    幻灯片(详见后文)

我们已经看到,article, report, book 文档类都有非常相似的命令。当撰写一个 letter 时,可以使用的命令已经有点不同了。

TypeScript 复制代码
\documentclass{letter}
\usepackage[T1]{fontenc}
\begin{document}

\begin{letter}{Some Address\\Some Street\\Some City}

\opening{Dear Sir or Madam,}

The text goes Here

\closing{Yours,}

\end{letter}

\end{document}

观察 \\ 是如何分隔地址行内容的。我们会在稍后来探讨断行问题。我们又可以看到, letter 文档类针对信件提供了一个新的环境与一些专有的命令。

标准的 article, report, book 文档类接受 10pt, 11pt, 12pt 选项用于更改字体大小,使用 **twocolumn**选项用于制作双栏文档。

5.2.富功能文档

核心文档类都很稳定,但也就意味着在设计和提供的命令范围上非常保守。长久以来,也出现了许多非常强大的文档类,可以让你不必手动操作就可以彻底改变一些设计(这一点我们会在稍后提及)。

美国数学会提供了一些标准文档类的变种(amsart, amsbook),它们更接近于当时数学期刊出版物的传统设计。

两个最大且最流行的扩展类是 KOMA-Script 包和 memoir 文档类。KOMA-Script 包提供了标准类的一些「平行」类:scrartcl, scrreprt, scrbook 以及 scrlttr2,而 memoir 文档类更像是 book 类的一种拓展。

(译者注:CTeX 中文社区也提供了 ctex 宏包,其中包含了 ctexart, ctexrepctexbook 三个文档类,用来编写中文短文、中文报告和中文书籍。更多内容,可参见课程排版中文。)

5.3.幻灯片演示

slides 是为 20 世纪 80 年代中期物理投影片开发的文档类,它没有 PDF 交互式演示的一些功能。虽然的确有做到后者的现代文档类,但是对于一般的 LaTeX 文档来说,它们可能会稍显专业一些,所以我们会在进一步的细节页面讲述它。

6.LaTeX--扩展类

声明一个文档类后,你在 LaTeX 导言区中可以通过添加一个或多个「宏包(package)」来修改相关功能。宏包可以:

  • 改变 LaTeX 某些部分的功能
  • 向 LaTeX 添加新的命令
  • 更改文档的设计

6.1.改变工作方式

因为 LaTeX 内核(kernel)对于用户来说,自定义是很受限制的,所以需要使用扩展包来实现一些常见功能。第一件事就是在 LaTeX 中如何改变对于特定语言的排版方式(断字、标点符号、引文、本地化......)。因为不同的语言有不同的规则,所以告诉 LaTeX 要使用哪种规则是很重要的。这可以通过 babel 宏包来处理。

Matlab 复制代码
\documentclass{article}       % 定义文档类型为 article(文章类),这是 LaTeX 最基础的文档类
\usepackage[T1]{fontenc}      % 设置字体编码为 T1,支持西欧语言字符及正确的断字(hyphenation)规则

%\usepackage[french]{babel}   % [已注释] 若取消注释可启用法语排版规则(包括法语断字模式、日期格式等)

\usepackage[width = 6cm]{geometry} % 设置页面版心宽度为 6cm;窄版面会迫使 LaTeX 更频繁地断字以适配行宽

\begin{document}              % 文档正文开始标志

% 以下两段重复的英文填充文本用于演示 LaTeX 的自动断字(hyphenation)机制
% 由于上方将版心宽度限制为仅 6cm,单词在行末无法完整放下时会自动添加连字符断开
This is a lot of filler which is going to demonstrate how LaTeX hyphenates
material, and which will be able to give us at least one hyphenation point.
This is a lot of filler which is going to demonstrate how LaTeX hyphenates
material, and which will be able to give us at least one hyphenation point.

\end{document}                % 文档正文结束标志

尝试取消注释加载 babel 宏包的那一行(显然这一行带有误导性),然后观察排版效果。(标准断字规则是英语(美国)。)

根据涉及语言的不同,babel 宏包不仅影响着断字。

6.2.改变设计

调整某些独立于文档类方面的设计通常是有用的。最常见的是更改页边距。刚刚就在上面的例子中使用了 geometry 宏包,让我们现在再来看一个专门关于页边距的例子。

Matlab 复制代码
\documentclass{book}                % 书籍文档类,支持 \chapter 层级
\usepackage[T1]{fontenc}            % T1 字体编码,确保正确断字与字符输出
\usepackage[margin=1in]{geometry}   % 统一设置页面边距为 1 英寸

\begin{document}

Hey world!

This is a first document.


% ================
\chapter{Chapter One}               % 章标题(仅 book/report 类可用)
Introduction to the first chapter.


\section{Title of the first section} % 节标题
Text of material in the first section

Second paragraph.

\subsection{Subsection of the first section} % 小节标题

Text of material in the subsection.


% ================
\section{Second section}

Text of the second section.

\end{document}

和不加载 geometry 宏包相对比,你应该能够看到其效用。

6.3.添加新功能

LaTeX 的优势之一就是拥有上千个宏包可供挑选,包括编写数学公式的、提供超链接功能的、复杂颜色调整的......在后续的课程中我们会看到更多常见的宏包。

6.4.定义命令

有时你需要对文档设定一些特定的命令。或许是一些不能从现有宏包中找到的命令,或许只是一个需要重复输入的常见表达式。

下面的例子展示了一个对关键词应用特定样式的命令。

Matlab 复制代码
\documentclass{article}
\usepackage[T1]{fontenc}

\newcommand\kw[1]{\textbf{\itshape #1}}

\begin{document}

Something about \kw{apples} and \kw{oranges}.

\end{document}

在定义中,[1] 表示参数个数(这里只有一个),#1 表示提供的第一个参数(在这个例子中,指的是 applesoranges)。你最多可以设置 9 个参数,但一般情况下最好只有一个参数,有时甚至不需要设置任何参数。

注意,定义太多的命令或者定义太多的参数,都会因使用了不常见的语法而让源文件变得不易读。需要谨慎使用对特定文档定义的命令。

7.LaTeX--插图

为了向 LaTeX 文档插入外部来源的图片,

需要使用 graphicx 宏包来向 LaTeX 添加 \includegraphics 命令。

Matlab 复制代码
\documentclass{article}
\usepackage[T1]{fontenc}
\usepackage{graphicx}

\begin{document}
This picture
\begin{center}
  \includegraphics[height=2cm]{example-image}
\end{center}
is an imported PDF.
\end{document}

你可以插入 EPS, PNG, JPG 以及 PDF 文档。如果你有多于一种后缀的同名图像,那么可以写成 example-image.png。(如果你没有指定后缀名,那么 graphicx 宏包会尝试猜测出后缀名。)

你或许注意到,这里我们使用了一个新的环境:center,它用来将图片水平居中于页面。稍后我们会讨论更多关于间距和定位的内容。

7.1.图片外观

\includegraphics 命令为调整图片大小和形状、裁切图片提供了许多选项。其中有些选项是很常用的,需要稍微关注一下。

最常见的就是设定一个图片的宽度和高度,通常被设定为 \textwidth(或 \linewidth) 和 \textheight 的相对值。这里 \textwidth\linewidth 之间的差别是很微妙的,并且通常是相同的。\textwidth 是一整页的文本区域宽度,而 \linewidth 是当前行的宽度,会因为不同的行而不同(当启用文档类中的 twocolumn 选项时这种差别会非常明显)。LaTeX 会自动缩放图片以保持正确的宽高比例。

Matlab 复制代码
\documentclass{article}
\usepackage[T1]{fontenc}
\usepackage{graphicx}

\begin{document}
\begin{center}
  \includegraphics[height = 0.5\textheight]{test.png}
\end{center}
Some text
\begin{center}
  \includegraphics[width = 0.5\textwidth]{test.png}
\end{center}
\end{document}

你也可以尝试采用 scale 命令缩放图片,或者指定 angle 角度以旋转图片,亦可通过 cliptrim 裁切图片。

Matlab 复制代码
\documentclass{article}
\usepackage[T1]{fontenc}
\usepackage{graphicx}

\begin{document}
\begin{center}
  \includegraphics[clip, trim = 0 0 50 50]{example-image}
\end{center}
\end{document}

7.2.浮动图片

传统排版业,特别是技术文档的排版,图片可能会移动到文档中的其他位置上。这通常被称为浮动(float)。图片通常会被设定为浮动体,从而页面中不会有大面积的留白。

Matlab 复制代码
\documentclass{article}
\usepackage[T1]{fontenc}
\usepackage{graphicx}
\usepackage{lipsum}  % 产生填充假文

\begin{document}
\lipsum[1-4] % 只是一些填充文段

Test location.
\begin{figure}[ht]
  \centering
  \includegraphics[width=0.5\textwidth]{example-image-a.png}
  \caption{An example image}
\end{figure}

\lipsum[6-10] % 只是一些填充文段
\end{document}

这里 LaTeX 将图片和题注从 Test location 处移动到第二页的顶部,因为第一页下方已经没有图片大小的空间了。ht 选项影响了 LaTeX 在何处放置浮动体:这两个字母的意思是,浮动体可以在原来的地方(Test location 旁边),或者是一页的顶部。你最多可以使用四种位置描述符(position specifier):

  • h Here 这里(如果可以的话)
  • t Top 页面顶部
  • b Bottom 页面底部
  • p Page 浮动体专页

稍后,我们会了解该如何交叉引用浮动体以在文段中产生指向它们的链接。

你或许注意到了我们使用 \centering 而不是 center 环境来水平居中图片。这将避免浮动环境和 center 环境都会增加纵向间隔的局面。

8.LaTeX--表格

在 LaTeX 中,使用 tabular 环境构建表格。本课会假设你已经加载了 array 宏包以向 LaTeX 表格添加更多的功能(这些功能因为一些历史原因没有被内置在 LaTeX 内核中)。在导言区添加下面的代码即可继续操作:

Matlab 复制代码
\usepackage{array}

为了排版 tabular 表格,我们需要告诉 LaTeX 总共有多少列,以及应当怎样对齐。这通常通过一个额外的参数------通常被称为表格导言(table preamble)------来指定 tabular 列数。每列通常通过单个字母(被称为引导符,preamble-token)指定。可选的列格式如下:

类型 描述
l 列左对齐
c 列居中对齐
r 列右对齐
p{width} 固定列宽;文字会被自动折行并两端对齐
m{width} p 类似,但垂直居中对齐
b{width} p 类似,但垂直底部对齐
w{align}{width} 固定列宽,如果太长会稍稍出界。你可以选择水平对齐(align)选项 l, cr
W{align}{width} w 类似, 但是如果出界的话会收到警告

另外,还有一些其他的导言符不定义列,但也可能有用:

类型 描述
*{num}{string} 在表格导言中重复 string 引导符 num 次。你可以通过这种方式定义相同的列
>{decl} 在当前列的每个单元格前都添加 decl(很有用,比如需要对整列设定一个不同的字体时)
<{decl} 会在前一列的每个单元格后添加 decl
` `
@{decl} 将两列之间的空隙替换为 decl
!{decl} 在两列之间的空隙中央添加 decl

这两个表格列出了 LaTeX 和 array 宏包中所有的列描述符。其他宏包提供的一些其他列描述符会在进一步的细节页面给出。

l, c, r 标识的列将会根据最宽的单元格自动决定列宽。每一列都需要被声明。如果需要三个居中列,你可以在表格导言使用 ccc,当然,因为空格会被忽略掉,c c c 也是等同的。

表格主体中,列都是通过 & 和号来分隔的,行是通过 \\ 来另起的。

我们已经了解了制作第一个表格需要的所有知识。下面 &\\ 在代码中是对齐的,这虽然在 LaTeX 中并不是必要的,但是可以让源代码变得更易读。

Matlab 复制代码
\documentclass{article}
\usepackage[T1]{fontenc}
\usepackage{array}

\begin{document}
\begin{tabular}{lll}
  Animal & Food  & Size   \\
  dog    & meat  & medium \\
  horse  & hay   & large  \\
  frog   & flies & small  \\
\end{tabular}
\end{document}

如果一个表格列包含了太多的文字,仅使用 l, cr 的话你可能会遇到麻烦。可以从下面的例子中观察发生了什么:

Matlab 复制代码
\documentclass{article}
\usepackage[T1]{fontenc}
\usepackage{array}

\begin{document}
\begin{tabular}{cl}
  Animal & Description \\
  dog    & The dog is a member of the genus Canis, which forms part of the
           wolf-like canids, and is the most widely abundant terrestrial
           carnivore. \\
  cat    & The cat is a domestic species of small carnivorous mammal. It is the
           only domesticated species in the family Felidae and is often referred
           to as the domestic cat to distinguish it from the wild members of the
           family. \\
\end{tabular}
\end{document}

造成这个问题的原因是,l 类型的列即使已经超出了页面的范围,也会将所有的内容排版成一行。为了解决它,你可以采用**p 类型**。这种类型将内容排版为指定宽度的段落,垂直顶部居中------这是你大部分情况下所需要的排版方式。将上面的结果与下面的结果比较一下:

Matlab 复制代码
\documentclass{article}
\usepackage[T1]{fontenc}
\usepackage{array}

\begin{document}
\begin{tabular}{cp{9cm}}
  Animal & Description \\
  dog    & The dog is a member of the genus Canis, which forms part of the
           wolf-like canids, and is the most widely abundant terrestrial
           carnivore. \\
  cat    & The cat is a domestic species of small carnivorous mammal. It is the
           only domesticated species in the family Felidae and is often referred
           to as the domestic cat to distinguish it from the wild members of the
           family. \\
\end{tabular}
\end{document}

如果你的表格里有太多列是同样的类型,那么向表格导言重复写入大量描述符就太麻烦了。你可以通过使用 *{num}{string} 让事情变得简单一些,这会让 string 格式描述符重复 num 次。所以 *{6}{c}cccccc 是等价的。为了展示这一点,下面就是用新学语法重写后的样子:

Matlab 复制代码
\documentclass{article}
\usepackage[T1]{fontenc}
\usepackage{array}

\begin{document}
\begin{tabular}{*{3}{l}}
  Animal & Food  & Size   \\
  dog    & meat  & medium \\
  horse  & hay   & large  \\
  frog   & flies & small  \\
\end{tabular}
\end{document}

8.1.添加分割线

在介绍分割线之前,先提个建议:表格中应当少用纵向分割线,而且纵向分割线一般看起来不专业。事实上,在专业表格中,你不应当使用任何标准分割线;取而代之的,你应该熟练使用 booktabs 宏包里提供的工具,因此我们这里打算先讨论它。完整起见,我们将标准分割线的相关内容放在了进一步的细节页面中。

booktabs 提供了四种不同的分割线。每一种命令都需要在每一行之前或者在一个分割线之后使用。其中三种分割线命令是:\toprule, \midrule, \bottomrule。顾名思义,你应该清楚这些分割线放在哪儿:

Matlab 复制代码
\documentclass{article}
\usepackage[T1]{fontenc}
\usepackage{array}
\usepackage{booktabs}


\begin{document}
\begin{tabular}{lll}
  \toprule
  Animal & Food  & Size   \\
  \midrule
  dog    & meat  & medium \\
  horse  & hay   & large  \\
  frog   & flies & small  \\
  \bottomrule
\end{tabular}
\end{document}

第四种 booktabs 提供的分割线命令是 \cmidrule,可用来绘制出仅占用指定列范围、而不占满整行的分割线。列范围被表示为一个数字范围:{列号 -列号 }。即使你只需要对一列画分割线,也要指定一个范围(范围两端的列号相同罢了)。

Matlab 复制代码
\documentclass{article}
\usepackage[T1]{fontenc}
\usepackage{array}
\usepackage{booktabs}

\begin{document}
\begin{tabular}{lll}
  \toprule
  Animal & Food  & Size   \\
  \midrule
  dog    & meat  & medium \\
  \cmidrule{1-2}
  horse  & hay   & large  \\
  \cmidrule{1-1}
  \cmidrule{3-3}
  frog   & flies & small  \\
  \bottomrule
\end{tabular}
\end{document}

有时,一条分割线对于分割两行来说可能做的还是太过了,希望通过其他方式将两行更清晰地分隔开。在这种情况下,可以使用 \addlinespace 来插入一个小的间隙。

Matlab 复制代码
\documentclass{article}
\usepackage[T1]{fontenc}
\usepackage{array}
\usepackage{booktabs}

\begin{document}
\begin{tabular}{cp{9cm}}
  \toprule
  Animal & Description \\
  \midrule
  dog    & The dog is a member of the genus Canis, which forms part of the
           wolf-like canids, and is the most widely abundant terrestrial
           carnivore. \\
  \addlinespace
  cat    & The cat is a domestic species of small carnivorous mammal. It is the
           only domesticated species in the family Felidae and is often referred
           to as the domestic cat to distinguish it from the wild members of the
           family. \\
  \bottomrule
\end{tabular}
\end{document}

8.2.合并单元格

在 LaTeX 中,你可以通过 \multicolumn 命令水平合并两个单元格,如果需要使用这个命令,必须在输入单元格内容前使用。\multicolumn 接受三个参数:

  1. 需要合并多少个单元格
  2. 合并后单元格的对齐方式
  3. 合并后单元格的内容

对齐方式可以使用 tabular 中定义的任何方式,但只需要指定一个(不是多个)列类型。

Matlab 复制代码
\documentclass{article}
\usepackage[T1]{fontenc}
\usepackage{array}
\usepackage{booktabs}


\begin{document}
\begin{tabular}{lll}
  \toprule
  Animal & Food  & Size   \\
  \midrule
  dog    & meat  & medium \\
  horse  & hay   & large  \\
  frog   & flies & small  \\
  fuath  & \multicolumn{2}{c}{unknown} \\
  \bottomrule
\end{tabular}
\end{document}

你也可以在单个单元格上使用 \multicolumn 来屏蔽表格导言中对该列的定义。使用下面的方法居中表头:

Matlab 复制代码
\documentclass{article}
\usepackage[T1]{fontenc}
\usepackage{array}
\usepackage{booktabs}


\begin{document}
\begin{tabular}{lll}
  \toprule
  \multicolumn{1}{c}{Animal} & \multicolumn{1}{c}{Food} & \multicolumn{1}{c}{Size} \\
  \midrule
  dog    & meat  & medium \\
  horse  & hay   & large  \\
  frog   & flies & small  \\
  fuath  & \multicolumn{2}{c}{unknown} \\
  \bottomrule
\end{tabular}
\end{document}

LaTeX 不支持纵向单元格的合并。通常通过将单元格留空的方式,来告诉读者单元格是跨行的。

Matlab 复制代码
\documentclass{article}
\usepackage[T1]{fontenc}
\usepackage{array}
\usepackage{booktabs}


\begin{document}
\begin{tabular}{lll}
  \toprule
  Group     & Animal & Size   \\
  \midrule
  herbivore & horse  & large  \\
            & deer   & medium \\
            & rabbit & small  \\
  \addlinespace
  carnivore & dog    & medium \\
            & cat    & small  \\
            & lion   & large  \\
  \addlinespace
  omnivore  & crow   & small  \\
            & bear   & large  \\
            & pig    & medium \\
  \bottomrule
\end{tabular}
\end{document}
相关推荐
月昤昽1 个月前
pgfplots绘制坐标轴
latex·tikz
月昤昽1 个月前
PGFPlots与TikZ核心差异解析
latex·tikz
碧海饮冰2 个月前
LaTex排版|语法合集|完全入门教程
latex·overleaf·latex教程
月昤昽2 个月前
black!50与black!20颜色含义解析
latex·tikz
月昤昽2 个月前
TikZ坐标单位详解
latex·tikz
basketball6162 个月前
Latex常用符号表示方法
latex
secondyoung2 个月前
Markdown数学公式语法速查手册
算法·编辑器·markdown·latex
喝凉白开都长肉的大胖子2 个月前
latex 中改变其中一部分文本颜色
latex
迷路爸爸1802 个月前
VSCode / Cursor 中 LaTeX Workshop 的 settings.json 配置:编译与 SyncTeX 跳转
ide·vscode·json·latex