Linux 下的 GMT 中文支持

本文介紹如何讓 GMT 在 Linux 下支持中文。

警告

據用戶反映,按照本文的步驟操作可能會導致ghostscript無法正常使用。

若出現該問題,可以執行 sudo perl cjk-gs-integrate.pl --remove 命令撤銷 cjk-gs-integrate.pl 腳本的操作。

若需要GMT中文支持,請轉向 自定義字體原理 一文。

ghostscript的中文支持

Linux 的中文字體較少,這裏使用 Windows 下提供的四個基本字體:宋體、仿宋、黑體和楷體。對於 Windows 下的其他中文字體、Linux 的其他中文字體甚至日韓字體來說,方法類似。

可以使用 cjk-gs-support 項目提供的腳本 cjk-gs-integrate.pl 來實現ghostscript的中文支持。

  1. 從Windows下獲取四種基本字體的字體文件(文件名類似於 simsun.ttc)並複製到 /usr/share/fonts/winfonts/ 目錄下

  2. 下載腳本 cjk-gs-integrate.pl

  3. cjk-gs-integrate.pl 腳本的執行依賴於命令 kpsewhich,該命令由 TeXLive 提供。執行 kpsewhich --version 檢查 kpsewhich 這個命令是否存在。若不存在,則需要單獨安裝。

    對於Ubuntu/Debian用戶,執行:

    sudo apt-get install texlive-binaries
    

    對於CentOS/RHEL/Fedora用戶,執行:

    sudo yum install texlive-kpathsea-bin
    
  4. 執行腳本:

    $ sudo perl cjk-gs-integrate.pl
    

    該腳本會自動搜索系統中自帶的中文字體,並生成gs支持中文所需的配置文件。

GMT的中文支持

~/.gmt(若無該文件夾,請自行新建)下創建字體配置文件:

$ touch ~/.gmt/PSL_custom_fonts.txt
$ gedit ~/.gmt/PSL_custom_fonts.txt

打開 GMT 字體配置文件,在文件中加入如下語句:

STSong-Light--UniGB-UTF8-H  0.700    1
STFangsong-Light--UniGB-UTF8-H  0.700    1
STHeiti-Regular--UniGB-UTF8-H   0.700   1
STKaiti-Regular--UniGB-UTF8-H   0.700   1
STSong-Light--UniGB-UTF8-V  0.700    1
STFangsong-Light--UniGB-UTF8-V  0.700    1
STHeiti-Regular--UniGB-UTF8-V   0.700   1
STKaiti-Regular--UniGB-UTF8-V   0.700   1

這幾句話分別添加了宋體、仿宋、黑體和楷體四種字體的橫排和豎排兩種方式。

gmt text -L 命令查看 GMT 當前的字體配置:

$ gmt text -L
Font #  Font Name
------------------------------------
0   Helvetica
1   Helvetica-Bold
...    ......
39 STSong-Light--UniGB-UTF8-H
40 STFangsong-Light--UniGB-UTF8-H
41 STHeiti-Regular--UniGB-UTF8-H
42 STKaiti-Regular--UniGB-UTF8-H
43 STSong-Light--UniGB-UTF8-V
44 STFangsong-Light--UniGB-UTF8-V
45 STHeiti-Regular--UniGB-UTF8-V
46 STKaiti-Regular--UniGB-UTF8-V

其中 39-46 號字體爲新添加的中文字體。以後要用中文字體時,需要用這些編號來指定字體,也許你的機器上的編號和這裏不同。

GMT 中文測試

注解

請自行確認你的中文字體編號。如果編號不是39到46,請自行修改以下測試腳本。

#!/bin/bash
gmt begin GMT_Chinese pdf,png
gmt set FONT_TITLE 25p,41,black
gmt set FONT_LABEL 15p,39,black

gmt text -R0/8/0/4 -JX12c/4c -Bxaf+l"X轴" -Byaf+l"Y轴" -BWSen+t"中文标题" -F+f << EOF
2 3.5 25p,39,black 中文宋体
2 2.5 25p,40,blue  中文仿宋
2 1.5 25p,41,red   中文黑体
2 0.5 25p,42,green 中文楷体
4 3.5 25p,43,black 中文宋体
5 3.5 25p,44,blue  中文仿宋
6 3.5 25p,45,red   中文黑体
7 3.5 25p,46,green 中文楷体
EOF
gmt end

成圖效果如下:

../_images/GMT_Chinese.png