% \iffalse %<*internal> \iffalse % %<*readme> CJKpunct is a LaTeX package for adjust spaces around full-width punctuation. % %<*internal> \fi % % %<*internal> \begingroup % %<*batchfile> \input docstrip.tex \keepsilent \usedir{tex/latex/CJK/CJKpunct} \preamble Version 4.8.1-2 (30-Aug-2008) This is the file CJKpunct.sty for the CJK package Authors: Linbo Zhang (zlb@lsec.cc.ac.cn) Wenchang Sun (sunwch@nankai.edu.cn) \endpreamble \askforoverwritefalse \generate{\file{CJKpunct.sty}{\from{CJKpunct.dtx}{CJKpunct}}} % %\endbatchfile %<*internal> \generate{\file{CJKpunct.ins}{\from{CJKpunct.dtx}{batchfile}}} \nopreamble\nopostamble \generate{\file{README.txt}{\from{\jobname.dtx}{readme}}} \endgroup % % %<*driver> \documentclass[12pt]{ltxdoc} \usepackage{xcolor} \usepackage[bookmarks=true,CJKbookmarks,bookmarksopen=true,dvipdfm,pdfstartview=FitH]{hyperref} \usepackage{CJK} \usepackage{CJKspace} \usepackage{CJKpunct} \textheight 210mm \textwidth 150mm \oddsidemargin 0pt \evensidemargin 0pt % macros {\catcode`\|=0 \catcode`\\=12 |gdef|bslash{\}} \newcommand{\defmacro}[1]{% % Define a macro. \textcolor{macrocolor}{$\backslash$#1}\index{\string\verb+\bslash#1+}% } \newcommand{\usemacro}[1]{% % Define a macro. \textcolor{macrocolor}{\string#1}% #1\index{\string\verb+\string#1+}% } \definecolor{parametercolor}{rgb}{1,0,1} \definecolor{optioncolor}{rgb}{0,0,1} \definecolor{macrocolor}{rgb}{0,0,0.63} \newcommand{\usepmacro}[3][]{% \edef\tempa{#1}% \textcolor{macrocolor}{\string#2}% \string{\textcolor{parametercolor}{#3}\string}% \ifx\tempa\@empty\else (#1)\fi% #2{#3}\index{\string\verb+\string#2+}% } \newenvironment{decl}[1][]% {\par\small\addvspace{4.5ex plus 1ex}% \vskip -\parskip \ifx\relax#1\relax \def\@decl@date{}% \else \def\@decl@date{\NEWfeature{#1}}% \fi \noindent\hspace{-\leftmargini}% \begin{tabular}{|l|}\hline\ignorespaces}% {\\\hline\end{tabular}\nobreak\@decl@date\par\nobreak \vspace{2.3ex}\vskip -\parskip} \renewcommand{\arg}[1]{{\tt\string{}\m{#1}{\tt\string}}} \newcommand{\m}[1]{\mbox{\color{parametercolor}$\langle$\it #1\/$\rangle$}} \EnableCrossrefs \CodelineIndex \RecordChanges \begin{document} \begin{CJK*}{GB}{gbsn} \DocInput{CJKpunct.dtx} \makeatletter \c@IndexColumns = 2 \PrintIndex \newpage \end{CJK*} \end{document} % % %<*CJKpunct> \def\fileversion{4.8.1-2} \def\filedate{2008/08/30} \ProvidesPackage{CJKpunct}[\filedate\space\fileversion] % % % \fi % % \makeatletter ^^A% To document @-cmds % \errorcontextlines=999 ^^A% Show up all my mistakes % % \GetFileInfo{CJKpunct.sty} % % \title{CJKpunct 使用说明} % \author{张林波 \quad 孙文昌} % \date{2008 年 8 月 12 日} % \maketitle % % % \def\CJKpunct{{\textcolor{blue}{\texttt{CJKpunct}}}} % \CJKpunct\ 是一个 \LaTeX\ 宏包, 用于排版中文标点,提供多种标点样式,以实现行末对齐、 % 标点挤压等效果。 其基本方法来自 CCT。 % \section{调用方式} % \parindent 2em % \parskip 5pt % \begin{decl} % \defmacro{usepackage}\{\textcolor{parametercolor}{CJKpunct}\} % \end{decl} % % \section{常用宏命令} % \begin{decl} % \defmacro{punctstyle}\arg{punct style} % \end{decl} % % 设置标点格式,有效值分别为 % % \begin{tabular}{ll} % punct style & \\ % \textcolor{parametercolor}{banjiao} & 半角式 \\ % \textcolor{parametercolor}{quanjiao} & 全角式\\ % \textcolor{parametercolor}{kaiming} & 开明式\\ % \textcolor{parametercolor}{hangmobanjiao}& 行末半角式\\ % \textcolor{parametercolor}{CCT} & CCT 格式\\ % \textcolor{parametercolor}{plain} & CJK 缺省格式 % \end{tabular} % % % 注意:为了得到最好的排版效果,需要制作字体相关的 CJKpunct.spa 文件。请参考 % source/README.txt % % % \begin{decl} % \defmacro{CJKpunctallowbreakbetweenpuncts} \\ % \defmacro{CJKpunctnobreakbetweenpuncts} % \end{decl} % % 缺省状态下,\CJKpunct\ 禁止在相邻的标点间换行(行末半角和 CJK 缺省格式除外)。 使用 % % \defmacro{CJKpunctallowbreakbetweenpuncts}\newline % 改变这一设置。注意:行末半角和 CJK 缺省格式总是允许相邻标点间换行。 % % \begin{decl} % \defmacro{CJKpunctsetkern}\arg{标点1}\arg{标点2}\arg{间距} % \end{decl} % % 设置标点 1 与标点 2 之间的距离。 例如,\defmacro{CJKpunctsetkern}\{:\}\{“\}\{0.4em\} % % \begin{decl} % \defmacro{CJKpunctmapfamily}\arg{font encoding}\arg{font family}\arg{font series}\arg{font shape} % \arg{punct family} % \end{decl} % % 缺省状态下, \CJKpunct\ 根据 CJKfamily 确定当前标点符号的实际字体。 但这对C19com等组合字体 % 不适用。此命令提供一个解决方案:用户可以指定 \arg{font encoding}/ \arg{font family}/ % \arg{font series}/ \arg{font shape} 所对应的标点符号字体。例如,对于C19rm, 可以做如下设置: % % \begin{verbatim} % \CJKpunctmapfamily{C19}{rm}{m}{n}{song} % \CJKpunctmapfamily{C19}{rm}{bx}{n}{hei} % \CJKpunctmapfamily{C19}{rm}{m}{sl}{song} % \CJKpunctmapfamily{C19}{rm}{bx}{sl}{hei} % \CJKpunctmapfamily{C19}{rm}{m}{it}{kai} % \CJKpunctmapfamily{C19}{rm}{bx}{it}{kai} % \end{verbatim} % % \section{制作 CJKpunct.spa 文件} % % 文件 CJKpunct.spa 保存了字体相关的标点符号宽度。制作方法请参考 source/REAME.txt % \StopEventually{} % % % \clearpage % \part{CJKpunct.sty} % % % \iffalse %<*CJKpunct> % \fi % \fontsize{10pt}{10pt}\selectfont % CJKpunct % \begin{macrocode} \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 % \end{macrocode} % % 为使 \CJKpunct\ 起作用,重定义一些 CJK 宏。 % % \begin{macrocode} \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\CJKoglue\CJKglue % \end{macrocode} % % \defmacro{CJKsymbol} 的定义中需要三重括号以保证兼容 CJKfntef 宏包。 % % \begin{macrocode} \let\CJKosymbol\CJKsymbol \def\CJKpunct@CJKsymbol#1{ {{{ \ifnum\CJKpunct@lastkern>0\relax \ifnum\CJKpunct@lastcharclass=0\relax \CJKoglue \else \CJKpunct@ULspecials \fi \fi \CJKosymbol{#1} \gdef\CJKpunct@lastcharclass{0}}}}} \def\CJKpunct@lastcharclass{0} \def\CJKpunct@lastkern{0} % \end{macrocode} % % 标点符号的排版规则: % % \begin{macrocode} \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 \CJKoglue % 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} % \end{macrocode} % % 设置当前 font family. % % \begin{macrocode} \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}} \CJKpunctmapfamily{C19}{rm}{m}{n}{song} \CJKpunctmapfamily{C19}{rm}{bx}{n}{hei} \CJKpunctmapfamily{C19}{rm}{m}{sl}{song} \CJKpunctmapfamily{C19}{rm}{bx}{sl}{hei} \CJKpunctmapfamily{C19}{rm}{m}{it}{kai} \CJKpunctmapfamily{C19}{rm}{bx}{it}{kai} \CJKpunctmapfamily{C19}{com}{m}{n}{song} \CJKpunctmapfamily{C19}{com}{bx}{n}{hei} \CJKpunctmapfamily{C19}{com}{m}{sl}{kai} \CJKpunctmapfamily{C19}{com}{bx}{sl}{kai} \CJKpunctmapfamily{C19}{com}{m}{it}{kai} \CJKpunctmapfamily{C19}{com}{bx}{it}{kai} \CJKpunctmapfamily{C19}{sf}{m}{n}{you} \CJKpunctmapfamily{C19}{sf}{bx}{n}{you} \CJKpunctmapfamily{C19}{sf}{m}{sl}{you} \CJKpunctmapfamily{C19}{sf}{bx}{sl}{you} \CJKpunctmapfamily{C19}{sf}{m}{it}{you} \CJKpunctmapfamily{C19}{sf}{bx}{it}{you} \CJKpunctmapfamily{C19}{tt}{m}{n}{fs} \CJKpunctmapfamily{C19}{tt}{bx}{n}{fs} \CJKpunctmapfamily{C19}{tt}{m}{sl}{fs} \CJKpunctmapfamily{C19}{tt}{bx}{sl}{fs} \CJKpunctmapfamily{C19}{tt}{m}{it}{fs} \CJKpunctmapfamily{C19}{tt}{bx}{it}{fs} % \end{macrocode} % % CJK 缺省标点符号格式 % % \begin{macrocode} \def\CJKpunct@plainpunctsymbol#1#2{ \CJKpunctsymbol{#2}} % \end{macrocode} % % 设置标点符号边界宽度。 % % \begin{macrocode} \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} % \end{macrocode} % % 设置相邻标点之间的距离 % % \begin{macrocode} \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} % \end{macrocode} % % CJKfntef 宏包兼容命令: % % \begin{macrocode} \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} % \end{macrocode} % % 设置相邻标点间是否允许换行(缺省不允许)。 % % \begin{macrocode} \def\CJKpunctallowbreakbetweenpuncts{ \def\CJKpunct@nobreak{ \ifnum\CJKpunct@lastcharclass=2 \hskip 0pt \fi}} \def\CJKpunctnobreakbetweenpuncts{ \let\CJKpunct@nobreak\nobreak} \CJKpunctnobreakbetweenpuncts % \end{macrocode} % % 标点符号样式: % % \begin{macrocode} \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\CJKglue\CJKoglue \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\CJKglue\relax \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 % \end{macrocode} % % 允许用户使用 \defmacro{CJKpunctsetkern} 调整相邻标点之间的距离 % % \begin{macrocode} \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}}} % % 标点符号表, 不能改变顺序!! % pre ‘“「『〔([{〈《〖【 % post —…、。,.:;!?%〕)]}〉》〗】’”」』 % \end{macrocode} % % 设置标点符号所对应 CJKplane 和 字符序号, 与编码有关。 % % \begin{macrocode} \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,, %gb \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,, %gbk \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} % \end{macrocode} % % 恢复 CJKutf8 重定义的引号 % % \begin{macrocode} \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} % \end{macrocode} % % 省略号和破折号: % % \begin{macrocode} \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} % \end{macrocode} % % 开明式中的全角标点。 % % \begin{macrocode} \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} % \end{macrocode} % % 缺省标点符号宽度 % % \begin{macrocode} \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,,,} % \end{macrocode} % % 调入字体相关的设置 % % \begin{macrocode} \IfFileExists{CJKpunct.spa}{\input{CJKpunct.spa}}{} \endlinechar `\^^M % \end{macrocode} % % % % \iffalse % % \fi % % \Finale % % \typeout{*************************************************************} % \typeout{*} % \typeout{* To finish the installation you have to move the following} % \typeout{* files into a directory searched by LaTeX:} % \typeout{*} % \typeout{* \space\space\space CJKpunct.sty} % \typeout{*} % \typeout{*************************************************************} % \Finale \endinput