GMT5在linux下的中文支持

轉載:https://blog.seisman.info/trash/gmt-chinese-under-linux/

原生 GMT 是不支持中文的,想要讓 GMT 支持中文,需要進行一番配置。想要理解整個問題,需要對 PostScript、CID 字體有更深刻的理解,這未免有些過於複雜。所以這篇博文只介紹一些基本的原理, 不一定準確但是卻夠用。

讓 GMT 支持中文,需要修改 ghostscript 和 GMT 的配置文件。由於不同發行版對 ghostscript 的打包 方式不同,不同的 ghostscript 版本之間的配置文件也有一些差異。因而這裏以我在使用的 CentOS7 來介紹整個原理,其他發行版與CentOS7的差異會在文末列出。

本文所使用的 Linux 環境:

操作系統:CentOS 7.5
ghostscript:9.07
GMT:5.4.4

準備工作

gs 中文配置文件

大多數發行版都已經默認安裝了 gs。除此之外,還需要安裝簡體中文配置文件。CentOS 7 下中文配置文件可以通過如下命令安裝:

sudo yum install ghostscript-chinese-zh_CN

安裝完成後,中文配置文件的路徑爲 /usr/share/ghostscript/conf.d/cidfmap.zh_CN, 以下稱爲 ghostscript 中文配置文件。

GMT 字體配置文件

假定 GMT 的安裝路徑爲 /opt/GMT-5.4.4 ,則字體配置文件的路徑爲 /opt/GMT-5.4.4/share/postscriptlight/PSL_custom_fonts.txt

使gs支持中文

gs 中文配置文件

CentOS 7 中 ghostscript 中文配置文件的默認內容爲:

/BousungEG-Light-GB <</FileType /TrueType /Path (/usr/share/fonts/wqy-zenhei/wqy-zenhei.ttc) /SubfontId 0 /CSI [(GB1) 4] >> ;
/GBZenKai-Medium    <</FileType /TrueType /Path (/usr/share/fonts/wqy-zenhei/wqy-zenhei.ttc) /SubfontId 0 /CSI [(GB1) 4] >> ;
/MSungGBK-Light     /BousungEG-Light-GB ;
/Adobe-GB1      /BousungEG-Light-GB ;

其中的細節可能看不懂,但是可以大概總(xia)結(cai)如下:

第一行定義了字體名爲 /BousungEG-Light-GB ,對應的字體文件爲 /usr/share/fonts/wqy-zenhei/wqy-zenhei.ttc ,也就是文泉驛正黑;
第二行定義了字體名爲 /GBZenKai-Medium,對應的字體文件也是文泉驛正黑;
第三行和第四行分別定義了字體名 /MSungGBK-Light/Adobe-GB1,這兩種 都對應於 /BousungEG-Light-GB ,相當於給字體定義了別名。
關於配置文件的幾點說明:

字體名是任意的,比如字體名可以取爲 /ABC
字體文件似乎只能是 ttcttf 格式的,當然修改參數也有可能可以使用其他格式的字體;
要注意確認字體文件是否存在,比如 CentOS7 下的 wqy-zenhei.ttc 字體實際上位於軟件包 wqy-zenhei-fonts 中。若字體不存在,則需要安裝相應軟件包。

測試 gs 對 Linux 默認字體的支持

CentOS7 的 ghostscript 中文配置文件中,默認有四行,分別定義了四個字體名,儘管本質上這四個 字體名都指向同一個字體。下面先測試一下如何讓 gs 顯示 Linux 的默認字體。

編輯器新建一個 PS 文件(是的,PS 文件其中就是純文本,可以直接用編輯器編輯!),名爲 linux_fonts.ps ,其內容爲:

%! PS-Adobe-3. 0
/BousungEG-Light-GB--UniGB-UTF8-H findfont 20 scalefont setfont
150 400 moveto
(BousungEG 字體) show

/GBZenKai-Medium--UniGB-UTF8-H findfont 20 scalefont setfont
150 375 moveto
(GBZenKai 字體) show

/MSungGBK-Light--UniGB-UTF8-H findfont 20 scalefont setfont
150 350 moveto
(MSungGBK 字體) show

