xpinyin 宏包

Size: px
Start display at page:

Download "xpinyin 宏包"

Transcription

1 xpinyin 宏包 李清 2018/01/28 v2.6 第 1 节 简介 xpinyin 是一个 LATEX 宏包, 提供了为汉字自动注音的功能 第 2 节 基本用法 xpinyin 支持采用 GBK 和 UTF-8 编码的 TEX 源文件, 建议总是使用 UTF-8 如果使用 LATEX 或 pdflatex 的编译方式, 则根据编码的情况,xpinyin 依赖 CJK 或者 CJKutf8 宏包 如果使用 XƎLATEX, 则依赖 xecjk 宏包 如果它们没有在 xpinyin 之前被载入,xpinyin 将根据编译方式自动选择,LATEX 或 pdflatex 将使用 CJKutf8 xpinyin 还依赖 l3kernel 和 l3packages, 使用 (pdf)latex 下的 GBK 编码时, 还将依赖 xcjk2uni 需要注意的是,xpinyin 缺省将拼音的字体设置为与文档的主字体 (\normalfont) 相同, 所以为了保证声调字母的正确输出, 应该选用合适的西文主字体 也可以通过将在下一节介绍的 font 选项来单独设置拼音的字体 XƎLATEX 下的简单示例 : (pdf)latex 下的简单示例 : \documentclass{article} \usepackage{xecjk} \usepackage{xpinyin} \setmainfont{cmu Serif} \setcjkmainfont{simsun} \begin{document} \xpinyin*{ 汉语拼音示例 } \end{document} \documentclass{article} \usepackage{cjkutf8} \usepackage{xpinyin} \usepackage[t1]{fontenc} \usepackage{lmodern} \begin{document} \begin{cjk}{utf8}{gbsn} \xpinyin*{ 汉语拼音示例 } \end{cjk} \end{document} 运行上述示例要求系统安装了设置的字体, 源文件用 UTF-8 编码保存, 使用相应的编译方式 xpinyin 可以与 ctex 宏包或文档类共同使用, 使用方式与上面类似 ctex-kit rev. fafc2d9. 1

2 第 3 节用户手册 2 第 3 节 用户手册 pinyinscope \begin{pinyinscope}[ options ]... \end{pinyinscope} 为 pinyinscope 环境中的汉字自动注音 例如 1 \begin{pinyinscope} 2 列位看官 : 你道此书从何而来? 说起根由, 虽近荒唐, 细按则深有趣味 3 待在下将此来历注明, 方使阅者 \xpinyin{ 了 }{liao3} 然不惑 4 \end{pinyinscope} liè wèi kàn guān 列位看官 : 你 nǐ dào cǐ shū cóng hé ér lái 道此书从何而来? 说 shuō qǐ gēn yóu 起根由, 虽 suī jìn huāngtáng 近荒唐, 细 xì àn zé shēn yǒu qù 按则深有趣 fāng shǐ yuè zhě liǎo rán bù huò 方使阅者了然不惑 可选项 options 用于局部设置拼音的格式, 将在下面说明 wèi 味 待 dài zài xià jiāng cǐ lái 在下将此来历注明, lì zhù míng \xpinyin \xpinyin [ options ] { 单个汉字 } { 拼音 } \xpinyin* [ options ] { 文字 } 对于多音字, 可以使用 \xpinyin 为其设置拼音 ; 而 \xpinyin* 相当于 pinyinscope 环境的命令形式 \xpinyin 可以在 pinyinscope 环境和 \xpinyin* 中使用 例如, cháng 长 zhēn shì yǐn mènghuàn shì tōng líng 甄士隐梦幻识通灵 zhòng yào 重要 1 \xpinyin{ 长 }{chang2}\\ 2 \xpinyin*{ 甄士隐梦幻识通灵 }\\ 3 \xpinyin*{\xpinyin{ 重 }{zhong4} 要 } \pinyin \setpinyin \xpinyinsetup ratio vsep hsep \pinyin [ options ] { 拼音 } 用于输出拼音, 为了输入的方便 ü 可以用 v 代替 例如, lǘ zi nǚ hái zi \setpinyin { 汉字 } { 拼音 } 1 \pinyin{lv2zi}\\ 2 \pinyin{nv3hai2zi} xpinyin 宏包的拼音数据 (xpinyin-database.def) 来源于 Unicode 的 Unihan 数据库 1 中的 Unihan_Readings.txt 文件 对于多音字, 一般来说这个文件选用的是常用读音 可以使用 \setpinyin 来设置多音字的首选读音 \xpinyinsetup { key 1 = val 1, key 2 = val 2,... } 用于在导言区或文档中, 设置拼音的格式 目前可以设置的 key 如下介绍 ratio = { number } 设置拼音字体大小与当前正文字体大小的比例, 缺省值是 0.4 vsep = { dimen } 设置拼音的基线与汉字基线的间距, 缺省值是 1 em hsep = { skip } 设置注音汉字之间的间距, 缺省值与 \CJKglue 的值相同 为了断行时行末的对齐, 设置的 skip 最后有一定的弹性 例如 1 \xpinyin*[ratio={.7},hsep={.5em plus.1em},vsep={1.1em}]{ 贾雨村风尘怀闺秀 } jiǎ 贾 yǔ 雨 cūn 村 fēng 风 chénhuái 尘 怀 guī 闺 xiù 秀 1

