0%

Latex

1 Recognize \(\LaTeX\)

通过更换文档类型,可以正确显示中文。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
% English environment, can't display chinese
\documentclass{article}

\begin{article}
This is my first document.

Happy \TeX ing!

\end{article}

%---------------------------
% below is chinese environment
\documentclass[UTF8]{ctexart}

\begin{document}
\section{文字}
测试文字。
\section{数学}
\[
a^2 + b^2 = c^2
\]
\end{document}

1.1 从一个例子说起

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
% -*- coding:UTF-8 -*-
% gougu.tex
% 勾股定理
\documentclass[UTF8]{ctexart}

\title{杂谈勾股定理}
\author{张三}
\date{\today}

\bibliographystyle{plain} % 声明参考文献的格式
% 导言区(preamble),对文档的性质做一些设置,或者自定义一些命令

\begin{document}
\maketitle % 输出论文标题
\begin{abstract}
这是一篇关于沟谷定理的小短文。
\end{abstract}

\tableofcontents % 输出目录
\section{勾股定理在古代}
西方称勾股定理为\emph{毕达哥拉斯定理},将勾股定理的发现归功于公元前 6 世纪的毕达哥拉斯学派。该学派得到了一个法则,可以求出可排成直角三角形三边的三元数组。毕达哥拉斯学派没有书面著作,该定理的严格表述和证明则见于欧几里德\footnote{欧几里得,约公元前 330--275年。}《几何原本》的命题 47:“直角三角形斜边上的正方形等于两直角边上的两个正方形之和。”证明是用面积做的。

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

% 引用环境
\begin{quote}
\zihao{-5}\kaishu 引用的内容 % 小五号楷书
\end{quote}

\section{勾股定理的近代形式}
\bibliography{math} % 从文献数据库 math 中获取文献信息,打印文献列表


\end{document}

整个文章的框架为:

  • 前面以百分号 % 开头的行是注释,TeXStudio 中的多行注释快捷键为ctrl+T,取消多行注释快捷键为ctrl+U
  • 第 4 行是文档类,中文短文所以使用 ctexart,并用 [UTF8] 说明编码
  • 第 6-8 行声明了整个文章的标题、作者和写作日期,这些信息通过\maketitle出现在排版中
  • \bibliographstyle声明参考文献的格式

以上\begin{document}之前的部分为导言区(preamble),导言区用来对文档的性质做一些设置,或自定义一些命令

  • \begin{document}\end{document}声明了一个 document 环境,里面是论文的正文部分,也就是直接输出的部分。

  • \tableofcontents命令输出目录

  • \bibliography{math}提示 \(\TeX\) 从文献数据库 math 中获取文献信息,打印参考文献列表

  • 为了格式上的清晰,源文件中适当使用了一些空行作为分隔,在正文外的部分,空行不表示任何意义。

  • 通常汉字后的空格会被忽略,其他符号后面的空格会被保留

1.2 Command and Enviroment

  • Command

    • \footnote:脚注
    • \emph{Text}:强调
    • \zihao{number}:字号
    • \qquad:产生2 em(大约 2 个 ’M‘ 的宽度)的空白
  • Environment

    格式为

    1
    2
    3
    \begin{envi name}
    < content >
    \end{envi name}
    • quote:引用环境
    • abstract:摘要环境
    • euqation:公式环境

    特殊环境

    1
    2
    3
    4
    5
    6
    7
    8
    \newtheorem{thm}{定理}
    \begin{thm}[勾股定理]
    直角三角形斜边的平方等于两腰的平方和。

    可以用符号语言表述为……
    \end{thm}


1.3 graph

\includegraphics[width]{pic_dir}:插图

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
\begin{center}
% Requires \usepackage{graphicx}
\includegraphics[width=0.9\textwidth]{pic_dir}
% Requires \usepackage{caption}
\captionsetup{font=small}
\captionsetup{labelsep=quad}
\captionof{figure}{WTI crude oil price}
\label{fig:WTI}
\end{center}

% 可选参数 ht,表明浮动体可以出现在周围文本所在处(here)或一页顶部(top)
\begin{figure}[ht]
\centering
\includegraphics[width=0.9\textwidth]{pic_dir}
\captionsetup{font=small}
\captionsetup{labelsep=quad}
\captionof{figure}{WTI crude oil price}
\label{fig:WTI} % 给图形定义标签,使用这个标签可以再文章其他地方引用
\end{figure}

插入的图形就是一个有内容的矩形盒子,在正文中和一个很大的字符没有区别。除了一些很小的标志图形,一般很少把插图直接夹在文字之中,而是使用可以变动相对位置的环境列出,称为浮动体(float)

1.4 Table

