From 8c7b32258dcc47d52a82c8cf346c696dd0c669a0 Mon Sep 17 00:00:00 2001 From: Karl Berry Date: Wed, 12 Nov 2014 23:32:07 +0000 Subject: xecjk (12nov14) git-svn-id: svn://tug.org/texlive/trunk@35568 c570f23f-e606-0410-a88d-b1316a301751 --- Master/texmf-dist/doc/xelatex/xecjk/xeCJK.pdf | Bin 1296601 -> 1311646 bytes .../doc/xelatex/xecjk/xunicode-symbols.pdf | Bin 348356 -> 348358 bytes Master/texmf-dist/source/xelatex/xecjk/xeCJK.dtx | 264 +++++++++++++++------ Master/texmf-dist/source/xelatex/xecjk/xeCJK.ins | 4 +- .../texmf-dist/tex/xelatex/xecjk/config/xeCJK.cfg | 4 +- .../tex/xelatex/xecjk/xeCJK-listings.sty | 13 +- Master/texmf-dist/tex/xelatex/xecjk/xeCJK.sty | 37 ++- Master/texmf-dist/tex/xelatex/xecjk/xeCJKfntef.sty | 121 +++++++--- .../tex/xelatex/xecjk/xunicode-addon.sty | 6 +- .../tex/xelatex/xecjk/xunicode-extra.def | 6 +- 10 files changed, 329 insertions(+), 126 deletions(-) diff --git a/Master/texmf-dist/doc/xelatex/xecjk/xeCJK.pdf b/Master/texmf-dist/doc/xelatex/xecjk/xeCJK.pdf index 2b7865b0145..67fee062879 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/doc/xelatex/xecjk/xunicode-symbols.pdf b/Master/texmf-dist/doc/xelatex/xecjk/xunicode-symbols.pdf index 2c2f0ccb885..b1c3e009253 100644 Binary files a/Master/texmf-dist/doc/xelatex/xecjk/xunicode-symbols.pdf and b/Master/texmf-dist/doc/xelatex/xecjk/xunicode-symbols.pdf differ diff --git a/Master/texmf-dist/source/xelatex/xecjk/xeCJK.dtx b/Master/texmf-dist/source/xelatex/xecjk/xeCJK.dtx index 38db97e7078..a6c06be753a 100644 --- a/Master/texmf-dist/source/xelatex/xecjk/xeCJK.dtx +++ b/Master/texmf-dist/source/xelatex/xecjk/xeCJK.dtx @@ -95,7 +95,7 @@ CJK scripts fonts (TrueType or OpenType). \askforoverwritefalse \preamble -$Id: xeCJK.dtx 729 2014-11-05 13:46:36Z sobenlee@gmail.com $ +$Id: xeCJK.dtx 737 2014-11-10 17:04:31Z sobenlee@gmail.com $ $URL: https://ctex-kit.googlecode.com/svn/trunk/xeCJK/xeCJK.dtx $ ----------------------------------------------------------------- Author: @@ -201,7 +201,7 @@ $URL: https://ctex-kit.googlecode.com/svn/trunk/xeCJK/xeCJK.dtx $ \NeedsTeXFormat{LaTeX2e} \RequirePackage{expl3} % -\GetIdInfo$Id: xeCJK.dtx 729 2014-11-05 13:46:36Z sobenlee@gmail.com $ +\GetIdInfo$Id: xeCJK.dtx 737 2014-11-10 17:04:31Z sobenlee@gmail.com $ %<*driver|package> {Typesetting CJK scripts with XeLaTeX} % @@ -223,7 +223,7 @@ $URL: https://ctex-kit.googlecode.com/svn/trunk/xeCJK/xeCJK.dtx $ % {xeCJKfntef} % {xeCJK-listings} % {xunicode-addon} - {\ExplFileDate}{3.2.14}{\ExplFileDescription} + {\ExplFileDate}{3.2.15}{\ExplFileDescription} %\ExplSyntaxOff %<*driver> \let\xeCJKrevnum\ExplFileVersion @@ -261,7 +261,7 @@ $URL: https://ctex-kit.googlecode.com/svn/trunk/xeCJK/xeCJK.dtx $ \xeCJKDeclareSubCJKBlock{Hangul}{ "1100 -> "11FF, "3130 -> "318F, "A960 -> "A97F, "AC00 -> "D7AF } \setCJKmainfont[HKMD]{Microsoft YaHei} \setCJKmainfont[Ext-B]{SimSun-ExtB} -\setCJKmainfont[Hangul]{Adobe Myungjo Std} +\setCJKmainfont[Hangul, Script=Hangul]{Malgun Gothic} \xeCJKsetup{PunctStyle=kaiming,KaiMingPunct+={:;}} \def\MacroFont{\small\linespread{1}\normalfont\ttfamily} \def\XeTeX{\hologo{XeTeX}} @@ -397,7 +397,7 @@ $URL: https://ctex-kit.googlecode.com/svn/trunk/xeCJK/xeCJK.dtx $ % \changes{v3.2.4}{2013/07/02}{遵循 \hologo{LaTeX3} 变量需要预先声明的原则。} % \changes{v3.2.6}{2013/07/29}{\texttt{case} 类函数的用法与 \hologo{LaTeX3} 同步。} % -% \CheckSum{9574} +% \CheckSum{9648} % \GetFileInfo{\jobname.dtx} % % \title{\bfseries\pkg{xeCJK} 宏包} @@ -1133,7 +1133,8 @@ $URL: https://ctex-kit.googlecode.com/svn/trunk/xeCJK/xeCJK.dtx $ % \begin{syntax} % \tn{normalspacedchars} \Arg{char list} % \end{syntax} -% 在 \meta{char list} 中出现的字符两端不自动添加空格,初始设置是 |/|。 +% 在 \meta{char list} 中出现的字符两端不自动添加空格,初始设置是 |/|、|\|、 +% - (|U+002D|) 和 \textendash\ (|U+2013|)。 % \end{function} % % \subsection{标点符号的处理} @@ -1374,9 +1375,9 @@ $URL: https://ctex-kit.googlecode.com/svn/trunk/xeCJK/xeCJK.dtx $ % \csappto{NoHighlight@Attributes}{\catcode37=14\relax} % % \begin{Example}[frame=single,numbers=left,gobble=4] -% \CJKsout*{瞻彼阕者,虚室生白,吉祥止止}\\ % \CJKunderline-{南朝}\CJKunderline-{梁}\CJKunderline-{劉勰}% -% \CJKunderwave-{文心雕龍}\CJKunderwave-{養氣} +% \CJKunderwave-{文心雕龍}\CJKunderwave-{養氣}\\ +% \CJKunderline*[thickness=1pt, hidden=true]{瞻彼阕者,虚室生白,吉祥止止} % \end{Example} % % \begin{function}[updated=2014-11-04]{\CJKunderdot} @@ -1411,6 +1412,10 @@ $URL: https://ctex-kit.googlecode.com/svn/trunk/xeCJK/xeCJK.dtx $ % 号,具有相同的效果。 % \end{function} % +% \begin{function}{hidden} +% 设置本选项为 \texttt{true},将隐藏文本内容,只画下划线。 +% \end{function} +% % \begin{function}{format} % \begin{syntax} % \tn{xeCJKsetup} \{ underline/format = \tn{color}\{red\} \} @@ -1479,12 +1484,15 @@ $URL: https://ctex-kit.googlecode.com/svn/trunk/xeCJK/xeCJK.dtx $ % \pkg{xeCJKfntef} 还提供给了自定义下划线和符号的 \tn{CJKunderanyline} 和 % \tn{CJKunderanysymbol}。 % -% \begin{function}[updated=2014-11-04]{\CJKunderanyline} +% \begin{function}[updated=2014-11-07]{\CJKunderanyline} % \begin{syntax} -% \tn{CJKunderanyline} [*] [-] \Arg{深度} \Arg{下划内容} \Arg{文本内容} +% \tn{CJKunderanyline} [*] [-] \oarg{选项} \Arg{深度} \Arg{下划内容} \Arg{文本内容} % \end{syntax} % \pkg{xeCJKfntef} 先将 \meta{下划内容} 放进一个盒子(\tn{xeCJKfntefbox})里,然后 -% 向下移动 \meta{深度} 给定的距离,再用于填充。 +% 向下移动 \meta{深度} 给定的距离,再用于填充。可用的 \meta{选项} 是 +% \texttt{skip}、\texttt{hidden}、\texttt{subtract}、\texttt{sep} 和 +% \texttt{boxdepth}。选项 \texttt{sep} 和 \texttt{boxdepth} 的初始值是空,表示 +% 禁用该选项的功能。可以在 \tn{xeCJKsetup} 中通过对象 \texttt{ulem} 来设置。 % \end{function} % % \smallskip @@ -1514,11 +1522,23 @@ $URL: https://ctex-kit.googlecode.com/svn/trunk/xeCJK/xeCJK.dtx $ % {瞻彼阕者,虚室生白,\CJKunderline{吉祥止止}} % \end{Example} % -% \begin{function}[added=2014-11-04]{\xeCJKfntefon} -% 功能与用法 \pkg{ulem} 宏包的 \tn{ULon} 相同,扩展了可选参数符号 |*| 和 |-|,分别 -% 用于设置下划线不跳过下划线和下划线首尾缩小一定距离。 +% \begin{function}[updated=2014-11-07]{\xeCJKfntefon} +% \begin{syntax} +% \tn{xeCJKfntefon} [*] [-] \oarg{选项} +% \end{syntax} +% 功能与用法 \pkg{ulem} 宏包的 \tn{ULon} 相同,扩展了可选参数符号 |*| 和 |-|, +% 可用的 \meta{选项} 是 \texttt{skip}、\texttt{hidden} 和 \texttt{subtract}。 +% 这三个选项对 \pkg{ulem} 宏包定义的 \tn{uline} 等命令也有效,需要在 +% \tn{xeCJKsetup} 中通过对象 \texttt{ulem} 来设置。例如\smallskip +% +% \begin{SideBySideExample}[frame=single,numbers=left,xrightmargin=.35\linewidth,gobble=6] +% \xeCJKsetup{ulem/skip=true} +% \uline{虚室生白,吉祥止止} +% \end{SideBySideExample} % \end{function} % +% \smallskip +% % 此外,\pkg{xeCJKfntef} 还提供了指定宽度,让汉字分散对齐的的环境 % \env{CJKfilltwosides} 和 \env{CJKfilltwosides*}。 % @@ -1529,7 +1549,7 @@ $URL: https://ctex-kit.googlecode.com/svn/trunk/xeCJK/xeCJK.dtx $ % 文本内容 % \tn{end}\{CJKfilltwosides\} % \end{syntax} -% 环境中的内容被放入垂直盒子中,可选参数 \oarg{位置} 指定盒子的基线位置。 +% 环境中的内容被放入垂直盒子中,可选参数 \meta{位置} 指定盒子的基线位置。 % 可以使用 \texttt{t}(顶部)、\texttt{c}(居中)和 \texttt{b}(底部),默认是 \texttt{c}。 % \meta{宽度} 参数指定盒子的宽度。 % \env{CJKfilltwosides*} 环境与 \env{CJKfilltwosides} 的区别是,当 \meta{宽度} @@ -1623,8 +1643,8 @@ $URL: https://ctex-kit.googlecode.com/svn/trunk/xeCJK/xeCJK.dtx $ % 加上 \tn{relax} 来回避上面的错误。 % % \pkg{xeCJK} 依赖 \XeTeX 的 \tn{XeTeXinterchartoks} 机制,与使用相同机制的宏包(例如 -% \pkg{polyglossia})可能会存在大小不一的冲突。\pkg{xeCJK} 虽然为此作了一些处理,但与 -% 它们共同使用时应该小心。 +% \pkg{polyglossia} 和 \pkg{xesearch})可能会存在大小不一的冲突。 +% \pkg{xeCJK} 虽然为此作了一些处理,但与它们共同使用时应该小心。 % %\end{documentation} % @@ -2253,6 +2273,7 @@ $URL: https://ctex-kit.googlecode.com/svn/trunk/xeCJK/xeCJK.dtx $ % |NormalSpace| & 前后原始间距的符号 & / \\ % |Boundary| & 边界 & 空格 \\ % |IVS| & 异体字选择符 & “回字有四样写法”\\ +% |HangulJamo| & 朝鲜文字母 & |ᄻ||ᆟ||ᇫ|\\ % \bottomrule % \end{tabular} % \end{center} @@ -2268,28 +2289,34 @@ $URL: https://ctex-kit.googlecode.com/svn/trunk/xeCJK/xeCJK.dtx $ % \end{macrocode} % \end{macro} % -% \begin{macro}[internal]{HalfLeft,HalfRight,NormalSpace,IVS} +% \changes{v3.2.15}{2014/11/10}{增加 \texttt{HangulJamo} 字符类。} +% +% \begin{macro}[internal]{HalfLeft,HalfRight,NormalSpace,IVS,HangulJamo} % 新增西文半角左/右标点、前后原始间距的符号和异体字选择符类。 % \begin{macrocode} \xeCJK_new_class:n { HalfLeft } \xeCJK_new_class:n { HalfRight } \xeCJK_new_class:n { NormalSpace } \xeCJK_new_class:n { IVS } +\xeCJK_new_class:n { HangulJamo } % \end{macrocode} % \end{macro} % % \changes{v3.2.11}{2014/04/10} % {左右角括号 \texttt{U+2329} 和 \texttt{U+232A} 是西文标点符号。} +% \changes{v3.2.15}{2014/11/09} +% {把 REVERSE SOLIDUS(\texttt{U+005C})、HYPHEN-MINUS(\texttt{U+002D})和 +% EN DASH(\texttt{U+2013})归入 \texttt{NormalSpace} 类。} % % \begin{macro}[var,internal] % {\c_@@_HalfLeft_chars_clist,\c_@@_HalfRight_chars_clist,\c_@@_NormalSpace_chars_clist} % \hypertarget{CJKcharclass}{西文半角左/右标点和前后原始间距的字符类。} % \begin{macrocode} \clist_const:Nn \c_@@_HalfLeft_chars_clist - { "28 , "2D , "5B , "60 , "7B , "2329 } + { "28 , "5B , "60 , "7B , "2329 } \clist_const:Nn \c_@@_HalfRight_chars_clist { "21 , "22 , "25 , "27 , "29 , "2C , "2E , "3A , "3B , "3F , "5D , "7D , "232A } -\clist_const:Nn \c_@@_NormalSpace_chars_clist { "2F } +\clist_const:Nn \c_@@_NormalSpace_chars_clist { "2D , "2F , "5C , "2013 } % \end{macrocode} % \end{macro} % @@ -2425,10 +2452,6 @@ $URL: https://ctex-kit.googlecode.com/svn/trunk/xeCJK/xeCJK.dtx $ { % \end{macrocode} % \begin{itemize}[nosep,leftmargin=0pt] -% \item Hangul Jamo (谚文字母) -% \begin{macrocode} - "1100 -> "11FF , -% \end{macrocode} % \item CJK Radicals Supplement (中日韩部首补充) % \begin{macrocode} "2E80 -> "2EFF , @@ -2505,18 +2528,10 @@ $URL: https://ctex-kit.googlecode.com/svn/trunk/xeCJK/xeCJK.dtx $ % \begin{macrocode} "A490 -> "A4CF , % \end{macrocode} -% \item Hangul Jamo Extended-A (谚文扩展 A) -% \begin{macrocode} - "A960 -> "A97F , -% \end{macrocode} % \item Hangul Syllables (谚文音节) % \begin{macrocode} "AC00 -> "D7AF , % \end{macrocode} -% \item Hangul Jamo Extended-B (谚文扩展 B) -% \begin{macrocode} - "D7B0 -> "D7FF , -% \end{macrocode} % \item CJK Compatibility Ideographs (中日韩兼容表意文字) % \begin{macrocode} "F900 -> "FAFF , @@ -2588,6 +2603,31 @@ $URL: https://ctex-kit.googlecode.com/svn/trunk/xeCJK/xeCJK.dtx $ % \end{macrocode} % \end{macro} % +% \begin{macro}[var,internal]{\c_@@_HangulJamo_chars_clist} +% 朝鲜文字母。 +% \begin{macrocode} +\clist_const:Nn \c_@@_HangulJamo_chars_clist + { +% \end{macrocode} +% \begin{itemize}[nosep,leftmargin=0pt] +% \item Hangul Jamo (谚文字母) +% \begin{macrocode} + "1100 -> "11FF , +% \end{macrocode} +% \item Hangul Jamo Extended-A (谚文扩展 A) +% \begin{macrocode} + "A960 -> "A97F , +% \end{macrocode} +% \item Hangul Jamo Extended-B (谚文扩展 B) +% \begin{macrocode} + "D7B0 -> "D7FF +% \end{macrocode} +% \end{itemize} +% \begin{macrocode} + } +% \end{macrocode} +% \end{macro} +% % \subsection{字符类别处理} % % \begin{macro}[internal,var] @@ -2604,7 +2644,8 @@ $URL: https://ctex-kit.googlecode.com/svn/trunk/xeCJK/xeCJK.dtx $ \seq_gput_right:Nn \g_@@_CJK_class_seq {#1} \tl_const:cn { \@@_CJK_class_tl:c { \@@_class_csname:n {#1} } } {#1} } -\clist_map_function:nN { CJK , FullLeft , FullRight , IVS } \@@_save_CJK_class:n +\clist_map_function:nN + { CJK , FullLeft , FullRight , IVS , HangulJamo } \@@_save_CJK_class:n % \end{macrocode} % \end{macro} % @@ -2745,6 +2786,7 @@ $URL: https://ctex-kit.googlecode.com/svn/trunk/xeCJK/xeCJK.dtx $ \xeCJK_declare_char_class:nV { CJK } \c_@@_CJK_chars_clist \xeCJK_declare_char_class:nV { NormalSpace } \c_@@_NormalSpace_chars_clist \xeCJK_declare_char_class:nV { IVS } \c_@@_IVS_chars_clist + \xeCJK_declare_char_class:nV { HangulJamo } \c_@@_HangulJamo_chars_clist \xeCJKResetPunctClass } % \end{macrocode} @@ -2972,6 +3014,22 @@ $URL: https://ctex-kit.googlecode.com/svn/trunk/xeCJK/xeCJK.dtx $ } % \end{macrocode} % +% \hypertarget{def-HJ}{\texttt{HangulJamo}} 字符类与 |CJK| 字符类基本相同,只是 +% |HangulJamo| 类之间不加入任何内容。 +% \begin{macrocode} +\AtEndOfPackage + { + \seq_map_inline:Nn \g_@@_class_seq + { + \str_if_eq:nnF {#1} { HangulJamo } + { + \xeCJK_copy_inter_class_toks:nnnn { HangulJamo } {#1} { CJK } {#1} + \xeCJK_copy_inter_class_toks:nnnn {#1} { HangulJamo } {#1} { CJK } + } + } + } +% \end{macrocode} +% % \hypertarget{def-cjk}{} % \begin{macrocode} \clist_map_inline:nn { Default , HalfLeft , HalfRight , NormalSpace } @@ -4370,7 +4428,7 @@ $URL: https://ctex-kit.googlecode.com/svn/trunk/xeCJK/xeCJK.dtx $ } \seq_gput_right:Nn \g_@@_CJK_sub_class_seq {#2} \@@_save_CJK_class:n { #1/#2 } - \clist_map_inline:nn { CJK , FullLeft , FullRight } + \clist_map_inline:nn { CJK , FullLeft , FullRight , HangulJamo } { \xeCJK_pre_inter_class_toks:nnn { #1/#2 } {##1} { \@@_switch_font:nn {#2} {#1} } @@ -7552,6 +7610,7 @@ $URL: https://ctex-kit.googlecode.com/svn/trunk/xeCJK/xeCJK.dtx $ % \changes{v3.2.14}{2014/10/31}{完善 \tn{varCJKunderline} 的实现。} % \changes{v3.2.14}{2014/10/31}{解决下划线前后没有 \tn{CJKglue} 或 \tn{CJKecglue} 的问题。} % \changes{v3.2.14}{2014/11/03}{\pkg{xeCJKfntef} 不再依赖 \pkg{CJKfntef}。} +% \changes{v3.2.15}{2014/11/07}{\pkg{xeCJKfntef} 增加 \texttt{hidden} 选项。} % % \begin{macrocode} %<*fntef> @@ -7591,11 +7650,17 @@ $URL: https://ctex-kit.googlecode.com/svn/trunk/xeCJK/xeCJK.dtx $ \@@_ulem_initial: \bool_if:NT \l_@@_ulem_subtract_bool { - \cs_set_eq:NN \xeCJK_ulem_leaders: \UL@leaders - \cs_set_eq:NN \UL@leaders \xeCJK_ulem_var_leaders: + \xeCJK_swap_cs:NN \UL@leaders \xeCJK_ulem_leaders: + \cs_set_eq:NN \@@_ulem_var_leaders: \xeCJK_ulem_var_leaders: \cs_set_eq:NN \xeCJK_ulem_right_skip: \@@_ulem_right_skip: } - \bool_if:NF \l_@@_ulem_skip_bool + \bool_if:NT \l_@@_ulem_hidden_bool + { \cs_set_eq:NN \UL@putbox \@@_ulem_hidden_box: } + \bool_if:NTF \l_@@_ulem_skip_bool + { + \cs_set_eq:NN \@@_ulem_putbox: \UL@putbox + \cs_set_eq:NN \@@_ulem_hskip_aux:n \xeCJK_ulem_hskip:n + } { \xeCJK_swap_cs:NN \@@_punct_kern:n \@@_ulem_punct_kern:n \xeCJK_swap_cs:NN \@@_punct_hskip:n \@@_ulem_punct_hskip:n @@ -7727,7 +7792,7 @@ $URL: https://ctex-kit.googlecode.com/svn/trunk/xeCJK/xeCJK.dtx $ } \cs_new_eq:NN \@@_ulem_hskip:n \@@_ulem_hskip_first:n \cs_new_protected_nopar:Npn \xeCJK_ulem_hskip:n #1 - { \skip_set:Nn \UL@skip {#1} \UL@leaders } + { { \skip_set:Nn \UL@skip {#1} \UL@leaders } } % \end{macrocode} % \end{macro} % @@ -7774,7 +7839,8 @@ $URL: https://ctex-kit.googlecode.com/svn/trunk/xeCJK/xeCJK.dtx $ % 第一次画下划线时,先向右平移 \tn{CJKulineleftskip},再画缩小了相同长度的下划线, % 让左侧有间距。 % \begin{macrocode} -\cs_new_eq:NN \xeCJK_ulem_leaders: \UL@leaders +\cs_new_protected_nopar:Npn \xeCJK_ulem_leaders: + { \@@_ulem_var_leaders: } \cs_new_protected_nopar:Npn \xeCJK_ulem_var_leaders: { \scan_stop: @@ -7782,9 +7848,10 @@ $URL: https://ctex-kit.googlecode.com/svn/trunk/xeCJK/xeCJK.dtx $ { \UL@leadtype \skip_horizontal:n { \UL@skip + \UL@pixel } \skip_horizontal:n { - \UL@pixel } - \cs_gset_eq:NN \UL@leaders \xeCJK_ulem_leaders: + \cs_gset_eq:NN \@@_ulem_var_leaders: \xeCJK_ulem_leaders: } } +\cs_new_eq:NN \@@_ulem_var_leaders: \xeCJK_ulem_var_leaders: % \end{macrocode} % \end{macro} % @@ -7805,6 +7872,13 @@ $URL: https://ctex-kit.googlecode.com/svn/trunk/xeCJK/xeCJK.dtx $ \cs_new_protected_nopar:Npn \@@_ulem_right_skip_hbox: { \box_set_to_last:N \l_@@_tmp_box + \int_compare:nNnTF \etex_lastnodetype:D = \c_twelve + { \@@_ulem_right_skip_kern: } + { \@@_ulem_right_skip_glue: } + \box_use_clear:N \l_@@_tmp_box + } +\cs_new_protected_nopar:Npn \@@_ulem_right_skip_kern: + { \dim_set:Nn \l_@@_tmp_dim { - \box_wd:N \l_@@_tmp_box } \dim_compare:nNnT \tex_lastkern:D = \l_@@_tmp_dim { @@ -7812,7 +7886,6 @@ $URL: https://ctex-kit.googlecode.com/svn/trunk/xeCJK/xeCJK.dtx $ \@@_ulem_right_skip_glue: \tex_kern:D \l_@@_tmp_dim } - \box_use_clear:N \l_@@_tmp_box } \cs_new_protected_nopar:Npn \@@_ulem_right_skip_glue: { @@ -7835,14 +7908,37 @@ $URL: https://ctex-kit.googlecode.com/svn/trunk/xeCJK/xeCJK.dtx $ % \end{macrocode} % \end{macro} % +% \begin{macro}[internal]{\@@_ulem_hidden_box:} +% 只画线,不输出盒子。 +% \begin{macrocode} +\cs_new_protected_nopar:Npn \@@_ulem_hidden_box: + { + \tl_if_empty:NF \UL@start + { + \xeCJK_zero_vrule: + \xeCJK_no_break: + \xeCJK_ulem_hskip:n { \box_wd:N \UL@box } + \box_use:N \c_@@_null_box + } + } +\box_new:N \c_@@_null_box +\hbox_gset:Nn \c_@@_null_box { } +\cs_new_protected_nopar:Npn \xeCJK_zero_vrule: + { + \tex_vrule:D + width \c_zero_dim + depth \c_zero_dim + height \c_zero_dim \scan_stop: + } +% \end{macrocode} +% \end{macro} +% % \begin{macro}[internal]{\@@_ulem_skip_punct_begin:,\@@_ulem_skip_punct_end:} % 让下划线跳过标点符号的设置。 % \begin{macrocode} \cs_new_protected_nopar:Npn \@@_ulem_skip_punct_begin: { - \cs_set_eq:NN \@@_ulem_putbox: \UL@putbox \cs_set_eq:NN \UL@putbox \@@_ulem_skip_putbox: - \cs_set_eq:NN \@@_ulem_hskip_aux:n \xeCJK_ulem_hskip:n \cs_set_eq:NN \xeCJK_ulem_hskip:n \skip_horizontal:n } \cs_new_protected_nopar:Npn \@@_ulem_skip_punct_end: @@ -8251,22 +8347,19 @@ $URL: https://ctex-kit.googlecode.com/svn/trunk/xeCJK/xeCJK.dtx $ L \int_use:N \etex_currentgrouplevel:D } \cs_new_protected_nopar:Npn \@@_ulem_ccglue: - { \skip_set_eq:NN \UL@skip \l_@@_ccglue_skip \UL@leaders } + { { \skip_set_eq:NN \UL@skip \l_@@_ccglue_skip \UL@leaders } } % \end{macrocode} % \end{macro} % % \begin{macro}{\xeCJKfntefon} -% 扩展 \tn{ULon} 的参数,带 |*| 表示不跳过标点符号,带 |-| 表示两端减小一定距离。 +% \changes{v3.2.15}{2014/11/07}{完善选项。} +% 扩展 \tn{ULon} 的参数。 % \begin{macrocode} -\NewDocumentCommand \xeCJKfntefon - { > { \ReverseBoolean } s t- > { \ReverseBoolean } s } +\NewDocumentCommand \xeCJKfntefon { s t- s o } { - \bool_set:Nn \l_@@_ulem_skip_bool { #1 && #3 } - \bool_set_eq:NN \l_@@_ulem_subtract_bool #2 + \xeCJK_ulem_boot:NNNn #1#2#3 {#4} \ULon } -\bool_new:N \l_@@_ulem_subtract_bool -\bool_new:N \l_@@_ulem_skip_bool \cs_new_eq:NN \xeCJK_ulem_on:n \UL@on \cs_set_protected:Npn \UL@on #1 { \xeCJK_ulem_on:n { \xeCJK_ulem_left: #1 \xeCJK_ulem_right: } } @@ -8387,20 +8480,27 @@ $URL: https://ctex-kit.googlecode.com/svn/trunk/xeCJK/xeCJK.dtx $ % \end{macro} % % \begin{macro}{\CJKunderanyline} +% \changes{v3.2.15}{2014/11/07}{完善选项。} % \begin{macrocode} -\DeclareDocumentCommand \CJKunderanyline - { > { \ReverseBoolean } s t- > { \ReverseBoolean } s m m } +\DeclareDocumentCommand \CJKunderanyline { s t- s o m m } { \c_group_begin_token + \xeCJK_ulem_boot:NNNn #1#2#3 {#4} \xeCJK_fntef_initial:nn - {#5} + {#6} { \box_move_down:nn - {#4} + {#5} { \box_use:N \l_@@_fntef_box } } - \bool_set:Nn \l_@@_ulem_skip_bool { #1 && #3 } - \bool_set_eq:NN \l_@@_ulem_subtract_bool #2 + \tl_if_empty:NF \l_@@_ulem_boxdepth_tl + { \box_set_dp:Nn \ULC@box { \l_@@_ulem_boxdepth_tl } } + \tl_if_empty:NF \l_@@_ulem_sep_tl + { + \bool_set_true:N \l_@@_fntef_bool + \dim_set:Nn \l_@@_fntef_dim + { \l_@@_ulem_sep_tl + \box_dp:N \ULC@box } + } \ULon } % \end{macrocode} @@ -8418,8 +8518,18 @@ $URL: https://ctex-kit.googlecode.com/svn/trunk/xeCJK/xeCJK.dtx $ \IfNoValueF {#6} { \keys_set:nn { xeCJK / options / #1 } {#6} } \bool_set_eq:Nc \l_@@_ulem_skip_bool { l_@@_#2_skip_bool } + \bool_set_eq:Nc \l_@@_ulem_hidden_bool { l_@@_#2_hidden_bool } \bool_set_eq:Nc \l_@@_ulem_subtract_bool { l_@@_#2_subtract_bool } } +\cs_new_protected:Npn \xeCJK_ulem_boot:NNNn #1#2#3#4 + { + \bool_if:nT { #1 || #3 } + { \bool_set_false:N \l_@@_ulem_skip_bool } + \IfBooleanT #2 + { \bool_set_true:N \l_@@_ulem_subtract_bool } + \IfNoValueF {#4} + { \keys_set:nn { xeCJK / options / ulem } {#4} } + } % \end{macrocode} % \end{macro} % @@ -8509,6 +8619,8 @@ $URL: https://ctex-kit.googlecode.com/svn/trunk/xeCJK/xeCJK.dtx $ % \end{macrocode} % \end{macro} % +% 最合适的是用 \pkg{xtemplate} 宏包来实现,但是比较难于用 \tn{xeCJKsetup} 来统一 +% 设置,所以这里还是用土办法。 % \begin{macrocode} \keys_define:nn { xeCJK / options } { @@ -8520,12 +8632,14 @@ $URL: https://ctex-kit.googlecode.com/svn/trunk/xeCJK/xeCJK.dtx $ symbol / sep .tl_set:N = \l_@@_symbol_sep_tl , symbol / boxdepth .tl_set:N = \l_@@_symbol_boxdepth_tl , underline / skip .bool_set:N = \l_@@_uline_skip_bool , + underline / hidden .bool_set:N = \l_@@_uline_hidden_bool , underline / subtract .bool_set:N = \l_@@_uline_subtract_bool , underline / thickness .tl_set:N = \l_@@_uline_thickness_tl , underline / depth .tl_set:N = \l_@@_uline_depth_tl , underline / sep .tl_set:N = \l_@@_uline_sep_tl , underline / format .tl_set:N = \l_@@_uline_format_tl , underdblline / skip .bool_set:N = \l_@@_udbline_skip_bool , + underdblline / hidden .bool_set:N = \l_@@_udbline_hidden_bool , underdblline / subtract .bool_set:N = \l_@@_udbline_subtract_bool , underdblline / thickness .tl_set:N = \l_@@_udbline_thickness_tl , underdblline / depth .tl_set:N = \l_@@_udbline_depth_tl , @@ -8533,19 +8647,27 @@ $URL: https://ctex-kit.googlecode.com/svn/trunk/xeCJK/xeCJK.dtx $ underdblline / format .tl_set:N = \l_@@_udbline_format_tl , underdblline / gap .tl_set:N = \l_@@_udbline_gap_tl , underwave / skip .bool_set:N = \l_@@_uwave_skip_bool , + underwave / hidden .bool_set:N = \l_@@_uwave_hidden_bool , underwave / subtract .bool_set:N = \l_@@_uwave_subtract_bool , underwave / symbol .tl_set:N = \l_@@_uwave_symbol_tl , underwave / depth .tl_set:N = \l_@@_uwave_depth_tl , underwave / sep .tl_set:N = \l_@@_uwave_sep_tl , underwave / format .tl_set:N = \l_@@_uwave_format_tl , sout / skip .bool_set:N = \l_@@_sout_skip_bool , + sout / hidden .bool_set:N = \l_@@_sout_hidden_bool , sout / subtract .bool_set:N = \l_@@_sout_subtract_bool , sout / thickness .tl_set:N = \l_@@_sout_thickness_tl , sout / height .tl_set:N = \l_@@_sout_height_tl , sout / format .tl_set:N = \l_@@_sout_format_tl , xout / skip .bool_set:N = \l_@@_xout_skip_bool , + xout / hidden .bool_set:N = \l_@@_xout_hidden_bool , xout / subtract .bool_set:N = \l_@@_xout_subtract_bool , - xout / format .tl_set:N = \l_@@_xout_format_tl + xout / format .tl_set:N = \l_@@_xout_format_tl , + ulem / skip .bool_set:N = \l_@@_ulem_skip_bool , + ulem / hidden .bool_set:N = \l_@@_ulem_hidden_bool , + ulem / subtract .bool_set:N = \l_@@_ulem_subtract_bool , + ulem / sep .tl_set:N = \l_@@_ulem_sep_tl , + ulem / boxdepth .tl_set:N = \l_@@_ulem_boxdepth_tl } \clist_map_inline:nn { underdot , underline , underdblline , underwave , sout , xout } @@ -8558,9 +8680,7 @@ $URL: https://ctex-kit.googlecode.com/svn/trunk/xeCJK/xeCJK.dtx $ underdot / symbol = \normalfont . , underdot / depth = 0.20 em , underdot / sep = 0.04 em , - underdot / boxdepth = \c_max_dim , symbol / sep = \c_zero_dim , - symbol / boxdepth = \c_max_dim , underline / skip = true , underline / thickness = \ULthickness , underline / depth = 0.20 em , @@ -8653,12 +8773,16 @@ $URL: https://ctex-kit.googlecode.com/svn/trunk/xeCJK/xeCJK.dtx $ { \keys_set:nn { xeCJK / options / #1 } {#3} } \xeCJK_fntef_sbox:n {#5} \bool_if:NTF \l_@@_fntef_bool - { \xeCJK_make_under_symbol:nn { \l_@@_fntef_dim } } + { \xeCJK_make_under_symbol:n { \l_@@_fntef_dim } } { \bool_set_true:N \l_@@_fntef_bool - \xeCJK_make_under_symbol:nn {#4} + \xeCJK_make_under_symbol:n {#4} + } + \tl_if_empty:cF { l_@@_#2_boxdepth_tl } + { + \box_set_dp:Nn \l_@@_under_symbol_box + { \use:c { l_@@_#2_boxdepth_tl } } } - { \use:c { l_@@_#2_boxdepth_tl } } \dim_set:Nn \l_@@_fntef_dim { \use:c { l_@@_#2_sep_tl } + \box_dp:N \l_@@_under_symbol_box } \xeCJK_swap_cs:NN \CJKsymbol \@@_under_CJKsymbol:N @@ -8671,7 +8795,7 @@ $URL: https://ctex-kit.googlecode.com/svn/trunk/xeCJK/xeCJK.dtx $ % \begin{macro}[internal]{\xeCJK_make_under_symbol:n} % 我们量取“一”的宽度作为汉字的宽度。 % \begin{macrocode} -\cs_new_protected:Npn \xeCJK_make_under_symbol:nn #1#2 +\cs_new_protected:Npn \xeCJK_make_under_symbol:n #1 { \hbox_set:Nn \l_@@_under_symbol_box { @@ -8685,8 +8809,6 @@ $URL: https://ctex-kit.googlecode.com/svn/trunk/xeCJK/xeCJK.dtx $ } } } - \dim_compare:nNnF {#2} = \c_max_dim - { \box_set_dp:Nn \l_@@_under_symbol_box {#2} } } % \end{macrocode} % \end{macro} @@ -8831,10 +8953,11 @@ $URL: https://ctex-kit.googlecode.com/svn/trunk/xeCJK/xeCJK.dtx $ % \changes{v3.2.3}{2013/06/04} % {解决 \texttt{listings} 坏境中代码行号输出不正确的问题,并解决在其中跨页时对页眉 % 和页脚的影响。} +% \changes{v3.2.15}{2014/11/10}{修正 \texttt{breaklines} 无效的问题。} % 为使代码行号结果正确,需要在 \tn{lst@numberstyle} 中恢复 \tn{XeTeXinterchartoks}。 % 在 \texttt{listings} 环境中换页时,对 \tn{XeTeXinterchartoks} 的修改会影响到 % 页眉和页脚,需要在 \tn{shipout} 盒子中恢复成正常定义。加入 \cs{tex_noindent:D} -% 是为了防止汉字出现在首行的时候可能会产生额外空行。 +% 是为了进入水平模式,防止汉字出现在首行的时候可能会产生额外空行。 % \begin{macrocode} \cs_new_protected_nopar:Npn \@@_listings_initial_hook: { @@ -8843,7 +8966,7 @@ $URL: https://ctex-kit.googlecode.com/svn/trunk/xeCJK/xeCJK.dtx $ \tl_put_left:Nn \lst@numberstyle { \l_@@_restore_listings_toks_tl } \xeCJK_add_to_shipout:n { \l_@@_restore_listings_toks_tl } \lst@ifbreaklines - \cs_set_eq:NN \@@_listings_CJK_toks: \@@_listings_breaklines_toks: + \cs_set_eq:NN \@@_listings_CJK_toks_hook: \@@_listings_breaklines_toks: \fi: } % \end{macrocode} @@ -8860,6 +8983,7 @@ $URL: https://ctex-kit.googlecode.com/svn/trunk/xeCJK/xeCJK.dtx $ \@@_backup_inter_class_toks:nn { Boundary } { Default } \@@_backup_inter_class_toks:nn { Boundary } { CJK } \@@_backup_inter_class_toks:nn { Boundary } { IVS } + \@@_backup_inter_class_toks:nn { Boundary } { HangulJamo } \@@_backup_inter_class_toks:nn { Boundary } { FullLeft } \@@_backup_inter_class_toks:nn { Boundary } { FullRight } } @@ -8894,6 +9018,8 @@ $URL: https://ctex-kit.googlecode.com/svn/trunk/xeCJK/xeCJK.dtx $ { \@@_listings_process_CJK:nN { \c_two } } \xeCJK_inter_class_toks:nnn { Boundary } { FullRight } { \@@_listings_process_CJK:nN { \c_two } } + \xeCJK_inter_class_toks:nnn { Boundary } { HangulJamo } + { \@@_listings_process_CJK:nN { \c_two } } \seq_map_inline:Nn \g_@@_CJK_sub_class_seq { \xeCJK_inter_class_toks:nnn { Boundary } { CJK/##1 } @@ -8904,6 +9030,8 @@ $URL: https://ctex-kit.googlecode.com/svn/trunk/xeCJK/xeCJK.dtx $ { \xeCJK_inter_class_toks:nnn { Boundary } { CJK } { \@@_listings_process_breaklines_CJK:nN { \c_two } } + \xeCJK_inter_class_toks:nnn { Boundary } { HangulJamo } + { \@@_listings_process_breaklines_CJK:nN { \c_two } } \xeCJK_inter_class_toks:nnn { Boundary } { FullLeft } { \@@_listings_process_FullLeft:nN { \c_two } } \xeCJK_inter_class_toks:nnn { Boundary } { FullRight } diff --git a/Master/texmf-dist/source/xelatex/xecjk/xeCJK.ins b/Master/texmf-dist/source/xelatex/xecjk/xeCJK.ins index dd99474b02b..f94f7e07526 100644 --- a/Master/texmf-dist/source/xelatex/xecjk/xeCJK.ins +++ b/Master/texmf-dist/source/xelatex/xecjk/xeCJK.ins @@ -6,7 +6,7 @@ %% %% xeCJK.dtx (with options: `install') %% -%% $Id: xeCJK.dtx 729 2014-11-05 13:46:36Z sobenlee@gmail.com $ +%% $Id: xeCJK.dtx 737 2014-11-10 17:04:31Z sobenlee@gmail.com $ %% $URL: https://ctex-kit.googlecode.com/svn/trunk/xeCJK/xeCJK.dtx $ %% ----------------------------------------------------------------- %% Author: @@ -37,7 +37,7 @@ \askforoverwritefalse \preamble -$Id: xeCJK.dtx 729 2014-11-05 13:46:36Z sobenlee@gmail.com $ +$Id: xeCJK.dtx 737 2014-11-10 17:04:31Z sobenlee@gmail.com $ $URL: https://ctex-kit.googlecode.com/svn/trunk/xeCJK/xeCJK.dtx $ ----------------------------------------------------------------- Author: diff --git a/Master/texmf-dist/tex/xelatex/xecjk/config/xeCJK.cfg b/Master/texmf-dist/tex/xelatex/xecjk/config/xeCJK.cfg index 36e16e53f2a..7b1ade8512f 100644 --- a/Master/texmf-dist/tex/xelatex/xecjk/config/xeCJK.cfg +++ b/Master/texmf-dist/tex/xelatex/xecjk/config/xeCJK.cfg @@ -6,11 +6,11 @@ %% %% xeCJK.dtx (with options: `config') %% -\GetIdInfo$Id: xeCJK.dtx 729 2014-11-05 13:46:36Z sobenlee@gmail.com $ +\GetIdInfo$Id: xeCJK.dtx 737 2014-11-10 17:04:31Z sobenlee@gmail.com $ {Configuration file for xeCJK package} \ProvidesExplFile {\ExplFileName.cfg} - {\ExplFileDate}{3.2.14}{\ExplFileDescription} + {\ExplFileDate}{3.2.15}{\ExplFileDescription} %% %% diff --git a/Master/texmf-dist/tex/xelatex/xecjk/xeCJK-listings.sty b/Master/texmf-dist/tex/xelatex/xecjk/xeCJK-listings.sty index 1b6723af1f6..ab7c3044a0a 100644 --- a/Master/texmf-dist/tex/xelatex/xecjk/xeCJK-listings.sty +++ b/Master/texmf-dist/tex/xelatex/xecjk/xeCJK-listings.sty @@ -6,7 +6,7 @@ %% %% xeCJK.dtx (with options: `listings') %% -%% $Id: xeCJK.dtx 729 2014-11-05 13:46:36Z sobenlee@gmail.com $ +%% $Id: xeCJK.dtx 737 2014-11-10 17:04:31Z sobenlee@gmail.com $ %% $URL: https://ctex-kit.googlecode.com/svn/trunk/xeCJK/xeCJK.dtx $ %% ----------------------------------------------------------------- %% Author: @@ -33,11 +33,11 @@ %% \NeedsTeXFormat{LaTeX2e} \RequirePackage{expl3} -\GetIdInfo$Id: xeCJK.dtx 729 2014-11-05 13:46:36Z sobenlee@gmail.com $ +\GetIdInfo$Id: xeCJK.dtx 737 2014-11-10 17:04:31Z sobenlee@gmail.com $ {xeCJK patch file for listings} \ProvidesExplPackage {xeCJK-listings} - {\ExplFileDate}{3.2.14}{\ExplFileDescription} + {\ExplFileDate}{3.2.15}{\ExplFileDescription} \DeclareOption* { \PassOptionsToPackage { \CurrentOption } { xeCJK } } \ProcessOptions \scan_stop: \RequirePackage { xeCJK } @@ -58,7 +58,7 @@ \tl_put_left:Nn \lst@numberstyle { \l__xeCJK_restore_listings_toks_tl } \xeCJK_add_to_shipout:n { \l__xeCJK_restore_listings_toks_tl } \lst@ifbreaklines - \cs_set_eq:NN \__xeCJK_listings_CJK_toks: \__xeCJK_listings_breaklines_toks: + \cs_set_eq:NN \__xeCJK_listings_CJK_toks_hook: \__xeCJK_listings_breaklines_toks: \fi: } \cs_new_protected_nopar:Npn \__xeCJK_listings_toks_hook: @@ -68,6 +68,7 @@ \__xeCJK_backup_inter_class_toks:nn { Boundary } { Default } \__xeCJK_backup_inter_class_toks:nn { Boundary } { CJK } \__xeCJK_backup_inter_class_toks:nn { Boundary } { IVS } + \__xeCJK_backup_inter_class_toks:nn { Boundary } { HangulJamo } \__xeCJK_backup_inter_class_toks:nn { Boundary } { FullLeft } \__xeCJK_backup_inter_class_toks:nn { Boundary } { FullRight } } @@ -96,6 +97,8 @@ { \__xeCJK_listings_process_CJK:nN { \c_two } } \xeCJK_inter_class_toks:nnn { Boundary } { FullRight } { \__xeCJK_listings_process_CJK:nN { \c_two } } + \xeCJK_inter_class_toks:nnn { Boundary } { HangulJamo } + { \__xeCJK_listings_process_CJK:nN { \c_two } } \seq_map_inline:Nn \g__xeCJK_CJK_sub_class_seq { \xeCJK_inter_class_toks:nnn { Boundary } { CJK/##1 } @@ -106,6 +109,8 @@ { \xeCJK_inter_class_toks:nnn { Boundary } { CJK } { \__xeCJK_listings_process_breaklines_CJK:nN { \c_two } } + \xeCJK_inter_class_toks:nnn { Boundary } { HangulJamo } + { \__xeCJK_listings_process_breaklines_CJK:nN { \c_two } } \xeCJK_inter_class_toks:nnn { Boundary } { FullLeft } { \__xeCJK_listings_process_FullLeft:nN { \c_two } } \xeCJK_inter_class_toks:nnn { Boundary } { FullRight } diff --git a/Master/texmf-dist/tex/xelatex/xecjk/xeCJK.sty b/Master/texmf-dist/tex/xelatex/xecjk/xeCJK.sty index 017220fe745..3c8f4032d61 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: `package') %% -%% $Id: xeCJK.dtx 729 2014-11-05 13:46:36Z sobenlee@gmail.com $ +%% $Id: xeCJK.dtx 737 2014-11-10 17:04:31Z sobenlee@gmail.com $ %% $URL: https://ctex-kit.googlecode.com/svn/trunk/xeCJK/xeCJK.dtx $ %% ----------------------------------------------------------------- %% Author: @@ -33,11 +33,11 @@ %% \NeedsTeXFormat{LaTeX2e} \RequirePackage{expl3} -\GetIdInfo$Id: xeCJK.dtx 729 2014-11-05 13:46:36Z sobenlee@gmail.com $ +\GetIdInfo$Id: xeCJK.dtx 737 2014-11-10 17:04:31Z sobenlee@gmail.com $ {Typesetting CJK scripts with XeLaTeX} \ProvidesExplPackage {\ExplFileName} - {\ExplFileDate}{3.2.14}{\ExplFileDescription} + {\ExplFileDate}{3.2.15}{\ExplFileDescription} \msg_new:nnn { xeCJK } { Require-XeTeX } { The~xeCJK~package~requires~XeTeX~to~function.\\\\ @@ -402,11 +402,12 @@ \xeCJK_new_class:n { HalfRight } \xeCJK_new_class:n { NormalSpace } \xeCJK_new_class:n { IVS } +\xeCJK_new_class:n { HangulJamo } \clist_const:Nn \c__xeCJK_HalfLeft_chars_clist - { "28 , "2D , "5B , "60 , "7B , "2329 } + { "28 , "5B , "60 , "7B , "2329 } \clist_const:Nn \c__xeCJK_HalfRight_chars_clist { "21 , "22 , "25 , "27 , "29 , "2C , "2E , "3A , "3B , "3F , "5D , "7D , "232A } -\clist_const:Nn \c__xeCJK_NormalSpace_chars_clist { "2F } +\clist_const:Nn \c__xeCJK_NormalSpace_chars_clist { "2D , "2F , "5C , "2013 } \clist_const:Nn \c__xeCJK_OP_chars_clist { "2018 , "201C , @@ -458,7 +459,6 @@ } \clist_const:Nn \c__xeCJK_CJK_chars_clist { - "1100 -> "11FF , "2E80 -> "2EFF , "2F00 -> "2FDF , "2FF0 -> "2FFF , @@ -478,9 +478,7 @@ "4E00 -> "9FFF , "A000 -> "A48F , "A490 -> "A4CF , - "A960 -> "A97F , "AC00 -> "D7AF , - "D7B0 -> "D7FF , "F900 -> "FAFF , "FE10 -> "FE1F , "FE30 -> "FE4F , @@ -498,6 +496,12 @@ "FE00 -> "FE0F , "E0100 -> "E01EF } +\clist_const:Nn \c__xeCJK_HangulJamo_chars_clist + { + "1100 -> "11FF , + "A960 -> "A97F , + "D7B0 -> "D7FF + } \seq_new:N \g__xeCJK_base_class_seq \seq_gset_eq:NN \g__xeCJK_base_class_seq \g__xeCJK_class_seq \seq_new:N \g__xeCJK_non_CJK_class_seq @@ -509,7 +513,8 @@ \seq_gput_right:Nn \g__xeCJK_CJK_class_seq {#1} \tl_const:cn { \__xeCJK_CJK_class_tl:c { \__xeCJK_class_csname:n {#1} } } {#1} } -\clist_map_function:nN { CJK , FullLeft , FullRight , IVS } \__xeCJK_save_CJK_class:n +\clist_map_function:nN + { CJK , FullLeft , FullRight , IVS , HangulJamo } \__xeCJK_save_CJK_class:n \cs_new_nopar:Npn \xeCJK_class_num:n #1 { \use:c { \__xeCJK_class_csname:n {#1} } } \NewDocumentCommand \xeCJKDeclareCharClass { s > { \TrimSpaces } m m } { @@ -587,6 +592,7 @@ \xeCJK_declare_char_class:nV { CJK } \c__xeCJK_CJK_chars_clist \xeCJK_declare_char_class:nV { NormalSpace } \c__xeCJK_NormalSpace_chars_clist \xeCJK_declare_char_class:nV { IVS } \c__xeCJK_IVS_chars_clist + \xeCJK_declare_char_class:nV { HangulJamo } \c__xeCJK_HangulJamo_chars_clist \xeCJKResetPunctClass } \xeCJKResetCharClass @@ -648,6 +654,17 @@ } } } +\AtEndOfPackage + { + \seq_map_inline:Nn \g__xeCJK_class_seq + { + \str_if_eq:nnF {#1} { HangulJamo } + { + \xeCJK_copy_inter_class_toks:nnnn { HangulJamo } {#1} { CJK } {#1} + \xeCJK_copy_inter_class_toks:nnnn {#1} { HangulJamo } {#1} { CJK } + } + } + } \clist_map_inline:nn { Default , HalfLeft , HalfRight , NormalSpace } { \xeCJK_inter_class_toks:nnn {#1} { CJK } @@ -1602,7 +1619,7 @@ } \seq_gput_right:Nn \g__xeCJK_CJK_sub_class_seq {#2} \__xeCJK_save_CJK_class:n { #1/#2 } - \clist_map_inline:nn { CJK , FullLeft , FullRight } + \clist_map_inline:nn { CJK , FullLeft , FullRight , HangulJamo } { \xeCJK_pre_inter_class_toks:nnn { #1/#2 } {##1} { \__xeCJK_switch_font:nn {#2} {#1} } diff --git a/Master/texmf-dist/tex/xelatex/xecjk/xeCJKfntef.sty b/Master/texmf-dist/tex/xelatex/xecjk/xeCJKfntef.sty index 5261b858507..2f786e46bd6 100644 --- a/Master/texmf-dist/tex/xelatex/xecjk/xeCJKfntef.sty +++ b/Master/texmf-dist/tex/xelatex/xecjk/xeCJKfntef.sty @@ -6,7 +6,7 @@ %% %% xeCJK.dtx (with options: `fntef') %% -%% $Id: xeCJK.dtx 729 2014-11-05 13:46:36Z sobenlee@gmail.com $ +%% $Id: xeCJK.dtx 737 2014-11-10 17:04:31Z sobenlee@gmail.com $ %% $URL: https://ctex-kit.googlecode.com/svn/trunk/xeCJK/xeCJK.dtx $ %% ----------------------------------------------------------------- %% Author: @@ -33,11 +33,11 @@ %% \NeedsTeXFormat{LaTeX2e} \RequirePackage{expl3} -\GetIdInfo$Id: xeCJK.dtx 729 2014-11-05 13:46:36Z sobenlee@gmail.com $ +\GetIdInfo$Id: xeCJK.dtx 737 2014-11-10 17:04:31Z sobenlee@gmail.com $ {xeCJK font effect} \ProvidesExplPackage {xeCJKfntef} - {\ExplFileDate}{3.2.14}{\ExplFileDescription} + {\ExplFileDate}{3.2.15}{\ExplFileDescription} \PassOptionsToPackage { normalem } { ulem } \DeclareOption* { \PassOptionsToPackage { \CurrentOption } { ulem } } \ProcessOptions \scan_stop: @@ -55,11 +55,17 @@ \__xeCJK_ulem_initial: \bool_if:NT \l__xeCJK_ulem_subtract_bool { - \cs_set_eq:NN \xeCJK_ulem_leaders: \UL@leaders - \cs_set_eq:NN \UL@leaders \xeCJK_ulem_var_leaders: + \xeCJK_swap_cs:NN \UL@leaders \xeCJK_ulem_leaders: + \cs_set_eq:NN \__xeCJK_ulem_var_leaders: \xeCJK_ulem_var_leaders: \cs_set_eq:NN \xeCJK_ulem_right_skip: \__xeCJK_ulem_right_skip: } - \bool_if:NF \l__xeCJK_ulem_skip_bool + \bool_if:NT \l__xeCJK_ulem_hidden_bool + { \cs_set_eq:NN \UL@putbox \__xeCJK_ulem_hidden_box: } + \bool_if:NTF \l__xeCJK_ulem_skip_bool + { + \cs_set_eq:NN \__xeCJK_ulem_putbox: \UL@putbox + \cs_set_eq:NN \__xeCJK_ulem_hskip_aux:n \xeCJK_ulem_hskip:n + } { \xeCJK_swap_cs:NN \__xeCJK_punct_kern:n \__xeCJK_ulem_punct_kern:n \xeCJK_swap_cs:NN \__xeCJK_punct_hskip:n \__xeCJK_ulem_punct_hskip:n @@ -172,7 +178,7 @@ } \cs_new_eq:NN \__xeCJK_ulem_hskip:n \__xeCJK_ulem_hskip_first:n \cs_new_protected_nopar:Npn \xeCJK_ulem_hskip:n #1 - { \skip_set:Nn \UL@skip {#1} \UL@leaders } + { { \skip_set:Nn \UL@skip {#1} \UL@leaders } } \cs_new_protected_nopar:Npn \xeCJK_ulem_right: { \scan_stop: @@ -206,7 +212,8 @@ } } \cs_new_eq:NN \xeCJK_ulem_right_node: \prg_do_nothing: -\cs_new_eq:NN \xeCJK_ulem_leaders: \UL@leaders +\cs_new_protected_nopar:Npn \xeCJK_ulem_leaders: + { \__xeCJK_ulem_var_leaders: } \cs_new_protected_nopar:Npn \xeCJK_ulem_var_leaders: { \scan_stop: @@ -214,9 +221,10 @@ { \UL@leadtype \skip_horizontal:n { \UL@skip + \UL@pixel } \skip_horizontal:n { - \UL@pixel } - \cs_gset_eq:NN \UL@leaders \xeCJK_ulem_leaders: + \cs_gset_eq:NN \__xeCJK_ulem_var_leaders: \xeCJK_ulem_leaders: } } +\cs_new_eq:NN \__xeCJK_ulem_var_leaders: \xeCJK_ulem_var_leaders: \cs_new_eq:NN \xeCJK_ulem_right_skip: \prg_do_nothing: \cs_new_protected_nopar:Npn \__xeCJK_ulem_right_skip: { @@ -230,6 +238,13 @@ \cs_new_protected_nopar:Npn \__xeCJK_ulem_right_skip_hbox: { \box_set_to_last:N \l__xeCJK_tmp_box + \int_compare:nNnTF \etex_lastnodetype:D = \c_twelve + { \__xeCJK_ulem_right_skip_kern: } + { \__xeCJK_ulem_right_skip_glue: } + \box_use_clear:N \l__xeCJK_tmp_box + } +\cs_new_protected_nopar:Npn \__xeCJK_ulem_right_skip_kern: + { \dim_set:Nn \l__xeCJK_tmp_dim { - \box_wd:N \l__xeCJK_tmp_box } \dim_compare:nNnT \tex_lastkern:D = \l__xeCJK_tmp_dim { @@ -237,7 +252,6 @@ \__xeCJK_ulem_right_skip_glue: \tex_kern:D \l__xeCJK_tmp_dim } - \box_use_clear:N \l__xeCJK_tmp_box } \cs_new_protected_nopar:Npn \__xeCJK_ulem_right_skip_glue: { @@ -257,11 +271,28 @@ { \__xeCJK_ulem_right_skip_hbox: } \tex_penalty:D \l__xeCJK_tmp_int } +\cs_new_protected_nopar:Npn \__xeCJK_ulem_hidden_box: + { + \tl_if_empty:NF \UL@start + { + \xeCJK_zero_vrule: + \xeCJK_no_break: + \xeCJK_ulem_hskip:n { \box_wd:N \UL@box } + \box_use:N \c__xeCJK_null_box + } + } +\box_new:N \c__xeCJK_null_box +\hbox_gset:Nn \c__xeCJK_null_box { } +\cs_new_protected_nopar:Npn \xeCJK_zero_vrule: + { + \tex_vrule:D + width \c_zero_dim + depth \c_zero_dim + height \c_zero_dim \scan_stop: + } \cs_new_protected_nopar:Npn \__xeCJK_ulem_skip_punct_begin: { - \cs_set_eq:NN \__xeCJK_ulem_putbox: \UL@putbox \cs_set_eq:NN \UL@putbox \__xeCJK_ulem_skip_putbox: - \cs_set_eq:NN \__xeCJK_ulem_hskip_aux:n \xeCJK_ulem_hskip:n \cs_set_eq:NN \xeCJK_ulem_hskip:n \skip_horizontal:n } \cs_new_protected_nopar:Npn \__xeCJK_ulem_skip_punct_end: @@ -559,16 +590,12 @@ L \int_use:N \etex_currentgrouplevel:D } \cs_new_protected_nopar:Npn \__xeCJK_ulem_ccglue: - { \skip_set_eq:NN \UL@skip \l__xeCJK_ccglue_skip \UL@leaders } -\NewDocumentCommand \xeCJKfntefon - { > { \ReverseBoolean } s t- > { \ReverseBoolean } s } + { { \skip_set_eq:NN \UL@skip \l__xeCJK_ccglue_skip \UL@leaders } } +\NewDocumentCommand \xeCJKfntefon { s t- s o } { - \bool_set:Nn \l__xeCJK_ulem_skip_bool { #1 && #3 } - \bool_set_eq:NN \l__xeCJK_ulem_subtract_bool #2 + \xeCJK_ulem_boot:NNNn #1#2#3 {#4} \ULon } -\bool_new:N \l__xeCJK_ulem_subtract_bool -\bool_new:N \l__xeCJK_ulem_skip_bool \cs_new_eq:NN \xeCJK_ulem_on:n \UL@on \cs_set_protected:Npn \UL@on #1 { \xeCJK_ulem_on:n { \xeCJK_ulem_left: #1 \xeCJK_ulem_right: } } @@ -660,19 +687,25 @@ } \ULon } -\DeclareDocumentCommand \CJKunderanyline - { > { \ReverseBoolean } s t- > { \ReverseBoolean } s m m } +\DeclareDocumentCommand \CJKunderanyline { s t- s o m m } { \c_group_begin_token + \xeCJK_ulem_boot:NNNn #1#2#3 {#4} \xeCJK_fntef_initial:nn - {#5} + {#6} { \box_move_down:nn - {#4} + {#5} { \box_use:N \l__xeCJK_fntef_box } } - \bool_set:Nn \l__xeCJK_ulem_skip_bool { #1 && #3 } - \bool_set_eq:NN \l__xeCJK_ulem_subtract_bool #2 + \tl_if_empty:NF \l__xeCJK_ulem_boxdepth_tl + { \box_set_dp:Nn \ULC@box { \l__xeCJK_ulem_boxdepth_tl } } + \tl_if_empty:NF \l__xeCJK_ulem_sep_tl + { + \bool_set_true:N \l__xeCJK_fntef_bool + \dim_set:Nn \l__xeCJK_fntef_dim + { \l__xeCJK_ulem_sep_tl + \box_dp:N \ULC@box } + } \ULon } \cs_new_protected:Npn \xeCJK_fntef_boot:nnNNNn #1#2#3#4#5#6 @@ -684,8 +717,18 @@ \IfNoValueF {#6} { \keys_set:nn { xeCJK / options / #1 } {#6} } \bool_set_eq:Nc \l__xeCJK_ulem_skip_bool { l__xeCJK_#2_skip_bool } + \bool_set_eq:Nc \l__xeCJK_ulem_hidden_bool { l__xeCJK_#2_hidden_bool } \bool_set_eq:Nc \l__xeCJK_ulem_subtract_bool { l__xeCJK_#2_subtract_bool } } +\cs_new_protected:Npn \xeCJK_ulem_boot:NNNn #1#2#3#4 + { + \bool_if:nT { #1 || #3 } + { \bool_set_false:N \l__xeCJK_ulem_skip_bool } + \IfBooleanT #2 + { \bool_set_true:N \l__xeCJK_ulem_subtract_bool } + \IfNoValueF {#4} + { \keys_set:nn { xeCJK / options / ulem } {#4} } + } \cs_new_protected_nopar:Npn \xeCJK_fntef_initial:n { \xeCJK_leave_vmode: @@ -753,12 +796,14 @@ symbol / sep .tl_set:N = \l__xeCJK_symbol_sep_tl , symbol / boxdepth .tl_set:N = \l__xeCJK_symbol_boxdepth_tl , underline / skip .bool_set:N = \l__xeCJK_uline_skip_bool , + underline / hidden .bool_set:N = \l__xeCJK_uline_hidden_bool , underline / subtract .bool_set:N = \l__xeCJK_uline_subtract_bool , underline / thickness .tl_set:N = \l__xeCJK_uline_thickness_tl , underline / depth .tl_set:N = \l__xeCJK_uline_depth_tl , underline / sep .tl_set:N = \l__xeCJK_uline_sep_tl , underline / format .tl_set:N = \l__xeCJK_uline_format_tl , underdblline / skip .bool_set:N = \l__xeCJK_udbline_skip_bool , + underdblline / hidden .bool_set:N = \l__xeCJK_udbline_hidden_bool , underdblline / subtract .bool_set:N = \l__xeCJK_udbline_subtract_bool , underdblline / thickness .tl_set:N = \l__xeCJK_udbline_thickness_tl , underdblline / depth .tl_set:N = \l__xeCJK_udbline_depth_tl , @@ -766,19 +811,27 @@ underdblline / format .tl_set:N = \l__xeCJK_udbline_format_tl , underdblline / gap .tl_set:N = \l__xeCJK_udbline_gap_tl , underwave / skip .bool_set:N = \l__xeCJK_uwave_skip_bool , + underwave / hidden .bool_set:N = \l__xeCJK_uwave_hidden_bool , underwave / subtract .bool_set:N = \l__xeCJK_uwave_subtract_bool , underwave / symbol .tl_set:N = \l__xeCJK_uwave_symbol_tl , underwave / depth .tl_set:N = \l__xeCJK_uwave_depth_tl , underwave / sep .tl_set:N = \l__xeCJK_uwave_sep_tl , underwave / format .tl_set:N = \l__xeCJK_uwave_format_tl , sout / skip .bool_set:N = \l__xeCJK_sout_skip_bool , + sout / hidden .bool_set:N = \l__xeCJK_sout_hidden_bool , sout / subtract .bool_set:N = \l__xeCJK_sout_subtract_bool , sout / thickness .tl_set:N = \l__xeCJK_sout_thickness_tl , sout / height .tl_set:N = \l__xeCJK_sout_height_tl , sout / format .tl_set:N = \l__xeCJK_sout_format_tl , xout / skip .bool_set:N = \l__xeCJK_xout_skip_bool , + xout / hidden .bool_set:N = \l__xeCJK_xout_hidden_bool , xout / subtract .bool_set:N = \l__xeCJK_xout_subtract_bool , - xout / format .tl_set:N = \l__xeCJK_xout_format_tl + xout / format .tl_set:N = \l__xeCJK_xout_format_tl , + ulem / skip .bool_set:N = \l__xeCJK_ulem_skip_bool , + ulem / hidden .bool_set:N = \l__xeCJK_ulem_hidden_bool , + ulem / subtract .bool_set:N = \l__xeCJK_ulem_subtract_bool , + ulem / sep .tl_set:N = \l__xeCJK_ulem_sep_tl , + ulem / boxdepth .tl_set:N = \l__xeCJK_ulem_boxdepth_tl } \clist_map_inline:nn { underdot , underline , underdblline , underwave , sout , xout } @@ -791,9 +844,7 @@ underdot / symbol = \normalfont . , underdot / depth = 0.20 em , underdot / sep = 0.04 em , - underdot / boxdepth = \c_max_dim , symbol / sep = \c_zero_dim , - symbol / boxdepth = \c_max_dim , underline / skip = true , underline / thickness = \ULthickness , underline / depth = 0.20 em , @@ -869,19 +920,23 @@ { \keys_set:nn { xeCJK / options / #1 } {#3} } \xeCJK_fntef_sbox:n {#5} \bool_if:NTF \l__xeCJK_fntef_bool - { \xeCJK_make_under_symbol:nn { \l__xeCJK_fntef_dim } } + { \xeCJK_make_under_symbol:n { \l__xeCJK_fntef_dim } } { \bool_set_true:N \l__xeCJK_fntef_bool - \xeCJK_make_under_symbol:nn {#4} + \xeCJK_make_under_symbol:n {#4} + } + \tl_if_empty:cF { l__xeCJK_#2_boxdepth_tl } + { + \box_set_dp:Nn \l__xeCJK_under_symbol_box + { \use:c { l__xeCJK_#2_boxdepth_tl } } } - { \use:c { l__xeCJK_#2_boxdepth_tl } } \dim_set:Nn \l__xeCJK_fntef_dim { \use:c { l__xeCJK_#2_sep_tl } + \box_dp:N \l__xeCJK_under_symbol_box } \xeCJK_swap_cs:NN \CJKsymbol \__xeCJK_under_CJKsymbol:N \__xeCJK_restore_shipout_CJKsymbol: } \box_new:N \l__xeCJK_under_symbol_box -\cs_new_protected:Npn \xeCJK_make_under_symbol:nn #1#2 +\cs_new_protected:Npn \xeCJK_make_under_symbol:n #1 { \hbox_set:Nn \l__xeCJK_under_symbol_box { @@ -895,8 +950,6 @@ } } } - \dim_compare:nNnF {#2} = \c_max_dim - { \box_set_dp:Nn \l__xeCJK_under_symbol_box {#2} } } \cs_new_protected:Npn \__xeCJK_restore_shipout_CJKsymbol: { diff --git a/Master/texmf-dist/tex/xelatex/xecjk/xunicode-addon.sty b/Master/texmf-dist/tex/xelatex/xecjk/xunicode-addon.sty index 98a8c6e43ab..0b502a778e9 100644 --- a/Master/texmf-dist/tex/xelatex/xecjk/xunicode-addon.sty +++ b/Master/texmf-dist/tex/xelatex/xecjk/xunicode-addon.sty @@ -6,7 +6,7 @@ %% %% xeCJK.dtx (with options: `xunicode') %% -%% $Id: xeCJK.dtx 729 2014-11-05 13:46:36Z sobenlee@gmail.com $ +%% $Id: xeCJK.dtx 737 2014-11-10 17:04:31Z sobenlee@gmail.com $ %% $URL: https://ctex-kit.googlecode.com/svn/trunk/xeCJK/xeCJK.dtx $ %% ----------------------------------------------------------------- %% Author: @@ -33,11 +33,11 @@ %% \NeedsTeXFormat{LaTeX2e} \RequirePackage{expl3} -\GetIdInfo$Id: xeCJK.dtx 729 2014-11-05 13:46:36Z sobenlee@gmail.com $ +\GetIdInfo$Id: xeCJK.dtx 737 2014-11-10 17:04:31Z sobenlee@gmail.com $ {addon file for xunicode} \ProvidesExplPackage {xunicode-addon} - {\ExplFileDate}{3.2.14}{\ExplFileDescription} + {\ExplFileDate}{3.2.15}{\ExplFileDescription} \pdftex_if_engine:T { \msg_new:nnnn { xunicode-addon } { cannot-use-pdftex } diff --git a/Master/texmf-dist/tex/xelatex/xecjk/xunicode-extra.def b/Master/texmf-dist/tex/xelatex/xecjk/xunicode-extra.def index 366cd74108c..0bd04901a1f 100644 --- a/Master/texmf-dist/tex/xelatex/xecjk/xunicode-extra.def +++ b/Master/texmf-dist/tex/xelatex/xecjk/xunicode-extra.def @@ -6,7 +6,7 @@ %% %% xeCJK.dtx (with options: `xunextra') %% -%% $Id: xeCJK.dtx 729 2014-11-05 13:46:36Z sobenlee@gmail.com $ +%% $Id: xeCJK.dtx 737 2014-11-10 17:04:31Z sobenlee@gmail.com $ %% $URL: https://ctex-kit.googlecode.com/svn/trunk/xeCJK/xeCJK.dtx $ %% ----------------------------------------------------------------- %% Author: @@ -31,11 +31,11 @@ %% The Current Maintainer of this work are Leo Liu and Qing Lee. %% ----------------------------------------------------------------- %% -\GetIdInfo$Id: xeCJK.dtx 729 2014-11-05 13:46:36Z sobenlee@gmail.com $ +\GetIdInfo$Id: xeCJK.dtx 737 2014-11-10 17:04:31Z sobenlee@gmail.com $ {extra definition for xunicode} \ProvidesExplFile {xunicode-extra.def} - {\ExplFileDate}{3.2.14}{\ExplFileDescription} + {\ExplFileDate}{3.2.15}{\ExplFileDescription} \ExplSyntaxOff \DeclareUTFComposite\textsuperscript \DeclareUTFComposite\textsubscript -- cgit v1.2.3