/Adobe-GB1--UniGB-UTF8-H findfont 20 scalefont setfont
150 325 moveto
(Adobe 字體) show

showpage
%%Trailer
%%EOF

簡單解釋一下,PS 文件中要使用某個中文字體,需要用 FontName--CMap 的格式來調用。其中 在FontName 即 gs 中文配置文件中給定的字體名。CMap 可以取 UniGB-UTF8-HGB-EUC-H, Linux 下一般用前者,Windows 下一般用後者,應該是用於指定漢字或中文字體的編碼,具體原理不知。

用 gs 查看該 PS 文件,正常情況下顯示如下圖,表明 gs 可以正常顯示 Linux 下的默認中文字體。

添加 Windows 中文字體

Linux 的中文字體較少,所以這裏使用 Windows 下中的中文字體,這裏只考慮 Windows 下的宋體、仿宋、 黑體和楷體四個基本字體。將這四個字體文件複製到 /usr/share/fonts/winfonts/ 目錄下, 然後對 gs 的中文配置文件做如下修改:

% 原內容保持不變
/BousungEG-Light-GB <</FileType /TrueType /Path (/usr/share/fonts/wqy-zenhei/wqy-zenhei.ttc) /SubfontId 0 /CSI [(GB1) 4] >> ;
/GBZenKai-Medium    <</FileType /TrueType /Path (/usr/share/fonts/wqy-zenhei/wqy-zenhei.ttc) /SubfontId 0 /CSI [(GB1) 4] >> ;
/MSungGBK-Light     /BousungEG-Light-GB ;
/Adobe-GB1      /BousungEG-Light-GB ;

% 新增 Windows 字體的支持
/STSong-Light <</FileType /TrueType /Path (/usr/share/fonts/winfonts/simsun.ttc) /SubfontId 0 /CSI [(GB1) 4] >> ;
/STFangsong-Light <</FileType /TrueType /Path (/usr/share/fonts/winfonts/simfang.ttf) /SubfontId 0 /CSI [(GB1) 4] >> ;
/STHeiti-Regular <</FileType /TrueType /Path (/usr/share/fonts/winfonts/simhei.ttf) /SubfontId 0 /CSI [(GB1) 4] >> ;
/STKaiti-Regular <</FileType /TrueType /Path (/usr/share/fonts/winfonts/simkai.ttf) /SubfontId 0 /CSI [(GB1) 4] >> ;

這裏僅以 Windows 下的常用四大字體爲例。對於 Windows 下的其他中文字體、Linux 的其他中文字體甚至 日韓字體來說,方法類似。

測試 gs 對 Windows 中文字體的支持

編輯器新建一個 PS 文件,名爲 windows_fonts.ps ,其內容爲:

%! PS-Adobe-3. 0
/STSong-Light--UniGB-UTF8-H findfont 20 scalefont setfont
150 400 moveto
(Song Typeface 宋體) show

/STFangsong-Light--UniGB-UTF8-H findfont 20 scalefont setfont
150 375 moveto
(Fangsong Typeface 仿宋體) show

/STHeiti-Regular--UniGB-UTF8-H findfont 20 scalefont setfont
150 350 moveto
(Hei Typeface 黑體) show

/STKaiti-Regular--UniGB-UTF8-H findfont 20 scalefont setfont
150 325 moveto
(Kai Typeface 楷體) show

showpage
%%Trailer
%%EOF

用 gs 查看該 PS 文件,若正確顯示中文如下圖,則表明 gs 已支持 Windows 字體。

使 GMT 支持中文

修改 GMT 字體配置文件

打開 GMT 字體配置文件 /opt/GMT-4.5.13/share/pslib/PS_font_info.d,在文件最後加入 如下語句(以 Windows 下的四大常用字體爲例):

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

第一列爲字體名,第二列爲字母 A 的高度,第三列與編碼有關。

查看 GMT 當前支持的字體

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

$ pstext -L
Font #  Font Name
------------------------------------
0   Helvetica
1   Helvetica-Bold
...    ......
32  Palatino-BoldItalic
33  ZapfChancery-MediumItalic
34  ZapfDingbats
35 STSong-Light--UniGB-UTF8-H
36 STFangsong-Light--UniGB-UTF8-H
37 STHeiti-Regular--UniGB-UTF8-H
38 STKaiti-Regular--UniGB-UTF8-H