表格与\includegraphics命令得到的插图一样,都是比较大的盒子。一般也放在浮动环境table

1
2
3
4
5
6
7
8
9
10
11
12
13
% 参数 H 表示 ‘就放在这里,不浮动’,需要 \usepackage{float}
下表列出了一些较小的勾股数:
\begin{table}[h]
\centering
\begin{tabular}{|c|c|c|}
\hline
直角边 $a$ & 直角边 $b$ & 斜边 $c$ \\
\hline
3 & 4 & 5 \\
5 & 12 & 13 \\
\hline
\end{tabular}
\end{table}

tabular环境有一个参数,里面声明了表格中列的模式:

  • |c|c|c|:三列,居中对其,不同列数据用表格线隔开
  • \\:表格换行,内部不同数据单元用&分隔
  • \hline:横向表格线

上表和正文是直接连在一起,不允许浮动,这里本来不应该使用浮动table环境的,但仍然使用了table环境,在表示位置的参数处使用了[H],表示 “就放在这里,不浮动”,该参数是 float宏包提供的功能,需要在导言区使用\usepackage{float}

1.5 Bibliography

BibTeX 是专用于处理 $ $ 文档文献列表的程序,此时编译test.tex文档时运行程序四次:

  • xelatex test.tex
  • bibtex test.tex
  • xelatex test.tex
  • xelatex test.tex

正文中通过用命令\cite{label}引用文献,使用\cite命令会在引用的位置显示文献在列表中的编号,同时在辅助文件中说明文献将被引用。

如果要在列表中显示并不直接引用的文献,可以使用\nocite命令,一般是放在\bibliography{name}之前

引用不仅局限于文献,图表、、公式的编号,只要事先设定了 label,同样可以通过\ref进行引用。实际中引用公式非常常用,数学宏包 amsmath就定义了\eqref命令,专用于公式的引用,并能产生括号。

1.6 设计文章格式

  • 设计页面尺寸可以使用geometry宏包
1
2
3
\usepackage{geometry}
\geometry{a6paper,centering,scale=0.8}
% 定义页面为 A6 纸大小,版心居中,长宽占页面的 0.8 倍
  • 改变图表标题格式可以使用 caption宏包
1
2
\usepackage[format=hang,font=small.textfont=it]{caption}
% 设定图表标题使用悬挂式对齐方式(即编号向左突出),整体用小字号,而标题文本使用斜体(对汉字来说是楷书)
  • 增加目录的项目可以用 tocbibind宏包
1
2
\usepackage[nottoc]{tocbibind}
% 默认会在目录中加入目录项本身、参考文献、索引等项目,使用 nottoc 选项取消了在目录中显示本身
  • 标题和作者的字体更改:
1
2
3
\title{\heiti 杂谈勾股定理} % 黑体
\author{\kaishu 张三} % 楷书
\date{\today}
  • 修改 quote环境字体
1
2
3
4
5
6
\newenviroment{myquote}
{\begin{quote}\kaishu\zihao{-5}}
{\end{quote}}
% myquote 包含三个参数,第一个为环境名名字,后两个分别是在环境开始和末尾处的代码

\newcommand\degree{^\circ}
  • 取消连字(ligature)

    \(\LaTeX\) 在排版中会将单词中的一些字母连写为一个字符,连字的有无和多少一般由使用的字体决定,偶尔出于美观的考虑,需要取消连字,可以用空的分组,或借用\/命令:

    1
    shelfful shelf{}ful shelf\/ful

2 Organize article

