texlive[64086] Master/texmf-dist: exam-zh (9aug22)

commits+karl at tug.org commits+karl at tug.org
Tue Aug 9 22:02:09 CEST 2022


Revision: 64086
          http://tug.org/svn/texlive?view=revision&revision=64086
Author:   karl
Date:     2022-08-09 22:02:09 +0200 (Tue, 09 Aug 2022)
Log Message:
-----------
exam-zh (9aug22)

Modified Paths:
--------------
    trunk/Master/texmf-dist/doc/xelatex/exam-zh/CHANGELOG.md
    trunk/Master/texmf-dist/doc/xelatex/exam-zh/doc/back/package.tex
    trunk/Master/texmf-dist/doc/xelatex/exam-zh/doc/body/installation.tex
    trunk/Master/texmf-dist/doc/xelatex/exam-zh/doc/body/usage.tex
    trunk/Master/texmf-dist/doc/xelatex/exam-zh/doc/exam-zh-doc-setup.tex
    trunk/Master/texmf-dist/doc/xelatex/exam-zh/doc/exam-zh-doc.pdf
    trunk/Master/texmf-dist/tex/latex/exam-zh/exam-zh-chinese-english.sty
    trunk/Master/texmf-dist/tex/latex/exam-zh/exam-zh-choices.sty
    trunk/Master/texmf-dist/tex/latex/exam-zh/exam-zh-font.sty
    trunk/Master/texmf-dist/tex/latex/exam-zh/exam-zh-question.sty
    trunk/Master/texmf-dist/tex/latex/exam-zh/exam-zh-symbols.sty
    trunk/Master/texmf-dist/tex/latex/exam-zh/exam-zh.cls