3 第 4 节代码实现 3 pysep pysep = { glue } 设置 \pinyin 输出的相邻两个汉语拼音的空白, 缺省值是一个空格 font font = { font } 设置拼音的字体, 缺省值是 \normalfont, 即以正文西文字体相同 为了保证拼音能正确输出, 最好选用收字量较大的西文字体 format format = { format } 设置拼音的其它格式, 例如颜色等, 缺省值为空 multiple multiple = { format } 设置多音字拼音的其它格式, 缺省值为空 可以通过这个选项来提醒校正多音字的拼音 例如本文档设置多音字拼音的颜色是红色 ( 需要载入 color 宏包 ): \xpinyinsetup{multiple={\color{red}}} footnote New: \disablepinyin \enablepinyin footnote = true false 是否对拼音环境中的脚注 (\footnote) 汉字加上拼音 缺省值为 false 更一般的情况, 请使用 \disablepinyin \disablepinyin 用于在拼音环境 (pinyinscope) 中临时取消对汉字的注音, 而 \enablepinyin 用于其后的恢复 New: 第 4 节 代码实现 1 *package 3 \msg_new:nnn { xpinyin } { l3-too-old } 4 { 5 Support~package~'expl3'~too~old. \\\\ 6 Please~update~an~up~to~date~version~of~the~bundles\\\\ 7 'l3kernel'~and~'l3packages'\\\\ 8 using~your~tex~package~manager~or~from~ctan. 9 } 10 \@ifpackagelater { expl3 } { 2017/12/16 } { } 11 { \msg_error:nn { xpinyin } { l3-too-old } } 12 \msg_new:nnn { xpinyin } { engine-not-supported } 13 { Engine~`\c_sys_engine_str'~is~not~yet~supported,~xpinyin~will~abort! } 14 \bool_lazy_or:nnf 15 { \sys_if_engine_xetex_p: } 16 { \sys_if_engine_pdftex_p: } 17 { \msg_critical:nn { xpinyin } { engine-not-supported } } 18 \RequirePackage { xparse } 19 \RequirePackage { l3keys2e } \c xpinyin_tone_prop 重音标记 \` \' 和 \= 在 tabbing 环境中被移作他用, 为避免错误, 我们使用内部命令 \@tabacckludge 或 \a 来定义 20 \prop_const_from_keyval:nn \c xpinyin_tone_prop 21 { 22 { ā } = { \@tabacckludge= a }, 23 { á } = { \@tabacckludge' a }, 24 { ǎ } = { \v a }, 25 { à } = { \@tabacckludge` a }, 26 { ō } = { \@tabacckludge= o }, 27 { ó } = { \@tabacckludge' o },

4 第 4 节代码实现 4 28 { ǒ } = { \v o }, 29 { ò } = { \@tabacckludge` o }, 30 { ē } = { \@tabacckludge= e }, 31 { é } = { \@tabacckludge' e }, 32 { ě } = { \v e }, 33 { è } = { \@tabacckludge` e }, 34 { ū } = { \@tabacckludge= u }, 35 { ú } = { \@tabacckludge' u }, 36 { ǔ } = { \v u }, 37 { ù } = { \@tabacckludge` u }, 38 { ḿ } = { \@tabacckludge' m }, 39 { ń } = { \@tabacckludge' n }, 40 { ň } = { \v n }, 41 { ǹ } = { \@tabacckludge` n }, 42 { ī } = { \@tabacckludge= { \i } }, 43 { í } = { \@tabacckludge' { \i } }, 44 { ǐ } = { \v { \i } }, 45 { ì } = { \@tabacckludge` { \i } }, 46 { ü } = { \" u }, 47 { ǖ } = { \@tabacckludge= { \" u } }, 48 { ǘ } = { \@tabacckludge' { \" u } }, 49 { ǚ } = { \v { \" u } }, 50 { ǜ } = { \@tabacckludge` { \" u } } 51 } \ xpinyin_utf_char:nn 52 \cs_new_protected_nopar:npn \ xpinyin_utf_char:nn #1#2 53 { 54 \cs_if_exist:cf { u8:#1 } 55 { \tl_const:cn { u8:#1 } {#2} } 56 } \ xpinyin_gbk_char:nn 57 \cs_new_protected_nopar:npn \ xpinyin_gbk_char:nn #1#2 58 { 59 \ xpinyin_utf_char:nn {#1} {#2} 60 \exp_args:nx \ xpinyin_gbk_char_aux:nn { \tl_head:n {#1} } {#1} 61 } 62 \cs_new_protected_nopar:npn \ xpinyin_gbk_char_aux:nn #1#2 63 { \exp_args:nf \ xpinyin_gbk_char_aux:nnn { \int_eval:n { `#1 } } {#1} {#2} } 64 \cs_new_protected_nopar:npn \ xpinyin_gbk_char_aux:nnn #1#2#3 65 { 66 \cs_if_exist:cf { xpinyin_utf_ #1 :w } 67 { 68 \exp_args:nf \ xpinyin_gbk_char_def:nnn 69 { 70 \int_case:nn { \tl_count:n {#3} } 71 { 72 { \c_two } { ##1 } 73 { \c_three } { ##1##2 } 74 { \c_four } { ##1##2##3 } 75 } 76 } 77 {#1} {#2} 78 \exp_args:nc \ xpinyin_save_utf_cs:nn { xpinyin_utf_ #1 :w } {#1} 79 \tl_gput_right:nx \c xpinyin_reset_utf_catcode_tl 80 { \char_set_catcode:nn {#1} { \char_value_catcode:n {#1} } } 81 \char_set_catcode_active:n {#1} 82 } 83 } 84 \cs_new_protected_nopar:npn \ xpinyin_gbk_char_def:nnn #1#2#3 85 { 86 \cs_new_protected_nopar:cpn { xpinyin_utf_ #2 :w } #1 87 { \use:c { u8: \tl_to_str:n { #3#1 } } } 88 } 89 \tl_new:n \c xpinyin_reset_utf_catcode_tl \ xpinyin_save_utf_cs:nn 90 \group_begin: 91 \char_set_catcode_active:n { 126 } 92 \cs_new_protected_nopar:npn \ xpinyin_save_utf_cs:nn #1#2

5 第 4 节代码实现 5 93 { 94 \group_begin: 95 \char_set_lccode:nn { 126 } {#2} 96 \tex_lowercase:d 97 { 98 \group_end: 99 \tl_gput_right:nn \c xpinyin_reset_utf_cs_tl { \cs_set_eq:nn ~ #1 } 100 } 101 } 102 \group_end: 103 \tl_new:n \c xpinyin_reset_utf_cs_tl 104 \bool_new:n \g xpinyin_gbk_bool 105 \@ifpackageloaded { xecjk } 106 { \AtEndOfPackage { \ xpinyin_adjust_xecjk_hook: } } 107 { 108 \@ifpackageloaded { CJKutf8 } 109 { 110 \prop_map_function:nn \c xpinyin_tone_prop \ xpinyin_utf_char:nn 111 \AtEndOfPackage { \ xpinyin_adjust_cjk_hook: } 112 } 113 { 114 \@ifpackageloaded { CJK } 115 { 116 \RequirePackage { xcjk2uni } 117 \prop_map_function:nn \c xpinyin_tone_prop \ xpinyin_gbk_char:nn 118 \AtEndOfPackage 119 { 120 \tl_put_right:nn \l xpinyin_pinyin_box_hook_tl 121 { \c xpinyin_reset_utf_cs_tl } 122 \ xpinyin_adjust_cjk_hook: 123 \tl_use:n \c xpinyin_reset_utf_catcode_tl 124 } 125 \bool_gset_true:n \g xpinyin_gbk_bool 126 } 127 { 128 \sys_if_engine_xetex:tf 129 { 130 \RequirePackage { xecjk } 131 \AtEndOfPackage { \ xpinyin_adjust_xecjk_hook: } 132 } 133 { 134 \RequirePackage { CJKutf8 } 135 \prop_map_function:nn \c xpinyin_tone_prop \ xpinyin_utf_char:nn 136 \AtEndOfPackage { \ xpinyin_adjust_cjk_hook: } 137 } 138 } 139 } 140 } \l xpinyin_tmpa_box \l xpinyin_tmpb_box 141 \box_new:n \l xpinyin_tmpa_box 142 \box_new:n \l xpinyin_tmpb_box \ xpinyin_width:nn 143 \cs_new_protected:npn \ xpinyin_width:nn #1#2 144 { 145 \hbox_set:nn \l xpinyin_tmpa_box {#2} 146 #1 = \box_wd:n \l xpinyin_tmpa_box 147 } \ xpinyin_make_pinyin_box:nnn 148 \cs_new_protected_nopar:npn \ xpinyin_make_pinyin_box:nnn #1#2#3 149 { 150 \ xpinyin_leavevmode: 151 \hbox_overlap_right:n 152 { 153 \hbox_set:nn \l xpinyin_tmpa_box 154 { \ xpinyin_cjksymbol_hook: \ xpinyin_save_cjksymbol:n {#2} } 155 \hbox_set:nn \l xpinyin_tmpb_box 156 {

6 第 4 节代码实现 \color_group_begin: \color_ensure_current: 158 \l xpinyin_pinyin_box_hook_tl 159 \ xpinyin_select_font: 160 \clist_if_exist:ctf { c xpinyin_multiple_ #1 _clist } 161 { \l xpinyin_multiple_tl \l xpinyin_format_tl } 162 { \l xpinyin_format_tl } 163 {#3} 164 \color_group_end: 165 } 166 \dim_compare:nnnt 167 { \box_wd:n \l xpinyin_tmpb_box } > 168 { \box_wd:n \l xpinyin_tmpa_box + \l xpinyin_cjkglue_dim } 169 { 170 \box_resize_to_wd_and_ht:nnn \l xpinyin_tmpb_box 171 { \box_wd:n \l xpinyin_tmpa_box + \l xpinyin_cjkglue_dim } 172 { \box_ht:n \l xpinyin_tmpb_box } 173 } 174 \box_move_up:nn { \l xpinyin_vsep_tl } 175 { 176 \hbox_to_wd:nn { \box_wd:n \l xpinyin_tmpa_box } 177 { \tex_hss:d \box_use_drop:n \l xpinyin_tmpb_box \tex_hss:d } 178 } 179 } 180 } 181 \tl_new:n \l xpinyin_pinyin_box_hook_tl 182 \sys_if_engine_pdftex:t 183 { 184 \tl_put_right:nn \l xpinyin_pinyin_box_hook_tl 185 { \cs_set_eq:nn \CJK@plane \tex_undefined:d } 186 } 187 \cs_generate_variant:nn \ xpinyin_make_pinyin_box:nnn { x } \ xpinyin_cjksymbol:n 188 \cs_new_protected_nopar:npn \ xpinyin_cjksymbol:n #1 189 { \ xpinyin_cjksymbol:xn { \ xpinyin_to_unicode:n {#1} } {#1} } 190 \cs_new_protected_nopar:npn \ xpinyin_cjksymbol:nn #1#2 191 { 192 \ xpinyin_make_pinyin_box:nnn {#1} {#2} { \use:c { c xpinyin_ #1 _tl } } 193 \ xpinyin_save_cjksymbol:n {#2} 194 } 195 \cs_generate_variant:nn \ xpinyin_cjksymbol:nn { x } pinyinscope 196 \NewDocumentEnvironment { pinyinscope } { O { } } 197 { 198 \keys_set:nn { xpinyin } {#1} 199 \enablepinyin 200 } 201 { } \xpinyin 202 \NewDocumentCommand \xpinyin { s O { } m } 203 { 204 \mode_leave_vertical: 205 \IfBooleanTF {#1} 206 { 207 \group_begin: 208 \keys_set:nn { xpinyin } {#2} 209 \enablepinyin 210 #3 211 \group_end: 212 } 213 { 214 \group_begin: 215 \keys_set:nn { xpinyin } {#2} 216 \bool_if:nf \l xpinyin_enable_bool 217 { \ xpinyin_width:nn \l xpinyin_cjkglue_dim { \CJKglue } } 218 \ xpinyin_single_aux:nn {#3} 219 } 220 }

7 第 4 节代码实现 7 \l xpinyin_enable_bool \ xpinyin_cjkglue: 221 \bool_new:n \l xpinyin_enable_bool 222 \cs_new_protected_nopar:npn \ xpinyin_cjkglue: 223 { \skip_horizontal:n { \l xpinyin_hsep_tl } } \enablepinyin 224 \NewDocumentCommand \enablepinyin { } 225 { 226 \bool_if:nf \l xpinyin_enable_bool 227 { 228 \tl_if_empty:nf \l xpinyin_hsep_tl 229 { 230 \cs_set_eq:nn \ xpinyin_save_cjkglue: \CJKglue 231 \cs_set_eq:nn \CJKglue \ xpinyin_cjkglue: 232 } 233 \ xpinyin_width:nn \l xpinyin_cjkglue_dim { \CJKglue } 234 \ xpinyin_replace_cjksymbol: 235 \ xpinyin_restore_footnote: 236 \bool_set_true:n \l xpinyin_enable_bool 237 } 238 } \disablepinyin 239 \NewDocumentCommand \disablepinyin { } 240 { 241 \bool_if:nt \l xpinyin_enable_bool 242 { 243 \cs_if_eq:nnt \CJKglue \ xpinyin_cjkglue: 244 { \cs_set_eq:nn \CJKglue \ xpinyin_save_cjkglue: } 245 \ xpinyin_restore_cjksymbol: 246 \bool_set_false:n \l xpinyin_enable_bool 247 } 248 } \ xpinyin_restore_footnote: \l xpinyin_restore_footnote_tl \l xpinyin_cjkglue_dim 249 \cs_new_protected_nopar:npn \ xpinyin_restore_footnote: 250 { 251 \bool_if:nf \l xpinyin_footnote_bool 252 { \tl_put_left:nn \@parboxrestore { \l xpinyin_restore_footnote_tl } } 253 } 254 \tl_new:n \l xpinyin_restore_footnote_tl 255 \tl_set:nn \l xpinyin_restore_footnote_tl 256 { 257 \int_compare:nnnt \etex_currentgrouptype:d = \c_eleven 258 { \disablepinyin } 259 } 260 \dim_new:n \l xpinyin_cjkglue_dim \ xpinyin_single_aux:nn 261 \cs_new_protected_nopar:npn \ xpinyin_single_aux:nn #1#2 262 { 263 \ xpinyin_replace_cjksymbol_single:n {#2} 264 #1 265 \group_end: 266 } 267 \cs_new_protected_nopar:npn \ xpinyin_replace_cjksymbol_single_aux:n #1 268 { 269 \bool_if:nf \l xpinyin_enable_bool { \ xpinyin_replace_cjksymbol: } 270 \cs_set_protected_nopar:npn \CJKsymbol ##1 271 { \ xpinyin_single_cjksymbol:nn {##1} {#1} } 272 } 273 \cs_new_protected_nopar:npn \ xpinyin_single_cjksymbol:nn #1#2 274 { 275 \ xpinyin_make_pinyin_box:xnn 276 { \ xpinyin_to_unicode:n {#1} } {#1} { \ xpinyin_pinyin:n {#2} } 277 \ xpinyin_save_cjksymbol:n {#1} 278 } \ xpinyin_replace_cjksymbol_aux: 279 \cs_new_protected_nopar:npn \ xpinyin_replace_cjksymbol_aux: 280 { 281 \cs_set_eq:nn \ xpinyin_save_cjksymbol:n \CJKsymbol

8 第 4 节代码实现 \cs_set_eq:nn \CJKsymbol \ xpinyin_cjksymbol:n 283 } \ xpinyin_restore_cjksymbol_aux: \ xpinyin_select_font_xetex: \ xpinyin_select_font_aux: 284 \cs_new_protected_nopar:npn \ xpinyin_restore_cjksymbol_aux: 285 { \cs_set_eq:nn \CJKsymbol \ xpinyin_save_cjksymbol:n } 286 \cs_new_protected_nopar:npn \ xpinyin_select_font_xetex: 287 { 288 \cs_if_exist_use:cf { \l xpinyin_coor_tl } 289 { 290 \tl_set:nx \l xpinyin_current_coor_tl { \l xpinyin_coor_tl } 291 \ xpinyin_select_font_aux: 292 \int_compare:nnnf { \xetex_fonttype:d \tex_font:d } = \c_zero 293 { 294 \exp_last_unbraced:nnv 295 \cs_gset_eq:cn \l xpinyin_current_coor_tl \tex_font:d 296 } 297 } 298 } 299 \cs_new_protected_nopar:npn \ xpinyin_select_font_aux: 300 { 301 \fontsize 302 { \l xpinyin_ratio_tl \etex_dimexpr:d \f@size pt \scan_stop: } 303 { \f@baselineskip } 304 \normalfont 305 \l xpinyin_font_tl 306 \selectfont 307 } \ xpinyin_to_unicode_xetex:n 308 \cs_new_nopar:npn \ xpinyin_to_unicode_xetex:n #1 309 { \int_to_arabic:n { `#1 } } \ xpinyin_utf_to_unicode:n \ xpinyin_utfchar_to_unicode:n \ xpinyin_gbk_to_unicode:n \ xpinyin_gbkchar_to_unicode:n \ xpinyin_adjust_xecjk_hook: 310 \cs_new_nopar:npn \ xpinyin_utf_to_unicode:n #1 311 { 312 \int_to_arabic:n 313 { \exp_args:no \int_from_hex:n { \CJK@plane } * "100 + #1 } 314 } 315 \cs_new_nopar:npn \ xpinyin_utfchar_to_unicode:n #1 316 { \int_to_arabic:n { \ xpinyin_utf_viii_to_unicode:nnnw #1 \q_stop } } 317 \cs_new_nopar:npn \ xpinyin_utf_viii_to_unicode:nnnw #1#2#3#4 \q_stop 318 { 319 \tl_if_empty:ntf {#4} 320 { ( `#1 - "E0 ) * " ( `#2 - "80 ) * "40 + ( `#3 - "80 ) } 321 { ( `#1 - "F0 ) * " ( `#2 - "80 ) * " ( `#3 - "80 ) * "40 + ( `#4 - "80 ) } 322 } 323 \cs_new_nopar:npn \ xpinyin_gbk_to_unicode:n #1 324 { \int_to_arabic:n { " \CJKtu_sfd_map:nn { \CJK@plane } {#1} } } 325 \cs_new_nopar:npn \ xpinyin_gbkchar_to_unicode:n #1 326 { \int_to_arabic:n { " \CJKchartouni {#1} } } 327 \cs_new_protected_nopar:npn \ xpinyin_adjust_xecjk_hook: 328 { 329 \cs_new_eq:nn \ xpinyin_select_font: \ xpinyin_select_font_xetex: 330 \cs_new_eq:nn \ xpinyin_to_unicode:n \ xpinyin_to_unicode_xetex:n 331 \cs_new_eq:nn \ xpinyin_char_to_unicode:n \ xpinyin_to_unicode:n 332 \cs_new_eq:nn \ xpinyin_restore_cjksymbol: \ xpinyin_restore_cjksymbol_aux: 333 \cs_new_eq:nn \ xpinyin_replace_cjksymbol: \ xpinyin_replace_cjksymbol_aux: 334 \cs_new_eq:nn \ xpinyin_replace_cjksymbol_single:n 335 \ xpinyin_replace_cjksymbol_single_aux:n 336 \tl_if_exist:ntf \l_xecjk_current_font_tl 337 { 338 \tl_set:nn \l xpinyin_coor_tl 339 { 340 ( \tl_to_str:n \l xpinyin_font_tl ) / 341 \l_xecjk_current_font_tl/\l xpinyin_ratio_tl 342 } 343 }

9 第 4 节代码实现 { 345 \tl_set:nn \l xpinyin_coor_tl 346 { 347 ( \tl_to_str:n \l xpinyin_font_tl ) / 348 \xecjk@family/\f@series/\f@shape/\f@size/\l xpinyin_ratio_tl 349 } 350 } 351 \cs_new_eq:nn \ xpinyin_leavevmode: \prg_do_nothing: 352 \cs_new_protected_nopar:npx \ xpinyin_cjksymbol_hook: 353 { 354 \exp_not:n \makexecjkinactive 355 \cs_if_exist_use:nf \xecjk_select_font: 356 { \exp_not:n \xecjk@setfont } 357 } 358 } \ xpinyin_adjust_cjk_hook: \ xpinyin_adjust_cjkpunct_hook: 359 \cs_new_protected_nopar:npn \ xpinyin_adjust_cjk_hook: 360 { 361 \bool_if:ntf \g xpinyin_gbk_bool 362 { 363 \cs_new_eq:nn \ xpinyin_to_unicode:n \ xpinyin_gbk_to_unicode:n 364 \cs_new_eq:nn \ xpinyin_char_to_unicode:n \ xpinyin_gbkchar_to_unicode:n 365 } 366 { 367 \cs_new_eq:nn \ xpinyin_to_unicode:n \ xpinyin_utf_to_unicode:n 368 \cs_new_eq:nn \ xpinyin_char_to_unicode:n \ xpinyin_utfchar_to_unicode:n 369 } 370 \cs_new_eq:nn \ xpinyin_select_font: \ xpinyin_select_font_aux: 371 \cs_new_eq:nn \ xpinyin_leavevmode: \mode_leave_vertical: 372 \cs_new_eq:nn \ xpinyin_cjksymbol_hook: \prg_do_nothing: 373 \@ifpackageloaded { CJKpunct } 374 { \ xpinyin_adjust_cjkpunct_hook: } 375 { 376 \cs_new_eq:nn \ xpinyin_restore_cjksymbol: \ xpinyin_restore_cjksymbol_aux: 377 \cs_new_eq:nn \ xpinyin_replace_cjksymbol: \ xpinyin_replace_cjksymbol_aux: 378 \cs_new_eq:nn \ xpinyin_replace_cjksymbol_single:n 379 \ xpinyin_replace_cjksymbol_single_aux:n 380 \AtBeginDocument 381 { 382 \@ifpackageloaded { CJKpunct } 383 { 384 \cs_undefine:n \ xpinyin_restore_cjksymbol: 385 \cs_undefine:n \ xpinyin_replace_cjksymbol: 386 \cs_undefine:n \ xpinyin_replace_cjksymbol_single:n 387 \ xpinyin_adjust_cjkpunct_hook: 388 } { } 389 } 390 } 391 } 392 \cs_new_protected_nopar:npn \ xpinyin_adjust_cjkpunct_hook: 393 { 394 \cs_new_protected_nopar:npn \ xpinyin_restore_cjksymbol: 395 { 396 \int_compare:nnntf { \CJKpunct@punctstyle } = { \CJKpunct@ps@plain } 397 { \ xpinyin_restore_cjksymbol_aux: } 398 { \cs_set_eq:nn \CJKosymbol \ xpinyin_save_cjksymbol:n } 399 } 400 \cs_new_protected_nopar:npn \ xpinyin_replace_cjksymbol: 401 { 402 \int_compare:nnntf { \CJKpunct@punctstyle } = { \CJKpunct@ps@plain } 403 { \ xpinyin_replace_cjksymbol_aux: } 404 { 405 \cs_set_eq:nn \ xpinyin_save_cjksymbol:n \CJKosymbol 406 \cs_set_eq:nn \CJKosymbol \ xpinyin_cjksymbol:n 407 } 408 } 409 \cs_new_protected_nopar:npn \ xpinyin_replace_cjksymbol_single:n ##1

10 第 4 节代码实现 { 411 \int_compare:nnntf { \CJKpunct@punctstyle } = { \CJKpunct@ps@plain } 412 { \ xpinyin_replace_cjksymbol_single_aux:n { ##1 } } 413 { 414 \bool_if:nf \l xpinyin_enable_bool 415 { \cs_set_eq:nn \ xpinyin_save_cjksymbol:n \CJKosymbol } 416 \cs_set_protected_nopar:npn \CJKosymbol ####1 417 { \ xpinyin_single_cjksymbol:nn { ####1 } { ##1 } } 418 } 419 } 420 } \pinyin 421 \NewDocumentCommand \pinyin { O { } m } 422 { 423 \group_begin: 424 \keys_set:nn { xpinyin } {#1} 425 \l xpinyin_font_tl 426 \l xpinyin_format_tl { } 427 \selectfont 428 \c xpinyin_reset_utf_cs_tl 429 \ xpinyin_pinyin:n {#2} 430 \group_end: 431 } \ xpinyin_pinyin:n 432 \cs_new_protected_nopar:npn \ xpinyin_pinyin:n #1 433 { 434 \ xpinyin_pinyin_init: 435 \bool_set_true:n \l xpinyin_first_bool 436 \tl_set:nn \l xpinyin_save_tl {#1} 437 \ xpinyin_pinyin_aux:n #1 \q_recursion_tail \q_recursion_stop 438 } \ xpinyin_pinyin_aux:n 439 \cs_new_protected_nopar:npn \ xpinyin_pinyin_aux:n #1 440 { 441 \quark_if_recursion_tail_stop_do:nn {#1} 442 { 443 \bool_if:ntf \l xpinyin_first_bool { \l xpinyin_save_tl } 444 { \tl_if_empty:nf \l xpinyin_item_tl { \l xpinyin_pysep_tl \l xpinyin_item_tl } } 445 } 446 \ xpinyin_if_number:ntf {#1} 447 { 448 \bool_if:ntf \l xpinyin_first_bool 449 { \bool_set_false:n \l xpinyin_first_bool } 450 { \l xpinyin_pysep_tl } 451 \l xpinyin_pre_tl 452 \ xpinyin_tone:vn \l xpinyin_tone_tl {#1} 453 \l xpinyin_post_tl 454 \ xpinyin_pinyin_init: 455 } 456 { 457 \int_compare:nnntf 458 { 0 \cs_if_exist_use:c { c xpinyin_ \tl_to_str:n \l xpinyin_tone_tl _tl } } > 459 { 0 \cs_if_exist_use:c { c xpinyin_ \tl_to_str:n {#1} _tl } } 460 { \tl_put_right:nn \l xpinyin_post_tl {#1} } 461 { 462 \tl_set:nn \l xpinyin_tone_tl {#1} 463 \tl_set_eq:nn \l xpinyin_pre_tl \l xpinyin_item_tl 464 \tl_clear:n \l xpinyin_post_tl 465 } 466 \tl_put_right:nx \l xpinyin_item_tl { \ xpinyin_replace_v:n {#1} } 467 } 468 \ xpinyin_pinyin_aux:n 469 } \ xpinyin_tone:nn 470 \cs_new_protected_nopar:npn \ xpinyin_tone:nn #1#2 471 { \use:c { xpinyin_num_to_tone_ #1 :Nn } {#1} {#2} } 472 \cs_generate_variant:nn \ xpinyin_tone:nn { V }

11 第 4 节代码实现 11 \ xpinyin_replace_v:n 473 \cs_new_nopar:npn \ xpinyin_replace_v:n #1 474 { 475 \str_if_eq:nntf {#1} { v } 476 { 477 \str_case:ontf { \l xpinyin_item_tl } 478 { { l } { } { n } { } { L } { } { N } { } } 479 { \exp_not:n { ü } } { u } 480 } 481 { \exp_not:n {#1} } 482 } \ xpinyin_pinyin_init: 483 \cs_new_nopar:npn \ xpinyin_pinyin_init: 484 { 485 \tl_clear:n \l xpinyin_pre_tl \tl_clear:n \l xpinyin_post_tl 486 \tl_clear:n \l xpinyin_item_tl \tl_clear:n \l xpinyin_tone_tl 487 } \ xpinyin_if_number:ntf 488 \prg_new_conditional:npnn \ xpinyin_if_number:n #1 { TF } 489 { 490 \if_int_compare:w \c_one < 1 \tl_to_str:n {#1} \exp_stop_f: 491 \prg_return_true: \else: \prg_return_false: \fi: 492 } \l xpinyin_first_bool \c xpinyin_a_tl \c xpinyin_o_tl \c xpinyin_e_tl \c xpinyin_i_tl \c xpinyin_u_tl \c xpinyin_v_tl 493 \bool_new:n \l xpinyin_first_bool 494 \tl_const:nn \c xpinyin_a_tl { 3 } 495 \tl_const:nn \c xpinyin_o_tl { 2 } 496 \tl_const:nn \c xpinyin_e_tl { 2 } 497 \tl_const:nn \c xpinyin_i_tl { 1 } 498 \tl_const:nn \c xpinyin_u_tl { 1 } 499 \tl_const:nn \c xpinyin_v_tl { 1 } \ xpinyin_num_to_tone:nn 500 \cs_new_protected_nopar:npn \ xpinyin_num_to_tone:nn #1#2 501 { 502 \if_case:w \int_eval:n { #2 - \c_one } \exp_stop_f: 503 \= {#1} \or: \'{#1} \or: \v {#1} \or: \` {#1} \else: #1 \fi: 504 } 505 \tl_map_inline:nn { a o e u } 506 { \cs_new_eq:cn { xpinyin_num_to_tone_ #1 :Nn } \ xpinyin_num_to_tone:nn } 507 \cs_new_nopar:npn \ xpinyin_num_to_tone_i:nn #1#2 508 { 509 \if_case:w \int_eval:n { #2 - \c_one } \exp_stop_f: 510 ī \or: í \or: ǐ \or: ì \else: i \fi: 511 } 512 \cs_new_protected_nopar:npn \ xpinyin_num_to_tone_v:nn #1#2 513 { 514 \str_case:ontf { \l xpinyin_pre_tl } 515 { { l } { } { n } { } { L } { } { N } { } } 516 { 517 \if_case:w \int_eval:n { #2 - \c_one } \exp_stop_f: 518 ǖ \or: ǘ \or: ǚ \or: ǜ \else: ü \fi: 519 } 520 { \ xpinyin_num_to_tone:nn u {#2} } 521 } \xpinyinsetup 522 \NewDocumentCommand \xpinyinsetup { m } { \keys_set:nn { xpinyin } {#1} } ratio vsep hsep pysep font format multiple footnote 523 \clist_map_inline:nn 524 { ratio, vsep, hsep, pysep, font, format, multiple } 525 { \keys_define:nn { xpinyin } { #1.tl_set:c = { l xpinyin_ #1 _tl } } } 526 \keys_define:nn { xpinyin } 527 { footnote.bool_set:n = \l xpinyin_footnote_bool } 528 \keys_set:nn { xpinyin } 529 { 530 ratio =.4, 531 vsep = 1 em, 532 pysep = \c_space_tl, 533 font = \normalfont, 534 }

12 第 5 节 xpinyin.lua 12 \xpinyin_customary:nnn \xpinyin_multiple:nnn 535 \cs_new_protected_nopar:npn \xpinyin_customary:nnn #1#2#3 536 { \cs_gset_nopar:cpn { c xpinyin_ #2 _tl } {#3} } 537 \cs_new_protected_nopar:npn \xpinyin_multiple:nnn #1#2#3 538 { \cs_gset_nopar:cpn { c xpinyin_multiple_ #2 _clist } {#3} } 539 \group_begin: 540 \cs_set_eq:nn \XPYU \xpinyin_customary:nnn 541 \cs_set_eq:nn \XPYUM \xpinyin_multiple:nnn 542 \file_input:n { xpinyin-database.def } 543 \group_end: \setpinyin 544 \NewDocumentCommand \setpinyin { m m } 545 { 546 \tl_set:cn 547 { c xpinyin_ \ xpinyin_char_to_unicode:n {#1} _tl } 548 { \ xpinyin_pinyin:n {#2} } 549 } 550 \ProcessKeysOptions { xpinyin } 551 /package 第 5 节 xpinyin.lua 552 *lua 553 xpinyin = xpinyin or { } 554 local xpinyin = xpinyin 计算时区 xpinyin.tzoffset = "+0000" 556 do Compute the difference in seconds between local time and UTC. 558 local function get_timezone() 559 local now = os.time() 560 return os.difftime(now, os.time(os.date("!*t", now))) 561 end Return a timezone string in ISO 8601:2000 standard form (+hhmm or -hhmm) 563 local function get_tzoffset(timezone) 564 local h, m = math.modf(timezone / 3600) 565 return string.format("%+.4d", 100 * h + 60 * m) 566 end 567 xpinyin.tzoffset = get_tzoffset(get_timezone()) 568 end 569 xpinyin = { 570 uchar = unicode.utf8.char, 571 readings = { }, 572 fixreadings = { 为汉字 〇 增加拼音 573 {"U+3007", "Mandarin", "líng"} 574 }, 575 database = { 576 source = " 577 file = "Unihan_Readings.txt", 578 date = "Date: :17:02 GMT [JHJ]", 579 version = "Unicode version: 7.0.0", 580 dbfile = "xpinyin.db" 581 }, 582 preamble = [[ 583 %<<COMMENT 584 %% 585 %% Do not edit this file! 586 %% Created from Unihan database: 587 %% 588 %% $file 2

13 第 5 节 xpinyin.lua %% $date 590 %% $version 591 %% 592 %% by "texlua xpinyin.lua" on ]] os.date("%y-%m-%d %X ").. xpinyin.tzoffset "\n%%" 595 %COMMENT 596 } 597 local http_request = require("socket.http").request 598 local ltn12_sink_file = require("ltn12").sink.file 599 local zip_open = require("zip").open 将 Unihan_Readings.txt 3 保存到一张表里面 600 function xpinyin.maketable (txt) 601 local f = io.open(txt or xpinyin.database.file, "r") 602 if not f then 603 local source = xpinyin.database.source 604 local zfilename = source:match("[^/]+$") 605 local zfile = zip_open(zfilename) 606 if not zfile then 607 xpinyin.download(source, zfilename) 608 zfile = assert(zip_open(zfilename)) 609 end 610 f = assert(zfile:open(xpinyin.database.file)) 611 zfile:close() 612 end 613 local s, prop 614 for line in f:lines() do 615 s = line:explode("\t") 616 if #s == 3 then 617 prop = s[2]:sub(2) 618 if prop == "Mandarin" or 619 prop == "HanyuPinyin" or 620 prop == "XHC1983" or 621 prop == "HanyuPinlu" then 622 xpinyin.insert(s[1], prop, s[3]) 623 end 624 elseif line:find("date") then 625 xpinyin.database.date = line:match("^[#%s]*(.*)") 626 elseif line:find("unicode version:") then 627 xpinyin.database.version = line:match("^[#%s]*(.*)") 628 end 629 end 630 f:close() 631 if xpinyin.fixreadings then 632 for _, s in pairs(xpinyin.fixreadings) do 633 xpinyin.insert(s[1], s[2], s[3]) 634 end 635 end 636 end 下载 Unihan.zip 637 function xpinyin.download (source, zip) 638 print("\nretrieving Unihan Database from\n", source) 639 local status, err = http_request{ 640 url = source, 641 sink = ltn12_sink_file(io.open(zip, "wb")) } 642 if not status then 643 error([[download ']].. zip.. [[' failed because of ]].. err.. ".") 644 end 645 end 往拼音表中加入项目 646 function xpinyin.insert (unicode, prop, value) 647 local index = tonumber(unicode:match("%x+$"), 16) 648 if not xpinyin.readings[index] then 3

14 第 5 节 xpinyin.lua xpinyin.readings[index] = { } 650 end 651 xpinyin.readings[index][prop] = value 652 end 输出需要的格式文件 653 function xpinyin.output (db) 654 local f = assert(io.open(db or xpinyin.database.dbfile, "w")) 655 local preamble = xpinyin.preamble:gsub("%$(%w+)", xpinyin.database) 656 f:write(preamble, "\n") 657 local hanzi, pinyin 658 local mt = { } 659 for index, pyt in xpinyin.pairsbykeys(xpinyin.readings) do 660 pinyin = assert(xpinyin.grep(pyt)) 661 hanzi = xpinyin.uchar(index) 662 f:write("\\xpyu{", hanzi, "}{", index, "}{", pinyin, "}\n") 663 pinyin = xpinyin.multiple(pyt) 664 if pinyin then 665 mt[#mt + 1] = "\\XPYUM{".. hanzi.. "}{".. index.. "}{".. pinyin.."}" 666 end 667 end 668 f:write(table.concat(mt, "\n"), "\n") 669 f:close() 670 end 将表按照索引排序, 代码来源于 Programming in Lua 671 function xpinyin.pairsbykeys (t, f) 672 local a = { } 673 for n in pairs(t) do a[#a + 1] = n end 674 table.sort(a, f) 675 local i = 0 -- iterator variable 676 return function () -- iterator function 677 i = i return a[i], t[a[i]] 679 end 680 end 按照 Mandarin XHC1983 HanyuPinyin 的顺序选择最常用的拼音 HanyuPinlu 的质量 较差, 不采用 681 function xpinyin.grep (pyt) 682 if pyt.mandarin then 683 return pyt.mandarin:match("%s+"), "Mandarin" 684 elseif pyt.xhc1983 then 685 return pyt.xhc1983:match(":(%s+)"), "XHC1983" 686 elseif pyt.hanyupinyin then 687 return pyt.hanyupinyin:match(":([^,%s]+)"), "HanyuPinyin" 688 end 689 end 根据 XHC1983 和 HanyuPinyin 选出多音字 690 function xpinyin.multiple (pyt) 691 if pyt.xhc1983 then 692 local s = pyt.xhc1983:explode() 693 if s[2] then 694 local t = { } 695 for i, v in ipairs(s) do 696 t[#t + 1] = v:explode(":")[2] 697 end 698 return xpinyin.unique(t), "XHC1983" 699 end 700 elseif pyt.hanyupinyin and pyt.hanyupinyin:find("%d,") then 701 local t = { } 702 for _, v in ipairs(pyt.hanyupinyin:explode()) do 703 for _, py in ipairs(v:explode(":")[2]:explode(",")) do 704 t[#t + 1] = py 705 end 706 end 707 return xpinyin.unique(t), "HanyuPinyin"

15 第 5 节 xpinyin.lua end 709 end 删除掉数组中的重复元素 710 function xpinyin.unique (t) 711 local rt = xpinyin.remove_duplicate(t) 712 if #rt > 1 then 713 return table.concat(rt, ",") 714 end 715 end 716 function xpinyin.remove_duplicate (t) 717 local ht = { } 718 local nt = { } 719 for i, v in ipairs(t) do 720 if not ht[v] then 721 nt[#nt + 1] = v 722 ht[v] = true 723 end 724 end 725 return nt 726 end 727 xpinyin.maketable() 728 xpinyin.output() 729 /lua

16 代码索引 16 代码索引 意大利体的数字表示描述对应索引项的页码 ; 带下划线的数字表示定义对应索引项的代码行号 ; 罗马字体的数字表示使用对应索引项的代码行号 Symbols \" , 47, 48, 49, 50 \' \\ , 6, 7, 662, 665 \` A \AtBeginDocument \AtEndOfPackage , 111, 118, 131, 136 B bool commands: \bool_gset_true:n \bool_if:ntf.. 216, 226, 241, 251, 269, 361, 414, 443, 448 \bool_lazy_or:nntf \bool_new:n , 221, 493 \bool_set_false:n , 449 \bool_set_true:n , 435 box commands: \box_ht:n \box_move_up:nn \box_new:n , 142 \box_resize_to_wd_and_ht:nnn \box_use_drop:n \box_wd:n , 167, 168, 171, 176 C char commands: \char_set_catcode:nn \char_set_catcode_active:n , 91 \char_set_lccode:nn \char_value_catcode:n \CJKchartouni \CJKglue , 230, 231, 233, 243, 244 \CJKosymbol , 405, 406, 415, 416 \CJKsymbol , 281, 282, 285 CJKtu commands: \CJKtu_sfd_map:nn clist commands: \clist_if_exist:ntf \clist_map_inline:nn color commands: \color_ensure_current: \color_group_begin: \color_group_end: cs commands: \cs_generate_variant:nn , 195, 472 \cs_gset_eq:nn \cs_gset_nopar:npn , 538 \cs_if_eq:nntf \cs_if_exist:ntf , 66 \cs_if_exist_use:n , 459 \cs_if_exist_use:ntf , 355 \cs_new_eq:nn , 330, 331, 332, 333, 334, 351, 363, 364, 367, 368, 370, 371, 372, 376, 377, 378, 506 \cs_new_nopar:npn , 310, 315, 317, 323, 325, 473, 483, 507 \cs_new_protected:npn \cs_new_protected_nopar:npn , 57, 62, 64, 84, 86, 92, 148, 188, 190, 222, 249, 261, 267, 273, 279, 284, 286, 299, 327, 359, 392, 394, 400, 409, 432, 439, 470, 500, 512, 535, 537 \cs_new_protected_nopar:npx \cs_set_eq:nn , 185, 230, 231, 244, 281, 282, 285, 398, 405, 406, 415, 540, 541 \cs_set_protected_nopar:npn , 416 \cs_undefine:n , 385, 386 dim commands: D \dim_compare:nnntf \dim_new:n \disablepinyin , 239, 258 else commands: E \else: , 503, 510, 518 \enablepinyin , 199, 209, 224 etex commands: \etex_currentgrouptype:d \etex_dimexpr:d exp commands: \exp_args:nc \exp_args:nf , 68 \exp_args:no \exp_args:nx \exp_last_unbraced:nnn \exp_not:n , 356 \exp_not:n , 481 \exp_stop_f: , 502, 509, 517 fi commands: F \fi: , 503, 510, 518 file commands: \file_input:n font , 523 \fontsize footnote , 523 format , 523

17 代码索引 17 G group commands: \group_begin: , 94, 207, 214, 423, 539 \group_end: , 102, 211, 265, 430, 543 H hbox commands: \hbox_overlap_right:n \hbox_set:nn , 153, 155 \hbox_to_wd:nn hsep , 523 I \i , 43, 44, 45 if commands: \if_case:w , 509, 517 \if_int_compare:w \IfBooleanTF int commands: \c_eleven \c_four \int_case:nn \int_compare:nnntf , 292, 396, 402, 411, 457 \int_eval:n , 502, 509, 517 \int_from_hex:n \int_to_arabic:n , 312, 316, 324, 326 \c_one , 502, 509, 517 \c_three \c_two \c_zero K keys commands: \keys_define:nn , 526 \keys_set:nn , 208, 215, 424, 522, 528 M \makexecjkinactive mode commands: \mode_leave_vertical: , 371 msg commands: \msg_critical:nn \msg_error:nn \msg_new:nnn , 12 multiple , 523 N \n , 638, 656, 662, 668 \NewDocumentCommand , 224, 239, 421, 522, 544 \NewDocumentEnvironment \normalfont , 533 \nretrieving O or commands: \or: , 510, 518 P \pinyin , 421 pinyinscope , 196 prg commands: \prg_do_nothing: , 372 \prg_new_conditional:npnn \prg_return_false: \prg_return_true: \ProcessKeysOptions prop commands: \prop_const_from_keyval:nn \prop_map_function:nn , 117, 135 pysep , 523 Q quark commands: \quark_if_recursion_tail_stop_do:nn \q_recursion_stop \q_recursion_tail \q_stop , 317 R ratio , 523 \RequirePackage , 19, 116, 130, 134 S scan commands: \scan_stop: \selectfont , 427 \setpinyin , 544 skip commands: \skip_horizontal:n str commands: \str_case:nntf , 514 \str_if_eq:nntf sys commands: \c_sys_engine_str \sys_if_engine_pdftex:tf \sys_if_engine_pdftex_p: \sys_if_engine_xetex:tf \sys_if_engine_xetex_p: T \t TEX and L A TEX 2ε commands: \@ifpackagelater \@ifpackageloaded , 108, 114, 373, 382 \@parboxrestore \@tabacckludge , 22, 23, 25, 26, 27, 29, 30, 31, 33, 34, 35, 37, 38, 39, 41, 42, 43, 45, 47, 48, 50 \a \begin \CJK@plane , 313, 324 \CJKglue \CJKpunct@ps@plain , 402, 411 \CJKpunct@punctstyle , 402, 411 \disablepinyin , 3

18 代码索引 18 \enablepinyin \end \f@baselineskip \f@series \f@shape \f@size , 348 \footnote \normalfont , 3 \pinyin , 3 \setpinyin \xecjk@family \xecjk@setfont \xpinyin \xpinyin* \xpinyinsetup tex commands: \tex_font:d , 295 \tex_hss:d \tex_lowercase:d \tex_undefined:d tl commands: \c_space_tl \tl_clear:n , 485, 486 \tl_const:nn , 494, 495, 496, 497, 498, 499 \tl_count:n \tl_gput_right:nn , 99 \tl_head:n \tl_if_empty:ntf , 444 \tl_if_empty:ntf \tl_if_exist:ntf \tl_map_inline:nn \tl_new:n , 103, 181, 254 \tl_put_left:nn \tl_put_right:nn , 184, 460, 466 \tl_set:nn , 290, 338, 345, 436, 462, 546 \tl_set_eq:nn \tl_to_str:n , 347, 458 \tl_to_str:n , 459, 490 \tl_use:n U use commands: \use:n , 192, 471 V \v , 28, 32, 36, 40, 44, 49, 503 vsep , 523 X xecjk commands: \l_xecjk_current_font_tl , 341 \xecjk_select_font: xetex commands: \xetex_fonttype:d \xpinyin , 202 xpinyin commands: \xpinyin_customary:nnn , 540 \xpinyin_multiple:nnn , 541 xpinyin internal commands: \c xpinyin_a_tl \ xpinyin_adjust_cjk_hook: , 122, 136, 359 \ xpinyin_adjust_cjkpunct_hook: , 387, 392 \ xpinyin_adjust_xecjk_hook: , 131, 327 \ xpinyin_char_to_unicode:n , 364, 368, 547 \ xpinyin_cjkglue: , 231, 243 \l xpinyin_cjkglue_dim , 171, 217, 233, 260 \ xpinyin_cjksymbol:n , 282, 406 \ xpinyin_cjksymbol:nn , 190, 195 \ xpinyin_cjksymbol_hook: , 352, 372 \l xpinyin_coor_tl , 290, 338, 345 \l xpinyin_current_coor_tl , 295 \c xpinyin_e_tl \l xpinyin_enable_bool , 221, 226, 236, 241, 246, 269, 414 \l xpinyin_first_bool , 443, 448, 449, 493 \l xpinyin_font_tl , 340, 347, 425 \l xpinyin_footnote_bool , 527 \l xpinyin_format_tl , 162, 426 \g xpinyin_gbk_bool , 125, 361 \ xpinyin_gbk_char:nn , 117 \ xpinyin_gbk_char_aux:nn , 62 \ xpinyin_gbk_char_aux:nnn , 64 \ xpinyin_gbk_char_def:nnn , 84 \ xpinyin_gbk_to_unicode:n , 363 \ xpinyin_gbkchar_to_unicode:n , 364 \l xpinyin_hsep_tl , 228 \c xpinyin_i_tl \ xpinyin_if_number:n \ xpinyin_if_number:ntf , 488 \l xpinyin_item_tl , 463, 466, 477, 486 \ xpinyin_leavevmode: , 351, 371 \ xpinyin_make_pinyin_box:nnn , 192, 275 \l xpinyin_multiple_tl \ xpinyin_num_to_tone:nn \ xpinyin_num_to_tone_i:nn \ xpinyin_num_to_tone_v:nn \c xpinyin_o_tl \ xpinyin_pinyin:n , 429, 432, 548 \ xpinyin_pinyin_aux:n , 439 \l xpinyin_pinyin_box_hook_tl , 158, 181, 184 \ xpinyin_pinyin_init: , 454, 483 \l xpinyin_post_tl , 460, 464, 485 \l xpinyin_pre_tl , 463, 485, 514 \l xpinyin_pysep_tl , 450 \l xpinyin_ratio_tl , 341, 348 \ xpinyin_replace_cjksymbol: , 269, 333, 377, 385, 400 \ xpinyin_replace_cjksymbol_aux: 279, 333, 377, 403 \ xpinyin_replace_cjksymbol_single:n , 334, 378, 386, 409 \ xpinyin_replace_cjksymbol_single_aux:n , 335, 379, 412 \ xpinyin_replace_v:n , 473

19 代码索引 19 \c xpinyin_reset_utf_catcode_tl , 89, 123 \c xpinyin_reset_utf_cs_tl , 103, 121, 428 \ xpinyin_restore_cjksymbol:. 245, 332, 376, 384, 394 \ xpinyin_restore_cjksymbol_aux: 284, 332, 376, 397 \ xpinyin_restore_footnote: , 249 \l xpinyin_restore_footnote_tl , 254 \ xpinyin_save_cjkglue: , 244 \ xpinyin_save_cjksymbol:n , 193, 277, 281, 285, 398, 405, 415 \l xpinyin_save_tl , 443 \ xpinyin_save_utf_cs:nn , 90 \ xpinyin_select_font: , 329, 370 \ xpinyin_select_font_aux: , 299, 370 \ xpinyin_select_font_xetex: , 329 \ xpinyin_single_aux:nn , 261 \ xpinyin_single_cjksymbol:nn , 273, 417 \l xpinyin_tmpa_box.. 141, 145, 146, 153, 168, 171, 176 \l xpinyin_tmpb_box , 155, 167, 170, 172, 177 \ xpinyin_to_unicode:n.. 189, 276, 330, 331, 363, 367 \ xpinyin_to_unicode_xetex:n , 330 \ xpinyin_tone:nn , 470 \c xpinyin_tone_prop , 110, 117, 135 \l xpinyin_tone_tl , 458, 462, 486 \c xpinyin_u_tl \ xpinyin_utf_char:nn , 59, 110, 135 \ xpinyin_utf_to_unicode:n , 367 \ xpinyin_utf_viii_to_unicode:nnnw , 317 \ xpinyin_utfchar_to_unicode:n , 368 \c xpinyin_v_tl \l xpinyin_vsep_tl \ xpinyin_width:nn , 217, 233 \xpinyinsetup , 522 \XPYU \XPYUM

xeCJK 宏包

xeCJK 宏包 xecjk ctex.org 2012/05/21 v3.0.6 1 2 2 2 3 3 3.1..................................... 3 3.2................................. 5 3.2.1 XƎTEX........................... 8 3.3 CJK...............................

More information

Mixtions Pin Yin Homepage

Mixtions Pin Yin Homepage an tai yin 安 胎 饮 775 ba wei dai xia fang 八 味 带 下 方 756 ba zhen tang 八 珍 汤 600 ba zheng san 八 正 散 601 bai he gu jin tang 百 合 固 金 汤 680 bai hu jia ren shen tang 白 虎 加 人 参 汤 755 bai hu tang 白 虎 汤 660 bai

More information

Microsoft Word - Chord_chart_-_The_Word_of_God_in_Song CN.docx

Microsoft Word - Chord_chart_-_The_Word_of_God_in_Song CN.docx 100:1-5 D A D 1 Pu tian xia dang xiang ye he hua huan hu G Em A 2 Ni men dang le yi shi feng ye he hua D G Dang lai xiang ta ge chang Em G A 3 Ni men dang xiao de ye he hua shi shen D G Em A Wo men shi

More information

Microsoft Word - Chord_chart_-_Song_of_Spiritual_Warfare_CN.docx

Microsoft Word - Chord_chart_-_Song_of_Spiritual_Warfare_CN.docx 4:12 : ( ) D G/D Shang di de dao shi huo po de D G/D A/D Shi you gong xiao de D G/D Shang di de dao shi huo po de D D7 Shi you gong xiao de G A/G Bi yi qie liang ren de jian geng kuai F#m Bm Shen zhi hun

More information

ti2 guan4 bo1 bo5 huai4 zheng4 hong1 xi2 luo2 ren4

ti2 guan4 bo1 bo5 huai4 zheng4 hong1 xi2 luo2 ren4 hui1 ba2 shang1 tu4 gen1 nao3 he2 qing2 jin1 ti2 guan4 bo1 bo5 huai4 zheng4 hong1 xi2 luo2 ren4 chu2 fu4 ling2 jun4 yu4 zhao1 jiang3 che3 shi4 tu2 shi2 wa2 wa1 duan4 zhe2 bu4 lian4 bing1 mu4 ban3 xiong2

More information

yòu xù 373 375 xiá : guà jué qi n mi o dú k ng tóng luán xié háng yè jiào k n z z n shèn chì x 1óng l n t n kuáng qi q ch qì yì yùn yo q w zhuàn sù yí qìng hé p suì x tán cuàn mi o jù yú qìng shì sh

More information

CIP /. 2005. 12 ISBN 7-5062 - 7683-6 Ⅰ.... Ⅱ.... Ⅲ. Ⅳ. G624.203 CIP 2005 082803 櫶櫶櫶櫶櫶櫶櫶櫶櫶櫶櫶櫶櫶櫶櫶櫶櫶櫶櫶櫶櫶櫶 17 710001 029-87232980 87214941 029-87279675 87279676 880 1230 1/64 4.0 110 2006 2 1 2006 2 1 ISBN

More information

jiàn shí

jiàn shí jiàn shí hào x n càn w i huàng ji zhèn yù yàng chèn yù bì yuàn ji ng cóng (11) qiàn xué 1 yì bì èi zhé mó yù ù chái sè bá píng sh chài y l guàn ch n shì qí fú luè yáo d n zèn x yì yù jù zhèn

More information

é é

é é é é gu chài < > gòu y n zh n y yì z ng d n ruì z hóu d n chán bìn jiu c n z n shuò, chún kòu sh qi n liè sè sh n zhì sb n j ng máo í g bèi q í lì, u ì í ng chàng yào g ng zhèn zhuàn sh hu ti n j,

More information

é ú í í à á í à ù à é ó à è á ù á à à ì á á à é í á ò è ì í ì ù à é ì ì à à è ù é à ù à é ú ì ú ù 1 1 3 4

More information

030 í á ì ú è ì à é ù ò í í ú ù ù á í í ì ù ó ù ì è à é é ú í ì ù ì è ò á à ì ì ì ì ì á ú ì é í í é ò í ì é è ú ú í é ú è à è è à è ó à ò ù à à ù ó ì ì ì à à ù à á ú á ì á ù ù è

More information

ó ú à ù á í í ì ì ù á ù í í ò ó ú ù à ì ì è á í í ì è á ù è ì à ú ì ù ì í à ì ì ó ì ì è ì è á ó à ó ò é ú? à á á ú á í é ì é ì á à á ù á à ò á ò é ù? ì

More information

í í à ù à à í è è ú ì á á í à ú á è á ú à é à ù ú ì ì ì ò í è ì ì í ì ì ì è ì ì à é ó ò ó ú é ì ù ì í ó è ì à è á à ì à à à í í é á à ù ì ò ì é ú í í à à à à

More information

ú ì à ì ù ù é à à à í ú ì ì à í à é ì ó à è à ù ì é á ù ú ò ù ù ò

More information

è

è è à à à í á à à ì ú ú á ú ú ì ì í ù í à ú è ò ò ì ù ì à ì à í ì ì è è è é à ì é é á è í í à ì è ì ú í ù ì ò è à í ì à á è ì ó ú è é é ì é ì ì ì ú ó ì à ú á

More information

ì

ì ì ó à á à í é é è ú à ú ù è í ù è á ú é ù í é à ú á à í ó ò è ì ì é à à á ò à ú è ó á à í ù ú ì ì í ì á è ù ù ò ó á ì ì à è á á ì à ó è ì á ì ì à é ì ó é à ú í ì í á à á

More information

ò ó ì á è ó

ò ó ì á è ó ò ó ì á è ó à à è ì è á ó ì à ì à à à á ì ó à ì ì è ó à ú ì í í á ù ò ò í ì ó à ò ú ó ì à à à à à à í á ì ù ù è ù è ò è ù é à

More information

1989 67 1993 125 305 1989 251 1964 8 1990 231 1983 608 1987 207 1990 6 ú é ì à í à ó 1990 51 é í í ù è ì ò ú à ù ó ú è í à ì è è è í á ó ì á á ò ì á ò

More information

ttian

ttian í á é ì ì ì ó á ú è ù ó è á á é ì ú á á ò á è è ó é è ì á à á

More information

ò à í é ì è ì é á à è à è è ì á á à à à

More information

ú á à à á á è ù? ì í ì á ì ò é? é à ì? à ó é à ì à à ì é í ì è? à ì á ú ó á á ì ù ì è ù

More information

ò ú ó ó ú ó ú ó ú ú ó G L E = G W à è í ü í ü ü á á á á á á á á

More information

ò í ú ó ì à ò è 5500 500 2 5500 x 23 50 2 5 2 5 9 5 10 9 5 9 9 4 4 10 64 9 9 74 10 1 5 2 1 9 5 5 4 9 7 1 5 1 3 2 1 3 1 5 1 3 1 5 1 1 5 1 3 1 1 1 4 1 4 2 40 40 1

More information

á á á ú é ó é é á í í á ú á é á á í í é

More information

(CIP) : /. :, (/ ) ISBN T S H CI P (2006) CH IJIASH EN GXIAN G YINSHI WEN H U A Y U CHENGY U 1

(CIP) : /. :, (/ ) ISBN T S H CI P (2006) CH IJIASH EN GXIAN G YINSHI WEN H U A Y U CHENGY U 1 (CIP) : /. :, 2006. 12 (/ ) ISBN 7-81064-917-5... - - - - -. T S971-49 H136. 3 CI P (2006) 116732 CH IJIASH EN GXIAN G YINSHI WEN H U A Y U CHENGY U 105 100037 68418523 ( ) 68982468 ( ) www. cnup. cnu.

More information

é

é à á í ù é ù ó á è í ú ù è ì í á ì ú á é ó ú ò ì ò ì à ù à ì è ì ì à è ì ó è ú á è í ì é ì éá ì é ì ù è è í í ù á à à è è à ú á ó ú è í ú á ú è ì ù ú é ì é à ú ù ì ì ó í è ì ì

More information

ì à à ó é í í à ì í ó à í á ò ó ì í ì í í ù ó à í ì à ù à ú è à à à ú ó ò í ù è á á é è ò ì ì ì è é ù ì à ì á ù à á ò í à ì é á è á ì ò ó è ì ò ú ì ó é ú í ú è ù í í à ó ú ú

More information

è á à ì ì ì ò à ó ù ú à ò è ù è è ò í á è ù è à ù à è á ú á í à à à é à à à é à èi ú á à à ó á ì à à á è à à á ó à á ù à à á ì ó à í à é ò ú ì à ò ì à ù ì é à í í á á è ò á á á á

More information

xeCJK 宏包

xeCJK 宏包 xecjk ctex.org 2012/12/13 3.1.1 1 1 2 2 3 2 3.1............. 2 3.2......... 5 3.2.1 XƎTEX... 7 3.3 CJK....... 8 3.4 CJK....... 9 3.5......... 9 3.5.1.......... 9 3.5.2.. 9 3.6............... 11 4 11 5

More information

ü Ä ä ä ï ï ü ä ä

ü Ä ä ä ï ï ü ä ä ü Ä ä ä ï ï ü ä ä ü ü ü ä 50000476_0047_2 2 3 316 ó é â á ó ü ü ü ü ü ü ü ü ü ü ü ü é é ô é ò è é ü ü ü ü ü

More information

è ì è é è ò ì ù ù ó é ú ù è ó ì ù à è ùè á ù ù ò ó ò ù à é ù ò ì í à à à à ò à á è à è ù é é ì ú ì à à ì é ù é í ì ò

More information

j n yín

j n yín ch n ài hóng zhuó, j n yín k n sù zh o fù r n xi o qì hái, y oti o sh hàn yàn yuán lí g ng z y ng b niè bì z n r n xi o qì xiè sì m6u yí yàng móu niè z u ch lì, x qu n léi xiè pì x u cu è qi n j qiú yìn

More information

诗 经 简介 诗经 是中国第一部诗歌总集 它汇集了从西周初年到春秋中期 五百多年间的诗歌三百零五篇 诗经 在先秦叫做 诗 或者取诗的 数目整数叫 诗三百 本来只是一本诗集 从汉代起 儒家学者把 诗 当作经典 尊称为 诗经 列入 五经 之中 它原来的文学性质就 变成了同政治 道德等密切相连的教化人的教

诗 经 简介 诗经 是中国第一部诗歌总集 它汇集了从西周初年到春秋中期 五百多年间的诗歌三百零五篇 诗经 在先秦叫做 诗 或者取诗的 数目整数叫 诗三百 本来只是一本诗集 从汉代起 儒家学者把 诗 当作经典 尊称为 诗经 列入 五经 之中 它原来的文学性质就 变成了同政治 道德等密切相连的教化人的教 诗经 目录 诗经 简介 国风 关睢 葛覃 卷耳 螽斯 桃夭 阿芣苢 汉广 汝坟 鹊巢 采蘩 草虫 甘棠 行露 摽有梅 小星 江有汜 野有死麕 驺虞 柏舟 绿衣 燕燕 日 月 击鼓 凯风 雄雉 匏有苦叶 谷风 式微 简兮 泉水 北门 静女 二子 乘舟 柏舟 墙有茨 相鼠 载驰 考磐 硕人 芄兰 氓 河广 有狐 木瓜 黍离 君子阳阳 葛蕉 采葛 大车 将仲子 叔于田 遵大路 女曰鸡鸣 有 女同车 狡童

More information

lu yàng tuò guan gui zh ng fèn wù wèi qiao jú tá l o jiàn f i è yí yì qu n sì xuè , chéng y o xi o z pìn,, 1957 7 hàn 37 38 y u p ti o bèi t n tài kù sè b n zen you y n pí chè qiàn 17 dí jué

More information

háng, y u jiàn xiá shì zhèn

háng, y u jiàn xiá shì zhèn o yáo háng, y u jiàn xiá shì zhèn hu zào w zào qi nlìn cuò j n é sì, nì sì lian zhang kuang sè ne kai f ng jiù w huàn chi j l g, j, shàn liji pìn ming dang xiedài ai z n àn qù qú 1 p

More information

ó ú ú ì á ò à á ì ù í ü à ò á ò á à á

More information

lí yòu qi n j n ng

lí yòu qi n j n ng lí yòu qi n j n ng zhì lú yu n ch nghé liú g p jiá ji n gè liè du zhù g jù yuán cù cì qióng zhu6 juàn p zh n túmí nòu jiong y yùndu láo x n xiá zhì yùn n n gúo jiào zh

More information

ó ì ì ò = 4( +5 / 3 ) 3 12.478 = 2.32 23.2 (47) 1 365 4 1 4 1 19 365 1 365 4 = 29 499 4 235 940 V M = 1 3300 182 M M á

More information

ó ì ì ò = 4( +5 / 3 ) 3 12.478 = 2.32 23.2 (47) 1 365 4 1 4 1 19 365 1 365 4 = 29 499 4 235 940 V M = 1 3300 182 M M á

More information

è à è è à à ó á ò ó ù ì à à ì ù à à è ù à ó á ù è à ò ì ò òú ù è à à ì ò ì ù í ù ì è í ú ò ì ù á ì è ì á à à ò ì ì ì ó é á é ú à ú ù ì à ó ì è á ì ù ì à à á í á á à ì è ì è á í á à à á è é ù í í è

More information

3 5 5 3 1 9 1 0 1 0 1 0 1 0 1 2 1 2 1 2 2 π 202 2 3.14 100 2 628 a 12 15 x a 20 = 9 2 2 3 2 4 2 5 2 1 2 2 ìí ì í à á à á á à è é è ò è à ó ò ì ù à í

More information

<D2BDC1C6BDA1BFB5CDB6C8DAD7CAB8DFB7E5C2DBCCB3B2CEBBE1C3FBB5A52E786C7378>

<D2BDC1C6BDA1BFB5CDB6C8DAD7CAB8DFB7E5C2DBCCB3B2CEBBE1C3FBB5A52E786C7378> 参 会 人 员 名 单 Last Name 姓 名 公 司 Tel Fax Bai 柏 煜 康 复 之 家 8610 8761 4189 8610 8761 4189 Bai 白 威 久 禧 道 和 股 权 投 资 管 理 ( 天 津 ) 有 限 公 司 8610 6506 7108 8610 6506 7108 Bao 包 景 明 通 用 技 术 集 团 投 资 管 理 有 限 公 司 8610

More information

bài bì

bài bì bài bì zhuò w n bìx, gòulì ch mèn què míng shuò chuán j jué qiú g o t oqián wù yú dí yìn hòu xì z ng zì chài yín qìng wù pí zh n t ng lí chéng lì z n y chóu k ngt ng mái kuì zhuó shuò píxi y ng

More information

â ü ü êâ ü ü àì é ü é ü é é é ü ü è ü ü ü é é ü ü á é è é é é è è è è éé ü üé é é é ü ü

More information

â ü ü êâ ü ü àì é ü é ü é é é ü ü è ü ü ü é é ü ü á é è é é é è è è è éé ü üé é é é ü ü

More information

ctex ctex.org v0.95 2009/10/20 ctex L A TEX CCT CJK xecjk L A TEX ctex L A TEX ctex CCT CJK xecjk ctexart.cls ctexrep.cls ctexbook.cls ctex.sty ctexcap.sty ctex ctex.org 1 2 2 3 2.1 CJK xecjk................................

More information

(CIP) : /. :, (/ ) ISBN T S H CI P (2006) XIANGPIAOWANLI JIUW ENH UA YU CH ENGYU

(CIP) : /. :, (/ ) ISBN T S H CI P (2006) XIANGPIAOWANLI JIUW ENH UA YU CH ENGYU (CIP) : /. :, 2006. 12 (/ ) ISBN 7-81064-916-7... - - - - -. T S971-49 H136. 3 CI P (2006) 116729 XIANGPIAOWANLI JIUW ENH UA YU CH ENGYU 105 100037 68418523 ( ) 68982468 ( ) www.cnup.cnu.cn E- mail cnup@

More information

2010 10 28 1 106 ... 5... 6... 7... 10... 15... 18... 18... 22... 25... 27... 27... 40... 40... 43... 50... 50... 59... 59... 68... 69 2 106 ... 71... 72... 73... 75... 76... 77... 77... 77... 78... 79...

More information

Microsoft Word - 詩經注釋.docx

Microsoft Word - 詩經注釋.docx 詩 經 注 釋 目 錄 詩 經 簡 介 關 雎 葛 覃 卷 耳 螽 斯 桃 夭 芣 苢 漢 廣 汝 墳 鵲 巢 采 蘩 草 蟲 甘 棠 行 露 摽 有 梅 小 星 江 有 汜 野 有 死 麕 騶 虞 柏 舟 綠 衣 燕 燕 日 月 擊 鼓 凱 風 雄 雉 匏 有 苦 葉 穀 風 式 微 簡 兮 泉 水 北 門 靜 女 二 子 乘 舟 柏 舟 牆 有 茨 相 鼠 載 馳 考 磐 碩 人 芄 蘭 氓 河

More information

85 1957 3 4 143 131 142 37 4 480 490 490 22 140 25 2 35 35 492 197 4 59 488 488 1996 1 19 124 332 138 18 128 6 2 134 28 123 159 20 120 35 486 264 486 42 1992 5 1959 5 1983 139 165 6 298 221 83 11 1956

More information

á à è á à í ú á è é ì á ò ò ú ó ì à í ù à à ó á ú è è à á ì à ó é ì é íí ù á ì ú ó è à è è è ú ú è è á ì à ò ù à ú ò é è à à è ì è ì à í à ó

More information

á ì é ò í í í à ò è á è ú á ú á ú é é á ò ì ò ì ú ì ù á à ì ì ì ò í ì à ò á ù ì à á á é ò ó ì í á ù à è ú ì à ú ò ú ó ó é à ó ú ì ì ì à ì ì è í í ú è ú í é è ù

More information

à á à è à è à ú à á á á à á è à à ù ú ù í á è è í á è è è è è ù ò í è è ì à à è á è úí à à ì á í é è á à ì à é à è è í ú º ú

More information

Master Sharing r1

Master Sharing r1 Master Students Sharing CI Ai 01 Master Students Sharing 02 03 Master Students Sharing 04 05 Master Students Sharing 06 07 Master Students Sharing 08 09 Master Students Sharing SHEN Shugang é 10 YUE Xin

More information

Master Sharing r1

Master Sharing r1 Master Students Sharing CI Ai 01 Master Students Sharing 02 03 Master Students Sharing 04 05 Master Students Sharing 06 07 Master Students Sharing 08 09 Master Students Sharing SHEN Shugang é 10 YUE Xin

More information

1 yáo zhuàn jué gu zài liè r sh ng xué yíng ch jié jù rèn g wù yú qiè yàng huán P9 líng luò jiàn sh ng y ku liàn r shàn dùn sì lièlièqièqiè rèn zhù yìj yíng guà dí yú bò chu n láng huán dù xià

More information

标题

标题 淳 化 县 志 1 序 王 摇 刚 摇 闻 俊 辉 摇 摇 志, 即 一 方 之 全 史 也 淳 化, 历 史 悠 久 六 七 千 年 前, 先 民 居 此 ; 约 前 1600 年, 公 刘 居 豳 ; 约 前 1100 年, 兴 为 王 畿 秦 时 设 县, 至 汉 日 盛, 及 北 宋 以 淳 化 年 号 命 名, 迄 今 1017 年 矣 浩 浩 历 史 长 河, 荡 尽 了 多 少 名 人

More information

jiào d qi n sù zhuì máo táo yìn qi n k n z jué y n f ng zh j sh n m i ch n m n qú jì dá qù xi o dàn f n y n l wò yú shú líng dài yì chóu jì Gatha b Cianisth na w i chèn Parinirv

More information