2.1 标点

  • 引号 `'

    引号在 \(\LaTeX\) 中使用 ` (左引号)或 '(右引号 表示,如果遇到单引号和双引号连续出现的情况,则在中间用\ ,命令分开:

    1
    ``\,`a' and `b'\,''

    \, 命令会产生很小的间隔

  • 减号-

    -\(\LaTeX\) 正文中有多种用途

    • -:连字符(hyphen)

    • --: en dash,用来表示数字范围,但按照中文的协作习惯,表示数字范围也常用符号:\(\sim\)

    • ---:em dash,即破折号

      1
      2
      3
      4
      5
      n inter-word dash or, hyphen, as in X-ray.

      An medium dash for number range, like 1--2.

      A punctuation dash---like this.
  • 省略号\ldots\dots

    西文的省略号(ellipsis)使用\ldots\dots命令产生,相比直接输入三个句号,它所拉开的间距要合理的的:

    Good: One, twe, three\(\dots\)

    Bad: One, two, three...

    西文的省略号在句中时,前后都需要加空格,而在句末时应该使用 4 个点。由于\ldots本身的后面也有间距,通常将其放入数学模式中,避免前后间距不一

    1
    2
    She $\ldots$ she got it
    I've no idea \ldots
  • 不能直接录入的标点符号:

    ~, #, $, %, ^, &, {, }, _, , x

    1
    \# \quad \$ \quad \% \quad \& \quad \{ \quad \} \quad \_ \quad \textbackslash \times

    可以使用没有字母的重音\~{}\^{}输出~^,但着连个符号一般不直接出现在普通正文中

  • 标点格式

    \(\LaTeX\) 并不会自动处理号汉字标点的宽度和间距,甚至不能保证标点的禁则(如娟红不允许出现在一行的开始)。

    中文标点一般由xeCJK宏包控制,其提供了多种标点格式,默认时全角式,即所有标点占一个汉字宽度,只在行末和个别标点之间进行挤压。

    还支持其他一些标点格式,可以使用\punctstyle命令修改:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    \punctstyle{quanjiao} 全角式,所有标点全角,有挤压。例如,“标点挤压”。又如《标点符号用法》。

    \punctstyle{banjiao} 半角式,所有标点半角,有挤压。例如,“标点挤压”。又如《标点符号用法》。

    \punctstyle{kaiming} 开明式,部分的标点半角,有挤压。例如,“标点挤压”。又如《标点符号用法》。

    \punctstyle{hangmobanjiao} 行末半角式,仅行末挤压。例如,“标点挤压”。又如《标点符号用法》。

    \punctstyle{plain} 无格式,只有禁则,无挤压。例如,“标点挤压”。又如《标点符号用法》。

2.2 空格和换行

文本中的空格起分割单词的作用,任意多个空格与一个空格的功能相同;只有字符后面的空格式有效的,每行最前面的空格则会被忽略,这样有利于复杂代码的对其,单个换行也被视作一个空格。

  • 带空格的宏

    以字母命名的宏,后面空格会被忽略。如果要在命令后面使用空格,可以在空格前加\

  • 带子~

    有一种不可打断的空格,在 \(\TeX\) 中被称为带子(tties),用~表示。\(\TeX\) 禁止在这种空格之间分行,因而可以用来表示一些不宜分开的情况

    1
    2
    3
    4
    5
    Question~1 %名称与编号之间
    Donald~E. Knuth % 教名之间,但姓可以断行
    Mr. Knuth % 称谓缩写与名字间
    function~$f(x)$ % 名字后的短公式
    1,~2, and ~3 % 序列的部分符号间
  • 幻影(phantom)

    \phantom有一个参数,作用是产生于参数内容一样大小的空盒子,没有内容,就像是参数的一个幻影一样,用来完成一些特殊的展位和对齐效果。

    1
    2
    幻影\phantom{参数}快速隐形
    幻影参数快速隐形

    类似的还有\hphantom\vphantom,分别表示水平方向和垂直方向的幻影(另一个方向大小为零)

  • 分段

    通常用两个换行表示分段,段与段之间会自动得到何使的缩进。

    分段也可以用\par命令生成,这种用法一般只在命令或环境定义的内部使用,普通正文中不宜出现。

    另起一行不分段:

    • \\命令直接另起一行,上一行保持原来的样子;该命令可以带一个可选的长度参数,表示换行后增加的额外垂直间距,如\\[2cm]。如果\\后面需要使用方括号,则应加空的分组以示分隔。

    • \linebreak指定一行的断点,上一行仍按完整一行分散对齐。可以带一个 0-4 的可选参数,表述允许断行的程度:0 表示允许断行,默认的 4 表示必须断行;类似的,也有一个\nolinebreak命令,参数意义与\linebreak相反。

      1
      2
      3
      4
      5
      6
      7
      8
      这是一行文字\\ 另一行

      这是一行文字\\{}[] 另一行

      这是一行文字\\[1em] 另一行

      这是一行文字\linebreak 另一行
      这是一行文字\linebreak[4] 另一行

      \\一般用在特殊环境中,如排版诗歌的verse环境,特别是在对齐、表格和数学公式中使用广泛,很少出现在普通正文中。

  • 西文句末

    西文的标点后面都会加空格,这可以保证正确的间隔,也能保证正确的换行。

    \(\LaTeX\) 在西文句末(包括句号、问好和感叹号)后面使用的距离比单词间的距离大些。\(\LaTeX\) 默认把大写字母后的点看作缩写标记,把小写字母后的点看作式句子结束,并对它们使用不同的间距。

    偶尔也会有大写字母结束的句子,或小写字母的缩写,这是必须明确告诉 \(\LaTeX\) 使用普通单词间的空格(空格前加\),或使用\@.指明式大写字母后的句末。

    1
    2
    3
    4
    A sentence, And anotehr.
    U.S.A. means United States Army?
    Tinker et al.\ mad the double play.
    Roman number XII\@. Yes.
    • 有时也需要整体禁止这种标点后的不同间距,法语排版的习惯就是如此,此时可以使用\frenchspacing命令来禁止标点后的额外间距。
  • 中英文混排

    汉字后的空格会被忽略,使用xelatex编译中文文档时,汉字和其他内容之间如果没有空格,xeCJK宏包会自动添加。个别时候需要忽略汉字和其他内容之间由xeCJK产生的空格,这是可以把汉字放进一个盒子里:

    1
    \mbox{条目}-a 不同于条目-b

    有时需要完全禁用汉字和其他内容之间的空格,这是可以使用CJKsetecglue手工设置汉字与其他内容之间的内容为空(默认为一个空格)。

