%% %% This is file `xeCJK.sty', %% generated with the docstrip utility. %% %% The original source files were: %% %% xeCJK.dtx (with options: `xeCJK') %% %% Version 2.3.17 (20-Nov-2010) %% %% Copyright (C) Wenchang Sun %% %% This file may be distributed and/or modified under the %% conditions of the LaTeX Project Public License, either version 1.3 %% of this license or (at your option) any later version. %% The latest version of this license is in %% http://www.latex-project.org/lppl.txt %% and version 1.3 or later is part of all distributions of LaTeX %% version 2005/12/01 or later. %% \def\fileversion{2.3.17} \def\filedate{2010/11/20} \ProvidesPackage{xeCJK}[\filedate\space\fileversion\space package for typesetting CJK scripts with XeLaTeX] \RequirePackage{ifxetex} \RequireXeTeX \expandafter\def\csname ver@CJK.sty\endcsname{2020/01/01} \newif\ifxeCJK@SlantFont@ \newif\ifxeCJK@BoldFont@ \newif\ifxeCJK@num \newif\ifxeCJK@checksingle \newif\ifxeCJK@indentfirst \xeCJK@indentfirsttrue \DeclareOption{boldfont}{\xeCJK@BoldFont@true} \DeclareOption{BoldFont}{\ExecuteOptions{boldfont}} \DeclareOption{slantfont}{\xeCJK@SlantFont@true} \DeclareOption{SlantFont}{\ExecuteOptions{slantfont}} \DeclareOption{CJKnumber}{\xeCJK@numtrue} \DeclareOption{normalindentfirst}{\xeCJK@indentfirstfalse} \DeclareOption{CJKchecksingle}{\AtEndOfPackage{\let\xeCJK@i@i\xeCJK@checksingle}} \DeclareOption{CJKnormalspaces}{\PackageWarning{% obsolete option 'CJKnormalspaces'. It may be removed in the future.}} \DeclareOption{CJKaddspaces}{\PackageWarning{% obsolete option 'CJKaddspaces'. It may be removed in the future.}} \DeclareOption{CJKtextspaces}{\PackageWarning{% obsolete option 'CJKtextspaces'. It may be removed in the future.}} \DeclareOption{CJKmathspaces}{\PackageWarning{% obsolete option 'CJKmathspaces'. It may be removed in the future.}} \DeclareOption{CJKsetspaces}{\PackageWarning{% obsolete option 'CJKsetspaces'. It may be removed in the future.}} \DeclareOption{CJKnospaces}{\PackageWarning{% obsolete option 'CJKnospaces'. It may be removed in the future.}} \DeclareOption*{\PassOptionsToPackage{\CurrentOption}{fontspec}} \ProcessOptions\relax \RequirePackage{fontspec} \relax \ifxeCJK@indentfirst \let\@afterindentfalse\relax \fi \endlinechar \m@ne \def\makexeCJKactive{ \XeTeXinterchartokenstate=1\relax} \def\makexeCJKinactive{ \XeTeXinterchartokenstate=0\relax} \makexeCJKactive \def\xeCJKsetcharclass#1#2#3{ \@tempcnta=#1 \loop \XeTeXcharclass \@tempcnta #3\relax \advance\@tempcnta 1\relax \ifnum\the\@tempcnta<#2 \repeat \xeCJK@setpunctcharclass} \def\xeCJK@prePunct#1#2{\xeCJK@setPunct{2}{#1}{#2}} \def\xeCJK@postPunct#1#2{\xeCJK@setPunct{3}{#1}{#2}} \def\xeCJK@setPunct#1#2#3{ \def\xeCJK@class{#1} \@tempcnta "#2\relax \multiply\@tempcnta 256\relax \xeCJK@setPunct@#3,,} \def\xeCJK@setPunct@#1,{ \edef\xeCJK@temp{#1}% \ifx\xeCJK@temp\@empty \else \@tempcntb "#1\relax \advance\@tempcntb\@tempcnta\relax \XeTeXcharclass \@tempcntb=\xeCJK@class\relax \def\xeCJK@temp{\xeCJK@setPunct@} \fi \xeCJK@temp} \def\xeCJK@setpunctcharclass{ \xeCJK@prePunct{20}{18,1C} \xeCJK@postPunct{20}{19,1D,14,26} \xeCJK@postPunct{25}{00} \xeCJK@prePunct{30}{08,0A,0C,0E,10,12,14,16,18,1A,1D,1F,36} \xeCJK@postPunct{30}{01,02,05,06,09,0B,0D,0F,11,15,17,19,1B,1E, 41,43,45,47,49,63,83,85,87,8E, 9B,9C,9D,9E,A1,A3,A5,A7,A9,C3,E3,E5,E7,EE,F5,F6,FB,FC,FD,FE} \xeCJK@prePunct {FE}{59,5B,5D,5F,60,69,6B} \xeCJK@postPunct{FE}{50,51,52,54,55,56,57,5A,5C,5E,6A} \xeCJK@prePunct {FF}{03,04,08,20,3B,5B,E0,E1,E5,E6} \xeCJK@postPunct{FF}{01,05,09,0C,0E,1A,1B,1F,3D,5D, 61,63,64,65,67,68,69,6A,6B,6C,6D,6E,6F,70,9E,9F} \xeCJK@setPunct{4}{0}{28,2D,5B,60,7B} \xeCJK@setPunct{5}{0}{21,22,25,27,29,2C,2E,3A,3B,3F,5D,7D}} \xeCJKsetcharclass{"1100}{"11FF}{1} \xeCJKsetcharclass{"2E80}{"2EFF}{1} \xeCJKsetcharclass{"2F00}{"2FDF}{1} \xeCJKsetcharclass{"2FF0}{"2FFF}{1} \xeCJKsetcharclass{"3000}{"303F}{1} \xeCJKsetcharclass{"3040}{"309F}{1} \xeCJKsetcharclass{"30A0}{"30FF}{1} \xeCJKsetcharclass{"3100}{"312F}{1} \xeCJKsetcharclass{"3130}{"318F}{1} \xeCJKsetcharclass{"3190}{"319F}{1} \xeCJKsetcharclass{"31A0}{"31BF}{1} \xeCJKsetcharclass{"31C0}{"31EF}{1} \xeCJKsetcharclass{"31F0}{"31FF}{1} \xeCJKsetcharclass{"3200}{"32FF}{1} \xeCJKsetcharclass{"3300}{"33FF}{1} \xeCJKsetcharclass{"3400}{"4DBF}{1} \xeCJKsetcharclass{"4E00}{"9FFF}{1} \xeCJKsetcharclass{"AC00}{"D7AF}{1} \xeCJKsetcharclass{"F900}{"FAFF}{1} \xeCJKsetcharclass{"FE30}{"FE4F}{1} \xeCJKsetcharclass{"FF00}{"FFEF}{1} \xeCJKsetcharclass{"20000}{"2A6DF}{1} \xeCJKsetcharclass{"2F800}{"2FA1F}{1} \def\CJK@stop{\CJK@stop} \def\normalspacedchars#1{ \xeCJK@setnormalspacedchar#1\CJK@stop} \def\xeCJK@setnormalspacedchar#1{ \ifx#1\CJK@stop \else \XeTeXcharclass`#1=6 \expandafter\xeCJK@setnormalspacedchar \fi} \normalspacedchars{/} \XeTeXinterchartoks 1 0{\egroup\CJKecglue} \XeTeXinterchartoks 1 1{\xeCJK@i@i} \XeTeXinterchartoks 1 2{\xeCJK@i@ii} \XeTeXinterchartoks 1 3{\xeCJK@i@iii} \XeTeXinterchartoks 1 4{\egroup\CJKecglue} \XeTeXinterchartoks 1 5{\egroup} \XeTeXinterchartoks 1 255{\xeCJK@i@cclv} \XeTeXinterchartoks 2 0{\xeCJK@ii@} \XeTeXinterchartoks 2 1{\xeCJK@ii@i} \XeTeXinterchartoks 2 2{\xeCJK@ii@ii} \XeTeXinterchartoks 2 3{\xeCJK@ii@iii} \XeTeXinterchartoks 2 4{\xeCJK@ii@iv} \XeTeXinterchartoks 2 5{\xeCJK@ii@v} \XeTeXinterchartoks 2 255{\xeCJK@ii@cclv} \XeTeXinterchartoks 3 0{\xeCJK@iii@} \XeTeXinterchartoks 3 1{\xeCJK@iii@i} \XeTeXinterchartoks 3 2{\xeCJK@iii@ii} \XeTeXinterchartoks 3 3{\xeCJK@iii@iii} \XeTeXinterchartoks 3 4{\xeCJK@iii@iv} \XeTeXinterchartoks 3 5{\xeCJK@iii@v} \XeTeXinterchartoks 3 255{\xeCJK@iii@cclv} \XeTeXinterchartoks 0 1{\xeCJK@@i} \XeTeXinterchartoks 0 2{\xeCJK@@ii} \XeTeXinterchartoks 0 3{\xeCJK@@iii} \XeTeXinterchartoks 0 255{\xeCJK@@cclv} \XeTeXinterchartoks 4 1{\xeCJK@iv@i} \XeTeXinterchartoks 4 2{\xeCJK@iv@ii} \XeTeXinterchartoks 4 3{\xeCJK@iv@iii} \XeTeXinterchartoks 5 1{\xeCJK@v@i} \XeTeXinterchartoks 5 2{\xeCJK@v@ii} \XeTeXinterchartoks 5 3{\xeCJK@v@iii} \XeTeXinterchartoks 5 255{\xeCJK@v@cclv} \XeTeXinterchartoks 255 0{\xeCJK@cclv@} \XeTeXinterchartoks 255 1{\xeCJK@cclv@i} \XeTeXinterchartoks 255 2{\xeCJK@cclv@ii} \XeTeXinterchartoks 255 3{\xeCJK@cclv@iii} \XeTeXinterchartoks 255 4{\xeCJK@cclv@iv} \XeTeXinterchartoks 1 6{\xeCJK@i@vi} \XeTeXinterchartoks 2 6{\xeCJK@ii@vi} \XeTeXinterchartoks 3 6{\xeCJK@iii@vi} \XeTeXinterchartoks 6 1{\xeCJK@vi@i} \XeTeXinterchartoks 6 2{\xeCJK@vi@ii} \XeTeXinterchartoks 6 3{\xeCJK@vi@iii} \def\xeCJK@vi@i{ \bgroup \xeCJK@emptyCJKtoks \xeCJK@setfont \CJKsymbol} \def\xeCJK@i@vi{ \egroup} \let\xeCJK@ii@vi \xeCJK@i@vi \let\xeCJK@iii@vi\xeCJK@i@vi \let\xeCJK@vi@ii \xeCJK@vi@i \let\xeCJK@vi@iii\xeCJK@vi@i \def\xeCJK@i@i{ \CJKglue \CJKsymbol} \def\xeCJK@i@ii#1{ \xeCJK@punctrule{#1}{l} \hskip \csname xeCJK\xeCJK@punctstyle\xeCJK@bboxname @lglue@#1\endcsname plus 0.1em minus 0.1 em \xeCJK@setprepunct{#1}} \def\xeCJK@i@iii#1{ \xeCJK@punctrule{#1}{r} \ifcsname xeCJK@specialpunct#1\endcsname \CJKglue % breakable \else \nobreak \fi \global\edef\xeCJK@lastpunct{#1} \CJKpunctsymbol{#1}} \def\xeCJK@setprepunct#1{ \edef\xeCJK@lastpunct{#1} \vrule width \csname xeCJK\xeCJK@punctstyle\xeCJK@bboxname @lrule@#1\endcsname depth \z@ height \z@ \CJKpunctsymbol{#1}} \def\xeCJK@i@cclv{ \egroup {\xeCJK@CJKkern} \xeCJK@ignorespaces} \def\xeCJK@ii@i{ \nobreak \CJKsymbol} \def\xeCJK@ii@ii#1{ \nobreak \xeCJK@punctrule{#1}{l} \xeCJK@setkern{\xeCJK@lastpunct}{#1} \kern \csname xeCJK\xeCJK@punctstyle\xeCJK@bboxname @kern\xeCJK@lastpunct#1\endcsname \xeCJK@setprepunct{#1}} \def\xeCJK@ii@iii#1{ \nobreak \xeCJK@punctrule{#1}{r} \xeCJK@setkern{\xeCJK@lastpunct}{#1} \kern \csname xeCJK\xeCJK@punctstyle\xeCJK@bboxname @kern\xeCJK@lastpunct#1\endcsname \nobreak \edef\xeCJK@lastpunct{#1} \CJKpunctsymbol{#1}} \def\xeCJK@ii@{ \nobreak \egroup} \let\xeCJK@ii@iv\xeCJK@ii@ \let\xeCJK@ii@v\xeCJK@ii@ \def\xeCJK@ii@cclv{ \nobreak \egroup \ignorespaces} \def\xeCJK@iii@{ \xeCJK@afterpostpunct \egroup} \def\xeCJK@iii@i{ \xeCJK@afterpostpunct \CJKsymbol} \def\xeCJK@iii@ii#1{ \vrule width \csname xeCJK\xeCJK@punctstyle\xeCJK@bboxname @rrule@\xeCJK@lastpunct\endcsname depth \z@ height \z@ \xeCJK@punctrule{#1}{l} \xeCJK@setkern{\xeCJK@lastpunct}{#1} \kern \csname xeCJK\xeCJK@punctstyle\xeCJK@bboxname @kern\xeCJK@lastpunct#1\endcsname \xeCJKpunctnobreak \xeCJK@setprepunct{#1}} \def\xeCJK@iii@iii#1{ \vrule width \csname xeCJK\xeCJK@punctstyle\xeCJK@bboxname @rrule@\xeCJK@lastpunct\endcsname depth \z@ height \z@ \xeCJK@punctrule{#1}{r} \xeCJK@setkern{\xeCJK@lastpunct}{#1} \kern \csname xeCJK\xeCJK@punctstyle\xeCJK@bboxname @kern\xeCJK@lastpunct#1\endcsname \nobreak \edef\xeCJK@lastpunct{#1} \CJKpunctsymbol{#1}} \def\xeCJK@iii@iv{ \xeCJK@afterpostpunct \egroup} \def\xeCJK@afterpostpunct{ \vrule width \csname xeCJK\xeCJK@punctstyle\xeCJK@bboxname @rrule@\xeCJK@lastpunct\endcsname depth \z@ height \z@ \hskip \csname xeCJK\xeCJK@punctstyle\xeCJK@bboxname @rglue@\xeCJK@lastpunct\endcsname plus 0.1em minus 0.1 em} \let\xeCJK@iii@v\xeCJK@iii@iv \def\xeCJK@iii@cclv{ \xeCJK@afterpostpunct \egroup \ignorespaces} \def\xeCJK@@i{ \CJKecglue \bgroup \xeCJK@setfont \xeCJK@emptyCJKtoks \CJKsymbol} \def\xeCJK@@ii{ \bgroup \xeCJK@setfont \XeTeXinterchartoks 0 2{\relax} \xeCJK@emptyCJKtoks \xeCJK@i@ii} \def\xeCJK@@iii{ \bgroup \xeCJK@setfont \XeTeXinterchartoks 0 3{\relax} \xeCJK@emptyCJKtoks \xeCJK@i@iii} \def\xeCJK@iv@i{ \bgroup \xeCJK@setfont \XeTeXinterchartoks 4 1{\relax} \xeCJK@emptyCJKtoks \CJKsymbol} \def\xeCJK@iv@ii{ \bgroup \xeCJK@setfont \XeTeXinterchartoks 4 2{\relax} \xeCJK@emptyCJKtoks \xeCJK@i@ii} \def\xeCJK@iv@iii{ \bgroup \xeCJK@setfont \XeTeXinterchartoks 4 3{\relax} \xeCJK@emptyCJKtoks \xeCJK@i@iii} \def\xeCJK@v@i{ \CJKecglue \bgroup \xeCJK@setfont \xeCJK@emptyCJKtoks \CJKsymbol} \def\xeCJK@v@ii{ \bgroup \xeCJK@setfont \XeTeXinterchartoks 5 2{\relax} \xeCJK@emptyCJKtoks \xeCJK@i@ii} \def\xeCJK@v@iii{ \bgroup \xeCJK@setfont \XeTeXinterchartoks 5 3{\relax} \xeCJK@emptyCJKtoks \xeCJK@i@iii} \def\xeCJK@emptyCJKtoks{ \XeTeXinterchartoks 255 1{\relax} \XeTeXinterchartoks 255 2{\relax} \XeTeXinterchartoks 255 3{\relax}} \def\xeCJK@@cclv{ \futurelet\xeCJK@nexttoken\xeCJK@zz@cclv} \def\xeCJK@zz@cclv{ \ifx\xeCJK@nexttoken\@sptoken \else {\xeCJK@zerokern} \fi} \let\xeCJK@v@cclv\xeCJK@@cclv \def\xeCJK@cclv@{ \ifnum\lastkern=\@ne \@sptoken%\CJKecglue \fi} \let\xeCJK@cclv@iv\xeCJK@cclv@ \def\xeCJK@cclv@i{{ \ifnum\lastkern=\@ne \CJKglue \else \ifnum\lastkern=\xeCJK@four \@sptoken%\CJKecglue \else \ifnum\lastnodetype=\xeCJK@ten \CJKecglue \fi \fi \fi} \bgroup \xeCJK@emptyCJKtoks \xeCJK@setfont \CJKsymbol} \def\xeCJK@cclv@ii{ \bgroup \xeCJK@emptyCJKtoks \xeCJK@setfont \xeCJK@i@ii} \def\xeCJK@cclv@iii{ \bgroup \xeCJK@emptyCJKtoks \xeCJK@setfont \xeCJK@i@iii} \def\CJKglue{\hskip \z@ \@plus .08\baselineskip} \def\CJK@nobreakglue{\nobreak\CJKglue\nobreak} \edef\xeCJK@CJKkern{\kern -1sp\kern 1sp} \edef\xeCJK@prepunctkern{\kern -2sp\kern 2sp} \edef\xeCJK@zerokern{\kern -4sp\kern 4sp} \chardef\xeCJK@four=4 \chardef\xeCJK@ten=10 \def\xeCJK@ignorespaces{ \futurelet\xeCJK@nexttoken\xeCJK@checknext} \def\xeCJK@checknext{ \ifx\xeCJK@nexttoken\@sptoken \expandafter\xeCJK@@checknext \else \ifx $\xeCJK@nexttoken \CJKecglue \fi \fi} { \def\:{\xeCJK@@checknext} \global\expandafter\def\: {\futurelet\@let@token\xeCJK@@@checknext} } \def\xeCJK@@@checknext{ \ifx $\@let@token \@sptoken%\CJKecglue \else \if\relax\noexpand\@let@token \ifx\@let@token\xeCJK@par \else \@sptoken \fi \fi \fi \let\xeCJK@nexttoken\relax} \long\def\xeCJK@gobble#1\CJK@stop{} \def\xeCJK@checksingle#1{ \def\xeCJK@setcurrentchar@i{ \CJKglue \CJKsymbol{#1}} \def\xeCJK@setcurrentnobreakchar@i{ \CJKsymbol{#1}} \futurelet\@let@token\xeCJK@@checksingle} \def\xeCJK@@checksingle{ \ifcat 。\noexpand\@let@token \expandafter\xeCJK@@@checksingle \else \expandafter\xeCJK@setcurrentchar@i \fi} \def\xeCJK@@@checksingle#1{ \def\xeCJK@setcurrentchar@ii{ \xeCJK@setcurrentchar@i #1} \def\xeCJK@setcurrentchar@ii@s{ \xeCJK@setcurrentchar@i #1 } \def\xeCJK@setcurrentnobreakchar@ii{ \xeCJK@setcurrentnobreakchar@i #1} \futurelet\@let@token\xeCJK@@@@checksingle} \def\xeCJK@@@@checksingle{ \ifx\@let@token\@sptoken \expandafter\xeCJK@checkpar \else \expandafter\xeCJK@setcurrentchar@ii \fi} \let\xeCJK@par\par \def\xeCJK@checkpar{ \@ifnextchar\xeCJK@par{\xeCJK@setcurrentnobreakchar@ii}{\xeCJK@setcurrentchar@ii@s}} \def\xeCJKsetecglue#1{ \def\CJK@ecglue{#1} \let\CJKecglue\CJK@ecglue} \let\CJKsetecglue\xeCJKsetecglue \CJKsetecglue{ } \def\xeCJKallowbreakbetweenpuncts{ \def\xeCJKpunctnobreak{ \hskip 0pt}} \def\xeCJKnobreakbetweenpuncts{ \let\xeCJKpunctnobreak\nobreak} \xeCJKnobreakbetweenpuncts \let\xeCJK@itcorr\/ \def\/{% \relax \ifnum\lastkern=4 % \unkern\unkern \fi \xeCJK@itcorr} \let\@@italiccorr=\/ \newcount\xeCJK@cnta \newcount\xeCJK@cntb \newcount\xeCJK@cntc \newcount\xeCJK@cntd \newcount\xeCJK@cnte \newdimen\xeCJK@dima \newif\ifxeCJK@dokerning \def\xeCJK@punctrule#1#2{ \xdef\xeCJK@bboxname{\xeCJK@family/\f@series/\f@shape} \ifcsname xeCJK\xeCJK@punctstyle\xeCJK@bboxname @#2rule@#1\endcsname \else \ifcsname xeCJK@\xeCJK@bboxname @lspace@#1\endcsname \else {\xeCJK@setfont \xeCJK@setpunctbounds{#1}} \fi \xeCJK@dokerningtrue \ifnum\xeCJK@punctstyle=\xeCJK@ps@plain\relax \xeCJK@dokerningfalse \else \ifcsname xeCJK@specialpunct#1\endcsname \xeCJK@dokerningfalse \fi \fi \ifxeCJK@dokerning \xeCJK@cnta=\csname xeCJK@\xeCJK@bboxname @#2space@#1\endcsname\relax \xeCJK@cntc=\xeCJK@cnta \ifcase\xeCJK@punctstyle % hangmobanjiao \or % quanjiao \or % banjiao \advance\xeCJK@cntc -50\relax \or % kaiming \ifcsname xeCJK@kaiming#1\endcsname \else \advance\xeCJK@cntc -50\relax \fi \or %CCT \advance\xeCJK@cntc -20\relax \fi \xeCJK@cntd=\xeCJK@cntc \ifnum\xeCJK@cntc<0\relax \xeCJK@cntc=0\relax \fi \else \xeCJK@cnta=0\relax \xeCJK@cntc=0\relax \xeCJK@cntd=0\relax \fi \xeCJK@numtodim{\xeCJK@cnta} \global\expandafter\edef\csname xeCJK\xeCJK@punctstyle\xeCJK@bboxname @#2rule@#1\endcsname{ -\xeCJK@temp em} \xeCJK@numtodim{\xeCJK@cntc} \global\expandafter\edef\csname xeCJK\xeCJK@punctstyle\xeCJK@bboxname @#2glue@#1\endcsname{ \xeCJK@temp em} \global\expandafter\edef\csname xeCJK\xeCJK@punctstyle\xeCJK@bboxname @#2oglue@#1\endcsname{ \the\xeCJK@cntd} \fi} \def\xeCJK@numtodim#1{ \xeCJK@cnte=#1\relax \ifnum\the\xeCJK@cnte<100\relax \def\xeCJK@temp{0} \else \advance\xeCJK@cnte -100\relax \def\xeCJK@temp{1} \fi \ifnum\the\xeCJK@cnte<10 \edef\xeCJK@temp{\xeCJK@temp.0\the\xeCJK@cnte} \else \edef\xeCJK@temp{\xeCJK@temp.\the\xeCJK@cnte} \fi} \expandafter\def\csname xeCJK@kaiming.\endcsname{} \expandafter\def\csname xeCJK@kaiming。\endcsname{} \expandafter\def\csname xeCJK@kaiming?\endcsname{} \expandafter\def\csname xeCJK@kaiming!\endcsname{} \expandafter\def\csname xeCJK@specialpunct—\endcsname{}% U+2014 \expandafter\def\csname xeCJK@specialpunct─\endcsname{}% U+2500 \expandafter\def\csname xeCJK@specialpunct…\endcsname{} \def\xeCJK@setkern#1#2{ \ifcsname xeCJK\xeCJK@punctstyle\xeCJK@bboxname @kern#1#2\endcsname \else \xeCJK@cnta=0\relax \ifcsname xeCJK\xeCJK@punctstyle\xeCJK@bboxname @roglue@#1\endcsname \advance\xeCJK@cnta\csname xeCJK\xeCJK@punctstyle\xeCJK@bboxname @roglue@#1\endcsname \fi \ifcsname xeCJK\xeCJK@punctstyle\xeCJK@bboxname @loglue@#2\endcsname \advance\xeCJK@cnta\csname xeCJK\xeCJK@punctstyle\xeCJK@bboxname @loglue@#2\endcsname \fi \relax \ifcase\xeCJK@punctstyle % hangmobanjiao \or % quanjiao \advance\xeCJK@cnta -50\relax \or % banjiao \or % kaiming \ifcsname xeCJK@kaiming#1\endcsname \ifcsname xeCJK\xeCJK@punctstyle\xeCJK@bboxname @roglue@#2\endcsname \advance\xeCJK@cnta -50\relax \fi \fi \fi \ifnum\xeCJK@cnta<0\relax \xeCJK@cnta=0\relax \fi \xeCJK@numtodim{\xeCJK@cnta} \global\expandafter\edef\csname xeCJK\xeCJK@punctstyle\xeCJK@bboxname @kern#1#2\endcsname{ \xeCJK@temp em} \fi} \def\xeCJKsetkern#1#2#3{ \xdef\xeCJK@bboxname{\xeCJK@family/\f@series/\f@shape} \global\expandafter\edef\csname xeCJK\xeCJK@punctstyle\xeCJK@bboxname @kern#1#2\endcsname{#3}} \def\punctstyle#1{ \ifcsname xeCJK@ps@#1\endcsname \edef\xeCJK@punctstyle{\csname xeCJK@ps@#1\endcsname} \ifnum\xeCJK@punctstyle=\xeCJK@ps@plain\relax \xeCJKallowbreakbetweenpuncts \fi \else \typeout{Warning: Punctstyle #1\space is not defined.} \fi} \def\xeCJK@ps@hangmobanjiao{0} \def\xeCJK@ps@marginkerning{0} \def\xeCJK@ps@quanjiao{1} \def\xeCJK@ps@fullwidth{1} \def\xeCJK@ps@banjiao{2} \def\xeCJK@ps@halfwidth{2} \def\xeCJK@ps@kaiming{3} \def\xeCJK@ps@mixedwidth{3} \def\xeCJK@ps@CCT{4} \def\xeCJK@ps@plain{5} \punctstyle{quanjiao} \def\xeCJKplainchr{\punctstyle{plain}} \def\xeCJK@sidespace{10} \def\xeCJK@getglyphbounds#1{ \xeCJK@cnta=\number\XeTeXglyphbounds #1 \xeCJK@gid \xeCJK@dima 1em\relax \xeCJK@cntb=\number\xeCJK@dima \multiply\xeCJK@cnta 100\relax \divide\xeCJK@cnta\xeCJK@cntb \advance\xeCJK@cnta -15\relax \edef\xeCJK@temp{\the\xeCJK@cnta} \ifnum\xeCJK@temp<0\relax \def\xeCJK@temp{0} \fi} \def\xeCJK@setpunctbounds#1{ \edef\xeCJK@gid{\the\XeTeXcharglyph`#1} \xeCJK@getglyphbounds{1} \expandafter\xdef\csname xeCJK@\xeCJK@bboxname @lspace@#1\endcsname{ \xeCJK@temp} \xeCJK@getglyphbounds{3} \expandafter\xdef\csname xeCJK@\xeCJK@bboxname @rspace@#1\endcsname{ \xeCJK@temp} \ifcsname xeCJK@specialpunct#1\endcsname \ifx#1… \else \xeCJK@cnta=\number\XeTeXglyphbounds 1 \xeCJK@gid \advance\xeCJK@cnta\number\XeTeXglyphbounds 3 \xeCJK@gid \xeCJK@dima 1em\relax \xeCJK@cntb=\number\xeCJK@dima \multiply\xeCJK@cnta 100\relax \divide\xeCJK@cnta\xeCJK@cntb \advance\xeCJK@cnta 1\relax \ifnum\xeCJK@cnta>9 \edef\xeCJK@temp{-0.\the\xeCJK@cnta em} \else \ifnum\xeCJK@cnta>1 \edef\xeCJK@temp{-0.0\the\xeCJK@cnta em} \else \edef\xeCJK@temp{-0.01 em} \fi \fi \xeCJK@cnta=0 \loop \global\expandafter\edef\csname xeCJK\the\xeCJK@cnta\xeCJK@bboxname @kern#1#1\endcsname{\xeCJK@temp} \advance \xeCJK@cnta 1\relax \ifnum\xeCJK@cnta<6\repeat \fi \fi} \ifcsname XeTeXglyphbounds\endcsname \else \PackageError{xeCJK}{\string\XeTeXglyphbounds \space not defined.^^J You have to update XeTeX to the version 0.9995.0 or later} \relax \fi \def\CJKsymbol#1{#1} \def\CJKpunctsymbol#1{#1} \DeclareRobustCommand{\xeCJK@ULprepunctchar}[1]{ {\XeTeXinterchartokenstate=0 \CJKpunctsymbol{#1} \nobreak} \ignorespaces} \DeclareRobustCommand{\xeCJK@ULpostpunctchar}[1]{ {\XeTeXinterchartokenstate=0 \CJKpunctsymbol{#1}} \xeCJK@ignorespaces} \def\xeCJK@ULroutines{ \XeTeXinterchartoks 0 1 {\CJKecglue\CJKsymbol} \XeTeXinterchartoks 4 1 {\CJKsymbol} \XeTeXinterchartoks 5 1 {\CJKecglue\CJKsymbol} \XeTeXinterchartoks 255 1 {\xeCJK@cclv@i} \XeTeXinterchartoks 0 2 {\xeCJK@ULprepunctchar} \XeTeXinterchartoks 4 2 {\xeCJK@ULprepunctchar} \XeTeXinterchartoks 5 2 {\xeCJK@ULprepunctchar} \XeTeXinterchartoks 255 2 {\xeCJK@ULprepunctchar} \XeTeXinterchartoks 0 3 {\xeCJK@ULpostpunctchar} \XeTeXinterchartoks 4 3 {\xeCJK@ULpostpunctchar} \XeTeXinterchartoks 5 3 {\xeCJK@ULpostpunctchar} \XeTeXinterchartoks 255 3 {\xeCJK@ULpostpunctchar}} \AtBeginDocument{ \ifcsname UL@hook\endcsname \addto@hook\UL@hook{ \def\CJKsymbol#1{{\xeCJK@setfont #1}\kern -1sp\kern 1sp\xeCJK@ignorespaces} \def\CJKpunctsymbol#1{{\xeCJK@setfont #1}} \xeCJK@ULroutines} \fi \ifcsname ver@CJKfntef.sty\endcsname \def\XeTeX@CJKfntef@hook{ \xeCJK@setfont \XeTeXinterchartokenstate=0} \fi} \def\xeCJK@setfont{ \ifcsname\xeCJK@family/\f@series/\f@shape/\f@size\endcsname \csname\xeCJK@family/\f@series/\f@shape/\f@size\endcsname \else \csname xeCJK@font@\xeCJK@family\endcsname \get@external@font \expandafter\global\expandafter\font \csname\xeCJK@family/\f@series/\f@shape/\f@size\endcsname=\external@font \fi} \def\setCJKmainfont{ \xeCJK@newfontfamily{rm}} \let\setCJKromanfont\setCJKmainfont \def\setCJKsansfont{ \xeCJK@newfontfamily{sf}} \def\setCJKmonofont{ \xeCJK@newfontfamily{tt}} \def\setCJKfamilyfont#1{ \xeCJK@newfontfamily{#1}} \DeclareRobustCommand\normalfont {\CJKfamily{rm}% \usefont\encodingdefault \familydefault \seriesdefault \shapedefault \relax} \let\reset@font\normalfont \DeclareRobustCommand\rmfamily {\not@math@alphabet\rmfamily\mathrm \fontfamily\rmdefault\CJKfamily{rm}\selectfont} \DeclareRobustCommand\sffamily {\not@math@alphabet\sffamily\mathsf \fontfamily\sfdefault\CJKfamily{sf}\selectfont} \DeclareRobustCommand\ttfamily {\not@math@alphabet\ttfamily\mathtt \fontfamily\ttdefault\CJKfamily{tt}\selectfont} \newcommand*\xeCJK@newfontfamily[1]{ \@ifnextchar[ {\xeCJK@newfontfamily@{#1}} {\xeCJK@newfontfamily@{#1}[]}} \def\xeCJK@setmacro@define@key#1{ \define@key[xeCJK]{preparse}{#1}{ \expandafter\xdef\csname xeCJK@#1\endcsname{##1}}} \xeCJK@setmacro@define@key{ItalicFont} \xeCJK@setmacro@define@key{BoldFont} \xeCJK@setmacro@define@key{BoldItalicFont} \def\xeCJK@newfontfamily@#1[#2]#3{ % % Get user defined options \let\xeCJK@BoldFont\@empty \let\xeCJK@ItalicFont\@empty \let\xeCJK@BoldItalicFont\@empty \bgroup \setkeys*[xeCJK]{preparse}{#2} \egroup \edef\xeCJK@Features{} \ifxeCJK@BoldFont@ \ifx\xeCJK@BoldFont\@empty \edef\xeCJK@Features{BoldFont={#3}, BoldFeatures={RawFeature={embolden=\xeCJK@emboldenfactor}}} \fi \fi \ifxeCJK@SlantFont@ \ifx\xeCJK@ItalicFont\@empty \ifx\xeCJK@Features\@empty \edef\xeCJK@Features{ItalicFont={#3}, ItalicFeatures={RawFeature={slant=\xeCJK@slantfactor}}} \else \edef\xeCJK@Features{\xeCJK@Features,ItalicFont={#3}, ItalicFeatures={RawFeature={slant=\xeCJK@slantfactor}}} \fi \fi \ifx\xeCJK@BoldItalicFont\@empty \ifx\xeCJK@BoldFont\@empty \edef\xeCJK@Features{\xeCJK@Features,BoldItalicFont={#3}, BoldItalicFeatures={RawFeature={embolden=\xeCJK@emboldenfactor,slant=\xeCJK@slantfactor}}} \else \edef\xeCJK@Features{\xeCJK@Features,BoldItalicFont={\xeCJK@BoldFont}, BoldItalicFeatures={RawFeature={slant=\xeCJK@slantfactor}}} \fi \fi \fi \edef\xeCJK@temp{#2} \ifx\xeCJK@temp\@empty \else \ifx\xeCJK@Features\@empty \edef\xeCJK@Features{#2} \else \edef\xeCJK@Features{\xeCJK@Features,#2} \fi \fi \expandafter\edef\csname xeCJK@font@#1\endcsname{ \noexpand\fontspec[\xeCJK@Features]{#3}} \expandafter\edef\csname xeCJK@fontoptions@#1\endcsname{\xeCJK@Features} \expandafter\edef\csname xeCJK@fontname@#1\endcsname{#3}} \newcount\xeCJK@featureadded \xeCJK@featureadded=0 \let\xeCJK@addfontfeatures\addfontfeatures \def\addCJKfontfeatures#1{ \global\advance\xeCJK@featureadded\@ne \ifcsname xeCJK@family\endcsname \edef\xeCJK@tempa{\csname xeCJK@fontoptions@\xeCJK@family\endcsname,#1} \edef\xeCJK@tempb{\csname xeCJK@fontname@\xeCJK@family\endcsname} \edef\xeCJK@tempf{\xeCJK@family @\the\xeCJK@featureadded} \expandafter\edef\csname xeCJK@font@\xeCJK@tempf\endcsname{ \noexpand\fontspec[\xeCJK@tempa]{\xeCJK@tempb}} \expandafter\edef\csname xeCJK@fontoptions@\xeCJK@tempf\endcsname{\xeCJK@tempa} \expandafter\edef\csname xeCJK@fontname@\xeCJK@tempf\endcsname{\xeCJK@tempb} \CJKfamily{\xeCJK@tempf} \fi} \def\addfontfeatures#1{ \xeCJK@addfontfeatures{#1} \addCJKfontfeatures{#1}} \def\xeCJK@font@rm{} \DeclareRobustCommand\CJKfamily[1]{ \ifcsname xeCJK@font@#1\endcsname \edef\xeCJK@family{#1} \else \ifcsname xeCJK@#1@warned\endcsname \else \PackageWarning{xeCJK}{ Unknown CJK family `#1' is ignored.^^J Use \string\setCJKfamilyfont \space to define a CJK family.} \expandafter\gdef\csname xeCJK@#1@warned\endcsname{} \fi \fi} \CJKfamily{rm} \def\xeCJKsetslantfactor#1{\edef\xeCJK@slantfactor{#1}} \def\xeCJKsetemboldenfactor#1{\edef\xeCJK@emboldenfactor{#1}} \xeCJKsetslantfactor{0.17} \xeCJKsetemboldenfactor{4} \ifxeCJK@num \edef\CJK@UnicodeEnc{UTF8} \def\CJKaddEncHook#1#2{\expandafter\def\csname xeCJK@enc@#1\endcsname{#2}} \def\Unicode#1#2{\@tempcnta #1\relax \multiply\@tempcnta 256\relax \advance\@tempcnta #2\relax \char\@tempcnta} \RequirePackage{CJKnumb} \csname xeCJK@enc@UTF8\endcsname \def\CJK@tenthousand{万} \fi \def\CJK@ifundefined#1{ \ifx #1\@undefined \expandafter\@firstoftwo \else \expandafter\@secondoftwo \fi } \newcommand{\xeCJKcaption}[2][]{ \edef\xeCJK@temp{#1} \ifx\xeCJK@temp\@empty \else \XeTeXdefaultencoding "#1" \fi \makeatletter \input{#2.cpx} \makeatother \XeTeXdefaultencoding "UTF-8"} \endlinechar `\^^M \catcode "FEFF=9\relax \endinput %% %% End of file `xeCJK.sty'.