From 08737a922ed3eda34369dc43d4d033bcf8e10813 Mon Sep 17 00:00:00 2001 From: "Dr. Clea F. Rees" Date: Fri, 7 Aug 2009 00:51:12 +0000 Subject: xecjk new version git-svn-id: svn://tug.org/texlive/trunk@14567 c570f23f-e606-0410-a88d-b1316a301751 --- .../xecjk/examples/example-CJKchecksingle.tex | 6 +- .../xelatex/xecjk/examples/example-CJKfntef.tex | 20 +- .../xelatex/xecjk/examples/example-addspaces.tex | 18 +- Master/texmf-dist/doc/xelatex/xecjk/xeCJK.pdf | Bin 226469 -> 275885 bytes Master/texmf-dist/source/xelatex/xecjk/xeCJK.dtx | 919 ++++++++++----------- Master/texmf-dist/tex/xelatex/xecjk/xeCJK.sty | 690 +++++++++------- 6 files changed, 811 insertions(+), 842 deletions(-) (limited to 'Master/texmf-dist') diff --git a/Master/texmf-dist/doc/xelatex/xecjk/examples/example-CJKchecksingle.tex b/Master/texmf-dist/doc/xelatex/xecjk/examples/example-CJKchecksingle.tex index 686a86b727b..db13d8b5da6 100644 --- a/Master/texmf-dist/doc/xelatex/xecjk/examples/example-CJKchecksingle.tex +++ b/Master/texmf-dist/doc/xelatex/xecjk/examples/example-CJKchecksingle.tex @@ -6,7 +6,7 @@ %% %% xeCJK.dtx (with options: `example-CJKchecksingle') %% -%% Version 2.3.0 (30-June-2009) +%% Version 2.3.5 (2-Aug-2009) %% %% Copyright (C) Wenchang Sun %% @@ -20,7 +20,7 @@ %% \documentclass{article} \usepackage[boldfont,slantfont,CJKaddspaces,CJKchecksingle]{xeCJK} -\setCJKmainfont{Bitstream CyberCJK} +\setCJKmainfont{AR PL SungtiL GB} \textwidth 120mm \oddsidemargin 0pt \def\usemacro#1{\csname#1\endcsname $\backslash$#1} @@ -43,7 +43,7 @@ xeCJK 改进了中英文间距的处理, 并且还可以避免单个汉字独 不用CJKchecksingle的效果: \makeatletter -\let\xeCJK@checksingle\xeCJK@notchecksingle +\def\xeCJK@i@i{\CJKglue\CJKsymbol} \sometexts \end{document} diff --git a/Master/texmf-dist/doc/xelatex/xecjk/examples/example-CJKfntef.tex b/Master/texmf-dist/doc/xelatex/xecjk/examples/example-CJKfntef.tex index 1a471d93491..a53bf000026 100644 --- a/Master/texmf-dist/doc/xelatex/xecjk/examples/example-CJKfntef.tex +++ b/Master/texmf-dist/doc/xelatex/xecjk/examples/example-CJKfntef.tex @@ -6,7 +6,7 @@ %% %% xeCJK.dtx (with options: `example-CJKfntef') %% -%% Version 2.3.0 (30-June-2009) +%% Version 2.3.5 (2-Aug-2009) %% %% Copyright (C) Wenchang Sun %% @@ -29,8 +29,8 @@ \usepackage{CJKfntef} \begin{document} -\setCJKmainfont{Bitstream CyberCJK}% 设置缺省中文字体 -\setCJKmonofont{Bitstream CyberCJK}% 设置缺省中文字体 +\setCJKmainfont{AR PL SungtiL GB}% 设置缺省中文字体 +\setCJKmonofont{AR PL SungtiL GB}% 设置缺省中文字体 \baselineskip 16pt \parindent 2em @@ -40,17 +40,17 @@ 标点。 \end{verbatim} -汉字Chinese数学$x=y$空格 +\CJKunderline{汉字}\CJKunderline{加下划线加下划线加下划线加下划线% +加下划线加下划线加下划线加下划线加下划线加下划线加下划线} -汉字 Chinese 数学 $x=y$ 空格 +\CJKunderwave{波浪线} -\CJKunderline{汉字Chinese数学$x=y$加下划线,可以\CJKunderdot{同时加点}。} +\CJKunderanyline{0.5em}{\sixly \kern-.021em\char58 \kern-.021em}{自定义下划线} -\CJKunderline{汉字 Chinese 数学 $x=y$ 加下划线,可以\CJKunderdot{同时加点}。} +\CJKunderanyline{0.2em}{\kern-.03em\vtop{\kern.2ex\hrule width.2em\kern 0.11em + \hrule height .1em}\kern-.03em}{自定义下划线} -\CJKunderline*{汉字加下划线,可以\CJKunderdot{同时加点}。} - -\CJKunderdot{汉字加点,可以\CJKunderline{同时加下划线}。} +\CJKunderanysymbol{0.2em}{$\cdot$}{汉字加点} \end{document} \endinput diff --git a/Master/texmf-dist/doc/xelatex/xecjk/examples/example-addspaces.tex b/Master/texmf-dist/doc/xelatex/xecjk/examples/example-addspaces.tex index 1aa511bb602..67f9e8f8241 100644 --- a/Master/texmf-dist/doc/xelatex/xecjk/examples/example-addspaces.tex +++ b/Master/texmf-dist/doc/xelatex/xecjk/examples/example-addspaces.tex @@ -6,7 +6,7 @@ %% %% xeCJK.dtx (with options: `example-addspaces') %% -%% Version 2.3.0 (30-June-2009) +%% Version 2.3.5 (2-Aug-2009) %% %% Copyright (C) Wenchang Sun %% @@ -19,12 +19,11 @@ %% version 2005/12/01 or later. %% \documentclass{article} -\usepackage[boldfont,slantfont,CJKaddspaces]{xeCJK} +\usepackage[boldfont,slantfont]{xeCJK} \usepackage{xcolor} -\setCJKmainfont{Bitstream CyberCJK} +\setCJKmainfont{AR PL SungtiL GB} \textwidth 190mm \oddsidemargin 0pt -\def\usemacro#1{\csname#1\endcsname $\backslash$#1} \begin{document} \baselineskip 18pt \parskip 10pt @@ -32,29 +31,22 @@ \long\def\sometexts{\par{\color{\colora} 这是 English 中文 {\itshape Chinese} 中文 \LaTeX\ - 间隔 \textit{Italic} 中文\textbf{字体} a 数学 $b$ $c$ $d$ + 间隔 \textit{Italic} 中文\textbf{字体} a 数学 $b$ 数学 $c$ $d$ \\ 这是English中文{\itshape Chinese}中文\LaTeX\ - 间隔\textit{Italic}中文\textbf{字体}a数学$b$ $c$ $d$\\ + 间隔\textit{Italic}中文\textbf{字体}a数学$b$数学$c$ $d$\\ This is an example. 这是一个例子 }} \def\colora{blue} -\usemacro{CJKaddspaces} \CJKsetecglue{\hskip 0.15em plus 0.05em minus 0.05em} \verb+\CJKsetecglue{\hskip 0.15em plus 0.05em minus 0.05em}+ \sometexts \def\colora{red} -\usemacro{CJKaddspaces} \CJKsetecglue{ } \verb+\CJKsetecglue{ }+ \sometexts - -\def\colora{blue!50!red} -\usemacro{CJKnormalspaces} -\sometexts - \end{document} \endinput diff --git a/Master/texmf-dist/doc/xelatex/xecjk/xeCJK.pdf b/Master/texmf-dist/doc/xelatex/xecjk/xeCJK.pdf index 46382238142..0b13e1a8bda 100644 Binary files a/Master/texmf-dist/doc/xelatex/xecjk/xeCJK.pdf and b/Master/texmf-dist/doc/xelatex/xecjk/xeCJK.pdf differ diff --git a/Master/texmf-dist/source/xelatex/xecjk/xeCJK.dtx b/Master/texmf-dist/source/xelatex/xecjk/xeCJK.dtx index a71a45a66a8..baefa254343 100644 --- a/Master/texmf-dist/source/xelatex/xecjk/xeCJK.dtx +++ b/Master/texmf-dist/source/xelatex/xecjk/xeCJK.dtx @@ -26,7 +26,7 @@ CJK scripts easily. \keepsilent \preamble - Version 2.3.0 (30-June-2009) + Version 2.3.5 (2-Aug-2009) Copyright (C) Wenchang Sun @@ -57,7 +57,7 @@ CJK scripts easily. \documentclass[12pt]{ltxdoc} \usepackage{xcolor} \usepackage[bookmarks=true,bookmarksopen=true,dvipdfm,pdfstartview=FitH]{hyperref} -\usepackage[BoldFont,SlantFont,CJKnumber,CJKaddspaces,CJKchecksingle]{xeCJK} +\usepackage[BoldFont,SlantFont,CJKnumber]{xeCJK} \textheight 210mm \textwidth 150mm \oddsidemargin 0pt @@ -65,7 +65,7 @@ CJK scripts easily. \defaultfontfeatures{Mapping=tex-text} \ifcsname CJKmainfont\endcsname \else - \def\CJKmainfont{Bitstream CyberCJK} + \def\CJKmainfont{AR PL SungtiL GB} \fi \setCJKmainfont{\CJKmainfont}% 设置缺省中文字体 \setCJKmonofont[Scale=1.1]{\CJKmainfont}% 设置 中文字体 @@ -129,8 +129,8 @@ CJK scripts easily. % % %<*xeCJK> -\def\fileversion{2.3.0} -\def\filedate{2009/06/30} +\def\fileversion{2.3.5} +\def\filedate{2009/08/02} \ProvidesPackage{xeCJK}[\filedate\space\fileversion] % % @@ -153,7 +153,7 @@ CJK scripts easily. % \parindent 2em % \parskip 5pt % -% \xeCJK\ 是一个 XeLaTeX 宏包,用于排版 CJK 文字,包括字体选择、标点控制等。主要特点: +% \xeCJK\ 是一个 XeLaTeX 宏包,用于排版 CJK 文字,包括字体选择和标点控制等。主要特点: % \begin{enumerate} % \item 分别设置CJK和英文字体; % \item 自动忽略CJK文字间的空格而保留其它空格,允许在非标点汉字和英文字母 (a-z, A-Z) 间断行; @@ -205,10 +205,6 @@ CJK scripts easily. % BoldFont:& 启用CJK\textbf{粗体字}\\ % SlantFont:& 启用CJK\textit{斜体字}\\ % CJKnumber: & 调用CJKnumb宏包\\ -% CJKaddspaces:& 在中英文之间以及 \\ -% & 中文和行内数学表达式之间根据需要插入空格\\ -% & 并允许设置中英文之间的距离\\ -% CJKnormalspaces: & 忽略中文之间的空格但保留其它空格\\ % CJKchecksingle: &避免单个汉字单独占一行。 % \end{tabular} % @@ -220,7 +216,7 @@ CJK scripts easily. % \defmacro{\setCJKfamilyfont} \arg{family name}[\textcolor{optioncolor} % {}]\arg{font name} % \end{decl} -% 分别设置缺省CJK字体、CJK sffamily、CJK ttfamily 和某个 CJKfamily 所对应中文字体, +% 分别设置缺省CJK字体, CJK sffamily, CJK ttfamily 和某个 CJKfamily 所对应中文字体, % 其中最后两个参数的意义请参考 \verb+\fontspec.+ % % 如果在定义CJK字体时 指定了\texttt{ItalicFont=\{...\}}, @@ -237,12 +233,11 @@ CJK scripts easily. % % \subsection*{例子} % -% 以下命令设置缺省英文字体为 TeX Gyre Termes, 缺省中文字体为 Bitstream CyberCJK (宋体), -% 最后一个命令设置 CJKfamily “song” 为 “AR PL SungtiL GB” -% ({\CJKfamily{song}文鼎 PL简报宋})。 +% 以下命令设置缺省英文字体为 TeX Gyre Termes, 缺省中文字体为 AR PL SungtiL GB (文鼎 PL简报宋), +% 最后一个命令设置 CJKfamily “song”。 % \begin{verbatim} % \setmainfont{TeX Gyre Termes} -% \setCJKmainfont{Bitstream CyberCJK} +% \setCJKmainfont{AR PL SungtiL GB} % \setCJKfamilyfont{song}{AR PL SungtiL GB} % \end{verbatim} % @@ -272,10 +267,10 @@ CJK scripts easily. % % \begin{tabular}{ll} % punct style & \\ -% \textcolor{parametercolor}{banjiao} & 半角式 \\ -% \textcolor{parametercolor}{quanjiao} & 全角式\\ -% \textcolor{parametercolor}{kaiming} & 开明式\\ -% \textcolor{parametercolor}{hangmobanjiao}& 行末半角式\\ +% \textcolor{parametercolor}{banjiao} & 半角式:所有标点占半个汉字宽度。 \\ +% \textcolor{parametercolor}{quanjiao} & 全角式:所有标点占一个汉字宽度,相邻两个标点占1.5汉字宽度。\\ +% \textcolor{parametercolor}{kaiming} & 开明式:句末点号用全角,其他半角。\\ +% \textcolor{parametercolor}{hangmobanjiao}& 行末半角式:所有标点占一个汉字宽度,行首行末对齐。\\ % \textcolor{parametercolor}{CCT} & CCT格式\\ % \textcolor{parametercolor}{plain} & 原样(不调整标点间距) % \end{tabular} @@ -309,29 +304,14 @@ CJK scripts easily. % % % \begin{decl} -% \defmacro{\CJKnormalspaces}\\ -% \defmacro{\CJKaddspaces}\\ % \defmacro{\CJKsetecglue} % \end{decl} % % -% \defmacro{\CJKnormalspaces}: 仅忽略CJK -% 文字之间的空白,但保留中文与英文之间的空白。 -% -% -% \defmacro{\CJKaddspaces}(缺省值): 忽略CJK文字之间的空白, -% 并且自动在中文与英文之间以及中文和行内数学表达式之间插入空白。 -% 允许调整中英文之间的距离。 % % \defmacro{\CJKsetecglue}: 设置中英文间距. 缺省值为\defmacro{\CJKsetecglue\{ \}}。 % -% -% -% 可以在调用宏包时指定 \textcolor{optioncolor}{\ttfamily CJKaddspaces} -% 选项以自动自动在中英文转换时插入空白。 -% 试比较: -% \CJKnormalspaces -% \begin{verbatim} +% \begin{verbatim} % 这是 English 中文 \textit{Chinese} 中文 \LaTeX\ % 中文\textbf{字体} a {\bfseries 数学} $c$ $d$-th\par % 这是English中文\textit{Chinese}中文\LaTeX\ @@ -339,41 +319,20 @@ CJK scripts easily. % \end{verbatim} % % \noindent -% 使用 \usemacro{\CJKnormalspaces} 排版的效果: +% 排版效果: % % 这是 English 中文 \textit{Chinese} 中文 \LaTeX\ % 中文\textbf{字体} a {\bfseries 数学} $c$ $d$-th\par % 这是English中文\textit{Chinese}中文\LaTeX\ % 中文\textbf{字体}a{\bfseries 数学}$c$ $d$-th\par % -% \noindent -% 使用 \usemacro{\CJKaddspaces} 排版的效果: -% -% 这是 English 中文 \textit{Chinese} 中文 \LaTeX\ -% 中文\textbf{字体} a {\bfseries 数学} $c$ $d$-th\par -% 这是English中文\textit{Chinese}中文\LaTeX\ -% 中文\textbf{字体}a{\bfseries 数学}$c$ $d$-th\par -% -% \noindent -% 使用 \usemacro{\CJKaddspaces}\verb+\CJKsetecglue{\hskip 0.15em plus 0.05em minus 0.05em}+ -% \CJKsetecglue{\hskip 0.15em plus 0.05em minus 0.05em} -% 排版的效果: -% -% -% 这是 English 中文 \textit{Chinese} 中文 \LaTeX\ -% 中文\textbf{字体} a {\bfseries 数学} $c$ $d$-th\par -% 这是English中文\textit{Chinese}中文\LaTeX\ -% 中文\textbf{字体}a{\bfseries 数学}$c$ $d$-th\par -% -% \noindent % 说明: % \begin{enumerate} % % \item \verb+{} {}+ 以及\verb+English {}+中间的空格会保留(不能调整), % 但若没有空格,则会根据需要添加(见上面的例子)。 % -% \item 中文与行内数学表达式的间隔控制是通过定义\string\everymath 和\string\everydisplay -% 实现的,有时可能无效, +% 有时可能无效, % 解决方案是手动加空格。 %\end{enumerate} % @@ -419,14 +378,14 @@ CJK scripts easily. % \section{兼容性} % % \subsection{CJKfntef} -% 可以在 \xeCJK\ 包之后调入 CJKfntef 宏包, 以实现对汉字加点、下划线等。 +% 可以在 \xeCJK\ 包之后调入 CJKfntef 宏包, 以实现汉字加点等。 % % \subsection{CJKnumber} % % \verb+\CJKnumber{12345}+: \CJKnumber{12345} % % \subsection{CJK} -% 为了与 CJKnumb, CJKulem 和 CJKfntef 包兼容,\xeCJK\ 重新定义了 CJK 包的部分宏命令,如 +% 为了与 CJKnumb 和 CJKulem 包兼容,\xeCJK\ 重新定义了 CJK 包的部分宏命令,如 % \verb+\CJKfamily+, \verb+\CJKsymbol+, \verb+\CJKpunctsymbol+ 等。 % % 需要指出,\xeCJK\ 包不需要 CJK 包的支持,并且 \xeCJK\ 包自动禁止载入 CJK 包。 @@ -456,7 +415,7 @@ CJK scripts easily. % To use \xeCJK, one need some version of XeTeX after [2008/03/07]. % % \begin{decl} -% \defmacro{usepackage}[\textcolor{optioncolor}{Options}] +% \defmacro{\usepackage}[\textcolor{optioncolor}{Options}] % \{\textcolor{parametercolor}{xeCJK}\} % \end{decl} % @@ -473,32 +432,28 @@ CJK scripts easily. % \\ % CJKnumber: & Load the CJKnumb package. % \\ -% CJKaddspaces:& Add spaces between CJK and other characters if there is not any. -% \\ -% CJKnormalspaces: &Ignore only spaces between CJK characters while leave spaces -% between CJK and other characters as they are. % \end{tabular} % % % % \begin{decl} -% \defmacro{setCJKmainfont} [\textcolor{optioncolor}{}]\arg{font name}\\ -% \defmacro{setCJKsansfont} [\textcolor{optioncolor}{}]\arg{font name}\\ -% \defmacro{setCJKmonofont} [\textcolor{optioncolor}{}]\arg{font name}\\ -% \defmacro{setCJKfamilyfont} \arg{family name}[\textcolor{optioncolor} +% \defmacro{\setCJKmainfont} [\textcolor{optioncolor}{}]\arg{font name}\\ +% \defmacro{\setCJKsansfont} [\textcolor{optioncolor}{}]\arg{font name}\\ +% \defmacro{\setCJKmonofont} [\textcolor{optioncolor}{}]\arg{font name}\\ +% \defmacro{\setCJKfamilyfont} \arg{family name}[\textcolor{optioncolor} % {}]\arg{font name} % \end{decl} % % The first three macros are analogs of % -% \defmacro{setmainfont}, \defmacro{setsansfont}, and \defmacro{setmonofont}, +% \defmacro{\setmainfont}, \defmacro{\setsansfont}, and \defmacro{\setmonofont}, % % \noindent respectively. % The only difference is that they effect only CJK characters. % % The last macro sets a font for a CJK family which will be called by % -% \defmacro{CJKfamily}\arg{family name}. +% \defmacro{\CJKfamily}\arg{family name}. % % With these macros, one can set different default fonts for CJK and other characters, % respectively. @@ -514,7 +469,7 @@ CJK scripts easily. % % % \begin{decl} -% \defmacro{punctstyle}\arg{punct style} +% \defmacro{\punctstyle}\arg{punct style} % \end{decl} % % Set the CJK punctuation style. \xeCJK\ predefines several styles for typesetting full-width punctuation. @@ -538,19 +493,19 @@ CJK scripts easily. % % % \begin{decl} -% \defmacro{xeCJKallowbreakbetweenpuncts} \\ -% \defmacro{xeCJKnobreakbetweenpuncts} +% \defmacro{\xeCJKallowbreakbetweenpuncts} \\ +% \defmacro{\xeCJKnobreakbetweenpuncts} % \end{decl} % % By default, \xeCJK\ prohibits line breaks between punctuation. Use % -% \defmacro{xeCJKallowbreakbetweenpuncts}\newline +% \defmacro{\xeCJKallowbreakbetweenpuncts}\newline % to make it breakable. % % % \begin{decl} -% \defmacro{xeCJKsetslantfactor}\arg{slant factor}\\ -% \defmacro{xeCJKsetemboldenfactor}\arg{embolden factor} +% \defmacro{\xeCJKsetslantfactor}\arg{slant factor}\\ +% \defmacro{\xeCJKsetemboldenfactor}\arg{embolden factor} % \end{decl} % Set slant and embolden factors, respectively. The default settings are % \begin{verbatim} @@ -563,55 +518,12 @@ CJK scripts easily. % % % -% \begin{decl} -% \defmacro{CJKnormalspaces}\\ -% \defmacro{CJKaddspaces}\\ -% \end{decl} -% -% -% -% -% By default, \xeCJK\ leaves spaces between CJK and other characters -% as they are while it ignores spaces between CJK characters. -% One can use \defmacro{CJKaddspaces} to add a space between CJK and -% other characters if a blank space is not present. -% And use \defmacro{CJKnormalspaces} to change to the default. -% -% An example for -% \usemacro{\CJKaddspaces} \CJKsetecglue{ } -% -% The input -% \begin{verbatim} -% 这是 English 中文 \textit{Chinese} 中文 \LaTeX\ -% 中文\textbf{字体} a {\bfseries 数学} $c$ $d$-th\par -% 这是English中文\textit{Chinese}中文\LaTeX\ -% 中文\textbf{字体}a{\bfseries 数学}$c$ $d$-th\par -% \end{verbatim} -% -% The output -% -% { -% \color{blue} -% 这是 English 中文 \textit{Chinese} 中文 \LaTeX\ -% 中文\textbf{字体} a {\bfseries 数学} $c$ $d$-th\par -% 这是English中文\textit{Chinese}中文\LaTeX\ -% 中文\textbf{字体}a{\bfseries 数学}$c$ $d$-th\par -% } % % \section{Compatibility} % -% \subsection{CJKfntef} -% -% Load \verb+CJKfntef+ after \verb+xeCJK+ to get various effects on CJK characters. -% -% \subsection{CJKnumber} -% -% To use the package \verb+CJKnumb+, one can specify the option [CJKnumber] while loading \xeCJK. -% -% % \subsection{CJK} -% To be compatible with some CJK-related packages \texttt{CJKnumb}, -% \texttt{CJKfntef} and \texttt{CJKulem}, \xeCJK\ re-defines some macros in the package \texttt{CJK} +% To be compatible with some CJK-related packages \texttt{CJKnumb} +% and \texttt{CJKulem}, \xeCJK\ re-defines some macros in the package \texttt{CJK} % and it is not compatible with the later. % In fact, \xeCJK\ prevents automatically from loading \texttt{CJK} after \xeCJK. % \StopEventually{} @@ -632,7 +544,6 @@ CJK scripts easily. % 禁止在\xeCJK\ 之后调入CJK包。 % \begin{macrocode} \expandafter\def\csname ver@CJK.sty\endcsname{2020/01/01} -\RequirePackage{fontspec} \newif\ifxeCJK@SlantFont@ \xeCJK@SlantFont@false @@ -643,12 +554,6 @@ CJK scripts easily. \newif\ifxeCJK@num \xeCJK@numfalse -\newif\ifxeCJK@indisplay -\xeCJK@indisplayfalse - -\newif\ifxeCJK@addspaces -\xeCJK@addspacesfalse - \newif\ifxeCJK@checksingle \xeCJK@checksinglefalse @@ -657,15 +562,18 @@ CJK scripts easily. \DeclareOption{slantfont}{\xeCJK@SlantFont@true} \DeclareOption{SlantFont}{\ExecuteOptions{slantfont}} \DeclareOption{CJKnumber}{\xeCJK@numtrue} -\DeclareOption{CJKnormalspaces}{\xeCJK@addspacesfalse} -\DeclareOption{CJKaddspaces}{\xeCJK@addspacestrue} +\DeclareOption{CJKnormalspaces}{} +\DeclareOption{CJKaddspaces}{} \DeclareOption{CJKtextspaces}{} \DeclareOption{CJKmathspaces}{} \DeclareOption{CJKsetspaces}{} \DeclareOption{CJKnospaces}{} -\DeclareOption{CJKchecksingle}{\xeCJK@checksingletrue} -\ExecuteOptions{CJKaddspaces}\relax +\DeclareOption{CJKchecksingle}{\AtEndOfPackage{\let\xeCJK@i@i\xeCJK@checksingle}} +\DeclareOption*{\PassOptionsToPackage{\CurrentOption}{fontspec}} \ProcessOptions\relax + +\RequirePackage{fontspec} +\relax % \end{macrocode} % 抑制换行符产生的空格 % \begin{macrocode} @@ -679,7 +587,6 @@ CJK scripts easily. \@tempcnta=#1 \loop \XeTeXcharclass \@tempcnta #3\relax - \catcode\@tempcnta=11\relax \advance\@tempcnta 1\relax \ifnum\the\@tempcnta<#2 \repeat \xeCJK@setpunctcharclass} @@ -724,47 +631,295 @@ CJK scripts easily. \xeCJKsetcharclass{"2000}{"FFFF}{1} -\XeTeXinterchartoks 0 255 {\xeCJK@@cclv} -\XeTeXinterchartoks 0 1 {\xeCJK@@i\xeCJK@char} -\XeTeXinterchartoks 4 1 {\xeCJK@char} -\XeTeXinterchartoks 5 1 {\xeCJK@v@i\xeCJK@char} -\XeTeXinterchartoks 255 1 {\xeCJK@checksingle} +% \end{macrocode} +% +% \section{字符输出规则} +% \begin{macrocode} +\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} + +\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} -\XeTeXinterchartoks 0 2 {\xeCJK@prepunctchar} -\XeTeXinterchartoks 4 2 {\xeCJK@prepunctchar} -\XeTeXinterchartoks 5 2 {\xeCJK@prepunctchar} -\XeTeXinterchartoks 255 2 {\xeCJK@prepunctchar} +\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 -\XeTeXinterchartoks 0 3 {\xeCJK@postpunctchar} -\XeTeXinterchartoks 4 3 {\xeCJK@postpunctchar} -\XeTeXinterchartoks 5 3 {\xeCJK@postpunctchar} -\XeTeXinterchartoks 255 3 {\xeCJK@postpunctchar} +\def\xeCJK@iii@cclv{ + \xeCJK@afterpostpunct + \egroup + \expandafter\xeCJK@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} -\XeTeXinterchartoks 255 0 {\xeCJK@cclv@} -\XeTeXinterchartoks 255 4 {\xeCJK@cclv@iv} +\def\xeCJK@zz@cclv{ + \ifx\xeCJK@nexttoken\@sptoken + \else + {\xeCJK@zerokern} + \fi} + +\let\xeCJK@v@cclv\xeCJK@@cclv + +\def\xeCJK@cclv@{ + \ifnum\lastkern=\@ne + \CJKecglue + \fi} +\let\xeCJK@cclv@iv\xeCJK@cclv@ + +\def\xeCJK@cclv@i{{ + \ifnum\lastkern=\@ne + \CJKglue + \else + \ifnum\lastkern=\xeCJK@four + \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@postpunctkern{\kern -3sp\kern 3sp} \edef\xeCJK@zerokern{\kern -4sp\kern 4sp} -\newif\if@xeCJK@inmath -\@xeCJK@inmathfalse +\chardef\xeCJK@four=4 +\chardef\xeCJK@ten=10 -\newif\if@xeCJK -% \end{macrocode} -% \section{调整中英文间隔} -% \verb+\CJKaddspaces+ 和 \verb+\CJKnormalspaces+ 公用宏命令 -% \begin{macrocode} \def\xeCJK@ignorespaces{ \futurelet\xeCJK@nexttoken\xeCJK@checknext} -\def\xeCJK@n@checknext{ +\def\xeCJK@checknext{ \ifx\xeCJK@nexttoken\@sptoken \expandafter\xeCJK@@checknext + \else + \ifx $\xeCJK@nexttoken + \CJKecglue + \fi \fi} { @@ -775,11 +930,10 @@ CJK scripts easily. \def\CJK@stop{\CJK@stop} \def\xeCJK@@@checknext{ - \ifcat L\noexpand\@let@token - \else - \let\xeCJK@nexttoken\relax + \ifx $\@let@token \CJKecglue - \fi} + \fi + \let\xeCJK@nexttoken\relax} \long\def\xeCJK@gobble#1\CJK@stop{} @@ -788,23 +942,16 @@ CJK scripts easily. % 避免单个汉字占一行。 % \begin{macrocode} -\def\xeCJK@notchecksingle{ - \xeCJK@cclv@i - \xeCJK@char} - -\def\xeCJK@z@checksingle#1{ +\def\xeCJK@checksingle#1{ \def\xeCJK@setcurrentchar@i{ - \xeCJK@cclv@i - \xeCJK@char{#1}} + \CJKglue + \CJKsymbol{#1}} \def\xeCJK@setcurrentnobreakchar@i{ - \xeCJK@char{#1}} + \CJKsymbol{#1}} \futurelet\@let@token\xeCJK@@checksingle} \def\xeCJK@@checksingle{ - \expandafter\futurelet - \expandafter\xeCJK@tempb - \expandafter\xeCJK@gobble\meaning\@let@token\CJK@stop - \if t\xeCJK@tempb + \ifcat 。\@let@token \expandafter\xeCJK@@@checksingle \else \expandafter\xeCJK@setcurrentchar@i @@ -828,262 +975,28 @@ CJK scripts easily. \@ifnextchar\par{\xeCJK@setcurrentnobreakchar@ii}{\xeCJK@setcurrentchar@ii}} % \end{macrocode} % -% 在中英文转换时插入空格,并调整中英文间距。 -% \begin{macrocode} - -\def\xeCJK@doaftermath{ - \futurelet\xeCJK@nexttoken\xeCJK@aftermath} - -\def\xeCJK@z@cclv{\futurelet\xeCJK@nexttoken\xeCJK@zz@cclv} - -\def\xeCJK@zz@cclv{ - \ifx\xeCJK@nexttoken\@sptoken - \expandafter\xeCJK@zzz@cclv - \else - {\xeCJK@zerokern} - \fi} - -{ - \def\:{\xeCJK@zzz@cclv} - \global\expandafter\def\: {\futurelet\@let@token\xeCJK@zzzz@cclv} -} - -\def\xeCJK@zzzz@cclv{ - \ifcat L\noexpand\@let@token - \expandafter\xeCJK@zzzzz@cclv - \else - \xeCJK@space - \fi} - -\def\xeCJK@zzzzz@cclv#1{ - \ifnum`#1>"FF\relax - \CJKecglue - \else - \xeCJK@space - \fi - #1} - -\def\xeCJK@space{ } - -\def\xeCJK@z@checknext{ - \ifx\xeCJK@nexttoken\@sptoken - \expandafter\xeCJK@@checknext - \else - \ifx $\xeCJK@nexttoken - \CJKecglue - \fi - \fi} - -\def\CJKaddspaces{ - \let\xeCJK@@cclv\xeCJK@z@cclv - \let\CJKecglue\CJK@ecglue - \let\xeCJK@@i\CJKecglue - \let\xeCJK@v@i\CJKecglue - - \def\xeCJK@cclv@{ - \ifnum\lastkern=1\relax - \CJKecglue - \fi} - \let\xeCJK@cclv@iv\xeCJK@cclv@ - - \def\xeCJK@cclv@i{{ - \ifcase\lastkern - \hskip 0pt - \or %1 - \CJKglue - \or %2 - \xeCJK@ULspecials - \or %3 - \xeCJK@ULspecials - \or %4 - \CJKecglue - \fi}} - - \everymath{\ifxeCJK@indisplay\else\aftergroup\xeCJK@doaftermath\fi} - \everydisplay{\xeCJK@indisplaytrue} - \let\xeCJK@checknext\xeCJK@z@checknext - \let\xeCJK@aftermath\xeCJK@zz@cclv} - -% \end{macrocode} -% \subsection{CJKnormalspaces} -% 保留中英文之间的空格但不增加额外的空格 +% 设置中英文间距。 % \begin{macrocode} -\def\CJKnormalspaces{ - \let\xeCJK@@cclv\relax - \let\xeCJK@@i\relax - \let\xeCJK@v@i\relax - \let\xeCJK@checknext\xeCJK@n@checknext - \def\CJKecglue{ } - - \def\xeCJK@cclv@{ - \ifodd\lastkern - \xeCJK@@glue - \fi} - \let\xeCJK@cclv@iv\xeCJK@cclv@ - - \def\xeCJK@cclv@i{{ - \ifcase\lastkern - \hskip 0pt - \or %1 - \CJKglue - \or %2 - \xeCJK@ULspecials - \or %3 - \xeCJK@ULspecials - \fi}} - - \def\xeCJK@@glue{ - \ifx\xeCJK@nexttoken\@sptoken - { } - \fi - \let\xeCJK@nexttoken\relax} - \everymath{} - \everydisplay{}} -% \end{macrocode} -% \subsection{初始化} -% \begin{macrocode} - -\def\xeCJK@setspacemode{ - \ifxeCJK@addspaces - \CJKaddspaces - \else - \CJKnormalspaces - \fi - \ifxeCJK@checksingle - \let\xeCJK@checksingle\xeCJK@z@checksingle - \else - \let\xeCJK@checksingle\xeCJK@notchecksingle - \fi} - -\def\CJK@ecglue{ } \def\xeCJKsetecglue#1{ - \ifxeCJK@addspaces \def\CJK@ecglue{#1} - \let\CJKecglue\CJK@ecglue - \let\xeCJK@@i\CJKecglue - \let\xeCJK@v@i\CJKecglue - \fi} + \let\CJKecglue\CJK@ecglue} \let\CJKsetecglue\xeCJKsetecglue -\CJKaddspaces - -\AtBeginDocument{ - \xeCJK@setspacemode - \ifcsname UL@hook\endcsname - \addto@hook\UL@hook{ - \let\xeCJK@unskip\xeCJK@UL@unskip - \let\xeCJK@ULspecials\xeCJK@UL@punctgroup} - \fi} -% \end{macrocode} -% -% \section{字符输出命令} -% 普通字符 -% \begin{macrocode} -\DeclareRobustCommand{\xeCJK@char}[1]{ - {\XeTeXinterchartokenstate=0 - \CJKsymbol{#1} - \xeCJK@CJKkern} - \xeCJK@ignorespaces} -% \end{macrocode} -% -% 左标点如‘“「『〔([{〈《〖【 -% \begin{macrocode} -\DeclareRobustCommand{\xeCJK@prepunctchar}[1]{ - {\xeCJK@punctrule{#1}{l} - \@xeCJKfalse - \ifnum\lastkern>1\relax - \ifnum\lastkern<4\relax - \unkern - \unkern - \ifnum\xeCJK@punctstyle>0\relax - \@xeCJKtrue - \fi - \fi - \fi - \if@xeCJK - \xeCJK@unskip - \xeCJK@setkern{\@xeCJK@lastpunct}{#1} - \kern \csname xeCJK\xeCJK@punctstyle\xeCJK@bboxname @kern\@xeCJK@lastpunct#1\endcsname - \xeCJKpunctnobreak - \else - \xeCJK@ULspecials - \hskip \csname xeCJK\xeCJK@punctstyle\xeCJK@bboxname @lglue@#1\endcsname - plus 0.1em minus 0.1 em - \fi - - \global\edef\@xeCJK@lastpunct{#1} - \vrule width \csname xeCJK\xeCJK@punctstyle\xeCJK@bboxname - @lrule@#1\endcsname depth \z@ height \z@ - - \XeTeXinterchartokenstate=0 - \CJKpunctsymbol{#1} - - \nobreak - \gdef\xeCJK@lastcharclass{2} - \xeCJK@prepunctkern} - \ignorespaces} -% \end{macrocode} -% -% 右标点如 ─—…、。,.:;!?%〕)]}〉》〗】’”」』 -% \begin{macrocode} -\DeclareRobustCommand{\xeCJK@postpunctchar}[1]{ - {\xeCJK@punctrule{#1}{r} - \@xeCJKfalse - \ifnum\lastkern>1\relax - \ifnum\lastkern<4\relax - \unkern - \unkern - \@xeCJKtrue - \fi - \fi - \if@xeCJK - \xeCJK@unskip - \xeCJK@setkern{\@xeCJK@lastpunct}{#1} - \kern \csname xeCJK\xeCJK@punctstyle\xeCJK@bboxname - @kern\@xeCJK@lastpunct#1\endcsname - \nobreak - \else - \xeCJK@ULspecials - \ifcsname xeCJK@specialpunct#1\endcsname - \CJKglue % breakable - \else - \nobreak - \fi - \fi - \global\edef\@xeCJK@lastpunct{#1} - - \XeTeXinterchartokenstate=0 - \CJKpunctsymbol{#1} - - \vrule width \csname xeCJK\xeCJK@punctstyle\xeCJK@bboxname - @rrule@#1\endcsname depth \z@ height \z@ - - \hskip \csname xeCJK\xeCJK@punctstyle\xeCJK@bboxname @rglue@#1\endcsname - plus 0.1em minus 0.1 em +\CJKsetecglue{ } - \gdef\xeCJK@lastcharclass{3} - \xeCJK@postpunctkern} - \xeCJK@ignorespaces} -\let\xeCJK@unskip\unskip -\def\xeCJK@UL@unskip{ - \ifcsname xeCJK\xeCJK@punctstyle\xeCJK@bboxname @rglue@\@xeCJK@lastpunct\endcsname - \hskip -\csname xeCJK\xeCJK@punctstyle\xeCJK@bboxname - @rglue@\@xeCJK@lastpunct\endcsname\relax - \fi} % \end{macrocode} % % 缺省状态下,不允许在相邻标点中间换行。 % \begin{macrocode} \def\xeCJKallowbreakbetweenpuncts{ \def\xeCJKpunctnobreak{ - \ifnum\xeCJK@lastcharclass=3 - \hskip 0pt - \fi}} + \hskip 0pt}} \def\xeCJKnobreakbetweenpuncts{ \let\xeCJKpunctnobreak\nobreak} \xeCJKnobreakbetweenpuncts + % \end{macrocode} % \section{标点挤压规则} % \begin{macrocode} @@ -1096,38 +1009,25 @@ CJK scripts easily. \newif\ifxeCJK@dokerning \def\xeCJK@punctrule#1#2{ - \ifcsname xeCJK@bbox\xeCJK@family/\f@series/\f@shape\endcsname - \global\edef\xeCJK@bboxname{ - \csname xeCJK@bbox\xeCJK@family/\f@series/\f@shape\endcsname} - \else - \xeCJK@getbboxname - \global\expandafter\edef\csname - xeCJK@bbox\xeCJK@family/\f@series/\f@shape\endcsname{\xeCJK@bboxname} - \fi - \ifcsname xeCJK@\xeCJK@bboxname @lspace@#1\endcsname - \else - {\xeCJK@setfont - \xeCJK@setpunctbounds{#1}} - \fi + \xdef\xeCJK@bboxname{\xeCJK@family/\f@series/\f@shape} % \end{macrocode} % -% 如果 punctstyle$=$plain, 或者标点符号的两侧空白大小没有定义时,不作特殊处理 +% 如果 punctstyle$=$plain 不作特殊处理 % % \begin{macrocode} \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 - \else - \ifcsname xeCJK@\xeCJK@bboxname @#2space@#1\endcsname - \else - \typeout{....Something is wrong with ...xeCJK@\xeCJK@bboxname @#2space@.....} - \xeCJK@dokerningfalse - \fi \fi \fi \ifxeCJK@dokerning @@ -1182,19 +1082,6 @@ CJK scripts easily. \edef\xeCJK@temp{\xeCJK@temp.\the\xeCJK@cnte} \fi} -\def\xeCJK@getbboxname{ - {\csname xeCJK@font@\xeCJK@family\endcsname - \get@external@font - \global\let\xeCJK@tempx\external@font} - \expandafter\xeCJK@@getbboxname\xeCJK@tempx\relax - \global\expandafter\edef\csname - xeCJK@bbox\xeCJK@family/\f@series/\f@shape\endcsname{\xeCJK@bboxname}} - -\def\xeCJK@@getbboxname"#1/#2"#3\relax{ - \edef\xeCJK@temp{\zap@space #1 \@empty} - \edef\xeCJK@temp{\lowercase{\gdef\noexpand\xeCJK@bboxname{\xeCJK@temp}}} - \xeCJK@temp} - \expandafter\def\csname xeCJK@kaiming。\endcsname{} \expandafter\def\csname xeCJK@kaiming?\endcsname{} \expandafter\def\csname xeCJK@kaiming!\endcsname{} @@ -1239,7 +1126,7 @@ CJK scripts easily. % 用户命令:设置两个标点之间的间距 % \begin{macrocode} \def\xeCJKsetkern#1#2#3{ - \xeCJK@getbboxname + \xdef\xeCJK@bboxname{\xeCJK@family/\f@series/\f@shape} \global\expandafter\edef\csname xeCJK\xeCJK@punctstyle\xeCJK@bboxname @kern#1#2\endcsname{#3}} @@ -1297,8 +1184,11 @@ CJK scripts easily. \else \xeCJK@cnta=\number\XeTeXglyphbounds 1 \xeCJK@gid \advance\xeCJK@cnta\number\XeTeXglyphbounds 3 \xeCJK@gid - \advance\xeCJK@cnta 1000\relax - \divide\xeCJK@cnta 6554\relax + \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 @@ -1317,11 +1207,56 @@ CJK scripts easily. \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 + % \end{macrocode} % \section{字体设置} % \begin{macrocode} -\def\CJKsymbol#1{{\xeCJK@setfont #1}} -\def\CJKpunctsymbol#1{{\xeCJK@setfont #1}} +\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 @@ -1506,7 +1441,8 @@ CJK scripts easily. \expandafter \newfontfamily@i\csname xeCJK@font@#1\expandafter\endcsname \xeCJK@Features - {#3}} + {#3} + \expandafter\edef\csname xeCJK@nsff\xeCJK@family\endcsname{\zf@family}} \def\xeCJK@setmacro@getkey#1{ \expandafter\def\csname xeCJK@get#1\endcsname ##1#1=##2##3\relax{ @@ -1527,13 +1463,31 @@ CJK scripts easily. \edef\zf@it@feat{,#1} \edef\zf@family@long{\zf@family@long itfeat:#1}} +\newcount\xeCJK@featureadded +\xeCJK@featureadded=0 + +\let\xeCJK@addfontfeatures\addfontfeatures +\def\addfontfeatures#1{ + \global\advance\xeCJK@featureadded\@ne + \xeCJK@addfontfeatures{#1} + \ifcsname xeCJK@family\endcsname + \edef\xeCJK@temp{\csname xeCJK@nsff\xeCJK@family\endcsname} + \edef\xeCJK@Features{[\csname zf@family@options\xeCJK@temp\endcsname,#1]} + \expandafter + \newfontfamily@i\csname xeCJK@font@\xeCJK@family @\the\xeCJK@featureadded\expandafter\endcsname + \xeCJK@Features + {\csname zf@family@fontname\xeCJK@temp\endcsname} + \expandafter\edef\csname xeCJK@nsff\xeCJK@family @\the\xeCJK@featureadded\endcsname{\zf@family} + \CJKfamily{\xeCJK@family @\the\xeCJK@featureadded} + \fi} + % redefine \CJKfamily. \def\xeCJK@font@rm{} \DeclareRobustCommand\CJKfamily[1]{ \ifcsname xeCJK@font@#1\endcsname - \def\xeCJK@family{#1} + \edef\xeCJK@family{#1} \else \ifcsname xeCJK@#1@warned\endcsname \else @@ -1551,20 +1505,9 @@ CJK scripts easily. \xeCJKsetslantfactor{0.17} \xeCJKsetemboldenfactor{4} % \end{macrocode} -% \section{使用CJKfntef和CJKnumb宏包} +% \section{使用CJKnumb宏包} % \begin{macrocode} % -\@ifundefined{UL@hskip}{\let\UL@hskip\relax}{} - -\let\xeCJK@ULspecials\relax - -\def\xeCJK@UL@punctgroup{ - \ifx\hskip\UL@hskip - \egroup - \UL@stop - \UL@start - \bgroup - \fi} \ifxeCJK@num @@ -1600,11 +1543,7 @@ CJK scripts easily. \input{#2.cpx} \makeatother \XeTeXdefaultencoding "UTF-8"} -% \end{macrocode} -% 不再使用的旧版本命令 -% \begin{macrocode} -\def\CJKlanguage#1{} \endlinechar `\^^M \catcode "FEFF=9\relax % \end{macrocode} @@ -1614,6 +1553,7 @@ CJK scripts easily. % \iffalse % % +% %<*example-addspaces> % \fi % @@ -1621,12 +1561,11 @@ CJK scripts easily. % \part{example-addspaces.tex} % \begin{macrocode} \documentclass{article} -\usepackage[boldfont,slantfont,CJKaddspaces]{xeCJK} +\usepackage[boldfont,slantfont]{xeCJK} \usepackage{xcolor} -\setCJKmainfont{Bitstream CyberCJK} +\setCJKmainfont{AR PL SungtiL GB} \textwidth 190mm \oddsidemargin 0pt -\def\usemacro#1{\csname#1\endcsname $\backslash$#1} \begin{document} \baselineskip 18pt \parskip 10pt @@ -1634,30 +1573,22 @@ CJK scripts easily. \long\def\sometexts{\par{\color{\colora} 这是 English 中文 {\itshape Chinese} 中文 \LaTeX\ - 间隔 \textit{Italic} 中文\textbf{字体} a 数学 $b$ $c$ $d$ + 间隔 \textit{Italic} 中文\textbf{字体} a 数学 $b$ 数学 $c$ $d$ \\ 这是English中文{\itshape Chinese}中文\LaTeX\ - 间隔\textit{Italic}中文\textbf{字体}a数学$b$ $c$ $d$\\ + 间隔\textit{Italic}中文\textbf{字体}a数学$b$数学$c$ $d$\\ This is an example. 这是一个例子 }} \def\colora{blue} -\usemacro{CJKaddspaces} \CJKsetecglue{\hskip 0.15em plus 0.05em minus 0.05em} \verb+\CJKsetecglue{\hskip 0.15em plus 0.05em minus 0.05em}+ \sometexts \def\colora{red} -\usemacro{CJKaddspaces} \CJKsetecglue{ } \verb+\CJKsetecglue{ }+ \sometexts - -\def\colora{blue!50!red} -\usemacro{CJKnormalspaces} -\sometexts - - \end{document} % \end{macrocode} @@ -1671,7 +1602,7 @@ This is an example. 这是一个例子 % \begin{macrocode} \documentclass{article} \usepackage[boldfont,slantfont,CJKaddspaces,CJKchecksingle]{xeCJK} -\setCJKmainfont{Bitstream CyberCJK} +\setCJKmainfont{AR PL SungtiL GB} \textwidth 120mm \oddsidemargin 0pt \def\usemacro#1{\csname#1\endcsname $\backslash$#1} @@ -1694,7 +1625,7 @@ xeCJK 改进了中英文间距的处理, 并且还可以避免单个汉字独 不用CJKchecksingle的效果: \makeatletter -\let\xeCJK@checksingle\xeCJK@notchecksingle +\def\xeCJK@i@i{\CJKglue\CJKsymbol} \sometexts \end{document} @@ -1718,8 +1649,8 @@ xeCJK 改进了中英文间距的处理, 并且还可以避免单个汉字独 \usepackage{CJKfntef} \begin{document} -\setCJKmainfont{Bitstream CyberCJK}% 设置缺省中文字体 -\setCJKmonofont{Bitstream CyberCJK}% 设置缺省中文字体 +\setCJKmainfont{AR PL SungtiL GB}% 设置缺省中文字体 +\setCJKmonofont{AR PL SungtiL GB}% 设置缺省中文字体 \baselineskip 16pt \parindent 2em @@ -1729,20 +1660,18 @@ xeCJK 改进了中英文间距的处理, 并且还可以避免单个汉字独 标点。 \end{verbatim} +\CJKunderline{汉字}\CJKunderline{加下划线加下划线加下划线加下划线% +加下划线加下划线加下划线加下划线加下划线加下划线加下划线} -汉字Chinese数学$x=y$空格 - -汉字 Chinese 数学 $x=y$ 空格 - -\CJKunderline{汉字Chinese数学$x=y$加下划线,可以\CJKunderdot{同时加点}。} - -\CJKunderline{汉字 Chinese 数学 $x=y$ 加下划线,可以\CJKunderdot{同时加点}。} +\CJKunderwave{波浪线} -\CJKunderline*{汉字加下划线,可以\CJKunderdot{同时加点}。} +\CJKunderanyline{0.5em}{\sixly \kern-.021em\char58 \kern-.021em}{自定义下划线} -\CJKunderdot{汉字加点,可以\CJKunderline{同时加下划线}。} +\CJKunderanyline{0.2em}{\kern-.03em\vtop{\kern.2ex\hrule width.2em\kern 0.11em + \hrule height .1em}\kern-.03em}{自定义下划线} +\CJKunderanysymbol{0.2em}{$\cdot$}{汉字加点} \end{document} % \end{macrocode} diff --git a/Master/texmf-dist/tex/xelatex/xecjk/xeCJK.sty b/Master/texmf-dist/tex/xelatex/xecjk/xeCJK.sty index 6ad85be95c9..e0244c40305 100644 --- a/Master/texmf-dist/tex/xelatex/xecjk/xeCJK.sty +++ b/Master/texmf-dist/tex/xelatex/xecjk/xeCJK.sty @@ -6,7 +6,7 @@ %% %% xeCJK.dtx (with options: `xeCJK') %% -%% Version 2.3.0 (30-June-2009) +%% Version 2.3.5 (2-Aug-2009) %% %% Copyright (C) Wenchang Sun %% @@ -18,13 +18,12 @@ %% and version 1.3 or later is part of all distributions of LaTeX %% version 2005/12/01 or later. %% -\def\fileversion{2.3.0} -\def\filedate{2009/06/30} +\def\fileversion{2.3.5} +\def\filedate{2009/08/02} \ProvidesPackage{xeCJK}[\filedate\space\fileversion] \RequirePackage{ifxetex} \RequireXeTeX \expandafter\def\csname ver@CJK.sty\endcsname{2020/01/01} -\RequirePackage{fontspec} \newif\ifxeCJK@SlantFont@ \xeCJK@SlantFont@false @@ -35,12 +34,6 @@ \newif\ifxeCJK@num \xeCJK@numfalse -\newif\ifxeCJK@indisplay -\xeCJK@indisplayfalse - -\newif\ifxeCJK@addspaces -\xeCJK@addspacesfalse - \newif\ifxeCJK@checksingle \xeCJK@checksinglefalse @@ -49,15 +42,18 @@ \DeclareOption{slantfont}{\xeCJK@SlantFont@true} \DeclareOption{SlantFont}{\ExecuteOptions{slantfont}} \DeclareOption{CJKnumber}{\xeCJK@numtrue} -\DeclareOption{CJKnormalspaces}{\xeCJK@addspacesfalse} -\DeclareOption{CJKaddspaces}{\xeCJK@addspacestrue} +\DeclareOption{CJKnormalspaces}{} +\DeclareOption{CJKaddspaces}{} \DeclareOption{CJKtextspaces}{} \DeclareOption{CJKmathspaces}{} \DeclareOption{CJKsetspaces}{} \DeclareOption{CJKnospaces}{} -\DeclareOption{CJKchecksingle}{\xeCJK@checksingletrue} -\ExecuteOptions{CJKaddspaces}\relax +\DeclareOption{CJKchecksingle}{\AtEndOfPackage{\let\xeCJK@i@i\xeCJK@checksingle}} +\DeclareOption*{\PassOptionsToPackage{\CurrentOption}{fontspec}} \ProcessOptions\relax + +\RequirePackage{fontspec} +\relax \endlinechar \m@ne \XeTeXinterchartokenstate=1\relax @@ -65,7 +61,6 @@ \@tempcnta=#1 \loop \XeTeXcharclass \@tempcnta #3\relax - \catcode\@tempcnta=11\relax \advance\@tempcnta 1\relax \ifnum\the\@tempcnta<#2 \repeat \xeCJK@setpunctcharclass} @@ -110,43 +105,291 @@ \xeCJKsetcharclass{"2000}{"FFFF}{1} -\XeTeXinterchartoks 0 255 {\xeCJK@@cclv} -\XeTeXinterchartoks 0 1 {\xeCJK@@i\xeCJK@char} -\XeTeXinterchartoks 4 1 {\xeCJK@char} -\XeTeXinterchartoks 5 1 {\xeCJK@v@i\xeCJK@char} -\XeTeXinterchartoks 255 1 {\xeCJK@checksingle} +\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} + +\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 + \expandafter\xeCJK@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 + \CJKecglue + \fi} +\let\xeCJK@cclv@iv\xeCJK@cclv@ + +\def\xeCJK@cclv@i{{ + \ifnum\lastkern=\@ne + \CJKglue + \else + \ifnum\lastkern=\xeCJK@four + \CJKecglue + \else + \ifnum\lastnodetype=\xeCJK@ten + \CJKecglue + \fi + \fi + \fi} + \bgroup -\XeTeXinterchartoks 0 2 {\xeCJK@prepunctchar} -\XeTeXinterchartoks 4 2 {\xeCJK@prepunctchar} -\XeTeXinterchartoks 5 2 {\xeCJK@prepunctchar} -\XeTeXinterchartoks 255 2 {\xeCJK@prepunctchar} + \xeCJK@emptyCJKtoks + \xeCJK@setfont + \CJKsymbol} -\XeTeXinterchartoks 0 3 {\xeCJK@postpunctchar} -\XeTeXinterchartoks 4 3 {\xeCJK@postpunctchar} -\XeTeXinterchartoks 5 3 {\xeCJK@postpunctchar} -\XeTeXinterchartoks 255 3 {\xeCJK@postpunctchar} +\def\xeCJK@cclv@ii{ + \bgroup + \xeCJK@emptyCJKtoks + \xeCJK@setfont + \xeCJK@i@ii} -\XeTeXinterchartoks 255 0 {\xeCJK@cclv@} -\XeTeXinterchartoks 255 4 {\xeCJK@cclv@iv} +\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@postpunctkern{\kern -3sp\kern 3sp} \edef\xeCJK@zerokern{\kern -4sp\kern 4sp} -\newif\if@xeCJK@inmath -\@xeCJK@inmathfalse +\chardef\xeCJK@four=4 +\chardef\xeCJK@ten=10 -\newif\if@xeCJK \def\xeCJK@ignorespaces{ \futurelet\xeCJK@nexttoken\xeCJK@checknext} -\def\xeCJK@n@checknext{ +\def\xeCJK@checknext{ \ifx\xeCJK@nexttoken\@sptoken \expandafter\xeCJK@@checknext + \else + \ifx $\xeCJK@nexttoken + \CJKecglue + \fi \fi} { @@ -157,32 +400,24 @@ \def\CJK@stop{\CJK@stop} \def\xeCJK@@@checknext{ - \ifcat L\noexpand\@let@token - \else - \let\xeCJK@nexttoken\relax + \ifx $\@let@token \CJKecglue - \fi} + \fi + \let\xeCJK@nexttoken\relax} \long\def\xeCJK@gobble#1\CJK@stop{} -\def\xeCJK@notchecksingle{ - \xeCJK@cclv@i - \xeCJK@char} - -\def\xeCJK@z@checksingle#1{ +\def\xeCJK@checksingle#1{ \def\xeCJK@setcurrentchar@i{ - \xeCJK@cclv@i - \xeCJK@char{#1}} + \CJKglue + \CJKsymbol{#1}} \def\xeCJK@setcurrentnobreakchar@i{ - \xeCJK@char{#1}} + \CJKsymbol{#1}} \futurelet\@let@token\xeCJK@@checksingle} \def\xeCJK@@checksingle{ - \expandafter\futurelet - \expandafter\xeCJK@tempb - \expandafter\xeCJK@gobble\meaning\@let@token\CJK@stop - \if t\xeCJK@tempb + \ifcat 。\@let@token \expandafter\xeCJK@@@checksingle \else \expandafter\xeCJK@setcurrentchar@i @@ -205,235 +440,20 @@ \def\xeCJK@checkpar{ \@ifnextchar\par{\xeCJK@setcurrentnobreakchar@ii}{\xeCJK@setcurrentchar@ii}} -\def\xeCJK@doaftermath{ - \futurelet\xeCJK@nexttoken\xeCJK@aftermath} - -\def\xeCJK@z@cclv{\futurelet\xeCJK@nexttoken\xeCJK@zz@cclv} - -\def\xeCJK@zz@cclv{ - \ifx\xeCJK@nexttoken\@sptoken - \expandafter\xeCJK@zzz@cclv - \else - {\xeCJK@zerokern} - \fi} - -{ - \def\:{\xeCJK@zzz@cclv} - \global\expandafter\def\: {\futurelet\@let@token\xeCJK@zzzz@cclv} -} - -\def\xeCJK@zzzz@cclv{ - \ifcat L\noexpand\@let@token - \expandafter\xeCJK@zzzzz@cclv - \else - \xeCJK@space - \fi} - -\def\xeCJK@zzzzz@cclv#1{ - \ifnum`#1>"FF\relax - \CJKecglue - \else - \xeCJK@space - \fi - #1} - -\def\xeCJK@space{ } - -\def\xeCJK@z@checknext{ - \ifx\xeCJK@nexttoken\@sptoken - \expandafter\xeCJK@@checknext - \else - \ifx $\xeCJK@nexttoken - \CJKecglue - \fi - \fi} - -\def\CJKaddspaces{ - \let\xeCJK@@cclv\xeCJK@z@cclv - \let\CJKecglue\CJK@ecglue - \let\xeCJK@@i\CJKecglue - \let\xeCJK@v@i\CJKecglue - - \def\xeCJK@cclv@{ - \ifnum\lastkern=1\relax - \CJKecglue - \fi} - \let\xeCJK@cclv@iv\xeCJK@cclv@ - - \def\xeCJK@cclv@i{{ - \ifcase\lastkern - \hskip 0pt - \or %1 - \CJKglue - \or %2 - \xeCJK@ULspecials - \or %3 - \xeCJK@ULspecials - \or %4 - \CJKecglue - \fi}} - - \everymath{\ifxeCJK@indisplay\else\aftergroup\xeCJK@doaftermath\fi} - \everydisplay{\xeCJK@indisplaytrue} - \let\xeCJK@checknext\xeCJK@z@checknext - \let\xeCJK@aftermath\xeCJK@zz@cclv} - -\def\CJKnormalspaces{ - \let\xeCJK@@cclv\relax - \let\xeCJK@@i\relax - \let\xeCJK@v@i\relax - \let\xeCJK@checknext\xeCJK@n@checknext - \def\CJKecglue{ } - - \def\xeCJK@cclv@{ - \ifodd\lastkern - \xeCJK@@glue - \fi} - \let\xeCJK@cclv@iv\xeCJK@cclv@ - - \def\xeCJK@cclv@i{{ - \ifcase\lastkern - \hskip 0pt - \or %1 - \CJKglue - \or %2 - \xeCJK@ULspecials - \or %3 - \xeCJK@ULspecials - \fi}} - - \def\xeCJK@@glue{ - \ifx\xeCJK@nexttoken\@sptoken - { } - \fi - \let\xeCJK@nexttoken\relax} - \everymath{} - \everydisplay{}} - -\def\xeCJK@setspacemode{ - \ifxeCJK@addspaces - \CJKaddspaces - \else - \CJKnormalspaces - \fi - \ifxeCJK@checksingle - \let\xeCJK@checksingle\xeCJK@z@checksingle - \else - \let\xeCJK@checksingle\xeCJK@notchecksingle - \fi} - -\def\CJK@ecglue{ } - \def\xeCJKsetecglue#1{ - \ifxeCJK@addspaces \def\CJK@ecglue{#1} - \let\CJKecglue\CJK@ecglue - \let\xeCJK@@i\CJKecglue - \let\xeCJK@v@i\CJKecglue - \fi} + \let\CJKecglue\CJK@ecglue} \let\CJKsetecglue\xeCJKsetecglue -\CJKaddspaces - -\AtBeginDocument{ - \xeCJK@setspacemode - \ifcsname UL@hook\endcsname - \addto@hook\UL@hook{ - \let\xeCJK@unskip\xeCJK@UL@unskip - \let\xeCJK@ULspecials\xeCJK@UL@punctgroup} - \fi} -\DeclareRobustCommand{\xeCJK@char}[1]{ - {\XeTeXinterchartokenstate=0 - \CJKsymbol{#1} - \xeCJK@CJKkern} - \xeCJK@ignorespaces} -\DeclareRobustCommand{\xeCJK@prepunctchar}[1]{ - {\xeCJK@punctrule{#1}{l} - \@xeCJKfalse - \ifnum\lastkern>1\relax - \ifnum\lastkern<4\relax - \unkern - \unkern - \ifnum\xeCJK@punctstyle>0\relax - \@xeCJKtrue - \fi - \fi - \fi - \if@xeCJK - \xeCJK@unskip - \xeCJK@setkern{\@xeCJK@lastpunct}{#1} - \kern \csname xeCJK\xeCJK@punctstyle\xeCJK@bboxname @kern\@xeCJK@lastpunct#1\endcsname - \xeCJKpunctnobreak - \else - \xeCJK@ULspecials - \hskip \csname xeCJK\xeCJK@punctstyle\xeCJK@bboxname @lglue@#1\endcsname - plus 0.1em minus 0.1 em - \fi - - \global\edef\@xeCJK@lastpunct{#1} - \vrule width \csname xeCJK\xeCJK@punctstyle\xeCJK@bboxname - @lrule@#1\endcsname depth \z@ height \z@ - - \XeTeXinterchartokenstate=0 - \CJKpunctsymbol{#1} - - \nobreak - \gdef\xeCJK@lastcharclass{2} - \xeCJK@prepunctkern} - \ignorespaces} -\DeclareRobustCommand{\xeCJK@postpunctchar}[1]{ - {\xeCJK@punctrule{#1}{r} - \@xeCJKfalse - \ifnum\lastkern>1\relax - \ifnum\lastkern<4\relax - \unkern - \unkern - \@xeCJKtrue - \fi - \fi - \if@xeCJK - \xeCJK@unskip - \xeCJK@setkern{\@xeCJK@lastpunct}{#1} - \kern \csname xeCJK\xeCJK@punctstyle\xeCJK@bboxname - @kern\@xeCJK@lastpunct#1\endcsname - \nobreak - \else - \xeCJK@ULspecials - \ifcsname xeCJK@specialpunct#1\endcsname - \CJKglue % breakable - \else - \nobreak - \fi - \fi - \global\edef\@xeCJK@lastpunct{#1} +\CJKsetecglue{ } - \XeTeXinterchartokenstate=0 - \CJKpunctsymbol{#1} - - \vrule width \csname xeCJK\xeCJK@punctstyle\xeCJK@bboxname - @rrule@#1\endcsname depth \z@ height \z@ - - \hskip \csname xeCJK\xeCJK@punctstyle\xeCJK@bboxname @rglue@#1\endcsname - plus 0.1em minus 0.1 em - - \gdef\xeCJK@lastcharclass{3} - \xeCJK@postpunctkern} - \xeCJK@ignorespaces} - -\let\xeCJK@unskip\unskip -\def\xeCJK@UL@unskip{ - \ifcsname xeCJK\xeCJK@punctstyle\xeCJK@bboxname @rglue@\@xeCJK@lastpunct\endcsname - \hskip -\csname xeCJK\xeCJK@punctstyle\xeCJK@bboxname - @rglue@\@xeCJK@lastpunct\endcsname\relax - \fi} \def\xeCJKallowbreakbetweenpuncts{ \def\xeCJKpunctnobreak{ - \ifnum\xeCJK@lastcharclass=3 - \hskip 0pt - \fi}} + \hskip 0pt}} \def\xeCJKnobreakbetweenpuncts{ \let\xeCJKpunctnobreak\nobreak} \xeCJKnobreakbetweenpuncts + \newcount\xeCJK@cnta \newcount\xeCJK@cntb \newcount\xeCJK@cntc @@ -443,33 +463,20 @@ \newif\ifxeCJK@dokerning \def\xeCJK@punctrule#1#2{ - \ifcsname xeCJK@bbox\xeCJK@family/\f@series/\f@shape\endcsname - \global\edef\xeCJK@bboxname{ - \csname xeCJK@bbox\xeCJK@family/\f@series/\f@shape\endcsname} - \else - \xeCJK@getbboxname - \global\expandafter\edef\csname - xeCJK@bbox\xeCJK@family/\f@series/\f@shape\endcsname{\xeCJK@bboxname} - \fi - \ifcsname xeCJK@\xeCJK@bboxname @lspace@#1\endcsname - \else - {\xeCJK@setfont - \xeCJK@setpunctbounds{#1}} - \fi + \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 - \else - \ifcsname xeCJK@\xeCJK@bboxname @#2space@#1\endcsname - \else - \typeout{....Something is wrong with ...xeCJK@\xeCJK@bboxname @#2space@.....} - \xeCJK@dokerningfalse - \fi \fi \fi \ifxeCJK@dokerning @@ -524,19 +531,6 @@ \edef\xeCJK@temp{\xeCJK@temp.\the\xeCJK@cnte} \fi} -\def\xeCJK@getbboxname{ - {\csname xeCJK@font@\xeCJK@family\endcsname - \get@external@font - \global\let\xeCJK@tempx\external@font} - \expandafter\xeCJK@@getbboxname\xeCJK@tempx\relax - \global\expandafter\edef\csname - xeCJK@bbox\xeCJK@family/\f@series/\f@shape\endcsname{\xeCJK@bboxname}} - -\def\xeCJK@@getbboxname"#1/#2"#3\relax{ - \edef\xeCJK@temp{\zap@space #1 \@empty} - \edef\xeCJK@temp{\lowercase{\gdef\noexpand\xeCJK@bboxname{\xeCJK@temp}}} - \xeCJK@temp} - \expandafter\def\csname xeCJK@kaiming。\endcsname{} \expandafter\def\csname xeCJK@kaiming?\endcsname{} \expandafter\def\csname xeCJK@kaiming!\endcsname{} @@ -578,7 +572,7 @@ \fi} \def\xeCJKsetkern#1#2#3{ - \xeCJK@getbboxname + \xdef\xeCJK@bboxname{\xeCJK@family/\f@series/\f@shape} \global\expandafter\edef\csname xeCJK\xeCJK@punctstyle\xeCJK@bboxname @kern#1#2\endcsname{#3}} @@ -635,8 +629,11 @@ \else \xeCJK@cnta=\number\XeTeXglyphbounds 1 \xeCJK@gid \advance\xeCJK@cnta\number\XeTeXglyphbounds 3 \xeCJK@gid - \advance\xeCJK@cnta 1000\relax - \divide\xeCJK@cnta 6554\relax + \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 @@ -655,8 +652,52 @@ \fi \fi} -\def\CJKsymbol#1{{\xeCJK@setfont #1}} -\def\CJKpunctsymbol#1{{\xeCJK@setfont #1}} +\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 @@ -837,7 +878,8 @@ \expandafter \newfontfamily@i\csname xeCJK@font@#1\expandafter\endcsname \xeCJK@Features - {#3}} + {#3} + \expandafter\edef\csname xeCJK@nsff\xeCJK@family\endcsname{\zf@family}} \def\xeCJK@setmacro@getkey#1{ \expandafter\def\csname xeCJK@get#1\endcsname ##1#1=##2##3\relax{ @@ -858,12 +900,30 @@ \edef\zf@it@feat{,#1} \edef\zf@family@long{\zf@family@long itfeat:#1}} +\newcount\xeCJK@featureadded +\xeCJK@featureadded=0 + +\let\xeCJK@addfontfeatures\addfontfeatures +\def\addfontfeatures#1{ + \global\advance\xeCJK@featureadded\@ne + \xeCJK@addfontfeatures{#1} + \ifcsname xeCJK@family\endcsname + \edef\xeCJK@temp{\csname xeCJK@nsff\xeCJK@family\endcsname} + \edef\xeCJK@Features{[\csname zf@family@options\xeCJK@temp\endcsname,#1]} + \expandafter + \newfontfamily@i\csname xeCJK@font@\xeCJK@family @\the\xeCJK@featureadded\expandafter\endcsname + \xeCJK@Features + {\csname zf@family@fontname\xeCJK@temp\endcsname} + \expandafter\edef\csname xeCJK@nsff\xeCJK@family @\the\xeCJK@featureadded\endcsname{\zf@family} + \CJKfamily{\xeCJK@family @\the\xeCJK@featureadded} + \fi} + \def\xeCJK@font@rm{} \DeclareRobustCommand\CJKfamily[1]{ \ifcsname xeCJK@font@#1\endcsname - \def\xeCJK@family{#1} + \edef\xeCJK@family{#1} \else \ifcsname xeCJK@#1@warned\endcsname \else @@ -880,17 +940,6 @@ \xeCJKsetslantfactor{0.17} \xeCJKsetemboldenfactor{4} -\@ifundefined{UL@hskip}{\let\UL@hskip\relax}{} - -\let\xeCJK@ULspecials\relax - -\def\xeCJK@UL@punctgroup{ - \ifx\hskip\UL@hskip - \egroup - \UL@stop - \UL@start - \bgroup - \fi} \ifxeCJK@num \edef\CJK@UnicodeEnc{UTF8} @@ -923,7 +972,6 @@ \makeatother \XeTeXdefaultencoding "UTF-8"} -\def\CJKlanguage#1{} \endlinechar `\^^M \catcode "FEFF=9\relax \endinput -- cgit v1.2.3