Modified: trunk/Master/texmf-dist/doc/xelatex/exam-zh/CHANGELOG.md
===================================================================
--- trunk/Master/texmf-dist/doc/xelatex/exam-zh/CHANGELOG.md	2022-08-09 20:01:54 UTC (rev 64085)
+++ trunk/Master/texmf-dist/doc/xelatex/exam-zh/CHANGELOG.md	2022-08-09 20:02:09 UTC (rev 64086)
@@ -5,7 +5,39 @@
 格式参照 [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
 并且此项目遵守 [Semantic Versioning](https://semver.org/spec/v2.0.0.html)。
 
+## [0.1.15] - 2022-08-09
 
+### Fixed
+
+- 增加 `\tl_map_inline:nn` 的变体函数修复报错
+
+
+## [0.1.15] - 2022-08-02
+
+### Added
+
+- 增加直立的 pi:`\uppi`
+
+### Fixed
+
+- 修复 `poem` 环境没有 `\zhu` 的注解显示问题
+
+
+## [0.1.14] - 2022-07-30
+
+### Added
+
+- 增加 `fillin/paren-type` 控制括号的半角全角
+- 增加 `fillin/width-type` 控制 `fillin/no-answer-type=none` 下 `width` 的表现
+
+## [0.1.14] - 2022-07-29
+
+### Fixed
+
+- 修复 `solution` 的颜色设置影响密封线问题(#I5JJT3)
+- 修复 `fillin*` 内包含文字和公式的问题(https://gitee.com/zepinglee/exam-zh/issues/I4TJTO#note_12005992_link)
+- 修复 `lstlistings` 环境影响密封线问题(#I5JJT3)
+
 ## [0.1.13] - 2022-07-28
 
 ### Changed

Modified: trunk/Master/texmf-dist/doc/xelatex/exam-zh/doc/back/package.tex
===================================================================
--- trunk/Master/texmf-dist/doc/xelatex/exam-zh/doc/back/package.tex	2022-08-09 20:01:54 UTC (rev 64085)
+++ trunk/Master/texmf-dist/doc/xelatex/exam-zh/doc/back/package.tex	2022-08-09 20:02:09 UTC (rev 64086)
@@ -18,7 +18,7 @@
   \item \pkg{enumitem}:列表
   \item \pkg{tikz}、\pkg{tikzpagenodes}: \TikZ
   \item \pkg{hyperref}:超链接
-  \item \pkg{zref-savepos}:记录。用于 \tn{score} 命令
+  \item \pkg{zref}、\pkg{zref-savepos}:记录位置。
   \item \pkg{ulem}:下划线
   \item \pkg{tcolorbox}:彩框
   \item \pkg{varwidth}:“弹性”的 \env{minipage}

Modified: trunk/Master/texmf-dist/doc/xelatex/exam-zh/doc/body/installation.tex
===================================================================
--- trunk/Master/texmf-dist/doc/xelatex/exam-zh/doc/body/installation.tex	2022-08-09 20:01:54 UTC (rev 64085)
+++ trunk/Master/texmf-dist/doc/xelatex/exam-zh/doc/body/installation.tex	2022-08-09 20:02:09 UTC (rev 64086)
@@ -30,7 +30,7 @@
 
 \begin{figure}[htbp]
   \centering
-  \includegraphics[width = \textwidth]{gitee-release.png}
+  \includegraphics[width = 0.8\textwidth]{gitee-release.png}
   \caption{gitee 发行版}
   \label{figure:gitee发行版}
 \end{figure}

Modified: trunk/Master/texmf-dist/doc/xelatex/exam-zh/doc/body/usage.tex
===================================================================
--- trunk/Master/texmf-dist/doc/xelatex/exam-zh/doc/body/usage.tex	2022-08-09 20:01:54 UTC (rev 64085)
+++ trunk/Master/texmf-dist/doc/xelatex/exam-zh/doc/body/usage.tex	2022-08-09 20:02:09 UTC (rev 64086)
@@ -50,18 +50,22 @@
 
 \subsubsection{正体的数学常数}
 
-\begin{function}{\eu}
+\begin{function}[updated = 2022-08-02]{\eu,\upe}
   正体的自然对数的底“e”。
 \end{function}
 
-\begin{function}{\iu}
+\begin{function}[updated = 2022-08-02]{\iu,\upi}
   正体的虚数单位“i”。
 \end{function}
 
 \tn{eu} 可以理解为 “e upright” 的缩写或者 “Euler's number” 的首字母,\tn{iu} 可以理解为 “i upright” 或 “imaginary unit” 的缩写,这样更方便记忆。
 
-\begin{latexexample}{\tn{eu} 和 \tn{iu} 的效果}
-  $\eu \quad \iu$
+\begin{function}[added = 2022-08-02]{\uppi}
+  正体的圆周率“$\pi$”: “$\uppi$”。
+\end{function}
+
+\begin{latexexample}{\tn{eu}、\tn{iu} 和 \tn{uppi} 的效果}
+  $\eu \quad \iu \quad \uppi$
 \end{latexexample}
 
 
@@ -1953,11 +1957,31 @@
 
 \begin{function}[added = 2022-07-06]{fillin/width}
   \begin{ccnusyntax}[emph={[1]width}]
-    width = (*<skip>*)
+    width = (*<dimension>*)
   \end{ccnusyntax}
-  控制 \kvopt{fillin/type}{line/paren/blank} 下 \tn{fillin} 不显示答案时的长度,可以为弹性长度,默认为 |3em plus 1em minus 1em|。
+  控制 \kvopt{fillin/type}{line/paren/blank} 下 \tn{fillin} 不显示答案时的长度,默认为 |3em|。
 \end{function}
 
+\begin{function}[added = 2022-07-30]{fillin/width-type}
+  \begin{ccnusyntax}[emph={[1]width-type}]
+    width-type = (*<(fill)|normal>*)
+  \end{ccnusyntax}
+  \kvopt{show-answer}{false} 且 \kvopt{no-answer-type}{none} 时 \opt{fillin/width} 设置时若 \meta{width} 的长度超过了当前行的剩余长度,则多余部分在下一行的表现。\opt{fill} 表示多余部分只要不超过 \tn{linewidth} 就自动 fill 为 \tn{linewidth} 的长度(此时建议 \opt{width} 的值不是 \tn{linewidth} 的整数倍,而是(以最终一共两行为例)比如 |1.5\linewidth|);\opt{normal} 表示多余部分严格按照 \meta{width} 的值排版。由于使用了 \pkg{linegoal},需要编译至少两次才能获得正确的效果。
+\end{function}
+
+\begin{latexexample}{\opt{width-type} 示例}
+  \examsetup{fillin/no-answer-type=none}
+  测试 测试测试,测试 \fillin[width = 3em][答案]
+
+  测试 测试测试,测试 \fillin[width = 0.5\linewidth][答案]
+
+  测试
+  \fillin[width = 1.1\linewidth][答案] 测试
+
+  测试
+  \fillin[width-type = normal, width = 1.1\linewidth][答案] 测试
+\end{latexexample}
+
 \begin{function}[added = 2022-07-15]{fillin/color}
   \begin{ccnusyntax}[emph={[1]color}]
     color = (*\meta{color}*)
@@ -1974,6 +1998,14 @@
 \end{function}
 
 
+\begin{function}[added = 2022-07-30]{fillin/paren-type}
+  \begin{ccnusyntax}[emph={[1]paren-type}]
+    paren-type = (*<(banjiao)|quanjiao>*)
+  \end{ccnusyntax}
+  设置 \tn{fillin} 中 \kvopt{type}{paren} 时的括号类型。\opt{banjiao} 表示半角括号;\opt{quanjiao} 表示全角括号。
+\end{function}
+
+
 \subsubsection{解答题} \label{subsubsec:参数-解答题}
 
 \begin{function}[added = 2022-07-01]{solution}

Modified: trunk/Master/texmf-dist/doc/xelatex/exam-zh/doc/exam-zh-doc-setup.tex
===================================================================
--- trunk/Master/texmf-dist/doc/xelatex/exam-zh/doc/exam-zh-doc-setup.tex	2022-08-09 20:01:54 UTC (rev 64085)
+++ trunk/Master/texmf-dist/doc/xelatex/exam-zh/doc/exam-zh-doc-setup.tex	2022-08-09 20:02:09 UTC (rev 64086)
@@ -31,7 +31,7 @@
 \title{\textcolor{MaterialIndigo800}{%
   \textbf{exam-zh: 高考试卷 \LaTeX \xpinyin[font=\sffamily,format=\color{MaterialIndigo800}]{模}{mu2}板}}}
 \author{李泽平,夏康玮,郭李军}
-\date{2022/07/28\quad v0.1.13%
+\date{2022/08/02\quad v0.1.15%
   \thanks{%
     \url{https://gitee.com/zepinglee/exam-zh}
   }
@@ -38,8 +38,6 @@
 }
 
 \ExplSyntaxOn
-\NewDocumentCommand \eu { } { \mathrm{ e } }
-\NewDocumentCommand \iu { } { \mathrm{ i } }
 \NewDocumentCommand { \scoringbox } { s }
   {
     \IfBooleanTF {#1}

Modified: trunk/Master/texmf-dist/doc/xelatex/exam-zh/doc/exam-zh-doc.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/tex/latex/exam-zh/exam-zh-chinese-english.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex/exam-zh/exam-zh-chinese-english.sty	2022-08-09 20:01:54 UTC (rev 64085)
+++ trunk/Master/texmf-dist/tex/latex/exam-zh/exam-zh-chinese-english.sty	2022-08-09 20:02:09 UTC (rev 64086)
@@ -8,7 +8,7 @@
 
 \RequirePackage{expl3}
 
-\ProvidesExplPackage {exam-zh-chinese-english} {2022-07-28} {v0.1.13}
+\ProvidesExplPackage {exam-zh-chinese-english} {2022-08-09} {v0.1.15}
   {exam-zh chinese and english module}
 
 \PassOptionsToPackage { tcolorbox } { most }
@@ -403,7 +403,7 @@
     format                 = \kaishu,
     title-author-sep       = 2em,
     top-sep                = 0pt,
-    bottom-sep             = 0pt,
+    bottom-sep             = 1em,
     title-poem-sep         = 0.25\baselineskip,
     type                   = chinese,
     align                  = l,
@@ -427,6 +427,8 @@
           #2
         \endtabular
       \group_end:
+    \par
+    \addvspace { 1em }
   }
   {
     \__examzh_poem_end:
@@ -480,17 +482,20 @@
       }
       {
         \endcenter
-        \vspace*{-0.7em}
-        \small
-        \begin{description}[leftmargin = 2em]
-          \item[{[注]}] 
-            \seq_map_indexed_inline:Nn \g__examzh_poem_zhu_store_seq
-              % ##1: index
-              % ##2: content
-              {
-                \__examzh_chinese_circled_number:n {##1} ~ ##2 
-              }
-        \end{description}
+        \seq_if_empty:NF \g__examzh_poem_zhu_store_seq
+          {
+            \vspace*{-0.7em}
+            \small
+            \begin{description}[leftmargin = 2em]
+              \item[{[注]}] 
+                \seq_map_indexed_inline:Nn \g__examzh_poem_zhu_store_seq
+                  % ##1: index
+                  % ##2: content
+                  {
+                    \__examzh_chinese_circled_number:n {##1} ~ ##2 
+                  }
+            \end{description}
+          }
       }
   }
 

Modified: trunk/Master/texmf-dist/tex/latex/exam-zh/exam-zh-choices.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex/exam-zh/exam-zh-choices.sty	2022-08-09 20:01:54 UTC (rev 64085)
+++ trunk/Master/texmf-dist/tex/latex/exam-zh/exam-zh-choices.sty	2022-08-09 20:02:09 UTC (rev 64086)
@@ -9,7 +9,7 @@
 \RequirePackage{expl3}
 \RequirePackage{xparse}
 
-\ProvidesExplPackage {exam-zh-choices} {2022-07-28} {v0.1.13}
+\ProvidesExplPackage {exam-zh-choices} {2022-08-09} {v0.1.15}
   {exam-zh choices module}
 
 \dim_new:N \l__examzh_choices_column_sep_dim

Modified: trunk/Master/texmf-dist/tex/latex/exam-zh/exam-zh-font.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex/exam-zh/exam-zh-font.sty	2022-08-09 20:01:54 UTC (rev 64085)
+++ trunk/Master/texmf-dist/tex/latex/exam-zh/exam-zh-font.sty	2022-08-09 20:02:09 UTC (rev 64086)
@@ -9,11 +9,12 @@
 \RequirePackage{expl3}
 \RequirePackage{xparse}
 
-\ProvidesExplPackage {exam-zh-font} {2022-07-28} {v0.1.13}
+\ProvidesExplPackage {exam-zh-font} {2022-08-09} {v0.1.15}
   {exam-zh font module}
 
 \RequirePackage { unicode-math }
 \RequirePackage { filehook }
+\RequirePackage { etoolbox }
 
 \tl_new:N \g__examzh_font_font_tl
 \tl_new:N \g__examzh_font_math_font_tl

Modified: trunk/Master/texmf-dist/tex/latex/exam-zh/exam-zh-question.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex/exam-zh/exam-zh-question.sty	2022-08-09 20:01:54 UTC (rev 64085)
+++ trunk/Master/texmf-dist/tex/latex/exam-zh/exam-zh-question.sty	2022-08-09 20:02:09 UTC (rev 64086)
@@ -9,22 +9,34 @@
 \RequirePackage{expl3}
 \RequirePackage{xparse}
 
-\ProvidesExplPackage {exam-zh-question} {2022-07-28} {v0.1.13}
+\ProvidesExplPackage {exam-zh-question} {2022-08-09} {v0.1.15}
   {exam-zh question module}
 
+
 \RequirePackage { amsthm }
 \@ifpackageloaded { tcolorbox }
   { \tcbuselibrary { breakable } }
   { \RequirePackage [ most ] { tcolorbox } }
-\RequirePackage { zref-savepos }
-\RequirePackage { ulem }
+% \RequirePackage { zref-savepos }
+\RequirePackage { xeCJKfntef }
 
+% https://github.com/CTeX-org/forum/issues/264#issuecomment-1200087776
+\disable at package@load { etex }
+  {
+    \cs_set_eq:NN \globcount \newcount
+    \cs_set_eq:NN \globdimen \newdimen
+  }
+\RequirePackage { linegoal }
+
+
 \ExplSyntaxOff
+
 \usetikzlibrary{shapes.misc}
 \ExplSyntaxOn
 
 
 
+
 \NewDocumentCommand \questionsetup { m }
   { \keys_set:nn { exam-zh / question } { #1 } }
 \NewDocumentCommand \fillinsetup { m }
@@ -267,9 +279,10 @@
 \prg_generate_conditional_variant:Nnn \regex_extract_once:nnN { nxN } { F } 
 \cs_new:Npn \__examzh_question_begin_fillin_type_set:
   {
-    \regex_count:nVN { \[ } %]
+    \regex_count:nVN { \[ } % \]
       \l__examzh_question_combine_fillin_args_tl
       \l__examzh_question_begin_fillin_args_bracket_num_int
+    \use_none:n { \] }  % 消去 \[ 的高亮影响
     % \int_use:N \l__examzh_question_begin_fillin_args_bracket_num_int
     \int_compare:nNnT { \l__examzh_question_begin_fillin_args_bracket_num_int } = {2}
       {
@@ -687,6 +700,12 @@
 % fillin 的下划线样式控制
 \str_new:N \l__examzh_fillin_type_str
 
+% fillin type = paren 的括号类型
+\bool_new:N \l__examzh_fillin_paren_banjiao_bool
+
+% fillin 的 width 设置断行时是自动铺满行还是严格按照长度来
+\bool_new:N \l__examzh_fillin_width_fill_bool
+
 % 不显示答案时显示的类型
 \str_new:N \l__examzh_fillin_no_answer_type_str
 
@@ -700,7 +719,12 @@
         \str_set:Nn \l__examzh_fillin_type_str {#1}
       },
     show-answer .bool_set:N = \l__examzh_question_show_fillin_answer_bool,
-    width .skip_set:N = \l__examzh_fillin_F_width_skip,
+    width .dim_set:N = \l__examzh_fillin_F_width_dim,
+    width-type .choice:,
+    width-type / fill .code:n =
+      { \bool_set_true:N \l__examzh_fillin_width_fill_bool },
+    width-type / normal .code:n =
+      { \bool_set_false:N \l__examzh_fillin_width_fill_bool },
     color .tl_set:N = \l__examzh_fillin_color_tl,
     text-color .tl_set:N = \l__examzh_fillin_text_color_tl,
     no-answer-type .choices:nn =
@@ -707,18 +731,25 @@
       { blacktriangle, counter, none }
       { \str_set:Nx \l__examzh_fillin_no_answer_type_str { \l_keys_choice_tl } },
     no-answer-counter-index .int_gset:N = \g__examzh_fillin_no_answer_counter_int,
-    no-answer-counter-label .tl_set:N = \l__examzh_fillin_label_tl
+    no-answer-counter-label .tl_set:N = \l__examzh_fillin_label_tl,
+    paren-type .choice:,
+    paren-type / banjiao .code:n = 
+      { \bool_set_true:N \l__examzh_fillin_paren_banjiao_bool },
+    paren-type / quanjiao .code:n = 
+      { \bool_set_false:N \l__examzh_fillin_paren_banjiao_bool },
   }
 \keys_set:nn { exam-zh / fillin }
   {
     type                     = line,
     show-answer              = false,
-    width                    = 3em plus 1em minus 1em,
+    width                    = 3em,
     color                    = black,
     text-color               = black,
     no-answer-type           = blacktriangle,
     no-answer-counter-index  = 1,
-    no-answer-counter-label  = \arabic*
+    no-answer-counter-label  = \arabic*,
+    paren-type               = banjiao,
+    width-type               = fill,
   }
 
 \keys_define:nn { exam-zh }
@@ -756,8 +787,7 @@
             }
         }
         {
-          \keys_set:nn { exam-zh / fillin }
-            {#2}
+          \keys_set:nn { exam-zh / fillin } {#2}
           \bool_if:NTF \l__examzh_question_show_fillin_answer_bool
             {
               % 显示答案
@@ -776,7 +806,7 @@
               \__examzh_fillin_no_answer_typeset:
             }
         }
-      \group_end:
+    \group_end:
     \space \ignorespaces
   }
 \msg_new:nnn { exam-zh / fillin } { no-such-noanswertype }
@@ -924,22 +954,45 @@
   }
 \cs_new:Npn \__examzh_fillin_uline_F:
   {
-    \uline { \hspace* { \l__examzh_fillin_F_width_skip } } 
+    % \uline { \hspace* { \l__examzh_fillin_F_width_dim } } 
+    \__examzh_fillin_breakable_hspace:NN \CJKunderline \allowbreak
   }
-\cs_new:Nn \__examzh_fillin_uline:
+% \cs_new:Nn \__examzh_fillin_uline:
+  % {
+    % \bgroup
+    %   \color{ \l__examzh_fillin_text_color_tl } 
+    %   \markoverwith{\textcolor{black}{\rule[-0.7ex]{2pt}{0.4pt}}}
+    %   \ULon
+% xeCJKfntef.sty
+% xeCJK: 修复下划线中数学公式的错误处理
+% https://github.com/CTeX-org/ctex-kit/commit/ad44c6674bb377653544349f23b7c629bc9e4677
+\RenewDocumentCommand \CJKunderline { s t- s o }
   {
-    \bgroup
-      \color{ \l__examzh_fillin_text_color_tl } 
-      \markoverwith{\textcolor{black}{\rule[-0.7ex]{2pt}{0.4pt}}}
-      \ULon
+    \xeCJK_ulem_group_begin:
+      \xeCJK_fntef_boot:nnNNNn { underline } { uline } #1#2#3 {#4}
+      \xeCJK_fntef_initial:nnn
+        { \l__xeCJK_uline_depth_tl }
+        { \l__xeCJK_uline_sep_tl }
+        {
+          \l__xeCJK_uline_format_tl
+          \tex_vrule:D
+            height \dim_eval:n { \l__xeCJK_uline_thickness_tl }
+            depth \c_zero_dim
+            width .2em
+        }
+      % 给 CJKunderline 加了颜色控制
+      \color { \l__examzh_fillin_text_color_tl }
+      \xeCJK_ulem_on:n
   }
+  % }
 \cs_new:Npn \__examzh_fillin_uline_breakline_T:
   {
-    % \CJKunderline*
+    \CJKunderline*
     % \uline
-    \__examzh_fillin_uline:
+    % \__examzh_fillin_uline:
       {
         \hspace* { 0.5em plus .5em minus .5em }
+        % \color{ \l__examzh_fillin_text_color_tl } 
         \l_tmpa_tl
         % 答案很长时,不能完全显示,答案很长时,不能完全显示
         \hspace* { 0.5em plus .5em minus .5em }
@@ -947,27 +1000,65 @@
   }
 \cs_new:Npn \__examzh_fillin_paren_T:
   {
-    (
-      \hspace* { 0.5em plus .5em minus .5em }
-      \group_begin:
-        \box_use_drop:N \l_tmpa_box
-      \group_end:
-      \hspace* { 0.5em plus .5em minus .5em }
-    )
+    \bool_if:NTF \l__examzh_fillin_paren_banjiao_bool
+      {
+        (
+          \hspace* { 0.5em plus .5em minus .5em }
+          \group_begin:
+            \box_use_drop:N \l_tmpa_box
+          \group_end:
+          \hspace* { 0.5em plus .5em minus .5em }
+        )
+      }
+      {
+        (
+          \hspace* { 0.5em plus .5em minus .5em }
+          \group_begin:
+            \box_use_drop:N \l_tmpa_box
+          \group_end:
+          \hspace* { 0.5em plus .5em minus .5em }
+        )
+      }
   }
 \cs_new:Npn \__examzh_fillin_paren_breakline_T:
   {
-    (
-      \hspace* { 0.5em plus .5em minus .5em }
-      \group_begin:
-        \l_tmpa_tl
-      \group_end:
-      \hspace* { 0.5em plus .5em minus .5em }
-    )
+    \bool_if:NTF \l__examzh_fillin_paren_banjiao_bool
+      {
+        (
+          \hspace* { 0.5em plus .5em minus .5em }
+          \group_begin:
+            \l_tmpa_tl
+          \group_end:
+          \hspace* { 0.5em plus .5em minus .5em }
+        )
+      }
+      {
+        (
+          \hspace* { 0.5em plus .5em minus .5em }
+          \group_begin:
+            \l_tmpa_tl
+          \group_end:
+          \hspace* { 0.5em plus .5em minus .5em }
+        )
+      }
   }
+\box_new:N \c__examzh_banjiao_right_brace_box
+\box_new:N \c__examzh_quanjiao_right_brace_box
+\hbox_set:Nn \c__examzh_banjiao_right_brace_box { ) }
+\hbox_set:Nn \c__examzh_quanjiao_right_brace_box { ) }
+\dim_const:Nn \c__examzh_banjiao_right_brace_width_dim  % (
+  { \box_wd:N \c__examzh_banjiao_right_brace_box }
+\dim_const:Nn \c__examzh_quanjiao_right_brace_width_dim  % (
+  { \box_wd:N \c__examzh_quanjiao_right_brace_box }
 \cs_new:Npn \__examzh_fillin_paren_F:
   {
-    ( \hspace* { \l__examzh_fillin_F_width_skip} )
+    \bool_if:NTF \l__examzh_fillin_paren_banjiao_bool
+      {
+        ( \__examzh_fillin_breakable_hspace:NN \use:n \nobreak \kern-\c__examzh_banjiao_right_brace_width_dim ) \allowbreak
+      }
+      {
+        ( \__examzh_fillin_breakable_hspace:NN \use:n \nobreak \kern-\c__examzh_quanjiao_right_brace_width_dim )\allowbreak
+      }
   }
 \cs_new:Npn \__examzh_fillin_blank_T:
   {
@@ -987,7 +1078,8 @@
   }
 \cs_new:Npn \__examzh_fillin_blank_F:
   {
-    \hspace* { \l__examzh_fillin_F_width_skip }
+    % \hspace* { \l__examzh_fillin_F_width_dim }
+    \__examzh_fillin_breakable_hspace:NN \use:n \allowbreak
   }
 \tikzset
   {
@@ -1037,7 +1129,78 @@
     \hspace* { 0.5em plus .5em minus .5em }
   }
 
+% 通过循环来达到自动断行的空白下划线
+\cs_generate_variant:Nn \dim_sub:Nn { NV }
+\cs_generate_variant:Nn \dim_add:Nn { NV }
+\cs_generate_variant:Nn \dim_set:Nn { NV, Nx }
+% 用来检测是否处于 list 环境中
+\bool_new:N \l__if_list_bool
+\int_new:N \l__list_depth_int
+\cs_generate_variant:Nn \dim_set:Nn { Nx }
+\AddToHook { cmd / list / after }
+  {
+    \bool_set_true:N \l__if_list_bool
+    \int_incr:N \l__list_depth_int
+    \dim_if_exist:cF { l__list_leftmargin_ \int_to_roman:n { \l__list_depth_int } _dim }
+      {
+        \dim_new:c { l__list_leftmargin_ \int_to_roman:n { \l__list_depth_int } _dim }
+      }
+    % 用来储存相应层级的 \leftmargin 值
+    \dim_set_eq:cN { l__list_leftmargin_ \int_to_roman:n { \l__list_depth_int } _dim } \leftmargin
+  }
+\AddToHook { cmd / endlist  / before } 
+  { \int_zero:N \l__list_depth_int }
 
+\cs_new:Npn \__examzh_fillin_breakable_hspace:NN #1#2
+  % #1: CJKunderline / use:n
+  % #2: \allowbreak
+  {
+    % 比较 \l__examzh_fillin_F_width_dim 和 linegoal
+    \dim_compare:nNnTF { \l__examzh_fillin_F_width_dim } > { \linegoal }
+      {
+        % 超过 linegoal 就排一段 linegoal,然后 \l__examzh_fillin_F_width_dim 减去 linegoal 长度
+        \dim_set:NV \l_tmpa_dim \linegoal
+        % 是否处于 list 环境中
+        \bool_if:NTF \l__if_list_bool
+          {
+            % 加上 1 到 当前层级的 leftmargin 才能让 list 中的 linegoal 正常
+            \int_step_inline:nn { \l__list_depth_int }
+              {
+                \dim_add:Nn \l_tmpa_dim { \dim_use:c { l__list_leftmargin_ \int_to_roman:n { ##1 } _dim } }
+              }
+            #1 { \hspace { \l_tmpa_dim } }
+          }
+          {
+            % 正文中
+            #1 { \hspace { \linegoal } }
+          }
+        \dim_sub:NV \l__examzh_fillin_F_width_dim \l_tmpa_dim
+        \dim_while_do:nNnn { \l__examzh_fillin_F_width_dim } > { \linewidth }
+          {
+            % 循环:\l__examzh_fillin_F_width_dim 和 \linewidth 比较,大的话就排一个,然后减掉 linewidth
+            \\ #1 { \hspace* { \linewidth } }
+            \dim_sub:Nn \l__examzh_fillin_F_width_dim { \linewidth }
+          }
+        % \\ #1 { \hspace* { \linewidth } }
+        \dim_compare:nNnT { \l__examzh_fillin_F_width_dim } < { \linewidth }
+          { 
+            % 最后一行是否 fill
+            \bool_if:NTF \l__examzh_fillin_width_fill_bool
+              {
+                \\ #1 { \hspace* { \linewidth } } 
+              }
+              {
+                \\ #1 { \hspace* { \l__examzh_fillin_F_width_dim } } 
+              }
+          }
+      }
+      {
+        #1 { \hspace* { \l__examzh_fillin_F_width_dim } }
+      }
+    #2
+  }
+
+
 \dim_new:N \l__examzh_blacktriangle_length_dim
 \dim_set:Nn \l__examzh_blacktriangle_length_dim { .7em }
 \cs_new:Npn \__examzh_fillin_blacktriangle:
@@ -1149,9 +1312,11 @@
     % \ignorespaces
     % 是否要新起一段开始
     \bool_if:NT \l__examzh_solution_par_break_bool { \par }
-    \group_begin:
+    % \group_begin:
+    \begingroup
       \color { \l__examzh_solution_text_color_tl } #1
-    \group_end:
+    \endgroup
+    % \group_end:
     \bool_if:NT \l__examzh_solution_show_qed_bool
       { \popQED }
     % \endtrivlist 
@@ -1164,6 +1329,7 @@
 \NewDocumentCommand { \score } { O{} m }
   {
     \group_begin:
+      \keys_set:nn { exam / question } {#1}
       \mode_if_math:TF
         { 
           \__examzh_score_math_version:n { #2 }
@@ -1179,10 +1345,12 @@
       {
         \__examzh_math_cdotfill:n 
           { 
-            \l__examzh_score_format_tl
-            \l__examzh_score_pre_content_tl
-            #1
-            \l__examzh_score_post_content_tl 
+            \group_begin:
+              \l__examzh_score_format_tl
+              \l__examzh_score_pre_content_tl
+              #1
+              \l__examzh_score_post_content_tl 
+            \group_end:
           }
       }
       {
@@ -1189,10 +1357,12 @@
         \__examzh_math_nodotfill:n
           {
             { 
-              \l__examzh_score_format_tl
-              \l__examzh_score_pre_content_tl
-              #1
-              \l__examzh_score_post_content_tl 
+              \group_begin:
+                \l__examzh_score_format_tl
+                \l__examzh_score_pre_content_tl
+                #1
+                \l__examzh_score_post_content_tl 
+              \group_end:
             }
           }
       }
@@ -1201,14 +1371,18 @@
   {
     \bool_if:NTF \l__examzh_score_show_leader_bool
       {
-        \__examzh_cdotfill:
-        \l__examzh_score_format_tl
-        \l__examzh_score_pre_content_tl #1 \l__examzh_score_post_content_tl 
+        \group_begin:
+          \__examzh_cdotfill:
+          \l__examzh_score_format_tl
+          \l__examzh_score_pre_content_tl #1 \l__examzh_score_post_content_tl 
+        \group_end:
       }
       {
         \hfill
-        \l__examzh_score_format_tl
-        \l__examzh_score_pre_content_tl #1 \l__examzh_score_post_content_tl
+        \group_begin:
+          \l__examzh_score_format_tl
+          \l__examzh_score_pre_content_tl #1 \l__examzh_score_post_content_tl
+        \group_end:
       }
     \par \noindent \ignorespaces
   }

Modified: trunk/Master/texmf-dist/tex/latex/exam-zh/exam-zh-symbols.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex/exam-zh/exam-zh-symbols.sty	2022-08-09 20:01:54 UTC (rev 64085)
+++ trunk/Master/texmf-dist/tex/latex/exam-zh/exam-zh-symbols.sty	2022-08-09 20:02:09 UTC (rev 64086)
@@ -8,7 +8,7 @@
 
 \RequirePackage{expl3}
 
-\ProvidesExplPackage {exam-zh-symbols} {2022-07-28} {v0.1.13}
+\ProvidesExplPackage {exam-zh-symbols} {2022-08-09} {v0.1.15}
   {exam-zh symbols module}
 
 \RequirePackage { tikz }
@@ -17,6 +17,16 @@
   { symbols .meta:nn = { exam-zh / symbols } {#1} }
 
 
+% 正体的 e 和 i
+\NewDocumentCommand \eu { } { \mathrm{ e } }
+\NewDocumentCommand \upe { } { \mathrm{ e } }
+\NewDocumentCommand \iu { } { \mathrm{ i } }
+\NewDocumentCommand \upi { } { \mathrm{ i } }
+
+\NewDocumentCommand \uppi { } { \mathrm{ \pi } }
+
+
+
 % 分数 \frac \dfrac
 \int_new:N \l__examzh_symbols_frac_numerator_str_int       % frac 分子字符数
 \int_new:N \l__examzh_symbols_frac_denominator_str_int     % frac 分母字符数

Modified: trunk/Master/texmf-dist/tex/latex/exam-zh/exam-zh.cls
===================================================================
--- trunk/Master/texmf-dist/tex/latex/exam-zh/exam-zh.cls	2022-08-09 20:01:54 UTC (rev 64085)
+++ trunk/Master/texmf-dist/tex/latex/exam-zh/exam-zh.cls	2022-08-09 20:02:09 UTC (rev 64086)
@@ -6,7 +6,7 @@
 
 \NeedsTeXFormat{LaTeX2e}[2017/04/15]
 \RequirePackage{expl3}
-\ProvidesExplClass {exam-zh} {2022-07-28} {v0.1.13} {LaTeX template for Chinese exam}
+\ProvidesExplClass {exam-zh} {2022-08-09} {v0.1.15} {LaTeX template for Chinese exam}
 
 % 检查 LaTeX2e kernel 版本
 \msg_new:nnn { exam-zh } { latex-too-old }
@@ -29,7 +29,6 @@
 
 
 
-
 % 加载文档类和宏包
 
 % 处理文档类选项
@@ -82,8 +81,8 @@
 \usetikzlibrary { decorations.text }
 \ExplSyntaxOn
 
+\RequirePackage { exam-zh-question }
 \RequirePackage { exam-zh-font }
-\RequirePackage { exam-zh-question }
 \RequirePackage { exam-zh-choices }
 \RequirePackage { exam-zh-symbols }
 \RequirePackage { exam-zh-chinese-english }
@@ -128,6 +127,9 @@
 \examzh_package_conflict:nn { enumitem } { paralist }
 
 
+% 生成函数变体
+\cs_generate_variant:Nn \tl_map_inline:nn { xn }
+
 % 标点处理
 \tl_const:Nn \c__examzh_fwid_full_stop_tl { ^^^^ff0e }
 
@@ -778,11 +780,7 @@
   }
 
 
-% 正体的 e 和 i
-\NewDocumentCommand \eu { } { \mathrm{ e } }
-\NewDocumentCommand \iu { } { \mathrm{ i } }
 
-
 % 兼容 siunitx v2.x 的一些命令
 \AtEndOfPackageFile* { siunitx }
   {
@@ -995,7 +993,7 @@
     text-xshift             = 11mm,
     text-yshift             = 0pt,
     text-width              = 0.8\textheight,
-    text-format             = \zihao{4}\sffamily,
+    text-format             = \zihao{4}\sffamily\color{black},
     text-xscale             = 1.0,
     text-yscale             = 0.8,
     text-direction-vertical = false,
@@ -1025,7 +1023,7 @@
     \AddToHook { shipout / firstpage } [ sealline ]
       {
         \put (0cm, 0cm)
-          { \__examzh_sealline_odd: }
+          { \color{black} \__examzh_sealline_odd: }
       }
   }
 % 只在第一页和最后一页出现
@@ -1034,12 +1032,13 @@
     \AddToHook { shipout / firstpage } [ sealline ]
       {
         \put (0cm, 0cm)
-          { \__examzh_sealline_odd: }
+          { \color{black} \__examzh_sealline_odd: }
       }
     \AddToHook { shipout / lastpage } [ sealline ]
       {
         \put (0cm, 0cm)
           {
+            \color{black} 
             \int_if_odd:nTF { \c at page }
               { \__examzh_sealline_odd: }
               { \__examzh_sealline_even: }
@@ -1053,6 +1052,7 @@
       {
         \put (0cm, 0cm)
           {
+            \color{black} 
             \int_if_odd:nT { \c at page }
               { \__examzh_sealline_odd: }
           }
@@ -1065,6 +1065,7 @@
       {
         \put (0cm, 0cm)
           {
+            \color{black} 
             \int_if_odd:nTF { \c at page }
               { \__examzh_sealline_odd: }
               { \__examzh_sealline_even: }
@@ -1078,6 +1079,7 @@
       {
         \put (0cm, 0cm)
           {
+            \color{black} 
             \int_compare:nNnT { \int_mod:nn { \c at page } { 2 } } = {1} { \__examzh_sealline_odd: }
           }
       }
@@ -1089,6 +1091,7 @@
       {
         \put (0cm, 0cm)
           {
+            \color{black} 
             \int_compare:nNnT { \int_mod:nn { \c at page } { 3 } } = {1} { \__examzh_sealline_odd: }
           }
       }
@@ -1100,6 +1103,7 @@
       {
         \put (0cm, 0cm)
           {
+            \color{black} 
             \int_compare:nNnT { \int_mod:nn { \c at page } { 4 } } = {1} { \__examzh_sealline_odd: }
           }
       }
@@ -1111,11 +1115,14 @@
       {
         \put (0cm, 0cm)
           {
+            \color{black} 
             \int_compare:nNnT { \int_mod:nn { \c at page } { 6 } } = {1} { \__examzh_sealline_odd: }
           }
       }
   }
 
+% https://github.com/CTeX-org/ctex-kit/issues/632#issuecomment-1199675064
+\AddToHook{shipout/before}{\xeCJKShipoutHook}
 
 \AtBeginDocument
   { \__examzh_sealline_set: }
@@ -1256,7 +1263,7 @@
     \begin{tikzpicture}
       [
         remember~picture,
-        overlay,
+        overlay
       ]
       % 密封线:线
       \__examzh_sealline_odd_line:



More information about the tex-live-commits mailing list.