LaTeX学习笔记 1 | 一个中文排版例子

LaTeX吉祥物

本文目录

  • 题外话
  • 熟悉LaTeX
    • LaTeX的读音和写法
    • 书中介绍的LaTeX版本会不会过时
    • 再谈LaTeX发行版
  • 一个简单的中文排版例子
  • 关于TeXstudio语法检查的设置
  • 牛刀小试,第一个有模有样的作品
    • 源代码
    • 排版效果
    • 代码拆解
      • 调整TeXstudio的默认编译器为XeLaTeX
      • 基础语法
      • 换行与空格
      • 命令与环境
      • 数学公式
      • 使用图表
      • 参考文献与JabRef的安装使用
      • 交叉引用
      • 文章格式
      • 易错点总结
  • 后记

题外话

等了三天,刘海洋教授的《LaTeX入门》终于到手了,EMS还是不如顺丰给力呀。粗略一翻,这本书的排版真的是赏心悦目,我已经迫不及待要和它共度美好时光了。上几张图秀一下它的颜值。


《LaTeX入门》封面
《LaTeX入门》内容

熟悉LaTeX

LaTeX的读音和写法

LaTeX的官方标准读音音译成中文大约是“拉泰赫”,写法要严格按照大小写交错写成LaTeX

书中介绍的LaTeX版本会不会过时

刘海洋教授在本书中使用的是LaTeX格式版本为2e,意思是超过了第2版,接近却没有达到第3版。LaTeX2e在1994年就已经完善,考虑到这本书是2013年出版的,而LaTeX又是在不断更新进化的,我特地去查了一下LaTeX3相关的内容,点击这里查看LaTeX3的主页。根据我的调查和理解,目前来说,我认为使用LaTeX2e完全满足日常需要。别的不多说,既然《LaTeX入门》这本书是用LaTeX2e排版的,我还有什么不满足的呢?

再谈LaTeX发行版

之前有粗略说过CTeX和TeXLive等发行版,现在详细介绍一下。

对比 CTeX TeXLive
操作系统 只限于Windows下 通用
制作人 中科院吴凌云 TUG
其他 对MiKTeX的再封装 可刻录在光盘直接运行

刘海洋教授还介绍了一些编辑器和PDF阅读器,不过我个人认为,对初学者来说,没有必要把所有的可用软件都折腾一番。现在的当务之急,是建立LaTeX技能树的主干,先把知识体系建立起来,那些零零碎碎的小知识都可以后再扩充。

一个简单的中文排版例子

不知读者是否发现,在我们之前测试TeXstudio是否可用的那个例子里,直接添上中文是不可以的,虽然编译没有报错,但无法输出。这是因为 TEX 原本是面向西文写作的,默认并没有加载中文字体。通过更换文档类型,可以正确显示出中文。代码如下:

\documentclass[UTF8]{ctexart}
\begin{document}
    \section{文字}
    特可爱排版。
    \section{数学}
    \[
        a^2+b^2=c^2
    \]
\end{document}

显示效果如下:


显示效果

这段代码挺好理解的。如果你懂编程,你肯定直到UTF8代表什么,不懂得话点击这里查看。反斜线\ 代表的是其后紧跟的是一个排版命令,而非作者的文字内容。documentclass,顾名思义,就是文档类了。LaTeX的优势就在于让写作与排版分离,把排版大量繁琐的要求隐藏在格式之下,想必这个格式就是只一开始加载的文档类了。ctexart嘛,ctexarticle的缩写,暂且不管这个ctexart是哪路神仙,知道比起之前的article来它能让我们输出中文即可。接下来是一对命令,\begin{document}\end{document},看起来被它们包含夹在中间的应该就是排版的正文部分了。\section好理解,段落嘛。至于下一对命令,\[\],它们之间包含的应该是对数学公式的特殊处理。

关于TeXstudio语法检查的设置

突然发现TeXstudio会对所有正在编辑的中文加红色下划线提示报错,看着挺烦人的,选择菜单栏里的Options-Configure TeXstudio,取消下图红色椭圆处的对勾即可。

牛刀小试,第一个有模有样的作品

这一节研究的是一个相对实际的例子,如刘海洋教授所说,有一些代码或许难以理解,确实如此,有些代码具体怎么执行的我不知,但根据基本的英语能力和编程功底,大概还是猜得出一些代码的作用的。

这是一片小小的科技论文,麻雀虽小五脏俱全,结构上包括标题、摘要、目录、正文和参考文献,内容上包括文字、公式、图形、表格等。内容很多,但别怕,这只是一种惯用的教学伎俩,先给你一个完整工程让你感受一下,这对你以后的学习大有裨益。

源代码

