---
author: 田冬冬
date: 2024-09-09
---

# 转义序列

前面介绍了如何设置文字的文字大小、字体和颜色以及如何输入特殊字符。
在此基础上，GMT提供了转义字符，以实现上标、下标等功能，并可以在一个字符串内
随意切换字体、字号和颜色，给文本加入了更丰富的效果。

## 转义字符

GMT用 **@** 符号实现转义的功能。将 **@** 符号与某些字符结合起来，即构成了一系列
可以实现特殊效果的转义字符。

GMT可以识别的转义字符在下表列出：

```{eval-rst}
.. table:: GMT转义字符
   :align: center

   +-------------------------+--------------------------------------------------+
   | 转义字符                | 说明                                             |
   +=========================+==================================================+
   | **@+**                  | 打开/关闭上标                                    |
   +-------------------------+--------------------------------------------------+
   | **@-**                  | 打开/关闭下标                                    |
   +-------------------------+--------------------------------------------------+
   | **@_**                  | 打开/关闭下划线                                  |
   +-------------------------+--------------------------------------------------+
   | **@#**                  | 打开/关闭小型大写字母（small caps）              |
   +-------------------------+--------------------------------------------------+
   | **@%**\ *fontno*\ **%** | 切换至另一字体；\ **@%%** 重置回前一字体         |
   +-------------------------+--------------------------------------------------+
   | **@:**\ *size*\ **:**   | 切换至另一文本尺寸；\ **@::** 重置回前一尺寸     |
   +-------------------------+--------------------------------------------------+
   | **@;**\ *color*\ **;**  | 切换至另一文本颜色；\ **@;;** 重置回前一颜色     |
   +-------------------------+--------------------------------------------------+
   | **@~**                  | 打开/关闭Symbol（12号）字体                      |
   +-------------------------+--------------------------------------------------+
   | **@!**                  | 用接下来的两个字符创建组合字符                   |
   +-------------------------+--------------------------------------------------+
   | **@.**                  | 输出 **°** 符号                                  |
   +-------------------------+--------------------------------------------------+
   | **@@**                  | 输出 **@** 符号自身                              |
   +-------------------------+--------------------------------------------------+
```

除此之外，GMT还为一些常用的欧洲字母专门定义了转义字符。如下表：

```{eval-rst}
.. table:: 欧洲特殊字母
   :align: center

   +--------+----------+--------+----------+
   | 代码   | 效果     | 代码   | 效果     |
   +========+==========+========+==========+
   | **@E** | Æ        | **@e** | æ        |
   +--------+----------+--------+----------+
   | **@O** | Ø        | **@o** | ø        |
   +--------+----------+--------+----------+
   | **@A** | Å        | **@a** | å        |
   +--------+----------+--------+----------+
   | **@C** | Ç        | **@c** | ç        |
   +--------+----------+--------+----------+
   | **@N** | Ñ        | **@n** | ñ        |
   +--------+----------+--------+----------+
   | **@U** | Ü        | **@u** | ü        |
   +--------+----------+--------+----------+
   | **@s** | ß        | **@i** | í        |
   +--------+----------+--------+----------+
```

## 小练习

下面给出了一些使用转义字符的示例，左边Input是命令中的输入，右边Output是图上显示的效果：

```{eval-rst}
.. gmtplot:: escapes.sh
    :show-code: false
    :width: 100%
    :caption: GMT转义序列示例
```

读者可以将下面命令中的 *TEXT* 和 *Label* 修改为不同的值，以体验转义字符的效果:

```
echo 5 2 TEXT | gmt text -R0/10/0/3 -Jx1c -Bxaf+l"Label" -BWSen -F+f20p -pdf test
```

## 注意事项

1. 上标/下标不支持嵌套，即只支持一层上标/下标
2. {doc}`/module/text` 命令中有选项可以在文本周围加上文本框，该选项对转义序列无效
3. 转义序列需要成对存在，与括号类似，开启转义之后必须关闭转义
4. 在Windows下，由于bat脚本中 **%** 表示变量，因此当你需要在GMT中使用百分号时，
   应使用 **%%** 来表示一个百分号，即bat脚本中的 **%%** 相当于字符 **%**；
   切换字体时 **@%%15%%** 相当于正常情况下的 **@%15%**。