2.3 字体

  • 更改字体

    \(\LaTeX\)提供了带参数和命令、字体声明两种修改字体的命令,前者用于少量字体的更换,后者用于分组或环境中字体的整体更换。

    1
    2
    \textit{Italic font test} % 少量字体的更换
    {\bfseries Bond font test} % 分组或环境中字体的整体更换

    Result:

    \(\LaTeX\) 预定义命令中的字体信息如下:

    fig. 4-1 预定义命令中的字体信息

    fig. 4-2 字体坐标:族、形状和系列

  • 字体恢复默认

    除了上面列举的字体命令,还有\textnormal{<text>}\normalfont命令,用来将字体设置为 ”普通“的格式,默认为\rmfamily \mdseries \upshape

    普通字体适用于复杂的字体环境中恢复普通的字体,尤其是在宏定义这类不知道外部字体设置的情况下,如:

    1
    {\sffamily\textbf{This is a paragraph of bold and \textit{italic font, sometimes returning to \textnormal{normal font} is necessary.}}

    Result:

  • 斜体倾斜校正

    使用斜体声明\itshapeslshape时,最后一个倾斜的字母会超出边界,使得后面的文字与它相距过紧,而使用带参数的命令\textit\textsl可以自动修正距离,也可以手工使用\/命令进行这种倾斜校正(italic correction),会在字母后面加上一个小的距离,如:

    1
    2
    3
    4
    {\itshape M}M
    \textit{M}M
    {\itshape M\/}M
    \textit{M\nocorr}M % 取消倾斜校正

    Result:

    很少情况下,\textit自动加入的倾斜校正时不必要的,此时可以使用\nocorr命令禁止校正。

  • 中文字体

    中文字体通常没有西文字体那样复杂的成套的 变体,各个字体之间一般都是独立的。对于中文字体,一般只使用不同的字体族进行区分。xeCJKCJK宏包机制下, 中文字体的选择命令和西文字体是份力的,选择中文字体用\CJKfamily命令,如:

    1
    2
    {\CJKfamily{zhehei}这是黑体}
    {\CJKfamily{zhkai}这是楷书}

    ctex宏包及文档类下有一些预定义,在默认情况下(winfonts 选项)针对 Windows 常用字体配置了的四种字体族:zhsong(宋体)、zhhei(黑体)、zhkai(楷书)、zhfs(仿宋)。为了方便使用,ctex提供了简化的命令:

    1
    {\songti 宋体} \quad {\heiti 黑体} \quad {\fangsong 仿宋} \quad {\kaishu 楷书}
    • 组合字体

      ctex宏包及文档类(如ctexart)另外定义了一些组合字体,可以让中文也具备使用粗体(\bfsereies)和意大利体(\itshape)的功能。默认中文字体族为 rm,其正常字体是宋体,粗体是黑体,意大利体是楷体

      类似的,\sffamily(对应 sf 中文字体族)和\ttfamily(对应 tt 中文字体族)也可以同时用作西文和中文,分别相当于幼圆和仿宋体

      1
      2
      3
      {\rmfamily \textbackslash rmfamily 中文字体族下,正常字体是宋体,其\textbf{粗体}与\textit{斜体}。} 				
      {\sffamily \textbackslash sffamily 中文字体族下,正常字体是幼圆,其\textbf{粗体}与\textit{斜体}。}
      {\ttfamily \textbackslash ttfamily 中文字体族下,正常字体是宋体,其\textbf{粗体}与\textit{斜体}。}

    • 修改默认字体

      通过fontspec 宏包的机制来调用字体,最基本的是设置正文罗马字体族、无衬线体字族和打字机字体族的命令:

      \setmainfont[<可选选项>]\{<字体名>\}

      \setsansfont[<可选选项>]\{<字体名>\}

      \setmnonofont[<可选选项>]\{<字体名>\}

      1
      2
      3
      4
      5
      % 设置全文字体为 Windows 提供的 Timees New Roman, Verdana, Courier New 字体
      \usepackage{fontspec}
      \setmainfont{Times New Roman}
      \setsansfont{Verdana}
      \setmonofont{Courier New}

      此时 \rmfamily\sffamily\ttfamily 就分别对应设置的三种字体,而且 fontspec宏包会自动找到并匹配对应的粗体、斜体等编题,尽量使 \bfseries\itshap等命令也有效。

      除此之外,还可以定义新的字体族命令:

      \newfontfamily<命令>[<可选选项>]{<字体命>}

      1
      2
      3
      4
      5
      % preamble
      \newfontfamily\lucidasans{Lucida Sans}

      % 正文
      {\lucidasans This is Lucida Sans.}

      xeCJK宏包(ctex宏包或文档类会自动调用)提供了与fontspec对应的中文字体设置命令

      \setCJKmainfont[<可选选项>]\{<字体名>\}

      \setCJKsansfont[<可选选项>]\{<字体名>\}

      \setCJKmonofont[<可选选项>]\{<字体名>\}

      \setCJKfamilyfont[<可选选项>]\{<字体名>\}

2.4 强调文字

  • \emph{} and \em

    1
    2
    3
    4
    5
    6
    7
    8
    9
    \begin{itemize}
    \item 命令形式:
    You \emph{should} use fonts carefully.
    % 常使用意大利体表示夹在正文中的强调句
    \textit{You \emph{should} use fonts carefully.}
    % 常使用正文夹在意大利体中表示强调
    \item 声明形式:
    This is {\em emphasized\/} text
    % \/ 为斜度校正

    Result:

  • 重新定义\Emph命令

    有时仍然使用大写、小型大写或粗体进行更醒目的强调,此时可以定义一个新的\Emph命令:

    1
    2
    \newcommand\Emph{\textbf} % bold
    This is \Emph{emphasized} text.

    Result:

  • \underline

    1
    \underline{Emphasized} text and \underline{another}.

    Result:

    \underline的一个很大确定是下划线部分不能换行,并且下划线与文字的距离参差不齐。

  • \uline

    \ulem宏包的\uline命令解决了上述\underline的命令,并把默认的\emph命令也改为使用下划线方式(texlive 2018)中并未修改),如果不希望用下划线线替代标准的\emph命令,可以给\ulem宏包加normalem参数,或使用\normalem\ULforem命令切换两种强调

    除了下划线,ulem宏包也提供了其他修饰文字的命令:

    1
    \uuline{urgent} \qquad \uwave{boat} \qquad} \sout{wrong} \qquaad \xout{removed} \qquad \dashuline{dashing} \qquda \dotuline{dotty}

    Result:

    CJKfntef宏包对汉字也提供了类似的功能,同时进行了一些扩充:

    1
    2
    \CJKunderdot{汉字,下点线} \phantom{汉字下点线} \CJKunderline{汉字,单下划线} \phantom{字下点线} \CJKunderdblline{汉字,双下划线} \\
    \CJKunderwave{汉字,下划波浪线} \phantom{下点线} \CJKsout{汉字,删除线} \phantom{爱好下点线} \CJKxout{汉字,斜删除线}

    Result:

    此外,CJKfntef 宏包,还提供了 CJKfilltwosides 环境,让汉字分散对齐:

    1
    2
    3
    \begin{CJKfilltwosides}{5cm}
    汉字,分散对齐
    \end{CJKfilltwosides}

    ctex宏包及文档中,可以使用\CTEXunderline等以\CTEX开头的命令代替以 \CJK命令开头的命令:

    1
    \CTEXunderdot{汉字,加点}

