我不懂字符编码啥的,本文仅是经验分享,不对其中的原理猜测负责
一般而言,对于可以设置 Fallback Font 的文本编辑器,显示西夏文还是很容易的;Word只能设置中文和英文字体,而且似乎是根据输入法所属的 block(而非被输入文字的字符属性)来自动更改字体(在有些时候可能有用,但在有些时候简直是灾难。例如小狼毫用繁體中文(臺灣)键盘布局的话,首先输入的繁体字都会是丑陋的 PMingLiU,而且只能最后一个个改字体;另外输入西夏文也是需要输入一个改一次字体),简直是微软办公软件特有的傲慢——总觉得自己很懂用户的需求,以及忽视一切小众需求。
目前用下来,西夏文输入和显示最舒适的还是 Obsidian + VS Code 的组合。Obsidian 用来做平时的笔记和语料标注,VS Code 用来写 LaTeX 的文本。
Obsidian 的配置
Obsidian 可以在设置-外观中设置多个字体,即自定义一个 Fallback list。我的设置如下:
中文、英文、西夏文三种文字混排的情况下不会出太多问题。示例:
关于语料标注的解决方案,图哥告诉我了这个 Obsidian 的第三方库,很好用,谢谢图哥(。具体操作方法在文档里都有,不再赘述。另外记得在外观css文件里加上
.ling-gloss-level-a { font-style:normal; }
因为西夏文的斜体真的很丑……最终效果如下:
Obsidian好像不能小体大写真是残念(。
另外夹个私货,你还在为录入好的西夏文必须一个个复制到古今文字集成查询而烦恼吗?你还在为懒得复制古今文字集成上的拟音而焦虑(真的会焦虑吗如果不学音韵学的话)吗?旗鱼现在为您提供解决方案!好吧就是个简单的 Python 爬虫,但还蛮方便的。因为不会封装只能分享一下代码了:
import requests
import re
def check(s):
url = 'http://ccamc.org/tangut.php?n4694=' + s
r = requests.get(url)
pattern_om = re.compile('<p>龔煌城:<a href="tangut_rp\\.php\\?rp=.*?">(.*?)</a>')
om = re.findall(pattern_om, r.text)
om = om[0]
pattern_imi = re.compile('2012版《簡明夏漢字典》釋義</b></p><p>(.*?)</p><p><b>')
imi = re.findall(pattern_imi, r.text)
imi = imi[0]
try:
pattern_tone = re.compile('<a href="tangut_rhyme\\.php\\?rhyme=.*?">(.*?)\\.')
tone = re.findall(pattern_tone, r.text)
tone = tone[0]
except Exception:
tone = ''
return om, imi, tone
if __name__ == '__main__':
while True:
raw = str(input())
om_list = []
for i in raw:
try:
result = check(i)
om_list.append(result[0]+result[2])
print('{0}:音:{1},义:{2}'.format(i, result[0]+result[2], result[1]))
except Exception:
print(i)
continue
print(' '.join(om_list))
记得别一下把整篇文章放进去否则会被封IP的(。以及有很少一部分字因为技术原因查不到,还是要自己复制进古今文字集成查。最后附赠打印了一个拟音表,这样就能直接复制进行间标注的代码里了,真是太方便了!(池沼)
VS Code 以及 LaTeX 配置
VS Code 也能设置 Fallback list:
可以看出我很喜欢 JetBrains(和他家的字体)。显示出来如图:
LaTeX 里排印西夏文似乎只能参考这篇文章了,赖云帆为什么把他的文章删了 Wayback Machine 也没存档。但这个方法也不是万能的。有一次抄别人模板的时候似乎和 ctexcap 宏包冲突了。临时解决方案是
\setCJKfamilyfont{Tangut}{Tangut+N4694+V3.005.ttf}
\CJKfamily{Tangut}{}
总之放在这供大家参考。
结语
无人在意的小众需求是这样的,只能想一些权宜之计(。