---
author: 田冬冬, lxrat
date: 2024-09-12
---

```{index} ! fonts
```

# 文字

文字，也称文本或字符串。主要由三个属性控制：文字大小、字体、颜色。三个属性
之间用逗号分隔，即：*size*,*fonttype*,*fill*。

在模块的语法介绍中，通常使用 *font* 表示需要用户指定文字属性，用户应自行将其
脑补为 *size*,*fonttype*,*fill*。

三者均是可选的，但先后顺序不可乱。若其中任意一个属性被省略，则使用该属性的
默认值。

## 文字大小

文字大小，即常说的字号，可以用数字加单位表示。在不指定单位的情况下默认单位为
**p**，也可加上 **c**、**p** 或者 **i** 显式指定单位，比如 **15p**。

有些中文期刊可以会有类似“图片标题是四号字”这样的要求，这就需要知道GMT中的字体
大小与Microsoft Word中字号大小的对应关系。如下表所示：

```{eval-rst}
.. table:: Word字号与GMT中字号(p)对应关系
   :align: center

   +-------+-------+---------+--------+
   | 字号  |  p    |  字号   |   p    |
   +=======+=======+=========+========+
   | 初号  | 42    | 小初    | 36     |
   +-------+-------+---------+--------+
   | 一号  | 26    | 小一    | 24     |
   +-------+-------+---------+--------+
   | 二号  | 22    | 小二    | 18     |
   +-------+-------+---------+--------+
   | 三号  | 16    | 小三    | 15     |
   +-------+-------+---------+--------+
   | 四号  | 14    | 小四    | 12     |
   +-------+-------+---------+--------+
   | 五号  | 10.5  | 小五    | 9      |
   +-------+-------+---------+--------+
   | 六号  | 7.5   | 小六    | 6.5    |
   +-------+-------+---------+--------+
   | 七号  | 5.5   | 八号    | 5      |
   +-------+-------+---------+--------+
```

## 字体

GMT默认支持35种标准字体。下图给出了GMT支持的35种字体的名字及对应的编号:

```{eval-rst}
.. gmtplot:: fonts.sh
   :show-code: false
   :width: 80%
   :caption: GMT中的35种标准字体
```

GMT中可以用字体名（**区分大小写**）或对应的字体编号来指定字体 （比如
**Helvetica-Bold** 或者 **1**）。上图中给出了每种字体的字体编号以及字体名称。
每个字体名称使用的是自己相对应的字体，所以可以从图中直观地看出不同字体的区别。

:::{tip}
使用 `gmt text -L` 可以在命令行查看GMT所支持的字体及其编号。
:::

图中大多数字体都很直观，比较特别的字体有两个，Symbol（12号）和ZapfDingbats（34号），
前者常用于输出希腊字母，后者则用于输出特殊图案，详情见 {doc}`/basis/special-character`。

## 填充色

可以为文字指定填充色或填充图案，也就是常说的文字颜色。

在 {doc}`color` 和 {doc}`fill` 一节中我们已经介绍了如何设置填充色和填充图案，
其中介绍的内容均可用于设置文本颜色。

## 描边

在给文字指定填充色的同时，还可以在填充色 *fill* 后加上 **=**_pen_ 以指定文本
轮廓（即描边）的画笔属性。画笔属性 *pen* 的用法见 {doc}`pen` 一节。
比如 **red=2p,blue** 表示将文字填充为红色，并使用宽度为 **2p** 的蓝色线条给
文字描边。若填充色 *fill* 为 **-**，则不对文字做填充，即实现空心文字的效果。

使用 **=**_pen_ 语法绘制文本轮廓时，轮廓线条有一半宽度位于文字外部，另一半
宽度会遮住字体。为了避免这一现象，可以使用 **=~**_pen_ 语法，此时在绘制文字
轮廓时只绘制文字外部的半个线宽的线条。

## 小练习

{doc}`/module/text` 模块可以用于添加文字。下面的命令在图上写了文字 **TEXT**:

```
echo 2.5 0.5 TEXT | gmt text -R0/5/0/1 -JX15c/2c -F+ffont -pdf text
```

将 **-F+f***font* 中的 *font* 修改为不同的值并查看绘图效果以理解这一节的内容。

下图给出了 *font* 取不同值的效果：

```{eval-rst}
.. gmtplot:: texts.sh
    :show-code: false
    :width: 60%
    :caption: GMT文本属性示例
```