2.5 字号

  • 西文字体大小

    fig. 4-3 预定义的西文字体调整命令

  • 中文字体大小

    image-20200817162304003

    fig. 4-4 预定义中文字号

    字号命令表示的具体尺寸随所使用的文档类和大小选项不同而不同。在标准 $$ 文档类 aritcle,report 和 book 中,可以设置文档类选项 10pt,11pt 和 12pt,全局地设置文档内的字号,默认为10pt,即\normalsize的大小为 10pt。

  • 不同文档类选项下的字号命令

    fig.4-5 不同文档类选项下的字号

2.6 水平间距

  • 水平间距

    \(\LaTeX\) 中的长度有如下几种:

    fig. 4-6 水平间距

    fig. 4-7 水平间距

    使用水平间距的命令要注意适用,如 \,是不可断行的,因而就不适用于分隔很长的内容,单用来代替逗号给长数字分段就很合适:1,234,567,890。

    • 负距离

    负距离\negthinspace则可以用来细调符号距离或拼接两个符号。

    1
    \dag\negthinspace\dag versus \dag\dag

    此外,还可以使用\hspace{距离}命令来产生指定的水平间距,该命令产生的距离是可断行的。

    Space 1,cm

    Result:

    • 强制段首空格

    \hspace的作用是分隔左右的内容,在某些只有一边内容的地方(如强制断行的行首),\(\LaTeX\) 会忽略产生的距离,此时可以用带星号的命令 \hspace* {distance}阻止命令被忽略。

    1
    2
    3
    Space\linebreak \hspace{1cm} 1\,cm

    Space\linebreak \hspace*{1cm} 1\,cm

    Result:

  • 橡皮长度

    \hspace可以产生随内容可伸缩的长度,即橡皮长度,这样才能保证在分行行末的对齐,语法为:

    1
    <normal legnth>plus<可伸长长度>minus<可缩短长度>

    有一种特殊的橡皮长度\fill\fill可以从零开始无限延伸,此时橡皮长度就真的像一个弹簧,可以用来把几个内容均匀排列在一行之中:

    1
    2
    3
    left \hspace{\fill} middle \hfill left
    left \hspace{\fill} middle \dotfill left
    left \hspace{\fill} middle \hrulefill left

    Result:

    \hfill是命令\hspace\{fill}的简写,还可以用\stretcg{<times>}产生具有指定“弹力”的橡皮长度,如\stretch{2}相当于两倍的\fill\hrulefill\dotfill\hfill功能类似,只是中间填充内容不一样(横线和点线).

  • 自定义长度变量setlength

    \(\LaTeX\) 预定义了一些长度变量控制排版的参数,可以通过\setlength 命令来设置,如段首缩进:

    1
    2
    %导言处
    \seglegth \parindent\{8em\}
  • 长度累加addtolength

    可以通过 \addtolength命令在长度变量上做累加,如

    1
    2
    3
    Para\par
    \addtolength\parindent{2em}Para\par
    \addtolength\parindent{2em}Para\par

    Result:

