前言

本系列文章是《LaTeX入门》(刘海洋老师著)一书的学习笔记。我将在在线协作平台Overleaf上实践从本书学到的技能,如无特殊说明,后文的所有操作均在该平台上进行。

为了更好地消化、掌握LaTeX,本文对学到的内容进行了组织和重构,每部分包含“简介”、“道”、“术与案例”三个部分。对于初学者来说,我推荐使用刘海洋老师的这本书作为入门教材,通俗易懂,深入浅出。

另外,Overleaf默认不支持中文输入。根据相关知乎问答,我们可以通过在文档中加入\usepackage[UTF8]{ctex},并配置Compiler为XeLaTeX来实现中文输入。

为Hugo博客加入$\LaTeX$渲染功能

经过几次更换,目前我使用Hugo创建博客,博客主题来自joway/hugo-theme-yinyang,该主题默认并不支持LaTeX渲染。经过搜索,我发现KaTeX是一个不错的LaTeX渲染库,并参考博文Math Typesetting in Hugo成功将其应用到了我的博客里。我在这里简单记录一下配置过程,供有需要的朋友参考:

首先,在博客根目录下建立layouts/partials/helpers路径,在其中创建katex.html文件,并输入如下内容:

<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/katex@0.16.0/dist/katex.min.css">
<script defer src="https://cdn.jsdelivr.net/npm/katex@0.16.0/dist/katex.min.js"></script>

<script defer src="https://cdn.jsdelivr.net/npm/katex@0.16.0/dist/contrib/auto-render.min.js" onload="renderMathInElement(document.body);"></script>

<script>
    document.addEventListener("DOMContentLoaded", function() {
        renderMathInElement(document.body, {
            delimiters: [
                {left: "$$", right: "$$", display: true},
                {left: "$", right: "$", display: false}
            ]
        });
    });
</script>

其中,katex@后的版本号最好使用从KaTeX官方页面上直接获取的最新数值。上方代码中最下方的片段是为了支持行内渲染,如果不需要,可以删去。

然后,在layouts/partials/head.html文件中加入以下内容:

{{ if .Params.math }}{{ partial "helpers/katex.html" . }}{{ end }}

这样就配置完成了。以后如果我们需要在某篇文章中支持LaTeX渲染,在该文章文件头部前置选项中加入math: true即可。让我们来测试一下吧,接下来我将输入$\LaTeX$,你将看到:$\LaTeX$。

简介

$\TeX$源自technology的希腊词根,由Donald Ervin Knuth教授(1974年图灵奖获得者)为了编排他的《计算机程序设计艺术》而发明。与其他专业排版软件不同的是,TeX是面向作者的,通常由书籍或文章的作者本人使用。

$\LaTeX$则由Leslie Lamport博士(2013年图灵奖获得者)创造,其名称由Lamport博士的姓和TeX组成。LaTeX实际上是TeX编写的一组宏代码,拥有比TeX更加规范的命令和整套的预定义格式。在1994年LaTeX2e完善后,目前LaTeX已经成为国际上科技领域专业排版的实施标准,相关专业的学术期刊都主要接受LaTeX作为投稿格式。

本章中,刘海洋老师首先介绍了如何安装、运行LaTeX工具套件,然后通过用LaTeX编写一篇介绍勾股定理的文章的方式来讲解LaTeX的基本用法。如前文所述,我主要使用Overleaf,因此略过了LaTeX工具套件的安装和运行部分。

  1. 无论是对已经写好的文章进行排版,还是从零开始直接写文章,从提纲开始都是一个好主意。写出LaTeX文档的框架,进行必要的基本设置,然后再填入内容就方便了。
  2. 我们使用自定义的环境myquote和自定义的命令\degree代替特殊格式控制。类似地,在设定插图标题字体时,并不把字体、字号命令塞入\caption命令的参数中,而是使用caption宏包统一设置。这样看起来绕弯子,实际上更清晰、更容易修改格式,对于编写和维护长文档十分重要。
  3. LaTeX是一种结构化的排版语言,在填写标准格式的模板时,可以忽略编号、格式等许多具体细节。在文档排版中应主动追求内容与格式的分离,在document环境之内避免直接使用诸如字体字号、对齐所进的格式控制命令,而代之以有具体意义的环境和命令,让文档变得清晰。这种模式化的操作能提高工作效率,被称为“所想即所得”。
  4. 然而,机器没有智能化到想人之所想的程度,使用LaTeX也可能编排出效果糟糕、代码混乱的文章。要得到好的文章,无论是在内容上还是在排版形式上,都得靠我们自己。
  5. 绝大部分设计工作是在文章的导言区通过一些命令定义和参数设定来完成的。

术与案例

下面是一个文章编写案例,你也可以访问我的Overleaf项目来查看具体的渲染效果。

%-*- coding: UTF-8 -*-
% gougu.tex
\documentclass{article} % 声明这是一篇文章

\usepackage[UTF8]{ctex} % 提供中文支持
\usepackage{graphicx} % 提供插入图片的功能
\usepackage{float} % 提供后文中不浮动的图表环境
\usepackage{amsmath} % 提供 \eqref 命令
\usepackage{geometry} % 设计页面尺寸
% A6纸大小、版心居中、长宽占页面0.8倍
\geometry{a6paper, centering, scale=0.8}
% 所有图表标题使用悬挂对齐方式(编号向左突出),整体用小字号,标题文本使用斜体
\usepackage[format=hang, font=small, textfont=it]{caption} % 改变图表标题格式
% 在目录中增加目录项本身、参考文献、索引等项目。nottoc用于取消显示目录本身
\usepackage[nottoc]{tocbibind}

\title{\heiti 杂谈勾股定理} % 声明文章标题,并用黑体
\author{\kaishu 张三} % 声明作者,并用楷书
\date{\today} % 声明日期