%-*- coding: UTF-8 -*-
% gougu.tex
% 勾股定理
\documentclass[UTF8]{ctexart}
\usepackage{graphicx}
\usepackage{float}
\usepackage{amsmath}
\usepackage{geometry}
\geometry{a6paper,centering,scale=0.8}
\usepackage[format=hang,font=small,textfont=it]{caption}
\usepackage[nottoc]{tocbibind}

\newenvironment{myquote}
{\begin{quote}\kaishu\zihao{-5}}
{\end{quote}}

\newcommand\degree{^\circ}

\title{\heiti 杂谈勾股定理}
\author{\kaishu 纸山}
\date{\today}

\bibliographystyle{plain}

\newtheorem{thm}{定理}

\begin{document}
    
    \maketitle
    \begin{abstract}
        这是一篇关于勾股定理的小短文。
    \end{abstract}
    \tableofcontents
    \section{勾股定理在古代}\label{sec:diyijie}
    西方称勾股定理为毕达哥拉斯定理,将勾股定理的发现归功于公元前 6 世纪的
    毕达哥拉斯学派 \cite{Kline}。该学派得到了一个法则,可以求出可排成直角
    三角形三边的三元数组。毕达哥拉斯学派没有书面著作,该定理的严格表述和证
    明则见于欧几里德\footnote{欧几里得,约公元前 330--275 年。}《几何原本》
    的命题 47:“直角三角形斜边上的正方形等于两直角边上的两个正方形之和。 ” 
    证明是用面积做的。
    
    我国《周髀算经》载商高(约公元前 12 世纪)答周公问:
    \begin{myquote}
        勾广三,股修四,径隅五。
    \end{myquote}
    又载陈子(约公元前 7--6 世纪)答荣方问:
    \begin{myquote}
        若求邪至日者,以日下为勾,日高为股,勾股各自乘,并而开方除之,得邪至日。
    \end{myquote}
    都较古希腊更早。后者已经明确道出勾股定理的一般形式。图\ref{fig:xiantu}是
    我国古代对勾股定理的一种证明 \cite{quanjing}。
    \begin{figure}[ht]
        \centering
        \includegraphics[scale=0.2]{xiantu.png}
        \caption{宋赵爽在《周髀算经》注中作的弦图(仿制),该图给出了勾股定理一个极具对称美的证明。 }
        \label{fig:xiantu}
    \end{figure}
    \section{勾股定理的近代形式}
    勾股定理可以用现代语言表述如下:
    \begin{thm}[勾股定理]
        直角三角形斜边的平方等于两腰的平方和。
    \end{thm}

    可以用符号语言表述为:设直角三角形$ABC$,其中$\angle C = 90\degree$,则有
    \begin{equation}\label{eq:gougu}
    AB^2 = BC^2 + AC^2.
    \end{equation}
    满足式\eqref{eq:gougu}的整数称为\emph{勾股数}。第\ref{sec:diyijie}节所说
    毕达哥拉斯学派得到的三元数组就是勾股数。下表列出一些较小的勾股数:
    \begin{table}[H]
        \begin{tabular}{|rrr|}
            \hline
            直角边 $a$ & 直角边 $b$ & 斜边 $c$ \\
            \hline
            3 & 4 & 5 \\
            5 & 12 & 13 \\
            \hline
        \end{tabular}%
        \qquad
        ($a^2 + b^2 = c^2$)
    \end{table}
    \nocite{Shiye}
    \bibliography{math}
\end{document}

排版效果

排版效果
排版效果

怎么样,是不是看起来挺不错,心动不如行动,快来看一下是什么样的代码能排出如此精美的文章的吧!

代码拆解

区区七八十代码,竟花费了我接近两个小时来调试,颇为不易,接下来让我来拆解一下这段代码。

调整TeXstudio的默认编译器为XeLaTeX

自此以后的编译工作我们都使用XeLaTeX,一开始TeXstudio默认的编译器可能不是它,需要我们手动修改。选择菜单栏里的Options-Configure TeXstudio,修改下图红色椭圆处即可。

基础语法
  • 以%开头的行是注释,不会对排版效果产生任何影响,只是用来方便阅读源代码。
  • \title{}\author{}\date{\today},顾名思义,声明了标题、作者和写作日期,\today当然是自动生成今日的日期。这只是声明,还需要下面的\maketitle命令使之出现在编译结果中。
  • \begin{document}之前的部分称为导言区,往往用来对文档的性质做一些设置,或自定义一些命令。
  • \bibliographystyle{plain}用来声明参考文献的格式,\bibliography{math}将从同文件夹下的math.bib中获取参考文献信息。
  • \tableofcontents用来输出目录。
  • \zihao命令设置字号,\kaiti设置字体为楷体
