UOS上,可以方便的用fc-query 或者fc-cat 查询某个字体包含了哪些文字,列出来的位置是按照unicode的区块位置来表示的。其实如果要直观点看,直接用字符映射表(apt install gucharmap)来查看更直观一点。而且还可以复制你想要的字符,不用考虑如何输入的问题了。
fc-query
fc-query /usr/share/texmf/fonts/opentype/public/lm/lmmonolt10-oblique.otf
Pattern has 24 elts (size 32)
family: "Latin Modern Mono Light"(s) "LM Mono Light 10"(s)
familylang: "en"(s) "en"(s)
style: "10 Oblique"(s) "Italic"(s)
stylelang: "en"(s) "en"(s)
fullname: "LMMonoLt10-Oblique"(s) "LM Mono Light 10 Oblique"(s) "Latin Modern Mono Light 10 Oblique"(s)
fullnamelang: "en"(s) "en"(s) "en"(s)
slant: 110(i)(s)
weight: 80(f)(s)
width: 100(f)(s)
foundry: "UKWN"(s)
file: "/usr/share/texmf/fonts/opentype/public/lm/lmmonolt10-oblique.otf"(s)
index: 0(i)(s)
outline: True(s)
scalable: True(s)
charset:
0000: 00000000 ffffffff ffffffff 7fffffff 00000000 ffffffff ffffffff ffffffff
0001: ffffffff fef3ffff fffffdff ffffff3f 00044000 00018003 3f9fe000 fc310cc0
0002: 0f333333 00800000 03000000 00000000 00000000 c0000000 3f0000c0 00000000
0003: 00029fdf 0007c048 00000000 00000000 fffe0000 000003fb 00000000 00000000
000e: 00000000 80000000 00000000 00000000 00000000 00000000 00000000 00000000
fc-cat
fc-cat | grep lmmonolt10-oblique
/usr/X11R6/lib/X11/fonts: 没有那个文件或目录
/home/actionchen/.fonts: 没有那个文件或目录
"lmmonolt10-oblique.otf" 0 "Latin Modern Mono Light,LM Mono Light 10:familylang=en,en:style=10 Oblique,Italic:stylelang=en,en:fullname=LMMonoLt10-Oblique,LM Mono Light 10 Oblique,Latin Modern Mono Light 10 Oblique:fullnamelang=en,en,en:slant=110:weight=80:width=100:foundry=UKWN:index=0:outline=True:scalable=True:charset=20-7e a0-131 134-137 139-148 14a-165 168-17f 18e 192 1a0-1a1 1af-1b0 1cd-1d4 1d7-1dd 1e6-1e7 1ea-1eb 1f0 1f4-1f5 1fa-201 204-205 208-209 20c-20d 210-211 214-215 218-21b 237 258-259 2be-2bf 2c6-2c7 2d8-2dd 300-304 306-30c 30f 311 323 326 32e-332 391-3a1 3a3-3a9 e3f 1e0c-1e0f 1e24-1e27 1e2a-1e2b 1e2e-1e2f 1e36-1e39 1e42-1e47 1e58-1e5d 1e62-1e63 1e6c-1e6f 1e80-1e85 1e92-1e93 1e97 1ea0-1ef9 2010-2011 2013-2014 2016 2018-201a 201c-201e 2020-2022 2026 2030 2039-203b 203d 203f-2040 2044-2046 2052 2054 20a1 20a4 20a6 20a9 20ab-20ac 20b1 2103 2116-2117 211e 2126-2127 212e 2190-2193 2212 2215 2217 221a 221e 2222 2300 2329-232a 2422-2423 25e6 266a 26ad-26ae 27e6-27e7 ea00-ea11 ea14-ea1f ea25-ea36 ea38-ea46 eb02-eb04 eb08-eb0a eb0d eb0f-eb12 eb15-eb17 eb19 eb1e-eb1f eb29-eb2b eb2e-eb2f eb31-eb32 eb35-eb36 eb3a-eb3b eb40 eb43 eb48-eb49 eb4c-eb4d eb50-eb57 eb5a eb63-eb67 eb6b eb6e-eb6f eb7e ec01 ec06-ec0e ec10-ec11 f638 f643-f64c f6be f6de f724 f7a2:lang=aa|ast|ay|bi|bin|br|bs|ca|ch|co|cs|cy|da|de|en|eo|es|et|eu|fi|fj|fo|fr|fur|fy|gd|gl|gn|gv|ho|hr|hu|ia|ig|id|ie|io|is|it|ki|la|lb|lt|lv|mg|mh|mt|nb|nds|nl|nn|no|nr|nso|ny|oc|om|pl|pt|rm|ro|sk|sl|sma|smj|smn|so|sq|ss|st|sv|sw|tk|tl|tn|tr|ts|uz|vo|vot|wa|wen|wo|xh|yap|zu|an|crh|csb|fil|hsb|ht|jv|kj|ku-tr|kwm|lg|li|ms|na|ng|pap-an|pap-aw|rn|rw|sc|sg|sn|su|za:fontversion=131334:capability=otlayout\\:DFLT otlayout\\:cyrl otlayout\\:latn:fontformat=CFF:decorative=False:postscriptname=LMMonoLt10-Oblique:color=False:symbol=False:variable=False"
这两者列出来的charset都是一样的,只不过一个直接写的范围,另一个列出位置空位和占位图了。
fc-query查询出来的更直观一点,直接能表示在某个位置是空的还是有字符的。和fc-cat去缓存里面查询的是对应的,fc-cat直接写的范围。
下来来换算下这2个列出来的位置
fc-query列出来的第一列是unicode字符位号的U+xxxxx的前4位,后两位就是实际后面的用16进制数表示的位置。
比如这个拉丁字体支持的字符用fc-cat查询出来是charset=20-7e开头,
而fc-query查询出来是下面这种更直观的。
0000: 00000000 ffffffff ffffffff 7fffffff
按位置的二进制值展开就可以得到对应的字符编码位号里面有没有字符了。
unicode字符位置图只列了前面一点点,按照这个位置推导,括号里面是unicode位号,括号外面的数字就是fc-query查询出来的每个位置的值,位号里面如果有字符,则取括号外面的值,然后排列起来就得到fc-query查询出来的值了。
1(00)2(01)4(02)8(03)1(04)2(05)4(06)8(07)1(08)2(09)4(0A)8(0B)1(0C)2(0D)4(0E)8(0F)1(10)2(11)4(12)8(13)1(14)2(15)4(16)8(17)1(18)2(19)4(1A)8(1B)1(1C)2(1D)4(1E)8(1F)1(20) 2(21) 4(22) 8(23) 1(24) 2(250 4(26) 8(27)
00f7: 00000000 00000010 00000000 00000000 00000000 00000004 00000000 00000000
按照上面的位号来推导一下U+00F7xx这个位置的字符分布情况。
按照上面的表来对00F7这一行的00f7: 00000000 00000010 部分展开
00F7-00 | 00F707 | ||||||
00F7-08 | 00F70F | ||||||
00F7-10 | 00F717 | ||||||
00F718 | 00F71F | ||||||
00F720 | 00F724(有字符,值是1) | 00F727 | |||||
00F728 | 00F72F | ||||||
00F730 | 00F737 | ||||||
00F738 | 00F73F |
这里我简单推了一下,很无聊,不过其实感觉fc-cat其实给的很清楚了。或者是直接字符映射表查看就能知道。而且还能知道这个字符是啥。至于属于哪一个语言区块,就只能去查unicode的字符分配表了。
另外,对于ttf otf字体,有x11工具 ttx可以做dump
How to list all supported glyphs of a given font
这个地址的大佬还写了个shell,可以命令行列出字体包含的字符。