2.7 盒子

盒子 (box) 处理 \(\TeX\) 中的基本处理单位,一个字符、一行文字、一个页面、一张表格在 \(\TeX\) 中都是一个盒子。

  • mbox and makebox

    最简单的命令是 \box{<text>},它产生一个内容以左右模式排列的盒子,可以用它表示不允许断行的内容,如果不在行末,其与普通内容无异,如:

    1
    \mbox{cannot be broken}

    \makebox\mbox 类似,但可以带两个可选参数,指定盒子的宽度和对齐方式(c(center, default), l(left), r(right), s(scatter)):

    1
    \textbackslash makebox[<width>][<loc>]\{<contex>\}

    还可以使用 \makebox 产生宽度为 0 的盒子,产生重叠(overlap) 的效果:

    1
    \makebox[0pt][l]{word} 文字

    Result:

  • overlap

    \(\LaTeX\) 已经提供了两个命令来专门生成重叠的效果,即 \llap\rlap,分别表示把参数中的内容向当前位置的左侧和右侧重叠:

    1
    2
    语言文字 \llap{word}\\					
    \rlap{word}语言文字

    Result:

  • frame

    命令 \fbox\framebox 产生带边框的盒子,语法与\mbox\makebox类似:

    1
    \fbox{framed} \qquad \framebox[3cm][s]{framed box}

    Result:

    边框与内容的距离由长度变量 \fboxsep 控制(默认为 3pt),边框线的粗细则由长度变量 \fboxrule控制(默认为 0.4 pt)。

    1
    2
    \setlength\fboxsep{0pt} \fbox{tight}
    \setlength\fboxsep{1em} \fbox{loose}

    Result:

    \makebox\framebox 等盒子命令的参数中,可以使用 \width\height\depth\totalheight来分别表示盒子内容的自然宽度、深度、以及高度和深度之和。如下产生的盒子总宽度恰好是文字自然宽度的 3 倍:

    1
    \framebox[3\width]{带边框}

    Result:

4 玩转数学公式

4.1 Mathematic formula

1
2
3
4
5
6
\[
a + b = b + a
\]
\begin{equation}
a + b = b + a \label{eq:commutative}
\end{equation}
  • amsmath package(P 223,表 4.1)

amsmath 提供的 命令可以用来在数学公式中插入数字

1
$ \text{被减数} - \text{减数} = \text{差}$

$ - = $

Note:在普通的文本中使用数学公式时也应该注意随时在文本模式和数学模式下转换。例如,行内数学公式中逗号等标点处不能换行,因此列举多项公式时就应该把每项放在单独的数学环境中,项项之间用逗号或句号隔开:

已知的变量有 \(a\), \(b\), \(c\)\(T\)