换行与空格
  • 空行分段,单个回车不分段。LaTeX会忽略单个回车、段前的空格和汉字后面的空格,而其他符号后面的空格则会保留。
  • 使用XeLaTeX时,ctexart会调用xeCJK宏包,自动处理汉字与其他符号之间的距离。
  • 为了使源代码更容易阅读,我们可以利用上面两点特性:在合适的位置敲一下回车,不要让一行代码太长;在汉字与其他符号之间加一个空格,使得代码更清晰。
命令与环境
  • 命令的格式为:以反斜线\开头,后接一串字母表示命令名,参数用花括号括起来,可选参数用方括号。
  • 环境的格式为:\begin{环境名}(环境内容)\end{环境名},故源代码中的document,abstract,myquote,figure,thm,equation,table,tabular都是环境,其中myquote是自定义的环境。
  • 自定义环境:源代码中的\newenvironment{myquote}{\begin{quote}\kaishu\zihao{-5}}{\end{quote}}用来自定义环境,为什么这样写,这还得继续学习才能知晓。
  • 自定义命令:源代码中的\newcommand\degree{^\circ}用来自定义命令,新命令\degree的效用等价于^\circ
数学公式

数学公式分为两种,一个是正文公式,一个是显示公式。

  • 正文公式:把公式用一对美元符号$$括起来即可,主要用于较短的夹在行文中的公式。
  • 显示公式:使用equation环境,主要用于较长的比较重要的需要引用的公式。
使用图表

插图功能:需要使用宏包,在引言区使用\usepackage{graphicx}命令。一个用来插图的代码标准模板如下:

\begin{figure}[ht]
        \centering
        \includegraphics[scale=0.2]{图片路径}
        \caption{ }
\end{figure}

figure环境的可选参数,ht分别表示here和top,表示浮动体可以出现在环境周围的文本所在处(here)和一页的顶部(top)。\centering表示居中,scale是对图片的放缩比例,图片路径是指相对于当前编辑的.tex文件路径*,请注意这一点。\caption当然是指图片的标题。

图表功能:表格由tabular环境完成,一个用来制作表格的标准模板如下:

\begin{tabular}{|rrr|}
        \hline
        直角边 $a$ & 直角边 $b$ & 斜边 $c$ \\
        \hline
        3 & 4 & 5 \\
        5 & 12 & 13 \\
        \hline
\end{tabular}

|rrr|表示表格有三列,都是右对齐(r代表right),在第一列前面和第三列后面各有一条垂直的表格线。\\把行与行隔开,&把列与列隔开,\hline画一条横线。

参考文献与JabRef的安装使用

LaTeX使用BibTeX处理参考文献,BibTeX需要我们定义“参考文献数据库”,参考文献数据库是一个后缀为.bib的文件,本文所使用的参考文献数据库如下:

% Encoding: UTF-8

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

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

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

@Comment{jabref-meta: databaseType:bibtex;}

你可以复制粘贴到记事本里,然后保存为math.bib。注意这个文件的路径也是相对于当前编辑的.tex文件路*,直接在命令里写成\bibliography{math}表明,math.bib和当前编辑的.tex文件在同一文件夹下。

其实我们大可不必手动输入,有专门的软件JabRef来管理文献数据库,点击这里下载。安装完成后,点击菜单栏file->New BibTeX database,然后点击下图红色椭圆中的加号:

选择你要添加的文献类型,我们添加了两个Book和一个Article,然后就可以输入内容了。这里需要解决一个中文乱码的问题。点击菜单栏Options->Preferences,点击下图红色椭圆处的按钮,把字体换成SimSun,保存即可。

交叉引用

除了参考文献,图表和公式的编号也可以引用。基本的交叉引用命令是\ref,它以标签为参数,得到被引用的编号。标签通过\label命令设置,比如在插图时已经为弦图定义了标签fig:xiantu。在本文中,还为表格和section设置了标签。

其中,对于公式的引用,数学宏包amsmath定义了\eqref命令,专门用于公式的引用,特色是能产生括号。

文章格式

设计页面尺寸可以使用geometry宏包,代码:

\usepackage{geometry}
\geometry{a6paper,centering,scale=0.8}

定义页面使用A6纸大小,版心居中,长宽占页面的0.8倍。

易错点总结
  • 引用图片、文献数据库时注意路径。
  • 命令不要抄错了,很容易把大括号抄成方括号。
  • 刘海洋教授在文中说要编译四次,按四次按钮。TeXstudio貌似不需要,点击一次按钮后,自动编译了四次。
  • 不要试图读完本文就想排出这个效果,最好是通读一下《LaTeX入门》的第一章。

后记

今天学习了《LaTeX入门》的第一章,虽然只有50页,但因为这个小例子的存在,难度不算低,有些地方折腾了好久,但最终得到了和书中一模一样的排版,还是很令人自豪的。我自认为刘海洋教授在本章写的内容我基本看明白了,读者对本章有什么疑问可在评论里留言,我们可以多交流。

推荐阅读更多精彩内容