设为首页收藏本站

CTEX社区

 找回密码
 注册
搜索
查看: 12695|回复: 11

[其他] 尝试拼音

[复制链接]

9

主题

0

好友

168

积分

初级会员

Rank: 2

发表于 2007-7-30 20:35:23 |显示全部楼层
试过宏包 pinyin, 但不喜欢将所有拼音定义为命令的方式, 很容易冲突.

于是, 参考原宏包修改了一下, 得到以下结果:


  1. \makeatletter
  2. \def\py@yunpriv#1{%
  3.   \if a#1 10\else
  4.   \if o#1 9\else
  5.   \if e#1 8\else
  6.   \if i#1 7\else
  7.   \if u#1 6\else
  8.   \if v#1 5\fi\fi\fi\fi\fi\fi0
  9. }

  10. \def\py@init{%
  11.   \edef\py@befirst{}%
  12.   \edef\py@char{}\edef\py@tuneletter{}%
  13.   \def\py@last{}%
  14.   \def\py@tune{5}%
  15. }

  16. %\pinyin{Hao3hao3\ xue2xi2}
  17. \def\pinyin#1{%
  18.   \edef\py@postscan{#1}%
  19.   \py@init
  20.   % scan
  21.   \loop
  22.   \edef\py@char{\expandafter\@car\py@postscan\@nil}%
  23.   \edef\py@postscan{\expandafter\@cdr\py@postscan\@nil}%
  24.   \ifnum 0 < 0\py@char
  25.     \edef\py@tune{\py@char}%
  26.     \py@first \py@tuneat\py@tuneletter\py@tune \py@last\kern -4sp\kern 4sp{}\py@init
  27.   \else
  28.     \ifnum\py@yunpriv\py@char > \py@yunpriv\py@tuneletter
  29.       \edef\py@tuneletter{\py@char}\edef\py@first{\py@befirst}\def\py@last{}%
  30.     \else
  31.       \edef\py@last{\py@last\if v\py@char\"u\else\py@char\fi}%
  32.     \fi
  33.     \edef\py@befirst{\py@befirst\if v\py@char\"u\else\py@char\fi}%
  34.   \fi
  35.   \ifx\py@postscan\@empty\else
  36.   \repeat
  37. }

  38. \let\py@macron \=
  39. \let\py@acute \'
  40. \let\py@hacek \v
  41. \let\py@grave \`

  42. %% \py@tuneat{Letter}{tune}
  43. \def\py@tuneat#1#2{%
  44.   \if v#1%
  45.     \py@tune@v #2%
  46.   \else
  47.   \if i#1%
  48.     \py@tune@i #2%
  49.   \else
  50.     \ifcase#2%
  51.       \or\py@macron #1\or\py@acute #1\or\py@hacek #1\or\py@grave #1\else #1%
  52.     \fi
  53.   \fi\fi
  54. }

  55. \def\py@tune@v#1{{%
  56.     \dimen@ii 1ex%
  57.     \fontdimen5\font 1.1ex%
  58.     \rlap{\"u}%
  59.     \fontdimen5\font .6ex%
  60.     \ifcase#1%
  61.       \or\py@macron u\or\py@acute u\or\py@hacek u\or\py@grave u\else u%
  62.     \fi
  63.     \fontdimen5\font\dimen@ii
  64.   }}

  65. \def\py@tune@i#1{%
  66.   \ifcase#1
  67.     \or\py@macron \i\or\py@acute \i\or\py@hacek \i\or\py@grave \i\else i%
  68.   \fi
  69. }
复制代码


测试:

\pinyin{Hao3hao3\ xue2xi2}
style is the whole life
BLOG

40

主题

0

好友

417

积分

中级会员

Rank: 3Rank: 3

发表于 2009-4-16 09:00:50 |显示全部楼层
这个帖子顶一下,拼音的命令是得改一下,冲突太多了。
每一个自我都是神的创造.

131

主题

0

好友

1万

积分

超级版主

圡人|无良吐槽水车

Rank: 8Rank: 8

发表于 2009-4-16 11:02:41 |显示全部楼层

回复 #2 redspider 的帖子

不指望伟大的德国指挥家能把拼音搞好,这种实用的东西还得看中国本土的。

另:其实避免冲突的最好办法是把宏定义尽量定义为局部的,而不是全局的。尤其是对于这种小宏包。

[ 本帖最后由 milksea 于 2009-4-16 14:33 编辑 ]
入门文档网页搜索提问事宜
——milksea @ bbs.ctex.org

78

主题

0

好友

2714

积分

版主

Rank: 7Rank: 7Rank: 7

发表于 2009-4-16 14:21:36 |显示全部楼层

回复 #3 milksea 的帖子

相比于伟大的德国指挥家,我更不指望fontforge能高效地读中文字体……

2

主题

0

好友

103

积分

初级会员

Rank: 2

发表于 2009-5-2 21:03:13 |显示全部楼层
厉害啊!学习。

35

主题

0

好友

150

积分

初级会员

Rank: 2

发表于 2009-5-5 21:23:25 |显示全部楼层
挺好

42

主题

0

好友

235

积分

中级会员

Rank: 3Rank: 3

发表于 2009-8-20 22:12:48 |显示全部楼层
为什么我得到的结果是这样的呢?多谢指点!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

46

主题

0

好友

584

积分

高级会员

Rank: 4

发表于 2010-1-29 08:37:13 |显示全部楼层
“虐”该如何注音呢?“nve4、n{\"u}e4”都通不过,“nue4”又不对。

131

主题

0

好友

1万

积分

超级版主

圡人|无良吐槽水车

Rank: 8Rank: 8

发表于 2010-1-29 12:55:36 |显示全部楼层
其实现在用 unicode 的话,直接写 nüè 就好了,这类宏包就没有必要用了。
入门文档网页搜索提问事宜
——milksea @ bbs.ctex.org

1

主题

0

好友

4

积分

新手上路

Rank: 1

发表于 2010-5-15 22:56:55 |显示全部楼层
对啊[img]
:victory:
[/img]
您需要登录后才可以回帖 登录 | 注册

手机版|Archiver|CTEX.ORG ( 京ICP备05002166号  

GMT+8, 2014-12-20 10:56 , Processed in 0.018510 second(s), 19 queries , Gzip On, Apc On.

Powered by Discuz! X2.5

© 2001-2012 Comsenz Inc.

回顶部