4.2 Mathematic structure

  • 上下标:

    $ A_{ij} = 2 ^ {i + j} \(,\) A_i^j = B^k_i$, \(K_{n_i} = K_{2^i} = 2^{n_i}\)\(3^{3^{3^{\cdot^{\cdot^3}}}}\)

  • 撇号'

    数学公式中的撇号'就是一种特殊的商标,表示用符号 \prime(即')作上标。撇号可以与下标混用,也可以连续使用(普通上标不能连续使用),但不能与上标直接混用:

    $ a = a' = a^{}\(,\)b_0' = b_0''\(,\){c'}^2 = (c')^2$

  • 角度:

    1
    2
    3
    4
    $ \angle a = \angle BAC = 90 ^\circ = \pi / 2  $

    % 或者定义一个意义明显的命令
    \newcommand\degree{^\circ}

    $ a = BAC = 90 ^= /2 $

  • 特殊上下标

    数学算子: \[ \max_n f(n) = \sum_{i=0}^n A_i \] 积分算子: \[ \int_0^1 f(t) \rm{d}t = \iint_D g(x,y) \mathrm{d}x \mathrm{d}y \]

    1
    2
    3
    4
    5
    6
    7
    8
    % 多数数学算子的上下标,位置时正上或正下方,但行内公式仍在角标位置
    \[
    \max_n f(n) = \sum_{i=0}^n A_i
    \]

    % 对于积分等个别算子,显示公式中的上下标在右上右下角
    % 导言区 \DeclareMathOperator\dif{d\!}
    $\int_o^1 f(t) \dif t = \iint_D g(x,y) \dif x \dif y$

    在上下标前面使用\limits会使上下标在正上正下方,这是通常上下限(limits)的排版方式,而使用\nolimits则会使上下标在角标: \[ \iiint\limits_D \mathrm{d}f = \max\nolimits_D g \] 有时需要在符号的左上、左下加角标,此时可以使用${}_m^n{H}_i^j$的形式得到 \({}_m^n{H}_i^j\),但这种方式得到的效果不尽人意,间距和对齐都不合理,此时可以使用amsmath包提供的\sideset命令,如: \[ \sideset{_m^n}{_i^j} H\limits_{i = 0}^n \]

    \[ \sideset{_m^n}{_c^d} \sum_{i = 0}^ n \]

    或者是mathtools宏包的\prescript<up><down><element>来处理

    1
    2
    3
    4
    % \usepackage{mathtools}
    $\prescript{n}{m}{H}_i^j < L $
    % 或
    $ \sideset{_m^n}{_i^j} H $

    此外,amsmath还提供了\overset\underset命令,用来给任意符号的上下方添加标记,这种命令有点像是加了\limits的巨算符的上下标:\(\overset{*}{X}\)\(\underset{*}{X}\)

    \(A_m{}^n\)\(A_m^{\phantom{m}n}\)

  • 化学式

    将化学式直接作为数学式输入看起来十分笨拙,可以使用专业的化学宏包mhchem(使用最为广泛的化学宏包)

    1
    2
    3
    4
    5
    6
    7
    8
    % \usepackage{mhchem}

    醋中主要有 \ce{H2O},含有 \ce{CH3COO-}。
    \ce{^{227}_{90}Th} 元素具有强放射性

    \begin{equation}
    \ce{2H2 + O2 -> [\text{燃烧}] 2H2O}
    \end{equation}

    Result:

    醋中主要有$ $,含有 \(\ce{CH3COO-}\)\(\ce{^{227}_{90}Th}\) 元素具有强放射性

    $ $

  • 上下划线

    \overline\underline命令可以用来在公式的上方和下方划横线,例如: \[ \overline{a+b} = \overline a + \overline b \]

    \[ \underline a = (a_0, a_1, a_2, \dots) \]

    \[ \overline{\underline{\underline a} + \overline{b}^2} - c^{\overline n} \]

    amsmath还提供了在公式上下加箭头的命令,使用方法与\overline\underline类似:

    1
    2
    3
    4
    5
    6
    $\overleftarrow{a + b}$
    $\overrightarrow{a+b}$
    $\overleftrightarrow{a+b}$
    $\underleftarrow{a+b}$
    $\underrightarrow{a+b}$
    $\underleftrightarrow{a+b}$

    $ \(,\)\(,\)\(,\)\(,\)\(,\)$

    向量:\(\vec{a}\)

  • 花括号 \[ \overbrace{a+b+c} = \underbrace{1+2+3} \] 使用上下标在花括号上下作标注: \[ \overbrace{a_0, a_1, \dots, a_n}^{\text{共}\ n+1\ \text{项}} = \underbrace{1+2+3}_{n} \] 类似的,mathtools宏包还提供了在数学公式上下加方括号的命令:

    \underbracket[<线宽>][<伸出高度>]{<内容>}

    \overbracket[<线宽>][<伸出高度>]{<内容>}

    1
    2
    3
    4
    % \usepackage{mathtools}
    \[
    \underbracket{\overbracket{1+2}+3}_3
    \]

    \overbrace\underbrace等命令可以嵌套,但本身不能交错,如要实现交错可以分别生成两个括号:先为一部分公式的幻影\phantom加括号,为另一部分加括号,然后使用重叠\rlap的盒子将两部分合在一起: \[ a+\rlap{\overbrace{\phantom{b+c+d}}^m}b+\underbrace{c+d+e}_n +f \]

  • 分式

    \frac<分子><分母>\[ \frac{1}{2} + \frac 1{a} = \frac{2+a}{2a} \] 行内公式会用较小的字号排版,以免超出文本高度:\(\frac 12 + \frac 1a + \frac{2+a}{2a}\)

    已经在分子或分母中的分式,也会按行内公式的大小排版:\(\frac 1{\frac 12(a+b)}\)

    有时需要指定格式,可以使用amsmath提供的\dfrac\tfrac分别指定显示格式(display style)和正文格式(text style)的分式: \[ \tfrac 12 f(x) = \frac{1}{\dfrac 1a + \dfrac 1b + c} \] 连分式(continued fraction),amsmath提供的\cfrac专用于输入连分式,\cfrac可以带一个可选参数lr,分别表示左、右对齐,默认居中对齐:

    1
    \cfrac{1}{1+\cfrac{2}{1+\cfrac{3}{1+x}}} = \cfrac[r]{1}{1+\cfrac{2}{1+\cfrac[l]{3}{1+x}}}

