diff options
Diffstat (limited to 'Master/texmf-dist/source/xelatex/xecjk/xeCJK.dtx')
-rw-r--r-- | Master/texmf-dist/source/xelatex/xecjk/xeCJK.dtx | 353 |
1 files changed, 220 insertions, 133 deletions
diff --git a/Master/texmf-dist/source/xelatex/xecjk/xeCJK.dtx b/Master/texmf-dist/source/xelatex/xecjk/xeCJK.dtx index 5d995356257..2f8fcd16556 100644 --- a/Master/texmf-dist/source/xelatex/xecjk/xeCJK.dtx +++ b/Master/texmf-dist/source/xelatex/xecjk/xeCJK.dtx @@ -194,7 +194,7 @@ Copyright and Licence %<*package|config|fntef|listings|xunicode|xunextra> %<!(config|xunextra)>\NeedsTeXFormat{LaTeX2e} %<!(config|xunextra)>\RequirePackage{expl3} -%<+!driver>\GetIdInfo$Id$ +%<+!driver>\GetIdInfo$Id: xeCJK.dtx 10a8836 2016-08-27 11:02:24 +0800 Qing Lee <sobenlee@gmail.com> $ %<package> {Typesetting CJK scripts with XeLaTeX} %<config> {Configuration file for xeCJK package} %<fntef> {xeCJK font effect} @@ -207,7 +207,7 @@ Copyright and Licence %<listings>\ProvidesExplPackage{xeCJK-listings} %<xunicode>\ProvidesExplPackage{xunicode-addon} %<xunextra>\ProvidesExplFile{xunicode-extra.def} -%<!driver> {\ExplFileDate}{3.4.0}{\ExplFileDescription} +%<!driver> {\ExplFileDate}{3.4.1}{\ExplFileDescription} %</package|config|fntef|listings|xunicode|xunextra> %<*driver> \documentclass{ctxdoc} @@ -275,7 +275,7 @@ Copyright and Licence % \changes{v3.3.2}{2015/05/15}{随 Unicode 7.0.0 更新简繁汉字映射。} % \changes{v3.3.3}{2015/09/25}{更新 \hologo{LaTeX3} 代码。} % -% \CheckSum{10060} +% \CheckSum{10130} % \GetFileId{xeCJK.sty} % % \title{\bfseries\pkg{xeCJK} 宏包} @@ -668,7 +668,7 @@ Copyright and Licence % 和 |AutoFakeSlant| 选项,以便配合全局伪粗体和伪斜体的设定。 % \end{function} % -% \begin{function}{AutoFakeBold,AutoFakeSlant} +% \begin{function}[label = ]{AutoFakeBold,AutoFakeSlant} % \begin{syntax} % AutoFakeBold = \Arg{\TF|数字} % AutoFakeSlant = \Arg{\TF|数字} @@ -808,7 +808,7 @@ Copyright and Licence % 作为数学公式中的 CJK 字体。 % \end{function} % -% \begin{function}[EXP]{\setCJKfallbackfamilyfont} +% \begin{function}[EXP, label = ]{\setCJKfallbackfamilyfont} % \begin{syntax} % \tn{setCJKfallbackfamilyfont} \Arg{family} \oarg{font features} \Arg{font name} % \end{syntax} @@ -1277,7 +1277,7 @@ Copyright and Licence % \end{SideBySideExample} % \end{function} % -% \medskip +% \bigskip % % 对上述六种对象,\pkg{xeCJKfntef} 提供了一些选项,设置点或线的位置和颜色。可以用 % \tn{xeCJKsetup} 预先统一设置它们,也可以在使用时特别设置。 @@ -1309,12 +1309,18 @@ Copyright and Licence % 设置线或点的格式,比如颜色。 % \end{function} % +% \begin{function}[added=2016-06-03]{textformat} +% 设置下划线或点的正文的格式。例如:\smallskip +% \begin{Example}[frame=single,numbers=left,gobble=6] +% \CJKunderline[textformat=\color{red}]{虚室生白,吉祥止止}\\ +% \CJKunderdot[textformat=\bfseries, format=\color{blue}]{虚室生白,吉祥止止} +% \end{Example} +% \end{function} +% % \begin{function}{symbol} % 设置 \tn{CJKunderwave} 或 \tn{CJKunderdot} 的符号。 % \end{function} % -% \smallskip -% % 例如,波浪线 \tn{CJKunderwave} 的符号不会随字号而变化,在小字号下不好看。我们可以 % 将它改为随字号而变化大小: % @@ -1354,15 +1360,13 @@ Copyright and Licence % % \begin{function}{height} % 设置删除线 \tn{CJKsout} 的高度(线的中心到基线的距离)。初始值是 \texttt{0.35em}。 -% \end{function} -% -% \smallskip % -% 例如,我们可以设置 \tn{CJKsout} 的厚度和颜色,让它具有类似高亮的效果: +% 例如,我们可以设置 \tn{CJKsout} 的厚度和颜色,让它具有类似高亮的效果:\smallskip % -% \begin{Example}[frame=single,numbers=left,gobble=4] -% \CJKsout*[thickness=2.5ex, format=\color{yellow}]{瞻彼阕者,虚室生白,吉祥止止} -% \end{Example} +% \begin{Example}[frame=single,numbers=left,gobble=4] +% \CJKsout*[thickness=2.5ex, format=\color{yellow}]{瞻彼阕者,虚室生白,吉祥止止} +% \end{Example} +% \end{function} % % \medskip % @@ -1374,15 +1378,13 @@ Copyright and Licence % \tn{CJKunderanyline} [*] [-] \oarg{选项} \Arg{深度} \Arg{下划内容} \Arg{文本内容} % \end{syntax} % \pkg{xeCJKfntef} 先将 \meta{下划内容} 放进一个盒子(\tn{xeCJKfntefbox})里,然后 -% 向下移动 \meta{深度} 给定的距离,再用于填充。可用的 \meta{选项} 是 +% 向下移动 \meta{深度} 给定的距离,再用于填充。可用的 \meta{选项} 是 \texttt{textformat}、 % \texttt{skip}、\texttt{hidden}、\texttt{subtract}、\texttt{sep} 和 % \texttt{boxdepth}。选项 \texttt{sep} 和 \texttt{boxdepth} 的初始值是空,表示 % 禁用该选项的功能。可以在 \tn{xeCJKsetup} 中通过对象 \texttt{ulem} 来设置。 % \end{function} % -% \smallskip -% -% 例如,高亮效果也可以如下实现: +% 例如,高亮效果也可以如下实现:\smallskip % % \begin{Example}[frame=single,numbers=left,gobble=4] % \CJKunderanyline*{0.5ex}{\color{yellow}\rule{2pt}{2.5ex}}{虚室生白,吉祥止止} @@ -1394,13 +1396,11 @@ Copyright and Licence % \end{syntax} % \pkg{xeCJKfntef} 将 \meta{符号} 放进一个盒子(\tn{xeCJKfntefbox})里。 % \meta{深度} 参数用于设置盒子顶部的深度(基线到盒子顶部的距离)。 -% 可用的 \meta{选项} 是 \texttt{sep} 和 \texttt{boxdepth},意义与 +% 可用的 \meta{选项} 是 \texttt{textformat}、\texttt{sep} 和 \texttt{boxdepth},意义与 % \tn{CJKunderdot} 的相同。 % \end{function} % -% \smallskip -% -% 例如,给汉字加三角形,可以如下设置: +% 例如,给汉字加三角形,可以如下设置:\smallskip % % \begin{Example}[frame=single,numbers=left,gobble=4] % \CJKunderanysymbol[sep=0.1em]{0.2em}{\tiny$\triangle$} @@ -1412,17 +1412,17 @@ Copyright and Licence % \tn{xeCJKfntefon} [*] [-] \oarg{选项} % \end{syntax} % 功能与用法 \pkg{ulem} 宏包的 \tn{ULon} 相同,扩展了可选参数符号 |*| 和 |-|, -% 可用的 \meta{选项} 是 \texttt{skip}、\texttt{hidden} 和 \texttt{subtract}。 -% 这三个选项对 \pkg{ulem} 宏包定义的 \tn{uline} 等命令也有效,需要在 +% 可用的 \meta{选项} 是 \texttt{textformat}、 \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} +% \begin{Example}[frame=single,numbers=left,gobble=6] +% \xeCJKsetup{ulem={textformat=\bfseries\color{red}, skip=true}} % \uline{虚室生白,吉祥止止} -% \end{SideBySideExample} +% \end{Example} % \end{function} % -% \smallskip +% \medskip % % 此外,\pkg{xeCJKfntef} 还提供了指定宽度,让汉字分散对齐的的环境 % \env{CJKfilltwosides} 和 \env{CJKfilltwosides*}。 @@ -2329,7 +2329,7 @@ Copyright and Licence \clist_const:Nn \c_@@_iteration_marks_chars_clist { "3005 , "303B , "309D , "309E , "30FD , "30FE } \clist_const:Nn \c_@@_NS_chars_clist - { "30FB , "FE54 , "FE55 , "FF1A , "FF1B , "FF65 } + { "30FB , "FE54 , "FE55 , "FF1A , "FF1B , "FF65 , "16FE0 } % \end{macrocode} % \end{macro} % @@ -2392,8 +2392,10 @@ Copyright and Licence % \end{macrocode} % \end{macro} % -% \begin{macro}[var,internal]{\c_@@_CJK_chars_clist} % \changes{v3.3.3}{2015/06/25}{补充 Ext-E。} +% \changes{v3.4.1}{2016/08/18}{补充 Unicode 9.0.0 的西夏文。} +% +% \begin{macro}[var,internal]{\c_@@_CJK_chars_clist} % CJK 字符类,包括文字和标点符号。 % \begin{macrocode} \clist_const:Nn \c_@@_CJK_chars_clist @@ -2496,6 +2498,18 @@ Copyright and Licence % \begin{macrocode} "FF00 -> "FFEF , % \end{macrocode} +% \item Ideographic Symbols and Punctuation (表意文字符号及标点) +% \begin{macrocode} + "16FE0 -> "16FFF , +% \end{macrocode} +% \item Tangut (西夏文) +% \begin{macrocode} + "17000 -> "187FF , +% \end{macrocode} +% \item Tangut Components (西夏文部首) +% \begin{macrocode} + "18800 -> "18AFF , +% \end{macrocode} % \item Kana Supplement (日文假名增补) % \begin{macrocode} "1B000 -> "1B0FF , @@ -3366,6 +3380,8 @@ Copyright and Licence % \end{macrocode} % \end{macro} % +% \changes{v3.4.1}{2016/05/21}{修复 \texttt{CJKspace} 功能失效。} +% % \begin{macro}{CJKspace} % 是否保留 CJK 文字间的空白,默认不保留。 % \begin{macrocode} @@ -3375,14 +3391,20 @@ Copyright and Licence CJKspace / true .code:n = { \bool_set_true:N \l_@@_reserve_space_bool - \cs_set_eq:NN \@@_maybe_reserve_space: \@@_reserve_space: + \cs_set_eq:NN \@@_ignore_space_end: + \@@_maybe_reserve_space: + \cs_set_eq:NN \@@_boundary_group_end_space: + \@@_boundary_maybe_reserve_space: \cs_set_protected_nopar:Npn \@@_ccglue_or_space: { \xeCJK_space_glue: } } , CJKspace / false .code:n = { \bool_set_false:N \l_@@_reserve_space_bool - \xeCJK_cs_clear:N \@@_maybe_reserve_space: + \cs_set_eq:NN \@@_ignore_space_end: + \group_align_safe_end: + \cs_set_eq:NN \@@_boundary_group_end_space: + \@@_boundary_group_end_aux: \cs_set_protected_nopar:Npn \@@_ccglue_or_space: { \CJKglue } } , @@ -3414,41 +3436,46 @@ Copyright and Licence { \xeCJK_class_group_end: \CJKecglue } } { + \group_align_safe_begin: \bool_if:NTF \l_@@_peek_ignore_spaces_bool { - \group_align_safe_begin: \token_if_macro:NTF \l_peek_token - { - \group_align_safe_end: - \xeCJK_class_group_end: - { \xeCJK_make_node:n { CJK-space } } - \xeCJK_space_or_xecglue: - } - { - \group_align_safe_end: - \xeCJK_class_group_end: - { \xeCJK_make_node:n { CJK-space } } - \@@_maybe_reserve_space: - } + { \@@_boundary_reserve_space: } + { \@@_boundary_group_end_space: } } { \token_if_eq_meaning:NNTF \l_peek_token \scan_stop: { \@@_CJK_and_Boundary_relax:N } - { \@@_CJK_and_Boundary_aux: } + { \@@_boundary_group_end:n { CJK } } } } } -\cs_new_protected_nopar:Npn \@@_CJK_and_Boundary_aux: - { \xeCJK_class_group_end: { \xeCJK_make_node:n { CJK } } } +\cs_new_protected_nopar:Npn \@@_boundary_reserve_space: + { + \@@_boundary_group_end_aux: + \xeCJK_space_or_xecglue: + } +\cs_new_protected_nopar:Npn \@@_boundary_maybe_reserve_space: + { + \token_if_letter:NTF \l_peek_token + { \@@_boundary_reserve_space: } + { \@@_boundary_group_end_aux: } + } +\cs_new_protected_nopar:Npn \@@_boundary_group_end_aux: + { \@@_boundary_group_end:n { CJK-space } } +\cs_new_eq:NN \@@_boundary_group_end_space: \@@_boundary_group_end_aux: \cs_new_protected:Npn \@@_CJK_and_Boundary_relax:N #1 { - \@@_CJK_and_Boundary_aux: + \@@_boundary_group_end:n { CJK } \token_if_eq_meaning:NNTF #1 \scan_stop: {#1} { \cs_set_eq:NN #1 \scan_stop: #1 } } -\cs_new_protected:Npn \@@_reserve_space: - { \token_if_letter:NT \l_peek_token { \xeCJK_space_or_xecglue: } } -\cs_new_eq:NN \@@_maybe_reserve_space: \prg_do_nothing: +\cs_new_protected_nopar:Npn \@@_boundary_group_end:n #1 + { + \group_align_safe_end: + \xeCJK_class_group_end: + { \xeCJK_make_node:n {#1} } + } % \end{macrocode} % \end{macro} % @@ -3468,11 +3495,23 @@ Copyright and Licence { \xeCJK_remove_node: { \xeCJK_make_node:n { CJK-space } } } \group_align_safe_begin: \token_if_macro:NTF \l_peek_token - { \group_align_safe_end: \xeCJK_space_or_xecglue: } - { \group_align_safe_end: \@@_maybe_reserve_space: } + { \@@_reserve_space_aux: } + { \@@_ignore_space_end: } } } } +\cs_new_protected:Npn \@@_reserve_space_aux: + { + \group_align_safe_end: + \xeCJK_space_or_xecglue: + } +\cs_new_protected:Npn \@@_maybe_reserve_space: + { + \token_if_letter:NTF \l_peek_token + { \@@_reserve_space_aux: } + { \group_align_safe_end: } + } +\cs_new_eq:NN \@@_ignore_space_end: \group_align_safe_end: % \end{macrocode} % \end{macro} % @@ -7033,7 +7072,7 @@ Copyright and Licence % \end{macrocode} % \end{macro} % -% \begin{macro}{CJKnumber,indentfirst} +% \begin{macro}[int]{CJKnumber,indentfirst} % \changes{v3.2.11}{2014/03/14}{放弃 \texttt{indentfirst} 和 \texttt{CJKnumber} 选项。} % \texttt{CJKnumber} 和 \texttt{indentfirst} 是过时选项。 % \begin{macrocode} @@ -7966,60 +8005,68 @@ Copyright and Licence \addto@hook \UL@hook { \xeCJK_hook_for_ulem: } % \end{macrocode} % +% \changes{v3.4.1}{2016/06/03}{新的下划线选项 \texttt{textformat}。} +% % \begin{macro}[internal]{\xeCJK_hook_for_ulem:} % \changes{v3.1.0}{2012/11/16}{简化对 \pkg{ulem} 宏包的兼容补丁。} % \changes{v3.1.1}{2012/12/08}{完全处理下划线里的标点符号的有关问题。} % \begin{macrocode} \cs_new_protected_nopar:Npn \xeCJK_hook_for_ulem: { + \xeCJK_ulem_detect_node: + \l_@@_ulem_text_format_tl \bool_if:NF \l_@@_ulem_hook_used_bool { \bool_set_true:N \l_@@_ulem_hook_used_bool - \@@_ulem_initial: - \bool_if:NT \l_@@_ulem_subtract_bool - { - \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: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 - \xeCJK_cs_clear:N \@@_ulem_skip_punct_begin: - \xeCJK_cs_clear:N \@@_ulem_skip_punct_end: - } - \xeCJK_glue_to_skip:nN - { - \cs_set_eq:NN \ \tex_space:D - \cs_set_eq:NN \penalty \tex_penalty:D - \cs_set_eq:NN \hskip \skip_horizontal:N - \CJKglue - } \l_@@_ccglue_skip - \xeCJK_glue_to_skip:nN - { - \cs_set_eq:NN \ \tex_space:D - \cs_set_eq:NN \penalty \tex_penalty:D - \cs_set_eq:NN \hskip \skip_horizontal:N - \CJKecglue - } \l_@@_ecglue_skip - \xeCJK_glue_to_skip:nN { \xeCJK_space_glue: } \l_@@_space_skip - \cs_set_protected_nopar:Npn \CJKglue - { \@@_ulem_glue:n \l_@@_ccglue_skip } - \cs_set_protected_nopar:Npn \CJKecglue - { \@@_ulem_glue:n \l_@@_ecglue_skip } - \cs_set_protected_nopar:Npn \xeCJK_space_glue: - { \@@_ulem_glue:n \l_@@_space_skip } - \keys_set:nn { xeCJK / options } - { CheckFullRight = false , xCJKecglue = false } - \xeCJK_ulem_detect_node: + \@@_ulem_hook: + } + \xeCJK_ulem_begin_node: + } +\cs_new_protected_nopar:Npn \@@_ulem_hook: + { + \@@_ulem_initial: + \bool_if:NT \l_@@_ulem_subtract_bool + { + \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: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 + \xeCJK_cs_clear:N \@@_ulem_skip_punct_begin: + \xeCJK_cs_clear:N \@@_ulem_skip_punct_end: + } + \xeCJK_glue_to_skip:nN + { + \cs_set_eq:NN \ \tex_space:D + \cs_set_eq:NN \penalty \tex_penalty:D + \cs_set_eq:NN \hskip \skip_horizontal:N + \CJKglue + } \l_@@_ccglue_skip + \xeCJK_glue_to_skip:nN + { + \cs_set_eq:NN \ \tex_space:D + \cs_set_eq:NN \penalty \tex_penalty:D + \cs_set_eq:NN \hskip \skip_horizontal:N + \CJKecglue + } \l_@@_ecglue_skip + \xeCJK_glue_to_skip:nN { \xeCJK_space_glue: } \l_@@_space_skip + \cs_set_protected_nopar:Npn \CJKglue + { \@@_ulem_glue:n \l_@@_ccglue_skip } + \cs_set_protected_nopar:Npn \CJKecglue + { \@@_ulem_glue:n \l_@@_ecglue_skip } + \cs_set_protected_nopar:Npn \xeCJK_space_glue: + { \@@_ulem_glue:n \l_@@_space_skip } + \keys_set:nn { xeCJK / options } + { CheckFullRight = false , xCJKecglue = false } } \skip_new:N \l_@@_space_skip \bool_new:N \l_@@_ulem_hook_used_bool @@ -8044,9 +8091,9 @@ Copyright and Licence \hbox_set_end: \tex_unskip:D \tex_unskip:D \tex_unskip:D \xeCJK_ulem_right_skip: - \xeCJK_ulem_right_node: - \int_set:Nn \tex_spacefactor:D { \UL@spfactor } - \c_group_end_token + \xeCJK_ulem_group_end: + \xeCJK_ulem_right_node: + \int_set:Nn \tex_spacefactor:D { \UL@spfactor } } \cs_new_protected_nopar:Npn \@@_ulem_loop:nw { @@ -8078,6 +8125,7 @@ Copyright and Licence \dim_compare:nNnTF \tex_lastkern:D = \c_zero_dim { \xeCJK_cs_clear:N \xeCJK_ulem_left_node: + \xeCJK_cs_clear:N \xeCJK_ulem_begin_node: \cs_set_eq:NN \@@_ulem_hskip:n \xeCJK_ulem_hskip:n } { @@ -8086,22 +8134,25 @@ Copyright and Licence \dim_compare:nNnTF \tex_lastkern:D = { - \l_@@_tmp_dim } { \tex_unkern:D - { \xeCJK_make_node:n { ulem-left } } \cs_set_protected_nopar:Npx \xeCJK_ulem_left_node: { \tex_kern:D - \dim_use:N \l_@@_tmp_dim \exp_stop_f: \tex_kern:D \dim_use:N \l_@@_tmp_dim \exp_stop_f: } + \cs_set_protected_nopar:Npn \xeCJK_ulem_begin_node: + { { \xeCJK_make_node:n { ulem-begin } } } \cs_set_eq:NN \@@_ulem_hskip:n \@@_ulem_hskip_first:n } { \tex_kern:D \l_@@_tmp_dim \xeCJK_cs_clear:N \xeCJK_ulem_left_node: + \xeCJK_cs_clear:N \xeCJK_ulem_begin_node: \cs_set_eq:NN \@@_ulem_hskip:n \xeCJK_ulem_hskip:n } } } -\xeCJK_declare_node:n { ulem-left } +\xeCJK_declare_node:n { ulem-begin } +\cs_new_eq:NN \xeCJK_ulem_begin_node: \prg_do_nothing: % \end{macrocode} % \end{macro} % @@ -8111,7 +8162,7 @@ Copyright and Licence % \begin{macrocode} \cs_new_protected_nopar:Npn \@@_ulem_hskip_first:n #1 { - \xeCJK_if_last_node:nTF { ulem-left } + \xeCJK_if_last_node:nTF { ulem-begin } { \xeCJK_remove_node: \skip_horizontal:n {#1} @@ -8165,8 +8216,7 @@ Copyright and Licence % \end{macro} % % \begin{macro}[internal]{\xeCJK_ulem_var_leaders:} -% 第一次画下划线时,先向右平移 \tn{CJKulineleftskip},再画缩小了相同长度的下划线, -% 让左侧有间距。 +% 第一次画下划线时,不需要向左平移 \tn{UL@pixel},让左侧有间距。 % \begin{macrocode} \cs_new_protected_nopar:Npn \xeCJK_ulem_leaders: { \@@_ulem_var_leaders: } @@ -8186,7 +8236,7 @@ Copyright and Licence % % \begin{macro}[internal]{\xeCJK_ulem_right_skip:} % 在下划线完全画好之后,我们检测最后的情况。用 \tn{unskip} 去掉最后一个下划线,再 -% 重新画一个减少 \tn{CJKulinerightskip} 的。 +% 重新画一个减少 \tn{UL@pixel} 的。 % \begin{macrocode} \cs_new_eq:NN \xeCJK_ulem_right_skip: \prg_do_nothing: \cs_new_protected_nopar:Npn \@@_ulem_right_skip: @@ -8350,7 +8400,11 @@ Copyright and Licence \xeCJK_if_ulem_patch:TF { \xeCJK_peek_catcode_ignore_spaces:NTF \c_math_toggle_token - { } + { + \xeCJK_class_group_end: \UL@stop + \CJKecglue + \UL@start + } { \bool_if:NTF \l_@@_peek_ignore_spaces_bool { @@ -8673,18 +8727,33 @@ Copyright and Licence % \end{macrocode} % \end{macro} % +% \begin{macro}[int]{\xeCJK_ulem_group_begin:,\xeCJK_ulem_group_end:,\xeCJK_ulem_on:n} +% \begin{macrocode} +\cs_new_protected_nopar:Npn \xeCJK_ulem_group_begin: + { + \xeCJK_leave_vmode: + \c_group_begin_token + } +\cs_new_protected_nopar:Npn \xeCJK_ulem_group_end: + { \c_group_end_token } +\cs_new_protected_nopar:Npn \xeCJK_ulem_on:n + { \ULon } +\cs_new_eq:NN \@@_ulem_on:n \UL@on +\cs_set_protected:Npn \UL@on #1 + { \@@_ulem_on:n { \xeCJK_ulem_left: #1 \xeCJK_ulem_right: } } +% \end{macrocode} +% \end{macro} +% % \begin{macro}{\xeCJKfntefon} % \changes{v3.2.15}{2014/11/07}{完善选项。} % 扩展 \tn{ULon} 的参数。 % \begin{macrocode} \NewDocumentCommand \xeCJKfntefon { s t- s o } { + \xeCJK_leave_vmode: \xeCJK_ulem_boot:NNNn #1#2#3 {#4} - \ULon + \xeCJK_ulem_on:n } -\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: } } % \end{macrocode} % \end{macro} % @@ -8692,7 +8761,7 @@ Copyright and Licence % \begin{macrocode} \DeclareDocumentCommand \CJKunderline { s t- s o } { - \c_group_begin_token + \xeCJK_ulem_group_begin: \xeCJK_fntef_boot:nnNNNn { underline } { uline } #1#2#3 {#4} \xeCJK_fntef_initial:nnn { \l_@@_uline_depth_tl } @@ -8704,7 +8773,7 @@ Copyright and Licence depth \c_zero_dim width .2em } - \ULon + \xeCJK_ulem_on:n } \DeclareDocumentCommand \varCJKunderline { } { \CJKunderline - } @@ -8715,13 +8784,13 @@ Copyright and Licence % \begin{macrocode} \DeclareDocumentCommand \CJKunderwave { s t- s o } { - \c_group_begin_token + \xeCJK_ulem_group_begin: \xeCJK_fntef_boot:nnNNNn { underwave } { uwave } #1#2#3 {#4} \xeCJK_fntef_initial:nnn { \l_@@_uwave_depth_tl } { \l_@@_uwave_sep_tl } { \l_@@_uwave_format_tl \l_@@_uwave_symbol_tl } - \ULon + \xeCJK_ulem_on:n } % \end{macrocode} % \end{macro} @@ -8730,7 +8799,7 @@ Copyright and Licence % \begin{macrocode} \DeclareDocumentCommand \CJKunderdblline { s t- s o } { - \c_group_begin_token + \xeCJK_ulem_group_begin: \xeCJK_fntef_boot:nnNNNn { underdblline } { udbline } #1#2#3 {#4} \xeCJK_fntef_initial:nnn { \l_@@_udbline_depth_tl } @@ -8750,7 +8819,7 @@ Copyright and Licence width .2em } } - \ULon + \xeCJK_ulem_on:n } % \end{macrocode} % \end{macro} @@ -8759,7 +8828,7 @@ Copyright and Licence % \begin{macrocode} \DeclareDocumentCommand \CJKsout { s t- s o } { - \c_group_begin_token + \xeCJK_ulem_group_begin: \xeCJK_fntef_boot:nnNNNn { sout } { sout } #1#2#3 {#4} \xeCJK_fntef_initial:nn { @@ -8774,7 +8843,7 @@ Copyright and Licence { \l_@@_sout_height_tl - \box_ht:N \l_@@_fntef_box / 2 } { \box_use:N \l_@@_fntef_box } } - \ULon + \xeCJK_ulem_on:n } % \end{macrocode} % \end{macro} @@ -8783,7 +8852,7 @@ Copyright and Licence % \begin{macrocode} \DeclareDocumentCommand \CJKxout { s t- s o } { - \c_group_begin_token + \xeCJK_ulem_group_begin: \xeCJK_fntef_boot:nnNNNn { xout } { xout } #1#2#3 {#4} \xeCJK_fntef_initial:nn { @@ -8796,7 +8865,7 @@ Copyright and Licence { \box_dp:N \l_@@_fntef_box / 2 } { \box_use:N \l_@@_fntef_box } } - \ULon + \xeCJK_ulem_on:n } % \end{macrocode} % \end{macro} @@ -8806,7 +8875,7 @@ Copyright and Licence % \begin{macrocode} \DeclareDocumentCommand \CJKunderanyline { s t- s o m m } { - \c_group_begin_token + \xeCJK_ulem_group_begin: \xeCJK_ulem_boot:NNNn #1#2#3 {#4} \xeCJK_fntef_initial:nn {#6} @@ -8823,7 +8892,7 @@ Copyright and Licence \dim_set:Nn \l_@@_fntef_dim { \l_@@_ulem_sep_tl + \box_dp:N \ULC@box } } - \ULon + \xeCJK_ulem_on:n } % \end{macrocode} % \end{macro} @@ -8842,6 +8911,7 @@ Copyright and Licence \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 } + \tl_set_eq:Nc \l_@@_ulem_text_format_tl { l_@@_#2_text_format_tl } } \cs_new_protected:Npn \xeCJK_ulem_boot:NNNn #1#2#3#4 { @@ -8860,7 +8930,6 @@ Copyright and Licence % \begin{macrocode} \cs_new_protected_nopar:Npn \xeCJK_fntef_initial:n { - \xeCJK_leave_vmode: \bool_if:NTF \l_@@_nest_bool { \@@_warning:n { fntef-nesting } } { @@ -8950,9 +9019,11 @@ Copyright and Licence underdot / depth .tl_set:N = \l_@@_udot_depth_tl , underdot / sep .tl_set:N = \l_@@_udot_sep_tl , underdot / format .tl_set:N = \l_@@_udot_format_tl , + underdot / textformat .tl_set:N = \l_@@_udot_text_format_tl , underdot / boxdepth .tl_set:N = \l_@@_udot_boxdepth_tl , symbol / sep .tl_set:N = \l_@@_symbol_sep_tl , symbol / boxdepth .tl_set:N = \l_@@_symbol_boxdepth_tl , + symbol / textformat .tl_set:N = \l_@@_symbol_text_format_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 , @@ -8960,6 +9031,7 @@ Copyright and Licence 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 , + underline / textformat .tl_set:N = \l_@@_uline_text_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 , @@ -8967,6 +9039,7 @@ Copyright and Licence underdblline / depth .tl_set:N = \l_@@_udbline_depth_tl , underdblline / sep .tl_set:N = \l_@@_udbline_sep_tl , underdblline / format .tl_set:N = \l_@@_udbline_format_tl , + underdblline / textformat .tl_set:N = \l_@@_udbline_text_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 , @@ -8975,24 +9048,28 @@ Copyright and Licence 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 , + underwave / textformat .tl_set:N = \l_@@_uwave_text_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 , + sout / textformat .tl_set:N = \l_@@_sout_text_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 / textformat .tl_set:N = \l_@@_xout_text_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 + ulem / boxdepth .tl_set:N = \l_@@_ulem_boxdepth_tl , + ulem / textformat .tl_set:N = \l_@@_ulem_text_format_tl } \clist_map_inline:nn - { underdot , underline , underdblline , underwave , sout , xout } + { underdot , underline , underdblline , underwave , sout , xout , ulem } { \keys_define:nn { xeCJK / options } { #1 .meta:nn = { xeCJK / options / #1 } { ##1 } } @@ -9075,6 +9152,7 @@ Copyright and Licence \xeCJK_ulem_right: \UL@stop \group_begin: \xeCJK_under_symbol_initial:nnnnn {#1} {#2} {#3} {#4} {#5} + \use:c { l_@@_#2_text_format_tl } \UL@start \xeCJK_ulem_right_node: #6 \xeCJK_ulem_right: \UL@stop @@ -9086,8 +9164,11 @@ Copyright and Licence \xeCJK_leave_vmode: \group_begin: \xeCJK_under_symbol_initial:nnnnn {#1} {#2} {#3} {#4} {#5} + \@@_under_symbol_text_format:c { l_@@_#2_text_format_tl } #6 + \xeCJK_ulem_right: \group_end: + \xeCJK_ulem_right_node: } \cs_new_protected:Npn \xeCJK_under_symbol_initial:nnnnn #1#2#3#4#5 { @@ -9110,6 +9191,12 @@ Copyright and Licence \xeCJK_swap_cs:NN \CJKsymbol \@@_under_CJKsymbol:N \@@_restore_shipout_CJKsymbol: } +\cs_new_protected:Npn \@@_under_symbol_text_format:N #1 + { + \tl_if_empty:NF #1 + { \xeCJK_ulem_right: #1 \xeCJK_ulem_right_node: } + } +\cs_generate_variant:Nn \@@_under_symbol_text_format:N { c } \box_new:N \l_@@_under_symbol_box % \end{macrocode} % \end{macro} @@ -9173,7 +9260,7 @@ Copyright and Licence % % % \begin{macro}{CJKfilltwosides} -% \changes{v3.2.4}{2012/06/26}{改用 \texttt{minipage} 和 \LaTeX 表格(\texttt{tabular})来实现。} +% \changes{v3.2.4}{2013/06/26}{改用 \texttt{minipage} 和 \LaTeX 表格(\texttt{tabular})来实现。} % \changes{v3.3.3}{2015/05/30}{确保进入水平模式。} % 使用 \texttt{minipage} 和 \LaTeX 表格(\texttt{tabular})来定义 |CJKfilltwosides| 环境。 % 可选参数 |#1| 表示环境的垂直对齐位置,默认居中;参数 |#2| 表示环境的宽度。 @@ -9242,8 +9329,8 @@ Copyright and Licence % % \subsection{\pkg{xeCJK-listings}} % -% \changes{v3.2.2}{2012/06/04}{增加小宏包 \pkg{xeCJK-listings},用于支持 \pkg{listings} 宏包。} -% \changes{v3.2.3}{2012/06/06}{完善对 \pkg{listings} 宏包的支持。} +% \changes{v3.2.2}{2013/06/04}{增加小宏包 \pkg{xeCJK-listings},用于支持 \pkg{listings} 宏包。} +% \changes{v3.2.3}{2013/06/06}{完善对 \pkg{listings} 宏包的支持。} % % 仿照 \package{luatexja} 宏包中 \pkg{lltjp-listings} 的处理,支持 \package{listings} 宏包。 % @@ -9477,7 +9564,7 @@ Copyright and Licence % \end{macrocode} % \end{macro} % -% \changes{v3.2.4}{2012/07/05} +% \changes{v3.2.4}{2013/07/05} % {使 \pkg{listings} 的 \texttt{breaklines} 选项对 CJK 字符类可用,并保持标点符号的禁则。} % % \begin{macro}[internal] |