CTeX-org / ctex-kit

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

xpinyin: 麻烦增加几个功能 #492

Open hushidong opened 4 years ago

hushidong commented 4 years ago

偷懒劲又犯了,写文章的时候老要用到作者的拼音,所以想用xpinyin来直接输出,就不用我自己去一个个字母敲了,目前宏包内的命令是同时输出汉字和拼音,且拼音中的元音是有调的,我想只要拼音,且原音换成没有调的。

这就是第一个需求,就是用一个命令仅输出作者的拼音,且元音无音调,拼音不是上标的。

接着是第二个需求,希望能对输出的拼音格式化,包括几种形式,我可以用选项切换。 比如李志超这样一个作者, 输出形式为 LI Zhichao LI Zhi-chao Li Zhichao等

就这么两个需求,麻烦各位大大帮忙实现一下。我自己就不去研究实现啦,感谢! @qinglee @zepinglee @muzimuzhi @leo-liu @stone-zeng

Harry-Chen commented 4 years ago

说起来我一直没明白,对于带连字符的格式,姓>一个字,名>两个字要怎么办,比如:

hushidong commented 4 years ago

哈哈,这真是一个难点。 两个字的姓,可能需要加个选项输入。

连字符,是不是有什么规范?我也不太了解。前面给的例子,是看到一些国内期刊用的。

hushidong commented 4 years ago

在文献里头可能用的是花括号保护法吧。

muzimuzhi commented 4 years ago

写文章的时候老要用到作者的拼音

以一页中使用到的次数记,有多频繁?

hushidong commented 4 years ago

能用红包解决就不用敲了噻,ctrl c,ctrl v 多快捷啊。

zepinglee commented 4 years ago

哈哈,这真是一个难点。 两个字的姓,可能需要加个选项输入。

连字符,是不是有什么规范?我也不太了解。前面给的例子,是看到一些国内期刊用的。

相关的标准有 GB/T 16159-2012《汉语拼音正词法基本规则》和 GB/T 28039-2011《中国人名汉语拼音字母拼写规则》

zepinglee commented 4 years ago

个人感觉这种 text manipulating 的东西最好还是用别的语言做吧

muzimuzhi commented 4 years ago

这就是第一个需求,就是用一个命令仅输出作者的拼音,且元音无音调,拼音不是上标的。

初步实现,没有考虑多音字、没有考虑执行效率。

\documentclass{article}
\usepackage{ctex}
\usepackage{xpinyin}
\setmainfont{CMU Serif}

\ExplSyntaxOn
\NewDocumentCommand{ \pinyinWithoutTone } {m}
  {
    \mode_leave_vertical:
    \tl_map_inline:nn {#1}
      {
        \__xpinyin_ignore_tone:c 
          { c__xpinyin_ \__xpinyin_char_to_unicode:n {##1} _tl }
      }
  }

\cs_new_protected_nopar:Nn \__xpinyin_ignore_tone:N
  {
    \tl_set_eq:NN \l_tmpa_tl #1
    \regex_replace_once:nnN { [āáǎà] } {a} \l_tmpa_tl
    \regex_replace_once:nnN { [ōóǒò] } {o} \l_tmpa_tl
    \regex_replace_once:nnN { [ēéěè] } {e} \l_tmpa_tl
    \regex_replace_once:nnN { [ūúǔù] } {u} \l_tmpa_tl
    \regex_replace_once:nnN { [ḿ] }    {m} \l_tmpa_tl
    \regex_replace_once:nnN { [ńňǹ] }  {u} \l_tmpa_tl
    \regex_replace_once:nnN { [īíǐì] } {i} \l_tmpa_tl
    \regex_replace_once:nnN { [üǖǘǚǜ] } {u} \l_tmpa_tl
    \l_tmpa_tl
  }
\cs_generate_variant:Nn \__xpinyin_ignore_tone:N {c}
\ExplSyntaxOff

\begin{document}
\pinyinWithoutTone{中文测试} % 输出 zhongwenceshi

\pinyinWithoutTone{初锄楚畜} % 输出 chuchuchuchu
\end{document}
muzimuzhi commented 4 years ago

写文章的时候老要用到作者的拼音,所以想用xpinyin来直接输出

这和 cite 的差别在哪里?

stone-zeng commented 4 years ago

ü 要怎么办?

hushidong commented 4 years ago

哈哈,这真是一个难点。 两个字的姓,可能需要加个选项输入。 连字符,是不是有什么规范?我也不太了解。前面给的例子,是看到一些国内期刊用的。

相关的标准有 GB/T 16159-2012《汉语拼音正词法基本规则》和 GB/T 28039-2011《中国人名汉语拼音字母拼写规则》

收到,仔细看看。

hushidong commented 4 years ago

ü 要怎么办?

规范里有个例子,是用yu代替,但又是大写的情况,小写没有说明。

hushidong commented 4 years ago

这就是第一个需求,就是用一个命令仅输出作者的拼音,且元音无音调,拼音不是上标的。

初步实现,没有考虑多音字、没有考虑执行效率。

\documentclass{article}
\usepackage{ctex}
\usepackage{xpinyin}
\setmainfont{CMU Serif}

\ExplSyntaxOn
\NewDocumentCommand{ \pinyinWithoutTone } {m}
  {
    \mode_leave_vertical:
    \tl_map_inline:nn {#1}
      {
        \__xpinyin_ignore_tone:c 
          { c__xpinyin_ \__xpinyin_char_to_unicode:n {##1} _tl }
      }
  }

\cs_new_protected_nopar:Nn \__xpinyin_ignore_tone:N
  {
    \tl_set_eq:NN \l_tmpa_tl #1
    \regex_replace_once:nnN { [āáǎà] } {a} \l_tmpa_tl
    \regex_replace_once:nnN { [ōóǒò] } {o} \l_tmpa_tl
    \regex_replace_once:nnN { [ēéěè] } {e} \l_tmpa_tl
    \regex_replace_once:nnN { [ūúǔù] } {u} \l_tmpa_tl
    \regex_replace_once:nnN { [ḿ] }    {m} \l_tmpa_tl
    \regex_replace_once:nnN { [ńňǹ] }  {u} \l_tmpa_tl
    \regex_replace_once:nnN { [īíǐì] } {i} \l_tmpa_tl
    \regex_replace_once:nnN { [üǖǘǚǜ] } {u} \l_tmpa_tl
    \l_tmpa_tl
  }
\cs_generate_variant:Nn \__xpinyin_ignore_tone:N {c}
\ExplSyntaxOff

\begin{document}
\pinyinWithoutTone{中文测试} % 输出 zhongwenceshi

\pinyinWithoutTone{初锄楚畜} % 输出 chuchuchuchu
\end{document}

感谢,快了,再进一步,把gbt 28039规范的格式实现就好了。