3源代码说明33

618619620621

\\xdef\\CTEX@high{}%\\xdef\\CTEX@yi{}%\\fi}

\\CTEX@processnumber中文数字处理命令\\CTEX@processnumber处理四位以内的数字,并将得到的中文数字存放在第一个参数中。

622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659

\\def\\CTEX@processnumber#1#2{%\\CTEX@zero@false%

\\CTEX@q#2\\relax\\CTEX@r#2\\relax%

\\divide\\CTEX@q\\@m\\ifnum\\CTEX@q=\\z@\\ifCTEX@previous@\\CTEX@zero@true\\fi\\else

\\ifCTEX@zero@

\\CTEX@appendstring{#1}{\\CTEX@zero}%\\fi

\\CTEX@appendnumber{#1}{\\CTEX@q}%

\\CTEX@appendstring{#1}{\\CTEX@thousand}%\\CTEX@previous@true\\CTEX@zero@false\\fi%

\\multiply\\CTEX@q\\@m

\\advance\\CTEX@r-\\CTEX@q\\CTEX@q\\CTEX@r%

\\divide\\CTEX@q100\\relax\\ifnum\\CTEX@q=\\z@\\ifCTEX@previous@\\CTEX@zero@true\\fi\\else

\\ifCTEX@zero@

\\CTEX@appendstring{#1}{\\CTEX@zero}%\\fi

\\CTEX@appendnumber{#1}{\\CTEX@q}%

\\CTEX@appendstring{#1}{\\CTEX@hundred}%\\CTEX@previous@true\\CTEX@zero@false

3源代码说明34

660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697

\\fi%

\\multiply\\CTEX@q100

\\advance\\CTEX@r-\\CTEX@q\\CTEX@q\\CTEX@r%

\\divide\\CTEX@q10\\relax\\ifnum\\CTEX@q=\\z@\\ifCTEX@previous@\\CTEX@zero@true\\fi\\else

\\ifCTEX@zero@

\\CTEX@appendstring{#1}{\\CTEX@zero}%\\fi

\\ifnum\\CTEX@q=\\@ne\\ifCTEX@previous@

\\CTEX@appendstring{#1}{\\CTEX@one}%\\fi\\else

\\CTEX@appendnumber{#1}{\\CTEX@q}%\\fi

\\CTEX@appendstring{#1}{\\CTEX@ten}%\\CTEX@previous@true\\CTEX@zero@false\\fi%

\\multiply\\CTEX@q10

\\advance\\CTEX@r-\\CTEX@q%

\\ifnum\\CTEX@r=\\z@\\else

\\ifCTEX@zero@

\\CTEX@appendstring{#1}{\\CTEX@zero}%\\fi

\\CTEX@appendnumber{#1}{\\CTEX@r}%\\CTEX@previous@true\\fi}

\\CTEXnumber中文数字处理命令\\CTEXnumber将第二个参数中的数字转换为中文并保存在第一个参数中。

698699700701

\\DeclareRobustCommand\\CTEXnumber[2]{%\\def#1{}%

\\CTEX@null@false%

3源代码说明35

702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739

\\CTEX@q#2\\relax%

\\ifnum\\CTEX@q<\\z@

\\multiply\\CTEX@q\\m@ne

\\CTEX@appendstring{#1}{\\CTEX@minus}%\\fi%

\\CTEX@previous@false\\CTEX@zero@false%

\\ifnum\\CTEX@q=\\z@

\\CTEX@appendstring{#1}{\\CTEX@zero}%\\else

\\CTEX@splitnumber{\\CTEX@q}%%

\\ifx\\CTEX@yi\\@empty\\else

\\CTEX@processnumber{#1}{\\CTEX@yi}%

\\CTEX@appendstring{#1}{\\CTEX@hundredmillion}%\\fi%

\\ifx\\CTEX@high\\@empty\\else

\\CTEX@processnumber{#1}{\\CTEX@high}%

\\CTEX@appendstring{#1}{\\CTEX@tenthousand}%\\fi%

\\ifx\\CTEX@low\\@empty\\else

\\ifx\\CTEX@yi\\@empty\\else

\\ifx\\CTEX@high\\@empty

\\CTEX@appendstring{#1}{\\CTEX@zero}%thiscatches100002345\\fi\\fi

\\CTEX@processnumber{#1}{\\CTEX@low}%\\fi\\fi}

\\CTEX@getdigit中文数字处理命令\\CTEX@getdigit用于提取最高位的数字。

740741742

\\def\\CTEX@getdigit#1#2\\@nil{%\\edef\\CTEX@tempa{#1}%\\edef\\CTEX@tempb{#2}}

\\CTEXdigits中文数字处理命令\\CTEXdigits将第二个参数中的数字串为中文数字串并保存在第一个参

3源代码说明数中。

743744745746747748749750751752753754755756

36

\\DeclareRobustCommand\\CTEXdigits[2]{%\\def#1{}%

\\CTEX@null@true

\\edef\\CTEX@tempa{}%\\edef\\CTEX@tempb{#2}%\\ifx\\CTEX@tempb\\@empty\\else\\loop

\\expandafter\\CTEX@getdigit\\CTEX@tempb\\@nil\\CTEX@appendnumber{#1}{\\CTEX@tempa}%\\ifx\\CTEX@tempb\\@empty\\else\\repeat\\fi}

\\CTEXcounter\\CTEXcounter用于生成对应于计数器\\FOO的中文数字\\cc@FOO。

757758759760761762

\\DeclareRobustCommand\\CTEXcounter[1]{%\\@ifundefined{c@#1}{}{%

\\CTEXnumber{\\reserved@a}{\\@arabic\\csnamec@#1\\endcsname}%\\expandafter\\expandafter\\expandafter\\def%

\\expandafter\\expandafter\\csnamecc@#1\\endcsname%\\expandafter{\\reserved@a}}}

\\setcounter\\addtocounter\\stepcounter

重新定义\\setcounter和\\addtocounter以及时更新\\cc@FOO。

763764765766767768769770771772773774775776777778779780

\\AtBeginDocument{%\\makeatletter%

\\@ifundefined{CTEX@save@setcounter}{%\\let\\CTEX@save@setcounter\\setcounter%\\def\\setcounter#1#2{%

\\CTEX@save@setcounter{#1}{#2}%\\CTEXcounter{#1}}}{}

\\@ifundefined{CTEX@save@addtocounter}{%

\\let\\CTEX@save@addtocounter\\addtocounter%\\def\\addtocounter#1#2{%

\\CTEX@save@addtocounter{#1}{#2}%\\CTEXcounter{#1}}}{}

\\@ifundefined{CTEX@save@stepcounter}{%\\let\\CTEX@save@stepcounter\\stepcounter%\\def\\stepcounter#1{%

\\CTEX@save@stepcounter{#1}%\\CTEXcounter{#1}}}{}

\\makeatother}