其中 0-34 爲 GMT/gs 默認支持的西文字體,35 至 38 爲新添加的中文字體。

GMT 中文測試

GMT4 測試腳本:

#!/bin/bash
gmt gmtset FONT_TITLE 40p,35,black

gmt pstext -R0/10/0/3 -JX15c/3c -Bafg -B+t"GMT中文支持" -F+a+c+f -P > gmt5_cn.ps << EOF
3 2.1 0 LM 35p,35,red   GMT宋體
3 0.9 0 LM 35p,36,blue  GMT仿宋
7 2.1 0 LM 35p,37,black GMT黑體
7 0.9 0 LM 35p,38,green GMT楷體
EOF

rm gmt.*

鏈接: link.

圖片: Alt

帶尺寸的圖片: Alt

居中的圖片: Alt

居中並且帶尺寸的圖片: Alt

當然,我們爲了讓用戶更加便捷,我們增加了圖片拖拽功能。

如何插入一段漂亮的代碼片

博客設置頁面,選擇一款你喜歡的代碼片高亮樣式,下面展示同樣高亮的 代碼片.

// An highlighted block
var foo = 'bar';

生成一個適合你的列表

  • 項目
    • 項目
      • 項目
  1. 項目1
  2. 項目2
  3. 項目3
  • 計劃任務
  • 完成任務

創建一個表格

一個簡單的表格是這麼創建的:

項目 Value
電腦 $1600
手機 $12
導管 $1

設定內容居中、居左、居右

使用:---------:居中
使用:----------居左
使用----------:居右

第一列 第二列 第三列
第一列文本居中 第二列文本居右 第三列文本居左

SmartyPants

SmartyPants將ASCII標點字符轉換爲“智能”印刷標點HTML實體。例如:

TYPE ASCII HTML
Single backticks 'Isn't this fun?' ‘Isn’t this fun?’
Quotes "Isn't this fun?" “Isn’t this fun?”
Dashes -- is en-dash, --- is em-dash – is en-dash, — is em-dash

創建一個自定義列表

Markdown
Text-to-HTML conversion tool
Authors
John
Luke

如何創建一個註腳

一個具有註腳的文本。1

註釋也是必不可少的

Markdown將文本轉換爲 HTML

KaTeX數學公式

您可以使用渲染LaTeX數學表達式 KaTeX:

Gamma公式展示 Γ(n)=(n1)!nN\Gamma(n) = (n-1)!\quad\forall n\in\mathbb N 是通過歐拉積分

Γ(z)=0tz1etdt. \Gamma(z) = \int_0^\infty t^{z-1}e^{-t}dt\,.

你可以找到更多關於的信息 LaTeX 數學表達式here.

新的甘特圖功能,豐富你的文章

Mon 06Mon 13Mon 20已完成 進行中 計劃一 計劃二 現有任務Adding GANTT diagram functionality to mermaid
  • 關於 甘特圖 語法,參考 這兒,

UML 圖表

可以使用UML圖表進行渲染。 Mermaid. 例如下面產生的一個序列圖:

張三李四王五你好!李四, 最近怎麼樣?你最近怎麼樣,王五?我很好,謝謝!我很好,謝謝!李四想了很長時間,文字太長了不適合放在一行.打量着王五...很好... 王五, 你怎麼樣?張三李四王五

這將產生一個流程圖。:

鏈接
長方形
圓角長方形
菱形
  • 關於 Mermaid 語法,參考 這兒,

FLowchart流程圖

我們依舊會支持flowchart的流程圖:

Created with Raphaël 2.2.0開始我的操作確認?結束yesno
  • 關於 Flowchart流程圖 語法,參考 這兒.

導出與導入

導出

如果你想嘗試使用此編輯器, 你可以在此篇文章任意編輯。當你完成了一篇文章的寫作, 在上方工具欄找到 文章導出 ,生成一個.md文件或者.html文件進行本地保存。

導入

如果你想加載一篇你寫過的.md文件,在上方工具欄可以選擇導入功能進行對應擴展名的文件導入,
繼續你的創作。


  1. 註腳的解釋 ↩︎

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章