\nocite{Shiye} % 可以列出没有直接引用的文献
\bibliographystyle{plain} % 声明参考文献格式

\newtheorem{thm}{定理}
% 定义一个新环境
\newenvironment{myquote}
    {\begin{quote}\kaishu\zihao{-5}}
    {\end{quote}}
% 定义一个新命令表示角度
\newcommand\degree{^\circ}
% 以上内容属于导言区(preamble),通常用来对文档性质做设置或自定义命令。

\begin{document} % 与 \end{document} 一起定义正文范围

\maketitle % 输出文章标题、作者等信息

\begin{abstract} % 摘要
这是一篇关于勾股定理的小短文。
\end{abstract}

\tableofcontents	% 输出目录

\section{勾股定理在古代} % 节标题
\label{section:ancient} % 节交叉引用
% \footnote{} 用于脚注
% 注意下面两个短`-`将输出一个en dash,通常用来表示数字的范围。
% \cite 进行引用
西方称勾股定理为毕达哥拉斯定理,将勾股定理的发现归功于公元前6世纪的毕达哥拉斯学派\cite{Kline}。该学派得到了一个法则,可以求出可排成直角三角形三边的三元数组。毕达哥拉斯学派没有书面著作,该定理的严格表述和证明则见于欧几里德\footnote{欧几里德,月公元前330--275年。}《几何原本》的命题47:“直角三角形斜边上的正方形等于两直角边上的两个正方形之和。”证明是用面积做的。

我国《周髀算经》载商高(约公元前12世纪)答周公问:

% 以下为引用表示法,这里引用的是文前定义的新环境myquote
\begin{myquote}
勾广三,股修四,径隅五。
\end{myquote}

又载陈子(约公元前7--6世纪)答荣方问:

\begin{myquote}
若求邪至日者,以日下为勾,日高为股,勾股各自乘,并而开方除之,得邪至日。
\end{myquote}

% 注意 \ref 用于交叉引用
都较古希腊更早。后者已经明确道出勾股定理的一般形式。图\ref{fig:xiantu}是我国古代对勾股定理的一种证明\cite{quanjing}
% 插入图片的方法:figure环境
\begin{figure}
    \centering % 居中
    \includegraphics[scale=0.6]{xiantu.pdf}
    % 自动编号并加标题
    \caption{宋赵爽在《周髀算经》注中作的弦图(仿制),该图给出了勾股定理的一个极具对称美的证明。}
    % 编号引用
    \label{fig:xiantu}
\end{figure}

\section{勾股定理的近代形式}
勾股定理可以用现代语言描述如下:

% 插入定理
\begin{thm}[勾股定理]
直角三角形斜边的平方等于两腰的平方和。
\end{thm}

% 行内公式(inline formula)采用$...$的形式
可以用符号语言表述为:设三角形$ABC$,其中$\angle C = 90\degree$,则有

% 单独居中写在一行的公式,称为displayed formula
\begin{equation}\label{eq:gougu}
AB^2 = BC^2 + AC^2
\end{equation}

% \eqref{} 引用公式编号
% \emph{} 用于强调
满足式\eqref{eq:gougu}的整数称为\emph{勾股数}。第\ref{section:ancient}节所说毕达哥拉斯学派得到的三元数组就是勾股数。下表列出了一些较小的勾股数:

% 绘制表格的方法
\begin{table}[H] % H 表示放在这里,不浮动
\begin{tabular}{|rrr|} % rrr表示表格有三列,都是右对齐
\hline % 产生横线
直角边 $a$ & 直角边 $b$ & 斜边 $c$ \\ % 行与行用 \\ 隔开,表项用 & 隔开
\hline
3 & 4 & 5 \\
5 & 12 & 13 \\
\hline
% 用注释符取消换行产生的那个多余空格
\end{tabular} %
\qquad % 产生一个约2em宽度的空白
($a^2 + b^2 = c^2$)
\end{table}

\bibliography{math} % 提示TeX从文献数据库math中获取文献信息打印参考文献列表
\end{document}

相应的参考文献数据库math.bib内容如下:

% Encoding: UTF8

@BOOK{Kline,
    title = {古今数学思想},
    publisher = {上海科学技术出版社},
    year = {2002},
    author = {克莱因}
}

@ARTICLE{quanjing,
    author = {曲安京},
    title = {商高、赵爽与刘徽关于勾股定理的证明},
    journal = {数学传播},
    year = {1998},
    volume = {20},
    number = {3}
}

@BOOK{Shiye,
    author = {矢野健太朗},
    title = {几何的有名定理},
    year = {1986},
    publisher = {上海科学技术出版社}
}

对于参考文献来说,一般可以直接使用论文作者提供的,或文献辅助工具自动生成的内容,不必手动打字输入。

我们可以直接将上述内容放在Overleaf中进行渲染。另外,一个LaTeX命令(宏)的格式为:

  1. 无参数:\command
  2. 有n个参数:\command{arg1}{arg2}...{argn}
  3. 有可选参数:\command[{argopt}]{arg1}{arg2}...{argn}

LaTeX环境(environment)就是一个分组(group),环境的一般格式为:

\begin{环境名}[{可选参数}]{其他参数}
环境内容
\end{环境名}

其他注意事项:

  • \zihao\kaishu这样的命令会影响当前环境中后面的所有文字,而\footnote则只在原地发生效果。
  • 正文中使用空行分段。单个换行不会另起一段。
  • 段前不用打空格,即使打了空格也会被忽略。
  • 中文文档会自动处理汉字与其他符号之间的距离。
  • 注意上面的案例中使用\label\ref\eqref对图片、表格、公式和节标题进行引用的方法。