CTeX-org / ctex-kit

Macro Packages and Scripts for Chinese TeX users
972 stars 124 forks source link

如何得到xpinyin拼音宏包得到的拼音文本? #590

Open registor opened 2 years ago

registor commented 2 years ago

最近在完善基于xpinyin拼音宏包的汉字读写练习宏包hanzibox,想通过对xpinyin宏包得到的拼音字符串分解后参考工作室的基于xpinyin宏包获取汉字的声母,韵母,声调分离拼音声母和韵母。同时,参考stone-zeng在xpinyin:包功能的模块化中给出的示例,用LaTeX3编写了如下代码:

\documentclass{ctexart}

\usepackage{xpinyin}

\ExplSyntaxOn
\NewDocumentCommand{\splitautopy}{}
  {
    \group_begin:
      \tl_gset_eq:Nc \l_pinyin_tl
        {
           c__xpinyin_ \int_to_arabic:n { `好 } _tl
        } 
      \__split_pinyin:V \l_pinyin_tl         
    \group_end:
  }

\NewDocumentCommand{\splitmanulpy}{}
  {
    \group_begin:
      \tl_gset:Nx \l_pinyin_tl
        {
           \pinyin{hao3}
        } 
      \__split_pinyin:V \l_pinyin_tl
    \group_end:
  }  

\tl_new:N \l_pinyin_tl
\tl_new:N \l_test_pinyin_tl
\str_new:N \l_pinyin_str

\cs_new_protected:Npn \__split_pinyin:n #1
  {
    \str_clear:N \l_pinyin_str
    \tl_clear:N  \l_test_pinyin_tl
    \tl_set:Nn \l_test_pinyin_tl {#1}

    \tl_map_inline:Nn \l_test_pinyin_tl
      {
        \str_put_right:Nn \l_pinyin_str {##1}
      }
    \str_use:N \l_pinyin_str
  }
\cs_generate_variant:Nn  \__split_pinyin:n { V }
\cs_generate_variant:Nn  \__split_pinyin:n { x }
\ExplSyntaxOff

% 正文区(有且只能有一个)
\begin{document}

\section{测试自动获取拼音}

\subsection{自动拼音}% 可以得到拼音
xpinyin宏包:\xpinyin*{好},
拼音提取:\splitautopy

\subsection{拼音调整}% 无法正确等到拼音
\setpinyin{好}{hao4}
xpinyin宏包:\xpinyin*{好},
拼音提取:\splitautopy

\section{测试手动获取拼音}% 无法得到正确的拼音
xpinyin宏包:\pinyin{hao3},
拼音提取:\splitmanulpy

\end{document}

该代码能够自动处理汉字得到的拼音,但对于使用类似\setpinyin{好}{hao4}设置的拼音及\pinyin{hao3}命令得到的拼音却无法正确解析(结果如图)。

2021-09-28_14-59.png

我的想法是当使用了\setpinyin{好}{hao4}后,能够得到hào,使用了类似\pinyin{hao4}命令后能得到hào

muzimuzhi commented 2 years ago

如果得到xpinyin拼音宏包得到的拼音文本

issue 标题有点费解,想表达的是「如何」?

registor commented 2 years ago

对不起,写错了,应该是如何,已修改。谢谢提醒。