4.3 Symbol and type

4.3.2 希腊字母

  • 小写希腊字母:

    \alpha: \(\alpha\) \beta: \(\beta\) \gamma: \(\gamma\) \delta: \(\delta\)
    \epsilon: \(\epsilon\) \zeta: \(\zeta\) \eta: \(\eta\) \theta: \(\theta\)
    \iota: \(\iota\) \kappa: \(\kappa\) \lambda: \(\lambda\) \mu:\(\mu\)
    \nu: \(\nu\) \xi: \(\xi\) \pi: \(\pi\) \rho: \(\rho\)
    \sigma: \(\sigma\) \tau: \(\tau\) \upsilon: \(\upsilon\) \phi: \(\phi\)
    \chi: \(\chi\) \psi: \(\psi\) \omega: \(\omega\)
    \varepsilon: \(\varepsilon\) \vartheta: \(\vartheta\) \varkappa: \(\varkappa\)' \varpi: \(\varpi\)
    \varrho: \(\varrho\) \varsigma: \(\varsigma\) \varphi: \(\varphi\) \digamma: \(\digamma\)'

    Note:前面带var的命令是原来字母的编题,\digamma\(\digamma\))是\gamma\(\gamma\))的变体;'标记的符号需要amssymb或类似的宏包

  • 大学希腊字母:

    \Gamma: \(\Gamma\) \Delta: \(\Delta\) \Theta: \(\Theta\) \Lambda: \(\Lambda\)
    \Xi: \(\Xi\) \Pi: \(\Pi\) \Sigma: \(\Sigma\) \Upsilon: \(\Upsilon\)
    \Phi: \(\Phi\) \Psi: \(\Psi\) \Omega: \(\Omega\)
    \varGamma: \(\varGamma\) \varDelta: \(\varDelta\) \varTheta: \(\varTheta\) \varLambda: \(\varLambda\)
    \varXi: \(\varXi\) \varPi: \(\varPi\) \varSigma: \(\varSigma\) \varUpsilon: \(\varUpsilon\)
    \varPhi: \(\varPhi\) \varPsi: \(\varPsi\) \varOmega: \(\varOmega\)
  • 特殊字符

    fig. 4-8 特殊字符

    表(3)中,不带\text前缀的是文本模式和数学模式通用的。

    • \symbol命令可以直接用符号在字体中的编码来输入符号,\symbol{num}

      表示法 语法形式
      十进制 <数字> 90
      十六进制 ''<数字> ''5A
      八进制 '<数字> '132
1
2
3
4
5
|  表示法  | 语法形式  |  例  |
| 十进制 | <数字> | 90 |
| 十六进制 | ''<数字> | ''5A |
| 八进制 | '<数字> | '132 |
| 字符形式 | `<字符> | `Z |
注:如果字符形式中的字符是特殊字符,则需要在前面加`\`进行转义。
1
2
{% pdf ./Latex.pdf 600px %}
<object data="./Latex/Latex.pdf" type="application/pdf" width="100%" height="877px"
-------------This blog is over! Thanks for your reading-------------