GMT在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
;
字體文件似乎只能是 ttc
或 ttf
格式的,當然修改參數也有可能可以使用其他格式的字體;
要注意確認字體文件是否存在,比如 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-H
和 GB-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.
圖片:
帶尺寸的圖片:
居中的圖片:
居中並且帶尺寸的圖片:
當然,我們爲了讓用戶更加便捷,我們增加了圖片拖拽功能。
如何插入一段漂亮的代碼片
去博客設置頁面,選擇一款你喜歡的代碼片高亮樣式,下面展示同樣高亮的 代碼片
.
// An highlighted block
var foo = 'bar';
生成一個適合你的列表
- 項目
- 項目
- 項目
- 項目
- 項目1
- 項目2
- 項目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公式展示 是通過歐拉積分
你可以找到更多關於的信息 LaTeX 數學表達式here.
新的甘特圖功能,豐富你的文章
- 關於 甘特圖 語法,參考 這兒,
UML 圖表
可以使用UML圖表進行渲染。 Mermaid. 例如下面產生的一個序列圖:
這將產生一個流程圖。:
- 關於 Mermaid 語法,參考 這兒,
FLowchart流程圖
我們依舊會支持flowchart的流程圖:
- 關於 Flowchart流程圖 語法,參考 這兒.
導出與導入
導出
如果你想嘗試使用此編輯器, 你可以在此篇文章任意編輯。當你完成了一篇文章的寫作, 在上方工具欄找到 文章導出 ,生成一個.md文件或者.html文件進行本地保存。
導入
如果你想加載一篇你寫過的.md文件,在上方工具欄可以選擇導入功能進行對應擴展名的文件導入,
繼續你的創作。
註腳的解釋 ↩︎