在语雀中,无法使用HTML中的标签来输入拼音,但是语雀可以支持latex公式块的插入,所以我们可以借助公式中的latex来做汉语拼音的输入,具体来说也就是通过latex中的overset指令来输入上下并排的字符。
先举一个简单的例子
\overset{bái}{白}\overset{rì}{日}\overset{yī}{依}\overset{shān}{山}\overset{jìn}{尽},\overset{huáng}{黄}\overset{hé}{河}\overset{rù}{入}\overset{hǎi}{海}\overset{liú}{流}
然后可以让这个字稍微大一些,比如(通过small,large,huge等命令来控制字体)
\huge{\overset{bái}{白}\overset{rì}{日}\overset{yī}{依}\overset{shān}{山}\overset{jìn}{尽},\overset{huáng}{黄}\overset{hé}{河}\overset{rù}{入}\overset{hǎi}{海}\overset{liú}{流}}
也可以通过text来设置不使用斜体来渲染拼音:
\huge{\overset{\text{bái}}{白}\overset{\text{rì}}{日}\overset{\text{yī}}{依}\overset{\text{shān}}{山}\overset{\text{jìn}}{尽},\overset{\text{huáng}}{
黄}\overset{\text{hé}}{河}\overset{\text{rù}}{入}\overset{\text{hǎi}}{海}\overset{\text{liú}}{流}}
如果直接编辑latex公式的话,确实是一个非常痛苦的过程。我们使用pypinyin这个工具,把成句或者成段的文字在加上拼音之后翻译成latex公式的形式(注意,受限于pypinyin的词库,自动匹配的拼音并不一定是正确的,还需要自己进行手动调整):
import pypinyin
def get_latex_pinyin(s, text=False):
chars = []
for group in pypinyin.core.seg(s):
p = pypinyin.lazy_pinyin(group, style=pypinyin.Style.TONE)
if p[0] == group:
chars.extend(list(zip(group, group)))
else:
chars.extend(list(zip(list(group), p)))
def to_latex(char, pinyin):
if char == pinyin:
return char
elif text:
return '\overset{\\text{%s}}{%s}' % (pinyin, char)
else:
return '\overset{%s}{%s}' % (pinyin, char)
return ''.join([to_latex(char, pinyin) for (char, pinyin) in chars])
使用get_latex_pinyin这个函数的方式如下:
>>> print(get_latex_pinyin('白日依山尽,黄河入海流', text=True))
\overset{\text{bái}}{白}\overset{\text{rì}}{日}\overset{\text{yī}}{依}\overset{\text{shān}}{山}\overset{\text{jǐn}}{尽},\overset{\text{huáng}}{
黄}\overset{\text{hé}}{河}\overset{\text{rù}}{入}\overset{\text{hǎi}}{海}\overset{\text{liú}}{流}