%% %% This is file `CJKpunct.sty', %% generated with the docstrip utility. %% %% The original source files were: %% %% CJKpunct.dtx (with options: `CJKpunct') %% %% Version 4.8.2 (06-May-2009) %% %% This is the file CJKpunct.sty for the CJK package %% %% Authors: %% Linbo Zhang (zlb@lsec.cc.ac.cn) %% Wenchang Sun (sunwch@nankai.edu.cn) %% %% \def\fileversion{4.8.2} \def\filedate{2009/05/06} \ProvidesPackage{CJKpunct}[\filedate\space\fileversion] \endlinechar \m@ne \newif\if@CJKpunct \newif\if@CJKpunct@dokerning \newcount\CJKpunct@cnta \newcount\CJKpunct@cntb \newcount\CJKpunct@cntc \newcount\CJKpunct@cntd \newcount\CJKpunct@cnte \let\CJKo@testLastCJK\CJK@testLastCJK \def\CJKpunct@testLastCJK{ \global\CJK@false \global\edef\CJKpunct@lastkern{\number\lastkern}} \let\CJKo@testLastKern\CJK@testLastKern \def\CJKpunct@testLastKern{ \global\CJK@false} \let\CJKo@testPrePunct\CJK@testPrePunct \let\CJKo@testPostPunct\CJK@testPostPunct \def\CJKpunct@testPrePunct#1#2#3{} \def\CJKpunct@testPostPunct#1#2#3{} \let\CJKo@nobreakglue\CJK@nobreakglue \let\CJKosymbol\CJKsymbol \def\CJKpunct@CJKsymbol#1{ {{{ \ifnum\CJKpunct@lastkern>0\relax \ifnum\CJKpunct@lastcharclass=0\relax \CJKglue \else \CJKpunct@ULspecials \fi \fi \CJKosymbol{#1} \gdef\CJKpunct@lastcharclass{0}}}}} \def\CJKpunct@lastcharclass{0} \def\CJKpunct@lastkern{0} \let\CJKopunctsymbol\CJKpunctsymbol \def\CJKpunct@CJKpunctsymbol#1{ \CJKpunct@setfamily \CJKpunct@setmarginkerning \edef\CJKpunct@currentpunct{\CJK@plane/\the#1} \ifcsname CJKpunct@\CJK@enc @\CJKpunct@currentpunct\endcsname \edef\CJKpunct@currentcharclass{ \csname CJKpunct@\CJK@enc @\CJKpunct@currentpunct\endcsname} {{{% We need three braces for CJKulem to work \@CJKpunctfalse \ifnum\CJKpunct@lastkern>0\relax \ifnum\CJKpunct@lastcharclass>0\relax \unkern \unkern \ifnum\CJKpunct@punctstyle>0\relax \@CJKpuncttrue \else \ifcsname CJKpunct@specialpunct\CJK@enc \CJKpunct@currentpunct\endcsname \@CJKpuncttrue \fi \fi \fi \fi \if@CJKpunct \CJKpunct@unskip \CJKpunct@setkern{\CJKpunct@lastpunct}{\CJKpunct@currentpunct} \kern \csname CJKpunct\CJKpunct@punctstyle @\CJK@enc @\CJKpunct@family @kern\CJKpunct@lastpunct @\CJKpunct@currentpunct\endcsname \CJKpunct@nobreak \else \CJKpunct@ULspecials \ifnum\CJKpunct@currentcharclass=1\relax \hskip \csname CJKpunct\CJKpunct@punctstyle @\CJK@enc @\CJKpunct@family @lglue@\CJKpunct@currentpunct\endcsname plus 0.1em minus 0.1 em \else \ifcsname CJKpunct@specialpunct\CJK@enc \CJKpunct@currentpunct\endcsname \CJKglue % breakable \else \nobreak \fi \fi \fi \global\edef\CJKpunct@lastpunct{\CJKpunct@currentpunct} \vrule width \csname CJKpunct\CJKpunct@punctstyle @\CJK@enc @\CJKpunct@family @lrule@\CJKpunct@currentpunct\endcsname depth \z@ height \z@ \CJKopunctsymbol{#1} \vrule width \csname CJKpunct\CJKpunct@punctstyle @\CJK@enc @\CJKpunct@family @rrule@\CJKpunct@currentpunct\endcsname depth \z@ height \z@ \ifnum\CJKpunct@currentcharclass=2\relax \hskip \csname CJKpunct\CJKpunct@punctstyle @\CJK@enc @\CJKpunct@family @rglue@\CJKpunct@currentpunct\endcsname plus 0.1em minus 0.1 em \fi \global\let\CJKpunct@lastcharclass\CJKpunct@currentcharclass}}} \else \CJKsymbol{#1} \global\def\CJKpunct@lastcharclass{0} \fi} \def\CJKpunct@setfamily{ \ifcsname \CJK@enc @\CJK@family @\f@series @\f@shape\endcsname \global\edef\CJKpunct@family{\csname \CJK@enc @\CJK@family @\f@series @\f@shape\endcsname} \else \edef\CJKpunct@family{\CJK@family} \fi} \def\CJKpunctmapfamily#1#2#3#4#5{ \expandafter\edef\csname #1@#2@#3@#4\endcsname{#5}} \def\CJKpunct@plainpunctsymbol#1#2{ \CJKpunctsymbol{#2}} \def\CJKpunct@setmarginkerning{ \ifcsname CJKpunct @\CJKpunct@punctstyle @\CJK@enc @\CJKpunct@family\endcsname \else \expandafter\gdef\csname CJKpunct @\CJKpunct@punctstyle @\CJK@enc @\CJKpunct@family\endcsname{} \ifcsname CJKpunct@\CJKpunct@family @spaces\endcsname \PackageInfo{CJKpunct}{use punctuation spaces for family '\CJKpunct@family' \space with punctstyle (\CJKpunct@currentpunctstyle)}\relax \edef\CJKpunct@spaces{\csname CJKpunct@\CJKpunct@family @spaces\endcsname} \else \ifcsname CJKpunct@spaces@\CJKpunct@family\endcsname \else \PackageInfo{CJKpunct}{punctuation spaces for family '\CJKpunct@family' do not exist. \space Use family 'def' instead.}\relax \global\expandafter\def\csname CJKpunct@spaces@\CJKpunct@family\endcsname{} \fi \edef\CJKpunct@spaces{\csname CJKpunct@def@spaces\endcsname} \fi \CJKpunct@cnta=0\relax \expandafter\CJKpunct@@setmarginkerning\CJKpunct@spaces \fi} \def\CJKpunct@@setmarginkerning#1,#2,{ \edef\CJKpunct@temp{#1} \ifx\CJKpunct@temp\@empty \def\CJKpunct@temp{} \else \def\CJKpunct@temp{\CJKpunct@@setmarginkerning} \ifnum\CJKpunct@cnta<12 \def\CJKpunct@lr{l} \else \def\CJKpunct@lr{r} \fi \edef\CJKpunct@encpn{\csname CJKpunct@pn@\CJK@enc @\the\CJKpunct@cnta\endcsname} \if l\CJKpunct@lr \expandafter\gdef\csname CJKpunct@\CJK@enc @\CJKpunct@encpn\endcsname{1} \else \expandafter\gdef\csname CJKpunct@\CJK@enc @\CJKpunct@encpn\endcsname{2} \fi \@CJKpunct@dokerningtrue \ifnum\CJKpunct@punctstyle=\CJKpunct@ps@plain\relax \@CJKpunct@dokerningfalse \else \ifcsname CJKpunct@specialpunct\CJK@enc\CJKpunct@encpn\endcsname \@CJKpunct@dokerningfalse \fi \fi \ifnum\CJKpunct@punctstyle=\CJKpunct@ps@banjiao \def\CJKpunct@sidespaces{12} \else \def\CJKpunct@sidespaces{15} \fi \ifnum\CJKpunct@cnta=12\relax {\CJKpunct@cntb=#1\relax \advance\CJKpunct@cntb #2\relax \advance\CJKpunct@cntb 2\relax \CJKpunct@numtostring{\CJKpunct@cntb} \edef\CJKpunct@temp{\csname CJKpunct@pn@\CJK@enc @12\endcsname} \CJKpunct@cntc=0\relax \loop \global\expandafter\edef\csname CJKpunct\CJKpunct@punctstyle @\CJK@enc @\CJKpunct@family @kern\CJKpunct@temp @\CJKpunct@temp\endcsname{ -0.\CJKpunct@decimal em} \advance \CJKpunct@cntc 1\relax \ifnum\CJKpunct@cntc<6\repeat} \fi \if@CJKpunct@dokerning \CJKpunct@cntb=#1\relax \advance\CJKpunct@cntb -\CJKpunct@sidespaces\relax \ifnum\CJKpunct@cntb<0\relax \CJKpunct@cntb=0\relax \fi \CJKpunct@cntc=#2\relax \advance\CJKpunct@cntc -\CJKpunct@sidespaces\relax \ifnum\CJKpunct@cntc<0\relax \CJKpunct@cntc=0\relax \fi \CJKpunct@cntd=\CJKpunct@cntb \advance\CJKpunct@cntd\CJKpunct@cntc\relax \ifcase\CJKpunct@punctstyle % hangmobanjiao \or % quanjiao \or % banjiao \advance\CJKpunct@cntd -50\relax \or % kaiming \ifcsname CJKpunct@kaiming\CJK@enc\CJKpunct@encpn\endcsname \else \advance\CJKpunct@cntd -50\relax \fi \or %CCT \advance\CJKpunct@cntd -20\relax \fi \CJKpunct@cnte=\CJKpunct@cntd \ifnum\CJKpunct@cntd<0\relax \CJKpunct@cntd=0\relax \fi \else \CJKpunct@cntb=0\relax \CJKpunct@cntc=0\relax \CJKpunct@cntd=0\relax \CJKpunct@cnte=0\relax \fi \CJKpunct@numtostring{\CJKpunct@cntb} \global\expandafter\edef\csname CJKpunct\CJKpunct@punctstyle @\CJK@enc @\CJKpunct@family @lrule@\CJKpunct@encpn\endcsname{ -0.\CJKpunct@decimal em} \CJKpunct@numtostring{\CJKpunct@cntc} \global\expandafter\edef\csname CJKpunct\CJKpunct@punctstyle @\CJK@enc @\CJKpunct@family @rrule@\CJKpunct@encpn\endcsname{ -0.\CJKpunct@decimal em} \CJKpunct@numtostring{\CJKpunct@cntd} \global\expandafter\edef\csname CJKpunct\CJKpunct@punctstyle @\CJK@enc @\CJKpunct@family @\CJKpunct@lr glue@\CJKpunct@encpn\endcsname{ 0.\CJKpunct@decimal em} \global\expandafter\edef\csname CJKpunct\CJKpunct@punctstyle @\CJK@enc @\CJKpunct@family @\CJKpunct@lr oglue@\CJKpunct@encpn\endcsname{ \the\CJKpunct@cnte} \fi \advance \CJKpunct@cnta 1\relax \CJKpunct@temp} \def\CJKpunct@numtostring#1{ \edef\CJKpunct@decimal{\the#1} \ifnum\CJKpunct@decimal<10\relax \edef\CJKpunct@decimal{0\CJKpunct@decimal} \fi} \def\CJKpunct@setkern#1#2{ \ifcsname CJKpunct\CJKpunct@punctstyle @\CJK@enc @\CJKpunct@family @kern#1@#2\endcsname \else \CJKpunct@cnta=0\relax \ifcsname CJKpunct\CJKpunct@punctstyle @\CJK@enc @\CJKpunct@family @roglue@#1\endcsname \advance\CJKpunct@cnta\csname CJKpunct\CJKpunct@punctstyle @\CJK@enc @\CJKpunct@family @roglue@#1\endcsname \fi \ifcsname CJKpunct\CJKpunct@punctstyle @\CJK@enc @\CJKpunct@family @loglue@#2\endcsname \advance\CJKpunct@cnta\csname CJKpunct\CJKpunct@punctstyle @\CJK@enc @\CJKpunct@family @loglue@#2\endcsname \fi \relax \ifcase\CJKpunct@punctstyle % hangmobanjiao \or % quanjiao \advance\CJKpunct@cnta -50\relax \or % banjiao \or % kaiming \ifcsname CJKpunct@kaiming#1\endcsname \ifcsname CJKpunct\CJKpunct@punctstyle @\CJK@enc @\CJKpunct@family @loglue@#2\endcsname \advance\CJKpunct@cnta -50\relax \fi \fi \fi \ifnum\CJKpunct@cnta<0\relax \CJKpunct@cnta=0\relax \fi \CJKpunct@numtostring{\CJKpunct@cnta} \global\expandafter\edef\csname CJKpunct\CJKpunct@punctstyle @\CJK@enc @\CJKpunct@family @kern#1@#2\endcsname{ 0.\CJKpunct@decimal em} \fi} \let\CJKpunct@unskip\unskip \def\CJKpunct@UL@unskip{ \ifcsname CJKpunct\CJKpunct@punctstyle @\CJK@enc @\CJKpunct@family @rglue@\CJKpunct@lastpunct\endcsname \hskip -\csname CJKpunct\CJKpunct@punctstyle @\CJK@enc @\CJKpunct@family @rglue@\CJKpunct@lastpunct\endcsname \relax \fi} \@ifundefined{UL@hskip}{\let\UL@hskip\relax}{} \def\CJKpunct@punctUL@group{ \ifx\hskip\UL@hskip \egroup \UL@stop \UL@start \bgroup \fi} \def\CJKpunct@ULspecials{} \AtBeginDocument{ \ifcsname UL@hook\endcsname \addto@hook\UL@hook{\let\CJK@ignorespaces\ignorespaces \let\CJKpunct@unskip\CJKpunct@UL@unskip \let\CJKpunct@ULspecials\CJKpunct@punctUL@group} \fi} \def\CJKpunctallowbreakbetweenpuncts{ \def\CJKpunct@nobreak{ \ifnum\CJKpunct@lastcharclass=2 \hskip 0pt \fi}} \def\CJKpunctnobreakbetweenpuncts{ \let\CJKpunct@nobreak\nobreak} \CJKpunctnobreakbetweenpuncts \def\CJKpunctstyle#1{ \ifcsname CJKpunct@ps@#1\endcsname \edef\CJKpunct@currentpunctstyle{#1} \edef\CJKpunct@punctstyle{\csname CJKpunct@ps@#1\endcsname} \ifnum\CJKpunct@punctstyle=\CJKpunct@ps@plain\relax \CJKpunctallowbreakbetweenpuncts \let\CJK@testLastCJK\CJKo@testLastCJK \let\CJK@testLastKern\CJKo@testLastKern \let\CJK@testPrePunct\CJKo@testPrePunct \let\CJK@testPostPunct\CJKo@testPostPunct \let\CJKpunct@punctsymbol\CJKpunct@plainpunctsymbol \let\CJKsymbol\CJKosymbol \let\CJKpunctsymbol\CJKopunctsymbol \let\CJK@nobreakglue\CJKo@nobreakglue \let\CJKpunct@utfsymbol\CJKpunct@utfbsymbol \else \let\CJK@testLastCJK\CJKpunct@testLastCJK \let\CJK@testLastKern\CJKpunct@testLastKern \let\CJK@testPrePunct\CJKpunct@testPrePunct \let\CJK@testPostPunct\CJKpunct@testPostPunct \let\CJKpunct@punctsymbol\CJKpunct@@punctsymbol \let\CJKsymbol\CJKpunct@CJKsymbol \let\CJKpunctsymbol\CJKpunct@CJKpunctsymbol \let\CJK@nobreakglue\relax \let\CJKpunct@utfsymbol\CJKpunct@utfasymbol \fi \else \PackageWarning{CJKpunct}{Punctstyle #1\space is not defined.}\relax \fi} \let\punctstyle\CJKpunctstyle \def\CJKpunct@ps@hangmobanjiao{0} \def\CJKpunct@ps@marginkerning{0} \def\CJKpunct@ps@quanjiao{1} \def\CJKpunct@ps@fullwidth{1} \def\CJKpunct@ps@banjiao{2} \def\CJKpunct@ps@halfwidth{2} \def\CJKpunct@ps@kaiming{3} \def\CJKpunct@ps@mixedwidth{3} \def\CJKpunct@ps@CCT{4} \def\CJKpunct@ps@plain{5} \AtBeginDocument{\punctstyle{quanjiao}} \def\CJKplainout{\punctstyle{plain}} \let\CJKnormalout\relax \def\CJKpunctsetkern#1#2#3{ \CJKpunct@setplanenumber{#1} \edef\CJKpunct@pna{\CJKpunct@char@pn} \CJKpunct@setplanenumber{#2} \edef\CJKpunct@pnb{\CJKpunct@char@pn} \global\expandafter\edef\csname CJKpunct\CJKpunct@punctstyle @\CJK@enc @\CJKpunct@family @kern\CJKpunct@pna @\CJKpunct@pnb\endcsname{ #3}} \def\CJKpunct@setplanenumber#1{{ \def\CJK@testPrePunct##1##2##3{ \global\edef\CJKpunct@charplane{\CJK@plane} \global\edef\CJKpunct@charnumber{\the\@tempcnta}} \savebox\voidb@x{#1} \global\edef\CJKpunct@char@pn{\CJKpunct@charplane/\CJKpunct@charnumber}}} \def\CJKpunct@punctlist#1{ \CJKpunct@cnta=0\relax \def\CJKpunct@enc{#1} \CJKpunct@setpunctfamilynumber} \def\CJKpunct@setpunctfamilynumber#1,{ \edef\CJKpunct@temp{#1} \ifx\CJKpunct@temp\@empty \def\CJKpunct@temp{} \else \expandafter\def\csname CJKpunct@pn@\CJKpunct@enc @\the\CJKpunct@cnta\endcsname{#1} \advance \CJKpunct@cnta 1\relax \def\CJKpunct@temp{\CJKpunct@setpunctfamilynumber} \fi \CJKpunct@temp} \CJKpunct@punctlist{C70}20/24,20/28,30/12,30/14,30/20,ff/8,ff/59,ff/91,% 30/8,30/10,30/22,30/16,% 20/20,20/38,30/1,30/2,ff/12,ff/14,ff/26,ff/27,ff/1,ff/31,ff/5,30/21,ff/9,% ff/61,ff/93,30/9,30/11,30/23,30/17,20/25,20/29,30/13,30/15,, \CJKpunct@punctlist{C10}01/13,01/15,01/23,01/25,01/17,01/195,01/246,02/22,01/19,% 01/21,01/27,01/29,% 01/9,01/12,01/1,01/2,01/199,01/201,01/213,01/214,01/188,01/218,01/192,01/18,% 01/196,01/248,02/24,01/20,01/22,01/28,01/30,01/14,01/16,01/24,01/26,, \CJKpunct@punctlist{C19}25/45,25/47,25/55,25/57,25/49,26/163,26/214,26/246,25/51,% 25/53,25/59,25/61,% 25/41,25/44,25/33,25/34,26/167,26/169,26/181,26/182,26/156,26/186,26/160,% 25/50,26/164,26/216,26/248,25/52,25/54,25/60,25/62,25/46,25/48,25/56,25/58,, \def\CJKpunct@totalpuncts{35} \ifcsname DeclareUnicodeCharacter\endcsname \DeclareUnicodeCharacter{2018}{\CJKpunct@utfsymbol{"80}{"98}} \DeclareUnicodeCharacter{2019}{\CJKpunct@utfsymbol{"80}{"99}} \DeclareUnicodeCharacter{201C}{\CJKpunct@utfsymbol{"80}{"9C}} \DeclareUnicodeCharacter{201D}{\CJKpunct@utfsymbol{"80}{"9D}} \DeclareUnicodeCharacter{2014}{\CJKpunct@utfsymbol{"80}{"94}} \DeclareUnicodeCharacter{2026}{\CJKpunct@utfsymbol{"80}{"A6}} \fi \def\CJKpunct@utfasymbol#1#2{ \CJK@punctchar{\CJK@uniPunct}{0}{#1}{#2}} \def\CJKpunct@utfbsymbol#1#2{ \ifnum #2=148 \textemdash \else \ifnum #2=166 \textellipsis \else \ifnum #2=152 \textquoteleft \else \ifnum #2=153 \textquoteright \else \ifnum #2=156 \textquotedblleft \else \ifnum #2=157 \textquotedblright \fi \fi \fi \fi \fi \fi} \def\CJKpunct@setspecialpunct#1#2{ \expandafter\def\csname CJKpunct@specialpunct#1#2\endcsname{}} \CJKpunct@setspecialpunct{C70}{20/20} \CJKpunct@setspecialpunct{C70}{20/38} \CJKpunct@setspecialpunct{C19}{25/41} \CJKpunct@setspecialpunct{C19}{25/44} \CJKpunct@setspecialpunct{C10}{01/9} \CJKpunct@setspecialpunct{C10}{01/12} \def\CJKpunct@setkaimingpunct#1#2{ \expandafter\def\csname CJKpunct@kaiming#1#2\endcsname{}} \CJKpunct@setkaimingpunct{C70}{30/02} \CJKpunct@setkaimingpunct{C70}{ff/1} \CJKpunct@setkaimingpunct{C70}{ff/31} \CJKpunct@setkaimingpunct{C19}{25/34} \CJKpunct@setkaimingpunct{C19}{26/156} \CJKpunct@setkaimingpunct{C19}{26/186} \CJKpunct@setkaimingpunct{C10}{01/2} \CJKpunct@setkaimingpunct{C10}{01/188} \CJKpunct@setkaimingpunct{C10}{01/218} \def\CJKpunct@def@spaces{69,18,60,6,63,2,63,3,69,8,69,6,69,1,39,% 37,63,4,56,2,63,5,63,6,6,6,12,11,23,50,24,54,16,71,20,69,12,76,13,% 74,26,61,3,50,3,4,8,69,6,69,2,69,38,39,4,62,2,55,5,62,7,62,16,71,9,% 58,3,62,3,62,,,} \IfFileExists{CJKpunct.spa}{\input{CJKpunct.spa}}{} \endlinechar `\^^M \endinput %% %% End of file `CJKpunct.sty'.