summaryrefslogtreecommitdiff
path: root/Master/texmf-dist
diff options
context:
space:
mode:
authorKarl Berry <karl@freefriends.org>2022-08-28 19:54:12 +0000
committerKarl Berry <karl@freefriends.org>2022-08-28 19:54:12 +0000
commit15f60291051d3cd3e454d2011fbb0d135c6ed47d (patch)
treeee5b863dc1f26b909b7c04193feddf066709ec7b /Master/texmf-dist
parente514afa2bfaec37765a32c4fa4d12713892778e3 (diff)
exam-zh (28aug22)
git-svn-id: svn://tug.org/texlive/trunk@64219 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist')
-rw-r--r--Master/texmf-dist/doc/xelatex/exam-zh/CHANGELOG.md27
-rw-r--r--Master/texmf-dist/doc/xelatex/exam-zh/README.md8
-rw-r--r--Master/texmf-dist/doc/xelatex/exam-zh/doc/back/development.tex2
-rw-r--r--Master/texmf-dist/doc/xelatex/exam-zh/doc/back/package.tex10
-rw-r--r--Master/texmf-dist/doc/xelatex/exam-zh/doc/body/installation.tex5
-rw-r--r--Master/texmf-dist/doc/xelatex/exam-zh/doc/body/usage.tex321
-rw-r--r--Master/texmf-dist/doc/xelatex/exam-zh/doc/exam-zh-doc-setup.tex14
-rw-r--r--Master/texmf-dist/doc/xelatex/exam-zh/doc/exam-zh-doc.pdfbin1107168 -> 1148091 bytes
-rw-r--r--Master/texmf-dist/doc/xelatex/exam-zh/examples/example-multiple.pdfbin168499 -> 174288 bytes
-rw-r--r--Master/texmf-dist/doc/xelatex/exam-zh/examples/example-multiple.tex20
-rw-r--r--Master/texmf-dist/doc/xelatex/exam-zh/examples/example-single.pdfbin143461 -> 149087 bytes
-rw-r--r--Master/texmf-dist/doc/xelatex/exam-zh/examples/example-single.tex20
-rw-r--r--Master/texmf-dist/tex/latex/exam-zh/exam-zh-chinese-english.sty4
-rw-r--r--Master/texmf-dist/tex/latex/exam-zh/exam-zh-choices.sty123
-rw-r--r--Master/texmf-dist/tex/latex/exam-zh/exam-zh-font.sty12
-rw-r--r--Master/texmf-dist/tex/latex/exam-zh/exam-zh-question.sty114
-rw-r--r--Master/texmf-dist/tex/latex/exam-zh/exam-zh-symbols.sty4
-rw-r--r--Master/texmf-dist/tex/latex/exam-zh/exam-zh-textfigure.sty651
-rw-r--r--Master/texmf-dist/tex/latex/exam-zh/exam-zh.cls28
19 files changed, 1265 insertions, 98 deletions
diff --git a/Master/texmf-dist/doc/xelatex/exam-zh/CHANGELOG.md b/Master/texmf-dist/doc/xelatex/exam-zh/CHANGELOG.md
index f785a3fc423..b4197df61e3 100644
--- a/Master/texmf-dist/doc/xelatex/exam-zh/CHANGELOG.md
+++ b/Master/texmf-dist/doc/xelatex/exam-zh/CHANGELOG.md
@@ -5,6 +5,33 @@
格式参照 [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
并且此项目遵守 [Semantic Versioning](https://semver.org/spec/v2.0.0.html)。
+## [0.1.19] - 2022-08-27
+
+### Added
+
+- 增加 `choices` 的 `top-sep`, `bottom-sep`, `linesep` 键值
+- 增加对 `minipage` 的最小行距的控制
+- 增加 `\fillin` 的 `depth` 键值控制下划线的深度
+- 增加图文排版模块 `exam-zh-textfigure.sty`
+- 增加示例文件的图文排版
+
+### Changed
+
+- 修改列表环境 `enumerate` 参数
+- `show-columnline` 默认值改为 `false`
+
+### Fixed
+
+- 修复不同字体可能导致的 `bigstar` 缺失问题
+- 修复 `\ExamPrintAnswer` 的未设置编译报错问题
+
+## [0.1.19] - 2022-08-17
+
+### Added
+
+- 增加 `solution/show-solution` 的等效键值:`solution/show-answer`
+
+
## [0.1.18] - 2022-08-15
### Added
diff --git a/Master/texmf-dist/doc/xelatex/exam-zh/README.md b/Master/texmf-dist/doc/xelatex/exam-zh/README.md
index d3bd71fab2e..786d845d0c4 100644
--- a/Master/texmf-dist/doc/xelatex/exam-zh/README.md
+++ b/Master/texmf-dist/doc/xelatex/exam-zh/README.md
@@ -13,14 +13,14 @@ In exam-zh, you can
- ... (for more that you can do with it, please read the manual(in Chinese): `exam-zh-doc.pdf`
-Repository: https://gitee.com/zepinglee/exam-zh
+Repository: https://gitee.com/xkwxdyy/exam-zh
Author: Zeping Lee
Maintainer: Kangwei Xia, Lijun Guo
-Issues and pull requests are welcome: [issues]( https://gitee.com/zepinglee/exam-zh/issues) and [pulls](https://gitee.com/zepinglee/exam-zh/pulls)
+Issues and pull requests are welcome: [issues]( https://gitee.com/xkwxdyy/exam-zh/issues) and [pulls](https://gitee.com/xkwxdyy/exam-zh/pulls)
# exam-zh:中国试卷 LaTeX 模板
-- 项目主页:<https://gitee.com/zepinglee/exam-zh>
+- 项目主页:<https://gitee.com/xkwxdyy/exam-zh>
- 作者:Zeping Lee
- 维护者:Kangwei Xia, Lijun Guo
- 授权:[LaTeX Project Public License 1.3c](https://www.latex-project.org/lppl.txt)
@@ -33,7 +33,7 @@ Issues and pull requests are welcome: [issues]( https://gitee.com/zepinglee/exam
3. 通过用户接口可以方便更改密封线样式;
4. 在 Windows, macOS 和 Linux 跨平台编译。
-使用前请仔细阅读 [发行版](https://gitee.com/zepinglee/exam-zh/releases) 的用户手册 `exam-zh-doc.pdf`。
+使用前请仔细阅读 [发行版](https://gitee.com/xkwxdyy/exam-zh/releases) 的用户手册 `exam-zh-doc.pdf`。
## 示例(simple example)
diff --git a/Master/texmf-dist/doc/xelatex/exam-zh/doc/back/development.tex b/Master/texmf-dist/doc/xelatex/exam-zh/doc/back/development.tex
index a2ae5b67372..23d9108039d 100644
--- a/Master/texmf-dist/doc/xelatex/exam-zh/doc/back/development.tex
+++ b/Master/texmf-dist/doc/xelatex/exam-zh/doc/back/development.tex
@@ -3,7 +3,7 @@
\section{参与开发}
\begin{itemize}
- \item 如果您有任何改进意见或者功能需求,欢迎前往 \href{https://gitee.com/zepinglee/exam-zh/issues}{gitee 仓库 issues} 提交 issue
+ \item 如果您有任何改进意见或者功能需求,欢迎前往 \href{https://gitee.com/xkwxdyy/exam-zh/issues}{gitee 仓库 issues} 提交 issue
\item 欢迎 \cmd{fork} 本项目,提 \cmd{pr} 的形式参与开发
\item 建议阅读 \href{https://zhuanlan.zhihu.com/typography-and-latex/}{muzimuzhi} 写的 \href{https://gitee.com/ustctug/ustcthesis/wiki/%E5%8F%82%E4%B8%8E%E5%BC%80%E5%8F%91}{参与开发}
\item 参考阅读
diff --git a/Master/texmf-dist/doc/xelatex/exam-zh/doc/back/package.tex b/Master/texmf-dist/doc/xelatex/exam-zh/doc/back/package.tex
index 6a67ac1504d..d12f085d583 100644
--- a/Master/texmf-dist/doc/xelatex/exam-zh/doc/back/package.tex
+++ b/Master/texmf-dist/doc/xelatex/exam-zh/doc/back/package.tex
@@ -22,4 +22,14 @@
\item \pkg{ulem}:下划线
\item \pkg{tcolorbox}:彩框
\item \pkg{varwidth}:“弹性”的 \env{minipage}
+\end{itemize}
+
+
+\file{exam-zh-textfigure.sty} 的宏包依赖:
+
+\begin{itemize}
+ \item \pkg{wrapstuff}:图文混排
+ \item \pkg{tabularray}:表格
+ \item \pkg{varwidth}:“弹性”的 \env{minipage}
+ \item \pkg{graphicx}:插图
\end{itemize} \ No newline at end of file
diff --git a/Master/texmf-dist/doc/xelatex/exam-zh/doc/body/installation.tex b/Master/texmf-dist/doc/xelatex/exam-zh/doc/body/installation.tex
index 04c414caac6..a632fa80599 100644
--- a/Master/texmf-dist/doc/xelatex/exam-zh/doc/body/installation.tex
+++ b/Master/texmf-dist/doc/xelatex/exam-zh/doc/body/installation.tex
@@ -21,10 +21,10 @@
您也可以通过访问 gitee 项目主页的方式获取最新版本的 \cls{exam-zh}(通常情况下,gitee 的版本会大于等于CTAN 的版本(因为 CTAN 从上传到审核到用户可以下载需要一天左右))。主要以「下载发行版」的方式获取最新版本的 \cls{exam-zh}:
\begin{enumerate}
- \item 进入项目主页(\href{https://gitee.com/zepinglee/exam-zh}{gitee 项目主页} (界面见图~\ref{figure:gitee项目主页} )
+ \item 进入项目主页(\href{https://gitee.com/xkwxdyy/exam-zh}{gitee 项目主页} (界面见图~\ref{figure:gitee项目主页} )
\item 在右侧一列有“发行版”(gitee),并且有一个标签图标并有“vx.x.x - 20xx-xx-xx”字样,表示最新的发行版版本和发布时间,点击即可查看相关信息(如果想查看历史所有发行版信息,可以点击“发行版”右侧的“全部”(gitee))。
- 发行版中一般由以下信息构成(\href{https://gitee.com/zepinglee/exam-zh/releases}{gitee 发行版} 界面见图~\ref{figure:gitee发行版})
+ 发行版中一般由以下信息构成(\href{https://gitee.com/xkwxdyy/exam-zh/releases}{gitee 发行版} 界面见图~\ref{figure:gitee发行版})
\begin{itemize}
\item 更新文件的特别说明。如果没有,则表明此次更新只需要更新 \file{exam-zh.cls} 文件至最新\footnote{“更新 \meta{文件} 至最新”目前表示在发行版中下载最新版本的模板,并用其中所需要更新的 \meta{文件} 去替换本地的旧 \meta{文件}} 即可
\item 更新日志。 主要为此次发行版与上次发行版的不同,一般为“Added”、“Changed”、“Fixed”等信息
@@ -76,6 +76,7 @@
\file{exam-zh-font.sty} & 模版的字体模块宏包\\
\file{exam-zh-symbols.sty} & 模版的符号模块宏包\\
\file{exam-zh-chinese-english.sty} & 模版的语文英语模块宏包\\
+ \file{exam-zh-textfigure.sty} & 模版的图文排版模块宏包\\
\file{README.md} & 简要自述 \\
\file{CHANGELOG.md} & 模板更新日志 \\
\file{LICENSE} & 模版发布许可证
diff --git a/Master/texmf-dist/doc/xelatex/exam-zh/doc/body/usage.tex b/Master/texmf-dist/doc/xelatex/exam-zh/doc/body/usage.tex
index 56e0f257394..71e57ad21f1 100644
--- a/Master/texmf-dist/doc/xelatex/exam-zh/doc/body/usage.tex
+++ b/Master/texmf-dist/doc/xelatex/exam-zh/doc/body/usage.tex
@@ -684,7 +684,7 @@
\end{function}
\begin{function}{\chapter}
- 用于排一份的试卷标题。并可以用 \opt{page/show-chapter} 键值控制显示与否。
+ 用于排一份的试卷标题。并可以用 \opt{page/show-chapter} 键值控制显示与否。新的 \tn{chapter} 下 \env{question} 环境计数器会重置。
\end{function}
其余的见~\ref{subsubsec:抬头} 节。
@@ -886,6 +886,113 @@
+\subsubsection{图文排版}
+
+图文排版模块为 \file{exam-zh-textfigure.sty},基于 xkwxdyy 的 \href{https://gitee.com/xkwxdyy/text-figure}{text-figure} 宏包优化而来,\pkg{text-figure} 宏包不再维护。
+
+试卷中的图文排版主要有三种类型:
+\begin{enumerate}
+ \item 多张图片并排,文字处于上方和下方;
+ \item 文字和图片左右或上下排版
+ \item 文字绕排(主要基于李清的 \pkg{wrapstuff} 宏包(\file{exam-zh-textfigure.sty} 中已加载))
+\end{enumerate}
+
+其中,文字绕排一般用于语文英语等文字较多的情形。
+
+\begin{function}[added = 2022-08-28]{multifigures 环境}
+ \begin{ccnusyntax}[emph={[2]multifigures}]
+ \begin{multifigures}(*\oarg{键值列表}*)
+ \item[标签1] (*\meta{内容1}*)
+ \item[标签2] (*\meta{内容2}*)
+ ...
+ \end{multifigures}
+ \end{ccnusyntax}
+ 多张图片(无超链接引用)排版环境。\meta{键值列表} 见~\ref{subsubsec:参数-图文排版}。
+\end{function}
+
+\begin{latexexample}{\env{multifigures} 环境示例1}
+ \begin{multifigures}
+ \item[题 9 图:勾股数] \includegraphics[width=3cm]{example-image.png}
+ \item[题 11 图:圆锥曲线] \includegraphics[width=3cm]{example-image.png}
+ \end{multifigures}
+\end{latexexample}
+
+\begin{latexexample}{\env{multifigures} 环境示例2}
+ \begin{multifigures}[columns=2]
+ \item[题 9 图] \includegraphics[width=3cm]{example-image.png}
+ \item[题 10 图] \includegraphics[width=3cm]{example-image.png}
+ \item[题 11 图] \includegraphics[width=3cm]{example-image.png}
+ \item[题 12 图] \includegraphics[width=3cm]{example-image.png}
+ \end{multifigures}
+\end{latexexample}
+
+
+\begin{function}[added = 2022-08-28]{\textfigure}
+ \begin{ccnusyntax}[emph={[2]textfigure}]
+ \textfigure(*\oarg{参数列表}\marg{文本}\marg{图片}*)
+ \end{ccnusyntax}
+ 图文排版命令。\meta{键值列表} 见~\ref{subsubsec:参数-图文排版}。
+\end{function}
+
+\begin{latexexample}{\tn{textfigure} 命令示例1}
+ \textfigure{
+ 江州司马平安否? 惠远东林住得无? \par
+ 湓浦曾闻似衣带,庐峰见说胜香炉。\par
+ 题诗岁晏离鸿断,望阙天遥病鹤孤。\par
+ 莫谩拘牵雨花社,青云依旧是前途。
+ }{
+ \includegraphics[width=3cm]{example-image.png}
+ }
+\end{latexexample}
+
+\begin{latexexample}{\tn{textfigure} 命令示例2}
+ \textfigure[text-width=\columnwidth,fig-pos=bottom-flushright]{
+ 如图,在三棱锥 $A$-$BCD$ 中,$\text{平面} ABD \perp \text{平面} BCD$,
+ $AB = AD$,$O$ 为 $BD$ 的重点。
+ \begin{enumerate}
+ \item 证明:$OA \perp CD$;
+ \item 若 $\triangle OCD$ 是变长为 $1$ 的等边三角形,点 $E$ 在棱 $AD$ 上,
+ $DE = 2 EA$,且二面角 $E$-$BC$-$D$ 的大小为 $45^{\circ}$,
+ 求三棱锥 $A$-$BCD$ 的体积。
+ \end{enumerate}
+ }{
+ \includegraphics[width=3cm]{example-image.png}
+ }
+\end{latexexample}
+
+
+\begin{latexexample}{\tn{textfigure} 命令示例3}
+ \textfigure{
+ \begin{question}
+ 双曲线 $C: \frac{x^{2}}{4}-\frac{y^{2}}{2}=1$ 的右焦点为 $F$, 为点 $P$ 在 $C$ 的一条渐近线上, $O$ 为坐标原点, 若 $|P O|=|P F|$, 则 $\triangle P F O$ 的面积为 \paren
+ \begin{choices}
+ \item $\frac{3 \sqrt{2}}{4}$
+ \item $\frac{3 \sqrt{2}}{2}$
+ \item $2 \sqrt{2}$
+ \item $3 \sqrt{2}$
+ \end{choices}
+ \end{question}
+
+ \begin{question}
+ 设 $f(x)$ 是定义域为 $\mathbf{R}$ 的偶函数, 且在 $(0,+\infty)$ 单调递减, 则
+ \begin{choices}
+ \item $f\left(\log _{3} \frac{1}{4}\right)>f\left(2^{-\frac{3}{2}}\right)>f\left(2^{-\frac{2}{3}}\right)$
+ \item $f\left(\log _{3} \frac{1}{4}\right)>f\left(2^{-\frac{2}{3}}\right)>f\left(2^{-\frac{3}{2}}\right)$
+ \item $f\left(2^{-\frac{3}{2}}\right)>f\left(2^{-\frac{2}{3}}\right)>f\left(\log _{3} \frac{1}{4}\right)$
+ \item $f\left(2^{-\frac{2}{3}}\right)>f\left(2^{-\frac{3}{2}}\right)>f\left(\log _{3} \frac{1}{4}\right)$
+ \end{choices}
+ \end{question}
+ }{
+ \includegraphics[width = 2cm, height = 5cm]{example-image.png} \\ (第 9 题)
+ }
+\end{latexexample}
+
+
+\begin{function}{wrapstuff 环境}
+ \file{exam-zh-textfigure.sty} 模块默认加载 \pkg{wrapstuff} 宏包。具体 \env{wrapstuff} 环境使用请阅读手册。
+\end{function}
+
+
\subsection{参数设置}
\begin{function}{\examsetup}
@@ -1826,6 +1933,27 @@
选项的最大列数。排版选项时会优先尝试该列数,如果无法排下内容,依次将列数除以 2 并取整再进行尝试,直到可以排下全部选项。默认为 |4| 。
\end{function}
+\begin{function}[added = 2022-08-28]{choices/top-sep}
+ \begin{ccnusyntax}[emph={[1]top-sep}]
+ top-sep = (*\meta{dimension}*)
+ \end{ccnusyntax}
+ \env{choices} 环境上方弹性间距。默认为 |0pt|。
+\end{function}
+
+\begin{function}[added = 2022-08-28]{choices/bottom-sep}
+ \begin{ccnusyntax}[emph={[1]bottom-sep}]
+ bottom-sep = (*\meta{dimension}*)
+ \end{ccnusyntax}
+ \env{choices} 环境下方弹性间距。默认为 |0pt|。
+\end{function}
+
+\begin{function}[added = 2022-08-28]{choices/linesep}
+ \begin{ccnusyntax}[emph={[1]linesep}]
+ linesep = (*\meta{dimension}*)
+ \end{ccnusyntax}
+ \env{choices} 环境的行数多于 1 时的行额外弹性间距。默认为 |0pt plus .5ex|。
+\end{function}
+
\begin{function}{paren}
@@ -1912,6 +2040,7 @@
\end{function}
+
\subsubsection{填空题} \label{subsubsec:参数-填空题}
@@ -2045,11 +2174,12 @@
\end{function}
-\begin{function}[added = 2022-07-01]{solution/show-solution}
- \begin{ccnusyntax}[emph={[1]show-solution}]
+\begin{function}[added = 2022-07-01,updated = 2022-08-17]{solution/show-solution,solution/show-answer}
+ \begin{ccnusyntax}[emph={[1]show-solution,show-answer}]
show-solution = (*\TTF*)
+ show-answer = (*\TTF*)
\end{ccnusyntax}
- 是否显示解答环境 \env{solution} 的内容。
+ 是否显示解答环境 \env{solution} 的内容。\opt{show-solution} 和 \opt{show-answer} 两者等效。
\end{function}
\begin{function}[added = 2022-07-20]{solution/parbreak}
@@ -2181,19 +2311,6 @@
\env{solution} 环境内容的颜色。默认为 |black|。
\end{function}
-\begin{function}[added = 2022-07-19]{solution/top-sep}
- \begin{ccnusyntax}[emph={[1]top-sep}]
- top-sep = (*\meta{dimension}*)
- \end{ccnusyntax}
- \env{solution} 环境上方间距。默认为 |.5em plus .5em minus .2em|。
-\end{function}
-
-\begin{function}[added = 2022-07-19]{solution/bottom-sep}
- \begin{ccnusyntax}[emph={[1]bottom-sep}]
- bottom-sep = (*\meta{dimension}*)
- \end{ccnusyntax}
- \env{solution} 环境下方间距。默认为 |.5em plus .5em minus .2em|。
-\end{function}
\begin{function}[added = 2022-07-19]{solution/blank-type}
\begin{ccnusyntax}[emph={[1]blank-type}]
@@ -2635,4 +2752,174 @@
zhu-circlednumber-base = (*<tikz|(font)>*)
\end{ccnusyntax}
在 \kvopt{poem/type}{chinese} 键值下,\tn{zhu} 的带圈数字的源。\opt{tikz} 表示此时带圈数字基于 \TikZ,\opt{font} 表示此时带圈数字基于字体。
+\end{function}
+
+
+\subsubsection{图文排版} \label{subsubsec:参数-图文排版}
+
+
+\begin{function}[updated = 2022-08-28]{multifigures}
+ \begin{ccnusyntax}[emph={[1]multifigures}]
+ multifigures = (*\marg{键值列表}*)
+ multifigures/(*\meta{key}*) = (*\meta{value}*)
+ \end{ccnusyntax}
+ 该选项包含多个子项目。用于设置 \env{multifigures} 环境。可以在 \tn{examsetup} 中使用,也可以在 \env{multifigures} 环境的可选参数中使用。
+\end{function}
+
+\begin{function}[added = 2022-08-28]{multifigures/columns}
+ \begin{ccnusyntax}[emph={[1]columns}]
+ columns = (*\meta{integer}*)
+ \end{ccnusyntax}
+ 每行多少项。默认为 |3|。
+\end{function}
+
+\begin{function}[added = 2022-08-28]{multifigures/fig-pos}
+ \begin{ccnusyntax}[emph={[1]fig-pos}]
+ fig-pos = (*<top|(above)|bottom|below|left|right>*)
+ \end{ccnusyntax}
+ 图片相对于标签的位置。\opt{top} 和 \opt{above} 同义、\opt{bottom} 和 \opt{below} 同义。
+\end{function}
+
+\begin{function}[added = 2022-08-28]{multifigures/top-sep}
+ \begin{ccnusyntax}[emph={[1]top-sep}]
+ top-sep = (*\meta{dimension}*)
+ \end{ccnusyntax}
+ \env{multifigures} 环境上方额外弹性间距。默认为 |1ex plus .5ex minus .5ex|。
+\end{function}
+
+\begin{function}[added = 2022-08-28]{multifigures/bottom-sep}
+ \begin{ccnusyntax}[emph={[1]bottom-sep}]
+ bottom-sep = (*\meta{dimension}*)
+ \end{ccnusyntax}
+ \env{multifigures} 环境下方额外弹性间距。默认为 |0pt|。
+\end{function}
+
+\begin{function}[added = 2022-08-28]{multifigures/align}
+ \begin{ccnusyntax}[emph={[1]align}]
+ align = (*<t|m|(b)>*)
+ \end{ccnusyntax}
+ 图片和标签的整体对齐方式。\opt{t} 表示顶部对齐、\opt{m} 表示居中对齐、\opt{b} 表示底部对齐。
+\end{function}
+
+\begin{function}[added = 2022-08-28]{multifigures/xshift,multifigures/hshift,multifigures/yshift,multifigures/vshift}
+ \begin{ccnusyntax}[emph={[1]xshift,hshift,yshift,vshift}]
+ xshift = (*\meta{dimension}*)
+ hshift = (*\meta{dimension}*)
+ yshift = (*\meta{dimension}*)
+ vshift = (*\meta{dimension}*)
+ \end{ccnusyntax}
+ 图片和标签整体的水平和垂直的偏移量。\opt{xshift} 和 \opt{hshift} 同义,表示水平;\opt{yshift} 和 \opt{vshift} 同义,表示垂直。
+\end{function}
+
+\begin{function}[added = 2022-08-28]{multifigures/label-xshift,multifigures/label-hshift,multifigures/label-yshift,multifigures/label-vshift}
+ \begin{ccnusyntax}[emph={[1]xshift,hshift,yshift,vshift}]
+ label-xshift = (*\meta{dimension}*)
+ label-hshift = (*\meta{dimension}*)
+ label-yshift = (*\meta{dimension}*)
+ label-vshift = (*\meta{dimension}*)
+ \end{ccnusyntax}
+ 标签相对图片的水平和垂直的偏移量。\opt{label-xshift} 和 \opt{label-hshift} 同义,表示水平;\opt{label-yshift} 和 \opt{label-vshift} 同义,表示垂直。
+\end{function}
+
+
+
+
+\begin{function}[updated = 2022-08-28]{textfigure}
+ \begin{ccnusyntax}[emph={[1]textfigure}]
+ textfigure = (*\marg{键值列表}*)
+ textfigure/(*\meta{key}*) = (*\meta{value}*)
+ \end{ccnusyntax}
+ 该选项包含多个子项目。用于设置 \tn{textfigure} 命令。可以在 \tn{examsetup} 中使用,也可以在 \tn{textfigure} 命令的可选参数中使用。
+\end{function}
+
+\begin{function}[added = 2022-08-28]{textfigure/fig-pos}
+ \begin{ccnusyntax}[emph={[1]fig-pos}]
+ fig-pos = (*\meta{postion}*)
+ \end{ccnusyntax}
+ 图片相对于文本的方位。方位可选参数见下列表,默认为 \opt{right}
+\end{function}
+\begin{itemize}
+ \item \opt{top}:图片在文本上方
+ \item \opt{bottom}:图片在文本下方
+ \item \opt{left}:图片在文本左边,垂直中心对齐
+ \item \opt{right}:图片在文本右边,垂直中心对齐
+ \item \opt{top-left}:图片在文本的左上方
+ \item \opt{top-center}:图片在文本的上方,位于整行的水平中心
+ \item \opt{top-right}:图片在文本的右上方
+ \item \opt{top-flushright}:图片在文本的右上方,位于水平末端
+ \item \opt{bottom-left}:图片在文本的左下方
+ \item \opt{bottom-center}:图片在文本的下方,位于整行的水平中心
+ \item \opt{bottom-right}:图片在文本的右下方
+ \item \opt{bottom-flushright}:图片在文本的右下方,位于水平末端
+ \item \opt{left-top}:图片在文本左边,顶部对齐
+ \item \opt{left-center}:等价于 \opt{left}
+ \item \opt{left-bottom}:图片在文本左边,底部对齐
+ \item \opt{right-top}:图片在文本右边边,顶部对齐
+ \item \opt{right-center}:等价于 \opt{right}
+ \item \opt{right-bottom}:图片在文本右边,底部对齐
+\end{itemize}
+
+
+\begin{function}[added = 2022-08-28]{textfigure/xshift,textfigure/hshift,textfigure/yshift,textfigure/vshift}
+ \begin{ccnusyntax}[emph={[1]xshift,hshift,yshift,vshift}]
+ xshift = (*\meta{dimension}*)
+ hshift = (*\meta{dimension}*)
+ yshift = (*\meta{dimension}*)
+ vshift = (*\meta{dimension}*)
+ \end{ccnusyntax}
+ 图片和文本整体的水平和垂直的偏移量。\opt{xshift} 和 \opt{hshift} 同义,表示水平;\opt{yshift} 和 \opt{vshift} 同义,表示垂直。\opt{yshift} 的默认值为 |.5\baselineskip|。
+\end{function}
+
+\begin{function}[added = 2022-08-28]{textfigure/figure-xshift,textfigure/figure-hshift,textfigure/figure-yshift,textfigure/figure-vshift}
+ \begin{ccnusyntax}[emph={[1]xshift,hshift,yshift,vshift}]
+ figure-xshift = (*\meta{dimension}*)
+ figure-hshift = (*\meta{dimension}*)
+ figure-yshift = (*\meta{dimension}*)
+ figure-vshift = (*\meta{dimension}*)
+ \end{ccnusyntax}
+ 图片相对于文本的水平和垂直的偏移量。\opt{figure-xshift} 和 \opt{figure-hshift} 同义,表示水平;\opt{figure-yshift} 和 \opt{figure-vshift} 同义,表示垂直。
+\end{function}
+
+
+\begin{function}[added = 2022-08-28]{textfigure/top-sep}
+ \begin{ccnusyntax}[emph={[1]top-sep}]
+ top-sep = (*\meta{dimension}*)
+ \end{ccnusyntax}
+ \tn{textfigure} 命令上方弹性间距。默认为 |0pt|。
+\end{function}
+
+\begin{function}[added = 2022-08-28]{textfigure/bottom-sep}
+ \begin{ccnusyntax}[emph={[1]bottom-sep}]
+ bottom-sep = (*\meta{dimension}*)
+ \end{ccnusyntax}
+ \tn{textfigure} 命令下方弹性间距。默认为 |1.5ex plus .5ex minus 0.5ex|。
+\end{function}
+
+\begin{function}[added = 2022-08-28]{textfigure/text-width}
+ \begin{ccnusyntax}[emph={[1]text-width}]
+ text-width = (*\meta{dimension}*)
+ \end{ccnusyntax}
+ 文本部分的 \env{varwidth} 宽度。默认为 |\columnwidth|。但有时需要手动输入 \kvopt{text-width}{\textbackslash columnwidth} 才会变成整行,比如解答题。
+\end{function}
+
+\begin{function}[added = 2022-08-28]{textfigure/figure-width}
+ \begin{ccnusyntax}[emph={[1]figure-width}]
+ figure-width = (*\meta{dimension}*)
+ \end{ccnusyntax}
+ 图片部分的 \env{varwidth} 宽度。默认为 |\columnwidth|。
+\end{function}
+
+\begin{function}[added = 2022-08-28]{textfigure/ratio,textfigure/text-ratio}
+ \begin{ccnusyntax}[emph={[1]ratio,text-ratio}]
+ ratio = (*\meta{比例}*)
+ text-ratio = (*\meta{比例}*)
+ \end{ccnusyntax}
+ 图片部分占比。默认为 |0.95|。有时 |1| 的效果并不是整行,这主要和使用了 \env{varwidth} 环境有关,此时建议改 \opt{text-width}。
+\end{function}
+
+\begin{function}[added = 2022-08-28]{textfigure/top}
+ \begin{ccnusyntax}[emph={[1]top}]
+ top = (*\meta{integer}*)
+ \end{ccnusyntax}
+ \kvopt{fig-pos}{left-top} 时,图片顶部从文本的第几行开始排,效果和 \pkg{wrapstuff} 宏包的 \opt{top} 键值效果类似。
\end{function} \ No newline at end of file
diff --git a/Master/texmf-dist/doc/xelatex/exam-zh/doc/exam-zh-doc-setup.tex b/Master/texmf-dist/doc/xelatex/exam-zh/doc/exam-zh-doc-setup.tex
index d6aa6a6a0b6..e0a12cc4027 100644
--- a/Master/texmf-dist/doc/xelatex/exam-zh/doc/exam-zh-doc-setup.tex
+++ b/Master/texmf-dist/doc/xelatex/exam-zh/doc/exam-zh-doc-setup.tex
@@ -6,6 +6,7 @@
\usepackage{../exam-zh-question}
\usepackage{../exam-zh-symbols}
\usepackage{../exam-zh-chinese-english}
+\usepackage{../exam-zh-textfigure}
\ExplSyntaxOn
\NewDocumentCommand \examsetup { m }
@@ -32,9 +33,9 @@
\title{\textcolor{MaterialIndigo800}{%
\textbf{exam-zh: 高考试卷 \LaTeX \xpinyin[font=\sffamily,format=\color{MaterialIndigo800}]{模}{mu2}板}}}
\author{李泽平,夏康玮,郭李军}
-\date{2022/08/15\quad v0.1.18%
+\date{2022/08/28\quad v0.1.19%
\thanks{%
- \url{https://gitee.com/zepinglee/exam-zh}
+ \url{https://gitee.com/xkwxdyy/exam-zh}
}
}
@@ -61,4 +62,11 @@
\rule[-0.7em]{0pt}{2em} \\\hline
\end{tabular}
}
-\ExplSyntaxOff \ No newline at end of file
+\ExplSyntaxOff
+
+\AddToHook{env/latexexample/after}
+ {%
+ \examsetup{
+ question/index=1
+ }
+ } \ No newline at end of file
diff --git a/Master/texmf-dist/doc/xelatex/exam-zh/doc/exam-zh-doc.pdf b/Master/texmf-dist/doc/xelatex/exam-zh/doc/exam-zh-doc.pdf
index f4ee4463f39..b3732b8ebc8 100644
--- a/Master/texmf-dist/doc/xelatex/exam-zh/doc/exam-zh-doc.pdf
+++ b/Master/texmf-dist/doc/xelatex/exam-zh/doc/exam-zh-doc.pdf
Binary files differ
diff --git a/Master/texmf-dist/doc/xelatex/exam-zh/examples/example-multiple.pdf b/Master/texmf-dist/doc/xelatex/exam-zh/examples/example-multiple.pdf
index 7e2e1ca87ed..917fbee4302 100644
--- a/Master/texmf-dist/doc/xelatex/exam-zh/examples/example-multiple.pdf
+++ b/Master/texmf-dist/doc/xelatex/exam-zh/examples/example-multiple.pdf
Binary files differ
diff --git a/Master/texmf-dist/doc/xelatex/exam-zh/examples/example-multiple.tex b/Master/texmf-dist/doc/xelatex/exam-zh/examples/example-multiple.tex
index 0a134480a67..94c5471205e 100644
--- a/Master/texmf-dist/doc/xelatex/exam-zh/examples/example-multiple.tex
+++ b/Master/texmf-dist/doc/xelatex/exam-zh/examples/example-multiple.tex
@@ -316,14 +316,18 @@
% 20.
\begin{problem}[points = 12]
- 如图,在三棱锥 $A$-$BCD$ 中,$\text{平面} ABD \perp \text{平面} BCD$,
- $AB = AD$,$O$ 为 $BD$ 的重点。
- \begin{enumerate}
- \item 证明:$OA \perp CD$;
- \item 若 $\triangle OCD$ 是变长为 $1$ 的等边三角形,点 $E$ 在棱 $AD$ 上,
- $DE = 2 EA$,且二面角 $E$-$BC$-$D$ 的大小为 \ang{45},
- 求三棱锥 $A$-$BCD$ 的体积。
- \end{enumerate}
+ \textfigure[text-width=\columnwidth, fig-pos=bottom-flushright]{
+ 如图,在三棱锥 $A$-$BCD$ 中,$\text{平面} ABD \perp \text{平面} BCD$,
+ $AB = AD$,$O$ 为 $BD$ 的重点。
+ \begin{enumerate}
+ \item 证明:$OA \perp CD$;
+ \item 若 $\triangle OCD$ 是变长为 $1$ 的等边三角形,点 $E$ 在棱 $AD$ 上,
+ $DE = 2 EA$,且二面角 $E$-$BC$-$D$ 的大小为 \ang{45},
+ 求三棱锥 $A$-$BCD$ 的体积。
+ \end{enumerate}
+ }{
+ \includegraphics[width=5cm]{example-image.png}
+ }
\end{problem}
% 21.
diff --git a/Master/texmf-dist/doc/xelatex/exam-zh/examples/example-single.pdf b/Master/texmf-dist/doc/xelatex/exam-zh/examples/example-single.pdf
index d70946bd46c..358ed541966 100644
--- a/Master/texmf-dist/doc/xelatex/exam-zh/examples/example-single.pdf
+++ b/Master/texmf-dist/doc/xelatex/exam-zh/examples/example-single.pdf
Binary files differ
diff --git a/Master/texmf-dist/doc/xelatex/exam-zh/examples/example-single.tex b/Master/texmf-dist/doc/xelatex/exam-zh/examples/example-single.tex
index 89c04bf74d4..d70cb9ae92d 100644
--- a/Master/texmf-dist/doc/xelatex/exam-zh/examples/example-single.tex
+++ b/Master/texmf-dist/doc/xelatex/exam-zh/examples/example-single.tex
@@ -294,14 +294,18 @@
% 20.
\begin{problem}[points = 12]
- 如图,在三棱锥 $A$-$BCD$ 中,$\text{平面} ABD \perp \text{平面} BCD$,
- $AB = AD$,$O$ 为 $BD$ 的重点。
- \begin{enumerate}
- \item 证明:$OA \perp CD$;
- \item 若 $\triangle OCD$ 是变长为 $1$ 的等边三角形,点 $E$ 在棱 $AD$ 上,
- $DE = 2 EA$,且二面角 $E$-$BC$-$D$ 的大小为 \ang{45},
- 求三棱锥 $A$-$BCD$ 的体积。
- \end{enumerate}
+ \textfigure{
+ 如图,在三棱锥 $A$-$BCD$ 中,$\text{平面} ABD \perp \text{平面} BCD$,
+ $AB = AD$,$O$ 为 $BD$ 的重点。
+ \begin{enumerate}
+ \item 证明:$OA \perp CD$;
+ \item 若 $\triangle OCD$ 是变长为 $1$ 的等边三角形,点 $E$ 在棱 $AD$ 上,
+ $DE = 2 EA$,且二面角 $E$-$BC$-$D$ 的大小为 \ang{45},
+ 求三棱锥 $A$-$BCD$ 的体积。
+ \end{enumerate}
+ }{
+ \includegraphics[width=3cm]{example-image.png}
+ }
\end{problem}
% 21.
diff --git a/Master/texmf-dist/tex/latex/exam-zh/exam-zh-chinese-english.sty b/Master/texmf-dist/tex/latex/exam-zh/exam-zh-chinese-english.sty
index b2d1d39baf3..eefffdac7d4 100644
--- a/Master/texmf-dist/tex/latex/exam-zh/exam-zh-chinese-english.sty
+++ b/Master/texmf-dist/tex/latex/exam-zh/exam-zh-chinese-english.sty
@@ -1,14 +1,14 @@
%
% Copyright (c) 2022 Kangwei Xia, Lijun Guo
% Released under the LaTeX Project Public License v1.3c License.
-% Repository: https://gitee.com/zepinglee/exam-zh
+% Repository: https://gitee.com/xkwxdyy/exam-zh
%
\NeedsTeXFormat{LaTeX2e}
\RequirePackage{expl3}
-\ProvidesExplPackage {exam-zh-chinese-english} {2022-08-15} {v0.1.18}
+\ProvidesExplPackage {exam-zh-chinese-english} {2022-08-28} {v0.1.19}
{exam-zh chinese and english module}
\PassOptionsToPackage { tcolorbox } { most }
diff --git a/Master/texmf-dist/tex/latex/exam-zh/exam-zh-choices.sty b/Master/texmf-dist/tex/latex/exam-zh/exam-zh-choices.sty
index ef7c39ba881..05f66871c3a 100644
--- a/Master/texmf-dist/tex/latex/exam-zh/exam-zh-choices.sty
+++ b/Master/texmf-dist/tex/latex/exam-zh/exam-zh-choices.sty
@@ -9,7 +9,7 @@
\RequirePackage{expl3}
\RequirePackage{xparse}
-\ProvidesExplPackage {exam-zh-choices} {2022-08-15} {v0.1.18}
+\ProvidesExplPackage {exam-zh-choices} {2022-08-28} {v0.1.19}
{exam-zh choices module}
\dim_new:N \l__examzh_choices_column_sep_dim
@@ -36,7 +36,13 @@
label-sep .dim_set:N = \l__examzh_choices_label_sep_dim ,
label-width .dim_set:N = \l__examzh_choices_label_width_dim ,
max-columns .int_set:N = \l__examzh_choices_max_columns_int ,
- index .int_set:N = \l__examzh_choices_item_index_int
+ index .int_set:N = \l__examzh_choices_item_index_int,
+ % 环境上方的额外距离
+ top-sep .skip_set:N = \l__examzh_choices_top_sep_skip,
+ % 环境下方的额外距离
+ bottom-sep .skip_set:N = \l__examzh_choices_bottom_sep_skip,
+ % 若不是单行排版,则可以控制行之间的额外间距
+ linesep .skip_set:N = \l__examzh_choices_line_sep_skip
}
\keys_set:nn { exam-zh / choices }
@@ -45,11 +51,14 @@
columns = 0 ,
label = \Alph*. ,
label-pos = auto ,
- label-align = right ,
+ label-align = left ,
label-sep = .5em ,
label-width = 0pt ,
max-columns = 4 ,
index = 1,
+ top-sep = 0pt,
+ bottom-sep = 0pt,
+ linesep = 0pt plus .5ex
}
\NewDocumentCommand \setchoices { m }
@@ -83,17 +92,19 @@
\NewDocumentEnvironment { choices } { O { } +b }
{
+ \keys_set:nn { exam-zh / choices } {#1}
\par \nopagebreak
% 严格禁止孤行和寡行
\int_set:Nn \clubpenalty { 10000 }
\int_set:Nn \widowpenalty { 10000 }
% 尽量避免在选项中间换行
\int_set:Nn \interlinepenalty { 301 }
+ \vspace* { \l__examzh_choices_top_sep_skip }
\noindent
- \dim_set_eq:NN \l__examzh_choices_total_width_dim \linewidth
+ % \dim_set_eq:NN \l__examzh_choices_total_width_dim \linewidth
+ \dim_set:Nn \l__examzh_choices_total_width_dim { \linewidth - \leftskip - \rightskip }
\int_zero:N \l__examzh_choices_columns_int
\dim_zero:N \l__examzh_choices_label_width_dim
- \keys_set:nn { exam-zh / choices } {#1}
}
{
% 用 \item 分割选项
@@ -119,6 +130,7 @@
\__examzh_print_choices:N \l__examzh_choices_seq
% 输出正确选项
\__examzh_print_correctchoice:
+ \vspace* { \l__examzh_choices_bottom_sep_skip }
}
% 用来存正确选项的序号(entry)
@@ -368,7 +380,9 @@
{ \l__examzh_choices_current_col_int } > { \l__examzh_choices_columns_int }
{
% \par \noindent
- \newline
+ \\[ \l__examzh_choices_line_sep_skip ]
+ % \newline
+ % \skip_vertical:N \l__examzh_choices_line_sep_skip
\int_set:Nn \l__examzh_choices_current_col_int {1}
}
% TODO 为什么 > 1 才加呢? 这样的话第 1 列和第 2 列之间就没有这个间距?
@@ -386,52 +400,116 @@
\coffin_new:N \l__examzh_choices_item_coffin
\coffin_new:N \l__examzh_choices_label_coffin
-
+% \box_new:N \l__examzh_choices_item_box
+% \box_new:N \l__examzh_choices_label_box
\cs_new:Npn \__examzh_print_single_choice:nn #1#2
{
% 选项标签
\__examzh_choices_make_label_coffin:n {#1}
+ % \__examzh_choices_make_label_box:n {#1}
% 选项内容
\__examzh_choices_make_item_coffin:n {#2}
+ % \__examzh_choices_make_item_box:n {#2}
% 合并选项的标签和内容
\str_case:Vn \l__examzh_choices_label_pos_tl
{
{ top-left }
{
\coffin_join:NnnNnnnn
- \l__examzh_choices_item_coffin {l} {H}
\l__examzh_choices_label_coffin {r} {H}
- { - \l__examzh_choices_label_sep_dim }
+ \l__examzh_choices_item_coffin {l} {H}
+ { \l__examzh_choices_label_sep_dim }
{ 0pt }
+ % \hbox_set:Nn \l__examzh_choices_item_box
+ % {
+ % \box_use_drop:N \l__examzh_choices_label_box
+ % \kern \l__examzh_choices_label_sep_dim
+ % \box_use_drop:N \l__examzh_choices_item_box
+ % }
}
{ left }
{
\coffin_join:NnnNnnnn
- \l__examzh_choices_item_coffin {l} {vc}
\l__examzh_choices_label_coffin {r} {vc}
- { - \l__examzh_choices_label_sep_dim }
+ \l__examzh_choices_item_coffin {l} {vc}
+ { \l__examzh_choices_label_sep_dim }
{ 0pt }
+ % \hbox_set:Nn \l__examzh_choices_item_box
+ % {
+ % \box_move_down:nn
+ % {
+ % (
+ % \box_ht:N \l__examzh_choices_label_box -
+ % \box_dp:N \l__examzh_choices_label_box -
+ % \box_ht:N \l__examzh_choices_item_box +
+ % \box_dp:N \l__examzh_choices_item_box
+ % ) / 2
+ % }
+ % { \box_use_drop:N \l__examzh_choices_label_box }
+ % \kern \l__examzh_choices_label_sep_dim
+ % \box_use_drop:N \l__examzh_choices_item_box
+ % }
}
{ bottom }
{
\coffin_join:NnnNnnnn
- \l__examzh_choices_item_coffin {hc} {b}
\l__examzh_choices_label_coffin {hc} {t}
+ \l__examzh_choices_item_coffin {hc} {b}
{ 0pt }
% { - \l__examzh_choices_label_sep_dim }
{ 0pt }
+ % \hbox_set:Nn \l__examzh_choices_item_box
+ % {
+ % % \vbox_top:n
+ % % {
+ % % \box_use:N \l__examzh_choices_item_box
+ % % \nointerlineskip
+ % % % \kern \l__examzh_choices_label_sep_dim
+ % % \box_move_left:nn
+ % % {
+ % % (
+ % % \box_wd:N \l__examzh_choices_label_box -
+ % % \box_wd:N \l__examzh_choices_item_box
+ % % ) / 2
+ % % }
+ % % { \box_use_drop:N \l__examzh_choices_label_box }
+ % % \box_clear:N \l__examzh_choices_item_box
+ % % }
+ % \hbox_set:Nn \l__examzh_choices_item_box
+ % {
+ % \box_use:N \l__examzh_choices_item_box
+ % \kern \dim_eval:n
+ % {
+ % ( - \box_wd:N \l__examzh_choices_label_box
+ % - \box_wd:N \l__examzh_choices_item_box ) / 2
+ % }
+ % \box_move_down:nn
+ % {
+ % \box_ht:N \l__examzh_choices_label_box +
+ % \box_dp:N \l__examzh_choices_item_box
+ % % + \l__examzh_choices_label_sep_dim
+ % }
+ % { \box_use_drop:N \l__examzh_choices_label_box }
+ % \box_clear:N \l__examzh_choices_item_box
+ % }
+ % }
}
}
% 输出合并后
- \coffin_typeset:Nnnnn \l__examzh_choices_item_coffin {l} {H} {0pt} {0pt}
+ % \coffin_typeset:Nnnnn \l__examzh_choices_item_coffin {l} {H} {0pt} {0pt}
+ \coffin_typeset:Nnnnn \l__examzh_choices_label_coffin {l} {H} {0pt} {0pt}
\coffin_clear:N \l__examzh_choices_item_coffin
\coffin_clear:N \l__examzh_choices_label_coffin
+ % \box_use_drop:N \l__examzh_choices_item_box
}
% 将标签内容存入 coffin
\cs_new:Npn \__examzh_choices_make_label_coffin:n #1
+% 将标签内容存入 box
+% \cs_new:Npn \__examzh_choices_make_label_box:n #1
{
\hcoffin_set:Nn \l__examzh_choices_label_coffin
+ % \hbox_set:Nn \l__examzh_choices_label_box
{
\hbox_to_wd:nn { \l__examzh_choices_label_width_dim }
{ \__examzh_choices_make_label:n {#1} \strut }
@@ -452,10 +530,13 @@
% 将选项内容存入 coffin
\cs_new:Npn \__examzh_choices_make_item_coffin:n #1
+% 将选项内容存入 box
+% \cs_new:Npn \__examzh_choices_make_item_box:n #1
{
\hcoffin_set:Nn \l__examzh_choices_item_coffin
+ % \hbox_set:Nn \l__examzh_choices_item_box
{
- % 优先尝试使用 hbox,这是因为在 \vcoffin_set 外部能保留原来的 \linewidth 和
+ % 优先尝试使用 hbox,这是因为在 \vbox_set 外部能保留原来的 \linewidth 和
% \textwidth,方便用户在 \includegraphics 中使用
\hbox_set:Nn \l_tmpa_box {#1}
% 若盒子的自然高度大于 2 行,且深度为 0pt,设置为插图模式
@@ -468,9 +549,17 @@
{ \bool_set_true:N \l__examzh_choices_figure_mode_bool }
\vcoffin_set:Nnn \l_tmpa_coffin
{ \l__examzh_choices_item_width_dim }
+ % \vbox_set:Nn \l_tmpa_box
{
+ % \dim_set_eq:NN \parskip \c_zero_dim
+ % \dim_set_eq:NN \parindent \listparindent
+ \dim_set_eq:NN \hsize \l__examzh_choices_item_width_dim
+ \dim_set_eq:NN \linewidth \hsize
+ \dim_set_eq:NN \columnwidth \hsize
\dim_set_eq:NN \parskip \c_zero_dim
\dim_set_eq:NN \parindent \listparindent
+ \dim_set:Nn \leftskip { 0pt }
+ \dim_set:Nn \rightskip { 0pt }
\noindent
% \strut
% 若标签在底部,将图片居中对齐。
@@ -485,9 +574,15 @@
}
\dim_set:Nn \l_tmpa_dim { \coffin_ht:N \l_tmpa_coffin }
\bool_if:NT \l__examzh_choices_figure_mode_bool
+ % \dim_set:Nn \l_tmpa_dim { \box_ht:N \l_tmpa_box }
+ % \bool_if:NTF \l__examzh_choices_figure_mode_bool
+ % {
+ % \box_move_up:nn { \l_tmpa_dim - 0.7 \baselineskip } { \box_use_drop:N \l_tmpa_box }
+ % }
{
\coffin_set_horizontal_pole:Nnn \l_tmpa_coffin {T}
{ \l_tmpa_dim - 0.7 \baselineskip }
+ % \vbox_top:n { \vbox_unpack_drop:N \l_tmpa_box }
}
\coffin_typeset:Nnnnn \l_tmpa_coffin {l} {T} {0pt} {0pt}
\coffin_clear:N \l_tmpa_coffin
diff --git a/Master/texmf-dist/tex/latex/exam-zh/exam-zh-font.sty b/Master/texmf-dist/tex/latex/exam-zh/exam-zh-font.sty
index cda40621014..76f943de1df 100644
--- a/Master/texmf-dist/tex/latex/exam-zh/exam-zh-font.sty
+++ b/Master/texmf-dist/tex/latex/exam-zh/exam-zh-font.sty
@@ -1,7 +1,7 @@
%
% Copyright (c) 2022 Zeping Lee and AlphaZTX
% Released under the LaTeX Project Public License v1.3c License.
-% Repository: https://gitee.com/zepinglee/exam-zh
+% Repository: https://gitee.com/xkwxdyy/exam-zh
%
\NeedsTeXFormat{LaTeX2e}
@@ -9,7 +9,7 @@
\RequirePackage{expl3}
\RequirePackage{xparse}
-\ProvidesExplPackage {exam-zh-font} {2022-08-15} {v0.1.18}
+\ProvidesExplPackage {exam-zh-font} {2022-08-28} {v0.1.19}
{exam-zh font module}
\RequirePackage { unicode-math }
@@ -456,7 +456,7 @@
\setmathfont { \g__examzh_font_font_name_stix_math_tl }
[
Extension = .otf,
- range = { \complement } ,
+ range = { \complement, \bigstar } ,
]
\setmathrm { NewCM10 }
[
@@ -495,7 +495,7 @@
\setmathfont { \g__examzh_font_font_name_stix_math_tl }
[
Extension = .otf,
- range = { \complement } ,
+ range = { \complement, \bigstar } ,
]
\setmathrm { lmroman10 }
[
@@ -600,7 +600,7 @@
\setmathfont { \g__examzh_font_font_name_stix_math_tl }
[
Extension = .otf,
- range = { \complement } ,
+ range = { \complement, \bigstar } ,
]
\message
{
@@ -638,7 +638,7 @@
\setmathfont { \g__examzh_font_font_name_stix_math_tl }
[
Extension = .otf,
- range = { \complement } ,
+ range = { \complement, \bigstar } ,
]
}
diff --git a/Master/texmf-dist/tex/latex/exam-zh/exam-zh-question.sty b/Master/texmf-dist/tex/latex/exam-zh/exam-zh-question.sty
index 7cf7524e08d..9afcba5f7b1 100644
--- a/Master/texmf-dist/tex/latex/exam-zh/exam-zh-question.sty
+++ b/Master/texmf-dist/tex/latex/exam-zh/exam-zh-question.sty
@@ -1,7 +1,7 @@
%
% Copyright (c) 2022 Zeping Lee
% Released under the LaTeX Project Public License v1.3c License.
-% Repository: https://gitee.com/zepinglee/exam-zh
+% Repository: https://gitee.com/xkwxdyy/exam-zh
%
\NeedsTeXFormat{LaTeX2e}
@@ -9,7 +9,7 @@
\RequirePackage{expl3}
\RequirePackage{xparse}
-\ProvidesExplPackage {exam-zh-question} {2022-08-15} {v0.1.18}
+\ProvidesExplPackage {exam-zh-question} {2022-08-28} {v0.1.19}
{exam-zh question module}
@@ -755,6 +755,7 @@
{ \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 },
+ depth .dim_set:N = \l__examzh_fillin_line_depth_dim
}
\keys_set:nn { exam-zh / fillin }
{
@@ -767,7 +768,8 @@
no-answer-counter-index = 1,
no-answer-counter-label = \arabic*,
paren-type = banjiao,
- width-type = fill,
+ width-type = normal,
+ depth = 0.4em
}
\keys_define:nn { exam-zh }
@@ -801,7 +803,9 @@
}
{
% 不显示答案
- \__examzh_fillin_no_answer_typeset:
+ \IfBooleanTF {#1}
+ { \__examzh_fillin_no_answer_breakble_typeset: }
+ { \__examzh_fillin_no_answer_unbreakble_typeset: }
}
}
{
@@ -821,7 +825,9 @@
}
{
% 不显示答案
- \__examzh_fillin_no_answer_typeset:
+ \IfBooleanTF {#1}
+ { \__examzh_fillin_no_answer_breakble_typeset: }
+ { \__examzh_fillin_no_answer_unbreakble_typeset: }
}
}
\group_end:
@@ -832,13 +838,26 @@
There~is~no~such~noanswertype~named~#1!\\
Please~read~the~manual~carefully!
}
-\cs_new:Npn \__examzh_fillin_no_answer_typeset:
+\cs_new:Npn \__examzh_fillin_no_answer_unbreakble_typeset:
+ {
+ \str_case:VnF \l__examzh_fillin_no_answer_type_str
+ {
+ { blacktriangle } { \__examzh_fillin_no_answer_typeset_blacktriangle: }
+ { counter } { \__examzh_fillin_no_answer_typeset_counter: }
+ { none } { \__examzh_fillin_output_unbreakable_F: }
+ }
+ {
+ \msg_error:nnx { exam-zh / fillin } { no-such-noanswertype }
+ { \l__examzh_fillin_no_answer_type_str }
+ }
+ }
+\cs_new:Npn \__examzh_fillin_no_answer_breakble_typeset:
{
\str_case:VnF \l__examzh_fillin_no_answer_type_str
{
{ blacktriangle } { \__examzh_fillin_no_answer_typeset_blacktriangle: }
{ counter } { \__examzh_fillin_no_answer_typeset_counter: }
- { none } { \__examzh_fillin_no_answer_typeset_none: }
+ { none } { \__examzh_fillin_output_breakable_F: }
}
{
\msg_error:nnx { exam-zh / fillin } { no-such-noanswertype }
@@ -856,10 +875,6 @@
{ \__examzh_fillin_the_label: }
% { \int_eval:n { \g__examzh_fillin_no_answer_counter_int - 1 } }
}
-\cs_new:Npn \__examzh_fillin_no_answer_typeset_none:
- {
- \__examzh_fillin_output_F:
- }
\cs_new:Npn \__examzh_fillin_without_judge:n #1
{
% \ULdepth 是 \uline 的下划线的深度
@@ -887,7 +902,7 @@
\__examzh_fillin_output_T:
}
{
- \__examzh_fillin_output_F:
+ \__examzh_fillin_output_unbreakable_F:
}
}
\cs_new:Npn \__examzh_fillin_breakline:n #1
@@ -900,7 +915,7 @@
\__examzh_fillin_output_breakline_T:
}
{
- \__examzh_fillin_output_F:
+ \__examzh_fillin_output_breakable_F:
}
}
\msg_new:nnn { exam-zh } { no-fillin-type }
@@ -940,14 +955,29 @@
{
The~type~:~#1~ cannot~be~used~in~breakable~fillin~cmd.
}
-\cs_new:Npn \__examzh_fillin_output_F:
+\cs_new:Npn \__examzh_fillin_output_breakable_F:
+ {
+ \str_case:VnF \l__examzh_fillin_type_str
+ {
+ { line } { \__examzh_fillin_uline_breakable_F: }
+ { paren } { \__examzh_fillin_paren_breakable_F: }
+ { circle } { \__examzh_fillin_circle_F: }
+ { blank } { \__examzh_fillin_blank_breakable_F: }
+ { rectangle } { \__examzh_fillin_rectangle_F: }
+ }
+ {
+ \msg_error:nnx { exam-zh } { no-fillin-type }
+ { \l__examzh_fillin_type_str }
+ }
+ }
+\cs_new:Npn \__examzh_fillin_output_unbreakable_F:
{
\str_case:VnF \l__examzh_fillin_type_str
{
- { line } { \__examzh_fillin_uline_F: }
- { paren } { \__examzh_fillin_paren_F: }
+ { line } { \__examzh_fillin_uline_unbreakable_F: }
+ { paren } { \__examzh_fillin_paren_unbreakable_F: }
{ circle } { \__examzh_fillin_circle_F: }
- { blank } { \__examzh_fillin_blank_F: }
+ { blank } { \__examzh_fillin_blank_unbreakable_F: }
{ rectangle } { \__examzh_fillin_rectangle_F: }
}
{
@@ -957,7 +987,9 @@
}
\cs_new:Npn \__examzh_fillin_uline_T:
{
- \uline
+ % \uline
+ \CJKunderline*
+ [ depth = \l__examzh_fillin_line_depth_dim ]
{
\hspace* { 0.5em plus .5em minus .5em }
\dim_compare:nNnTF { \l__examzh_question_answer_depth_dim } > { 0.2em }
@@ -970,11 +1002,18 @@
\hspace* { 0.5em plus .5em minus .5em }
}
}
-\cs_new:Npn \__examzh_fillin_uline_F:
+\cs_new:Npn \__examzh_fillin_uline_breakable_F:
{
% \uline { \hspace* { \l__examzh_fillin_F_width_dim } }
\__examzh_fillin_breakable_hspace:NN \CJKunderline \allowbreak
}
+\cs_new:Npn \__examzh_fillin_uline_unbreakable_F:
+ {
+ \unskip
+ \hspace* { 0.5em plus .5em minus .5em }
+ \uline { \hspace* { \l__examzh_fillin_F_width_dim } }
+ \ignorespaces
+ }
% \cs_new:Nn \__examzh_fillin_uline:
% {
% \bgroup
@@ -1006,6 +1045,7 @@
\cs_new:Npn \__examzh_fillin_uline_breakline_T:
{
\CJKunderline*
+ [ depth = \l__examzh_fillin_line_depth_dim ]
% \uline
% \__examzh_fillin_uline:
{
@@ -1018,6 +1058,7 @@
}
\cs_new:Npn \__examzh_fillin_paren_T:
{
+ \unskip
\bool_if:NTF \l__examzh_fillin_paren_banjiao_bool
{
(
@@ -1037,9 +1078,11 @@
\hspace* { 0.5em plus .5em minus .5em }
}
+ \ignorespaces
}
\cs_new:Npn \__examzh_fillin_paren_breakline_T:
{
+ \unskip
\bool_if:NTF \l__examzh_fillin_paren_banjiao_bool
{
(
@@ -1059,6 +1102,7 @@
\hspace* { 0.5em plus .5em minus .5em }
}
+ \ignorespaces
}
\box_new:N \c__examzh_banjiao_right_brace_box
\box_new:N \c__examzh_quanjiao_right_brace_box
@@ -1068,8 +1112,10 @@
{ \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:
+\cs_new:Npn \__examzh_fillin_paren_breakable_F:
{
+ \unskip
+ \hspace* { 0.5em plus .5em minus .5em }
\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
@@ -1077,28 +1123,49 @@
{
( \__examzh_fillin_breakable_hspace:NN \use:n \nobreak \kern-\c__examzh_quanjiao_right_brace_width_dim )\allowbreak
}
+ \ignorespaces
+ }
+\cs_new:Npn \__examzh_fillin_paren_unbreakable_F:
+ {
+ \unskip
+ \hspace* { 0.5em plus .5em minus .5em }
+ \bool_if:NTF \l__examzh_fillin_paren_banjiao_bool
+ {
+ ( \hspace* { \l__examzh_fillin_F_width_dim } )
+ }
+ {
+ ( \hspace* { \l__examzh_fillin_F_width_dim } )
+ }
+ \ignorespaces
}
\cs_new:Npn \__examzh_fillin_blank_T:
{
+ \unskip
\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 }
+ \ignorespaces
}
\cs_new:Npn \__examzh_fillin_blank_breakline_T:
{
+ \unskip
\hspace* { 0.5em plus .5em minus .5em }
\group_begin:
\l_tmpa_tl
\group_end:
- \hspace* { 0.5em plus .5em minus .5em }
+ \ignorespaces
}
-\cs_new:Npn \__examzh_fillin_blank_F:
+\cs_new:Npn \__examzh_fillin_blank_breakble_F:
{
% \hspace* { \l__examzh_fillin_F_width_dim }
\__examzh_fillin_breakable_hspace:NN \use:n \allowbreak
}
+\cs_new:Npn \__examzh_fillin_blank_unbreakble_F:
+ {
+ \hspace* { \l__examzh_fillin_F_width_dim }
+ % \__examzh_fillin_breakable_hspace:NN \use:n \allowbreak
+ }
\tikzset
{
fillin-circle/.style =
@@ -1235,6 +1302,7 @@
\keys_define:nn { exam-zh / solution }
{
show-solution .bool_set:N = \l__examzh_solution_show_bool,
+ show-answer .bool_set:N = \l__examzh_solution_show_bool,
show-qed .bool_set:N = \l__examzh_solution_show_qed_bool,
qedsymbol .tl_set:N = \l__examzh_solution_qedsymbol_tl,
label-content .tl_set:N = \l__examzh_solution_label_content_tl,
diff --git a/Master/texmf-dist/tex/latex/exam-zh/exam-zh-symbols.sty b/Master/texmf-dist/tex/latex/exam-zh/exam-zh-symbols.sty
index 2b0490284d4..37115aa5a8b 100644
--- a/Master/texmf-dist/tex/latex/exam-zh/exam-zh-symbols.sty
+++ b/Master/texmf-dist/tex/latex/exam-zh/exam-zh-symbols.sty
@@ -1,14 +1,14 @@
%
% Copyright (c) 2022 Kangwei Xia
% Released under the LaTeX Project Public License v1.3c License.
-% Repository: https://gitee.com/zepinglee/exam-zh
+% Repository: https://gitee.com/xkwxdyy/exam-zh
%
\NeedsTeXFormat{LaTeX2e}
\RequirePackage{expl3}
-\ProvidesExplPackage {exam-zh-symbols} {2022-08-15} {v0.1.18}
+\ProvidesExplPackage {exam-zh-symbols} {2022-08-28} {v0.1.19}
{exam-zh symbols module}
\RequirePackage { tikz }
diff --git a/Master/texmf-dist/tex/latex/exam-zh/exam-zh-textfigure.sty b/Master/texmf-dist/tex/latex/exam-zh/exam-zh-textfigure.sty
new file mode 100644
index 00000000000..77a98eb0ba1
--- /dev/null
+++ b/Master/texmf-dist/tex/latex/exam-zh/exam-zh-textfigure.sty
@@ -0,0 +1,651 @@
+%
+% Copyright (c) 2022 Kangwei Xia
+% Released under the LaTeX Project Public License v1.3c License.
+% Repository: https://gitee.com/xkwxdyy/exam-zh
+%
+\NeedsTeXFormat{LaTeX2e}
+
+\RequirePackage{expl3}
+
+\ProvidesExplPackage {exam-zh-textfigure} {2022-08-28} {v0.1.19}
+ {exam-zh text with figure module}
+
+\RequirePackage { wrapstuff }
+\RequirePackage { tabularray }
+\RequirePackage { varwidth }
+\RequirePackage { graphicx }
+\RequirePackage { filehook }
+
+\AtEndOfPackageFile* { exam-zh-choices }
+ {
+ \AddToHook { env / choices / before }
+ { \wrapstuffclear }
+ }
+
+%% multifigures 环境,排版多张图片 %%
+
+% \begin{multifigures}
+% \item[题 9 图:勾股数] \includegraphics[width=3cm]{example-image.png}
+% \item[题 11 图:圆锥曲线] \includegraphics[width=3cm]{example-image.png}
+% \end{multifigures}
+
+% 图片相对于 label 的方位
+\str_new:N \l__examzh_multifigures_figure_position_str
+% coffin type 的对齐方式
+\str_new:N \l__examzh_multifigures_coffin_align_str
+
+
+\keys_define:nn { exam-zh / multifigures }
+ {
+ % 每行多少个(等价于有多少列)
+ columns .int_set:N = \l__examzh_multifigures_column_int,
+ % 图片相对于文字的位置(上下左右)
+ fig-pos .choices:nn =
+ { top, above, bottom, below, left, right }
+ { \str_set:Nx \l__examzh_multifigures_figure_position_str { \l_keys_choice_tl } },
+ % 环境上方的额外距离
+ top-sep .skip_set:N = \l__examzh_multifigures_top_sep_skip,
+ % 环境下方的额外距离
+ bottom-sep .skip_set:N = \l__examzh_multifigures_bottom_sep_skip,
+ % 整体的偏移量
+ xshift .dim_set:N = \l__examzh_multifigures_xshift_dim,
+ hshift .dim_set:N = \l__examzh_multifigures_xshift_dim,
+ yshift .dim_set:N = \l__examzh_multifigures_yshift_dim,
+ vshift .dim_set:N = \l__examzh_multifigures_yshift_dim,
+ % label 的偏移量
+ label-xshift .dim_set:N = \l__examzh_multifigures_label_xshift_dim,
+ label-hshift .dim_set:N = \l__examzh_multifigures_label_xshift_dim,
+ label-yshift .dim_set:N = \l__examzh_multifigures_label_yshift_dim,
+ label-vshift .dim_set:N = \l__examzh_multifigures_label_yshift_dim,
+ % 对齐方式
+ align .choices:nn =
+ { t, m, b }
+ { \str_set:Nx \l__examzh_multifigures_coffin_align_str { \l_keys_choice_tl } }
+ }
+\keys_set:nn { exam-zh / multifigures }
+ {
+ columns = 3,
+ fig-pos = above,
+ label-xshift = 0pt,
+ label-yshift = 0pt,
+ align = b,
+ top-sep = 1ex plus .5ex minus .5ex,
+ bottom-sep = 0pt,
+ }
+
+% item 的 index 指标(即第几个 item)
+\int_new:N \l__examzh_multifigures_item_index_int
+% 将拼接后的 coffin 存到 seq 里
+\seq_new:N \l__examzh_multifigures_store_seq
+% 上面的 seq 的 item 数
+\int_new:N \l__examzh_multifigures_store_seq_item_int
+% 最终放在 tblr 里的内容
+\tl_new:N \l__examzh_multifigures_tblr_content_tl
+
+\NewDocumentEnvironment { multifigures } { O{ } +O{ } }
+ {
+ \group_begin:
+ \RenewDocumentCommand \item { O{ } }
+ { \__examzh_multifigures_item:n {##1} }
+ \int_set:Nn \l__examzh_multifigures_item_index_int {0}
+ \seq_clear:N \l__examzh_multifigures_store_seq
+ \tl_clear:N \l__examzh_multifigures_tblr_content_tl
+ \keys_set:nn { exam-zh / multifigures } {#1}
+ }
+ {
+ % 结束收集
+ \unskip
+ \end{varwidth}
+ \hcoffin_set_end:
+ % 拼接 label 和 figure
+ \__examzh_multifigures_coffin_join:
+ % 输出
+ \__examzh_multifigures_coffin_typeset:n {#2}
+ % \par \int_use:N \l__examzh_multifigures_item_index_int
+ \group_end:
+ }
+% 拼接 label 和 figure
+\cs_new:Npn \__examzh_multifigures_coffin_join:
+ {
+ \int_step_inline:nn { \l__examzh_multifigures_item_index_int }
+ {
+ \__examzh_multifigures_coffin_join_position_set:n {##1}
+ \seq_gput_right:Nn \l__examzh_multifigures_store_seq
+ {
+ \__examzh_multifigures_coffin_align_set:n {##1}
+ }
+ }
+ }
+\cs_new:Npn \__examzh_multifigures_coffin_align_set:n #1
+ {
+ \str_case:Vn \l__examzh_multifigures_coffin_align_str
+ {
+ {t} { \__examzh_multifigures_coffin_align_set_t:n {#1} }
+ {m} { \__examzh_multifigures_coffin_align_set_m:n {#1} }
+ {b} { \__examzh_multifigures_coffin_align_set_b:n {#1} }
+ }
+ }
+\cs_new:Npn \__examzh_multifigures_coffin_align_set_t:n #1
+ {
+ \coffin_typeset:cnnnn
+ { l__examzh_multifigures_figure_ \int_to_roman:n { #1 } _coffin }
+ { l } { t } % align = t
+ { \l__examzh_multifigures_xshift_dim } { \l__examzh_multifigures_yshift_dim + 1em }
+ }
+\cs_new:Npn \__examzh_multifigures_coffin_align_set_m:n #1
+ {
+ \coffin_typeset:cnnnn
+ { l__examzh_multifigures_figure_ \int_to_roman:n { #1 } _coffin }
+ { l } { vc } % align = m
+ { \l__examzh_multifigures_xshift_dim } { \l__examzh_multifigures_yshift_dim }
+ }
+\cs_new:Npn \__examzh_multifigures_coffin_align_set_b:n #1
+ {
+ \coffin_typeset:cnnnn
+ { l__examzh_multifigures_figure_ \int_to_roman:n { #1 } _coffin }
+ { l } { b } % align = b
+ { \l__examzh_multifigures_xshift_dim } { \l__examzh_multifigures_yshift_dim }
+ }
+\cs_new:Npn \__examzh_multifigures_coffin_join_position_set:n #1
+ {
+ \use:c { __examzh_multifigures_coffin_join_position_set_ \l__examzh_multifigures_figure_position_str :n } {#1}
+ }
+\cs_new:Npn \__examzh_multifigures_coffin_join_position_set_top:n #1
+ {
+ \coffin_join:cnncnnnn
+ { l__examzh_multifigures_figure_ \int_to_roman:n {#1} _ coffin }
+ { hc } { b }
+ { l__examzh_multifigures_label_ \int_to_roman:n {#1} _ coffin }
+ { hc } { t }
+ { \l__examzh_multifigures_label_xshift_dim }
+ { \l__examzh_multifigures_label_yshift_dim - 6pt }
+ }
+\cs_set_eq:NN
+ \__examzh_multifigures_coffin_join_position_set_above:n
+ \__examzh_multifigures_coffin_join_position_set_top:n
+\cs_new:Npn \__examzh_multifigures_coffin_join_position_set_bottom:n #1
+ {
+ \coffin_join:cnncnnnn
+ { l__examzh_multifigures_figure_ \int_to_roman:n {#1} _ coffin }
+ { hc } { t }
+ { l__examzh_multifigures_label_ \int_to_roman:n {#1} _ coffin }
+ { hc } { b }
+ { \l__examzh_multifigures_label_xshift_dim }
+ { \l__examzh_multifigures_label_yshift_dim + 6pt }
+ }
+\cs_set_eq:NN
+ \__examzh_multifigures_coffin_join_position_set_below:n
+ \__examzh_multifigures_coffin_join_position_set_bottom:n
+\cs_new:Npn \__examzh_multifigures_coffin_join_position_set_left:n #1
+ {
+ \coffin_join:cnncnnnn
+ { l__examzh_multifigures_figure_ \int_to_roman:n {#1} _ coffin }
+ { l } { vc }
+ { l__examzh_multifigures_label_ \int_to_roman:n {#1} _ coffin }
+ { r } { vc }
+ { \l__examzh_multifigures_label_xshift_dim - 6pt }
+ { \l__examzh_multifigures_label_yshift_dim }
+ }
+\cs_new:Npn \__examzh_multifigures_coffin_join_position_set_right:n #1
+ {
+ \coffin_join:cnncnnnn
+ { l__examzh_multifigures_figure_ \int_to_roman:n {#1} _ coffin }
+ { r } { vc }
+ { l__examzh_multifigures_label_ \int_to_roman:n {#1} _ coffin }
+ { l } { vc }
+ { \l__examzh_multifigures_label_xshift_dim + 2pt }
+ { \l__examzh_multifigures_label_yshift_dim }
+ }
+\cs_new:Npn \__examzh_multifigures_coffin_typeset:n #1
+ {
+ \__examzh_multifigures_coffin_typeset_count:
+ \seq_map_indexed_inline:Nn \l__examzh_multifigures_store_seq
+ % ##1: index
+ % ##2: content
+ {
+ \int_compare:nNnTF { \int_mod:nn {##1} { \l__examzh_multifigures_column_int } } = {0}
+ {
+ \tl_gput_right:Nn \l__examzh_multifigures_tblr_content_tl { ##2 \\ }
+ }
+ {
+ \tl_gput_right:Nn \l__examzh_multifigures_tblr_content_tl { ##2 & }
+ }
+ }
+ % 如果 seq 的 item 比 column 多且不整除 column 的话,要补 &
+ \int_compare:nNnT { \l__examzh_multifigures_store_seq_item_int } > { \l__examzh_multifigures_column_int }
+ {
+ \int_compare:nNnF { \l__examzh_multifigures_item_num_mod_column_left_int } = { 0 }
+ {
+ \tl_gput_right:Nx \l__examzh_multifigures_tblr_content_tl
+ {
+ \prg_replicate:nn { \l__examzh_multifigures_item_num_mod_column_left_int -1 } {&}
+ }
+ % \int_use:N \l__examzh_multifigures_item_num_mod_column_left_int
+ }
+ }
+ \par
+ \vspace*{ \l__examzh_multifigures_top_sep_skip }
+ \noindent \centering
+ % \SetTblrInner
+ % {
+ % rowsep = 4pt,
+ % % colsep = 0pt
+ % }
+ \begin{tblr}
+ [ expand = \l__examzh_multifigures_tblr_content_tl ]
+ {
+ width = \textwidth,
+ cells = {c},
+ column{1} = {leftsep = 0pt},
+ column{Z} = {rightsep = 0pt},
+ rows =
+ {
+ abovesep = 0pt,
+ belowsep = 0pt,
+ },
+ % vlines,hlines,
+ #1
+ }
+ \l__examzh_multifigures_tblr_content_tl
+ \end{tblr}
+ \vspace*{ \l__examzh_multifigures_bottom_sep_skip }
+ \par
+ }
+\int_new:N \l__examzh_multifigures_item_num_mod_column_left_int
+\cs_new:Npn \__examzh_multifigures_coffin_typeset_count:
+ {
+ % 计算 seq 有多少项
+ \int_set:Nn \l__examzh_multifigures_store_seq_item_int
+ { \seq_count:N \l__examzh_multifigures_store_seq }
+ % seq 项数小于 column 的话,column 设置为 seq 项数
+ \int_compare:nNnTF { \l__examzh_multifigures_store_seq_item_int } < { \l__examzh_multifigures_column_int }
+ { \int_set_eq:NN \l__examzh_multifigures_column_int \l__examzh_multifigures_store_seq_item_int }
+ {
+ % 计算 \l__examzh_multifigures_store_seq_item_int mod \l__examzh_multifigures_column_int 的余数,用于补 &
+ \int_set:Nn \l__examzh_multifigures_item_num_mod_column_left_int { \int_mod:nn { \l__examzh_multifigures_store_seq_item_int } { \l__examzh_multifigures_column_int } }
+ }
+ }
+\cs_new:Npn \__examzh_multifigures_item:n #1
+ {
+ % 增加指标(g 是关键)
+ \int_gincr:N \l__examzh_multifigures_item_index_int
+ % 新建 coffin
+ \__examzh_multifigures_item_new_coffin:
+ % 储存 label(一直出不来的原因是因为没改成 gset)
+ \hcoffin_gset:cn { l__examzh_multifigures_label_ \int_to_roman:n { \l__examzh_multifigures_item_index_int } _coffin } {#1}
+ % 储存 figure
+ \int_compare:nNnF { \l__examzh_multifigures_item_index_int } = {1}
+ {
+ \unskip
+ \end{varwidth}
+ % 结束上一个 item 的收集
+ \hcoffin_set_end:
+ }
+ % 收集
+ \hcoffin_set:cw { l__examzh_multifigures_figure_ \int_to_roman:n { \l__examzh_multifigures_item_index_int } _coffin }
+ \begin{varwidth}{\hsize}
+ \ignorespaces
+ }
+
+% 新建 coffin
+\cs_new:Npn \__examzh_multifigures_item_new_coffin:
+ {
+ % 放图片的 coffin
+ \coffin_if_exist:cF { l__examzh_multifigures_figure_ \int_to_roman:n { \l__examzh_multifigures_item_index_int } _coffin }
+ { \coffin_new:c { l__examzh_multifigures_figure_ \int_to_roman:n { \l__examzh_multifigures_item_index_int } _coffin } }
+ % 放 label 的 coffin
+ \coffin_if_exist:cF { l__examzh_multifigures_label_ \int_to_roman:n { \l__examzh_multifigures_item_index_int } _coffin }
+ { \coffin_new:c { l__examzh_multifigures_label_ \int_to_roman:n { \l__examzh_multifigures_item_index_int } _coffin } }
+ }
+
+
+
+%% \textfigure
+
+
+\coffin_new:N \l__examzh_textfigure_text_coffin % 用于存文本
+\coffin_new:N \l__examzh_textfigure_figure_coffin % 用于存图片
+
+\str_new:N \l__examzh_textfigure_current_figure_position_str % 用来存当前的 anchor值
+
+\fp_new:N \l__examzh_textfigure_text_ratio_fp % 文本的比例
+
+\dim_new:N \l__examzh_textfigure_text_width_dim % 文本的宽度
+\dim_new:N \l__examzh_textfigure_text_coffin_width_dim % 文本c offin 的宽度
+\dim_new:N \l__examzh_textfigure_figure_width_dim % 图片的 varwidth 环境的宽度
+
+% 用于 top-center, top-right, bottom-center, bottom-right 的水平偏移量储存
+\dim_new:N \l__examzh_textfigure_figure_coffin_horizontal_transform_dim
+\dim_new:N \l__examzh_textfigure_tmpa_dim % 临时变量
+
+\skip_new:N \l__examzh_textfigure_tmpa_skip % 临时变量
+
+
+\keys_define:nn { exam-zh }
+ {
+ textfigure .meta:nn = { exam-zh / textfigure } {#1}
+ }
+
+\keys_define:nn { exam-zh / textfigure }
+ {
+ % fig-pos为图片位于文本的方位
+ fig-pos .choices:nn =
+ {
+ left , right , top , bottom ,
+ top-left , top-right , top-center ,
+ top-flushright , bottom-flushright ,
+ bottom-left , bottom-right , bottom-center ,
+ right-top , right-bottom , right-center ,
+ left-top , left-bottom , left-center
+ }
+ {
+ \str_set:NV \l__examzh_textfigure_current_figure_position_str \l_keys_choice_tl
+ },
+ % figure-yshift:调整图片的垂直额外偏移量
+ figure-yshift .dim_set:N = \l__examzh_textfigure_figure_yshift_dim,
+ figure-vshift .dim_set:N = \l__examzh_textfigure_figure_yshift_dim,
+ % figure-xshift:调整图片的水平额外偏移量
+ figure-xshift .dim_set:N = \l__examzh_textfigure_figure_xshift_dim,
+ figure-hshift .dim_set:N = \l__examzh_textfigure_figure_xshift_dim,
+ % yshift:调整整体的垂直额外偏移量
+ yshift .dim_set:N = \l__examzh_textfigure_yshift_dim,
+ vshift .dim_set:N = \l__examzh_textfigure_yshift_dim,
+ % xshift:调整整体的水平额外偏移量
+ xshift .dim_set:N = \l__examzh_textfigure_xshift_dim,
+ hshift .dim_set:N = \l__examzh_textfigure_xshift_dim,
+ % text-width:手动设置文本的 varwidth 环境的宽度
+ text-width .dim_set:N = \l__examzh_textfigure_text_width_dim,
+ % figure-width:手动设置 figure 的 varwidth 环境的宽度
+ figure-width .dim_set:N = \l__examzh_textfigure_figure_width_dim,
+ % ratio / text-ratio:文本 coffin 占行宽的比例,范围0-1
+ ratio .fp_set:N = \l__examzh_textfigure_text_ratio_fp,
+ text-ratio .fp_set:N = \l__examzh_textfigure_text_ratio_fp,
+ % 环境上方的额外距离
+ top-sep .skip_set:N = \l__examzh_textfigure_top_sep_skip,
+ % 环境下方的额外距离
+ bottom-sep .skip_set:N = \l__examzh_textfigure_bottom_sep_skip,
+ % 类似于 wrapstuff 的 top
+ top .int_set:N = \l__examzh_textfigure_top_int
+ }
+
+\keys_set:nn { exam-zh / textfigure }
+ {
+ fig-pos = right,
+ yshift = .5\baselineskip,
+ text-width = \columnwidth,
+ figure-width = \columnwidth,
+ text-ratio = 0.95,
+ top-sep = 0pt,
+ bottom-sep = 1.5ex plus .5ex minus 0.5ex,
+ top = 0
+ }
+
+
+% 【已解决】判断anchor是不是west或者east,是的话就自动调整调整一下text-ratio
+% - 问题在于要知道key-val设置了什么anchor才能判断
+% - 但是这个key-val设置和手动设置ratio是同一接口
+% - 理想是:
+% - 先用户设置anchor
+% - 然后自动判断是否是west或者east,并自动调整ratio
+% 【思考】其实也就是说anchor的时候要判断是否是east和west来设置ratio(关键)
+% - 然后用户手动的话以手动的为准
+% 【解决关键】既然不可能中途处理,那只能在 key-val 设置的时候就要处理掉这个自动的ratio,所以重新设计了anchor键值代码
+
+\NewDocumentCommand{ \textfigure }{ O{} +m +m }
+ {
+ \group_begin:
+ \keys_set:nn { exam-zh / textfigure } {#1}
+ \par
+ \vspace*{ \l__examzh_textfigure_top_sep_skip }
+ \noindent
+ \__examzh_textfigure_output:nn {#2} {#3}
+ \vspace*{ \l__examzh_textfigure_bottom_sep_skip }
+ \group_end:
+ }
+
+
+% 最终的拼接命令
+\cs_new:Npn \__examzh_textfigure_output:nn #1#2
+ {
+ \__examzh_textfigure_text_width_dim_set:
+ % issue:https://gitee.com/xkwxdyy/text-figure/issues/I4RVQX
+ % 关键点在于要离开垂直模式
+ % https://ask.latexstudio.net/ask/question/7238.html
+ \mode_leave_vertical:
+ % 将内容存到 coffin 中
+ \__examzh_textfigure_coffin_store:nn {#1}{#2}
+ % coffin 的拼接
+ \__examzh_textfigure_coffin_join:
+ % coffin 的 typeset
+ \__examzh_textfigure_coffin_typeset:
+ }
+\cs_new:Npn \__examzh_textfigure_text_width_dim_set:
+ {
+ % \str_case:VnT \l__examzh_textfigure_current_figure_position_str
+ % {
+ % {bottom-flushright} {}
+ % {bottom-left} {}
+ % {bottom-right} {}
+ % {bottom-center} {}
+ % }
+ % { \fp_set:Nn \l__examzh_textfigure_text_ratio_fp {1} }
+ % \fp_compare:nNnF { \l__examzh_textfigure_text_ratio_fp } = { 1 }
+ % {
+ % \str_case:VnT \l__examzh_textfigure_current_figure_position_str
+ % {
+ % {left} {}
+ % {right} {}
+ % {left-center} {}
+ % {right-center} {}
+ % {right-top} {}
+ % {right-bottom} {}
+ % {left-top} {}
+ % {left-bottom} {}
+ % }
+ % { \fp_set:Nn \l__examzh_textfigure_text_ratio_fp {0.7} }
+ % }
+ \dim_set_eq:NN \l__examzh_textfigure_tmpa_dim \l__examzh_textfigure_text_width_dim
+ \dim_set:Nn \l__examzh_textfigure_text_width_dim
+ {
+ \l__examzh_textfigure_tmpa_dim * \dim_ratio:nn { \fp_use:N \l__examzh_textfigure_text_ratio_fp pt } { 1 pt }
+ }
+ }
+\cs_new:Npn \__examzh_textfigure_coffin_store:nn #1#2
+ {
+ \hcoffin_set:Nn \l__examzh_textfigure_text_coffin
+ {
+ \begin{varwidth}{ \l__examzh_textfigure_text_width_dim }
+ \dim_set:Nn \parindent {2em}
+ \ignorespaces
+ #1
+ \unskip
+ \end{varwidth}
+ }
+ \hcoffin_set:Nn \l__examzh_textfigure_figure_coffin
+ {
+ \begin{varwidth}{ \l__examzh_textfigure_figure_width_dim }
+ \centering
+ \ignorespaces
+ #2
+ \unskip
+ \end{varwidth}
+ }
+ }
+\cs_new:Npn \__examzh_textfigure_coffin_join:
+ {
+ \use:c { __examzh_textfigure_fig_pos_set_ \l__examzh_textfigure_current_figure_position_str :NN }
+ \l__examzh_textfigure_text_coffin
+ \l__examzh_textfigure_figure_coffin
+ }
+\cs_new:Npn \__examzh_textfigure_coffin_typeset:
+ {
+ \coffin_typeset:Nnnnn \l__examzh_textfigure_text_coffin
+ { l } { t }
+ { \l__examzh_textfigure_xshift_dim }
+ { \l__examzh_textfigure_yshift_dim }
+ }
+
+% top表示位于文本正上方
+\cs_new_protected:cpn { __examzh_textfigure_fig_pos_set_top:NN } #1#2
+ {
+ \coffin_join:NnnNnnnn
+ #1 { t } { hc }
+ #2 { b } { hc }
+ { \l__examzh_textfigure_figure_xshift_dim }
+ { 1em + \l__examzh_textfigure_figure_yshift_dim }
+ }
+% top-center表示位于文本上方,但是处于水平的中线处
+\cs_new_protected:cpn { __examzh_textfigure_fig_pos_set_top-center:NN } #1#2
+ {
+ \dim_set:Nn \l__examzh_textfigure_tmpa_dim
+ { \coffin_wd:N #1 }
+ \dim_set:Nn \l__examzh_textfigure_figure_coffin_horizontal_transform_dim
+ {
+ \linewidth * \dim_ratio:nn { 1 pt } { 2 pt }
+ -
+ \l__examzh_textfigure_tmpa_dim * \dim_ratio:nn { 1 pt } { 2 pt }
+ }
+ \coffin_join:NnnNnnnn
+ #1 { t } { hc }
+ #2 { b } { hc }
+ { \l__examzh_textfigure_figure_coffin_horizontal_transform_dim + \l__examzh_textfigure_figure_xshift_dim }
+ { 1em + \l__examzh_textfigure_figure_yshift_dim }
+ }
+% bottom-center表示位于文本下方,但是处于水平的中线处
+\cs_new_protected:cpn { __examzh_textfigure_fig_pos_set_bottom-center:NN } #1#2
+ {
+ \dim_set:Nn \l__examzh_textfigure_tmpa_dim
+ { \coffin_wd:N #1 }
+ \dim_set:Nn \l__examzh_textfigure_figure_coffin_horizontal_transform_dim
+ {
+ \linewidth * \dim_ratio:nn { 1 pt } { 2 pt }
+ -
+ \l__examzh_textfigure_tmpa_dim * \dim_ratio:nn { 1 pt } { 2 pt }
+ }
+ \coffin_join:NnnNnnnn
+ #1 { b } { hc }
+ #2 { t } { hc }
+ { \l__examzh_textfigure_figure_coffin_horizontal_transform_dim + \l__examzh_textfigure_figure_xshift_dim }
+ { -1em + \l__examzh_textfigure_figure_yshift_dim }
+ }
+% bottom 表示位于文本正下方
+\cs_new_protected:cpn { __examzh_textfigure_fig_pos_set_bottom:NN } #1#2
+ {
+ \coffin_join:NnnNnnnn
+ #1 { b } { hc }
+ #2 { t } { hc }
+ { \l__examzh_textfigure_figure_xshift_dim }
+ { -1em + \l__examzh_textfigure_figure_yshift_dim }
+ }
+\cs_new_protected:cpn { __examzh_textfigure_fig_pos_set_left:NN } #1#2
+ {
+ \coffin_join:NnnNnnnn
+ #1 { vc } { l }
+ #2 { vc } { r }
+ { -1em + \l__examzh_textfigure_figure_xshift_dim }
+ { \l__examzh_textfigure_figure_yshift_dim }
+ }
+\cs_set_eq:cc { __examzh_textfigure_fig_pos_set_left-center:NN } { __examzh_textfigure_fig_pos_set_left:NN }
+\cs_new_protected:cpn { __examzh_textfigure_fig_pos_set_left-top:NN } #1#2
+ {
+ \dim_set:Nn \l__examzh_textfigure_tmpa_dim
+ { \baselineskip * \dim_ratio:nn { \int_use:N \l__examzh_textfigure_top_int pt } { 1pt } }
+ \coffin_join:NnnNnnnn
+ #1 { t } { l }
+ #2 { t } { r }
+ { -1em + \l__examzh_textfigure_figure_xshift_dim }
+ { - \l__examzh_textfigure_tmpa_dim + \l__examzh_textfigure_figure_yshift_dim }
+ }
+\cs_new_protected:cpn { __examzh_textfigure_fig_pos_set_left-bottom:NN } #1#2
+ {
+ \coffin_join:NnnNnnnn
+ #1 { b } { l }
+ #2 { b } { r }
+ { -1em + \l__examzh_textfigure_figure_xshift_dim }
+ { 0pt + \l__examzh_textfigure_figure_yshift_dim }
+ }
+\cs_new_protected:cpn { __examzh_textfigure_fig_pos_set_right-top:NN } #1#2
+ {
+ \dim_set:Nn \l__examzh_textfigure_tmpa_dim
+ { \baselineskip * \dim_ratio:nn { \int_use:N \l__examzh_textfigure_top_int pt } { 1pt } }
+ \coffin_join:NnnNnnnn
+ #1 { t } { r }
+ #2 { t } { l }
+ { 1em + \l__examzh_textfigure_figure_xshift_dim }
+ { - \l__examzh_textfigure_tmpa_dim + \l__examzh_textfigure_figure_yshift_dim }
+ }
+\cs_new_protected:cpn { __examzh_textfigure_fig_pos_set_right-center:NN } #1#2
+ {
+ \coffin_join:NnnNnnnn
+ #1 { vc } { r }
+ #2 { vc } { l }
+ { 1em + \l__examzh_textfigure_figure_xshift_dim }
+ { 0pt + \l__examzh_textfigure_figure_yshift_dim }
+ }
+\cs_new_protected:cpn { __examzh_textfigure_fig_pos_set_right-bottom:NN } #1#2
+ {
+ \coffin_join:NnnNnnnn
+ #1 { b } { r }
+ #2 { b } { l }
+ { 1em + \l__examzh_textfigure_figure_xshift_dim }
+ { 0pt + \l__examzh_textfigure_figure_yshift_dim }
+ }
+\cs_set_eq:cc { __examzh_textfigure_fig_pos_set_right:NN } { __examzh_textfigure_fig_pos_set_right-center:NN }
+% top-flushright:文本上方,水平方向是在行尾
+\cs_new_protected:cpn { __examzh_textfigure_fig_pos_set_top-flushright:NN } #1#2
+ {
+ \dim_set:Nn \l__examzh_textfigure_tmpa_dim
+ { \coffin_wd:N #1 }
+ \dim_set:Nn \l__examzh_textfigure_figure_coffin_horizontal_transform_dim
+ { \linewidth - \l__examzh_textfigure_tmpa_dim }
+ \coffin_join:NnnNnnnn
+ #1 { t } { r }
+ #2 { b } { r }
+ { \l__examzh_textfigure_figure_coffin_horizontal_transform_dim + \l__examzh_textfigure_figure_xshift_dim }
+ { 1em + \l__examzh_textfigure_figure_yshift_dim }
+ }
+\cs_new_protected:cpn { __examzh_textfigure_fig_pos_set_top-right:NN } #1#2
+ {
+ \coffin_join:NnnNnnnn
+ #1 { t } { r }
+ #2 { b } { r }
+ { \l__examzh_textfigure_figure_xshift_dim }
+ { 1em + \l__examzh_textfigure_figure_yshift_dim }
+ }
+% bottom-flushright:文本下方,水平方向在行尾
+\cs_new_protected:cpn { __examzh_textfigure_fig_pos_set_bottom-flushright:NN } #1#2
+ {
+ \dim_set:Nn \l__examzh_textfigure_tmpa_dim
+ { \coffin_wd:N #1 }
+ \dim_set:Nn \l__examzh_textfigure_figure_coffin_horizontal_transform_dim
+ { \linewidth - \l__examzh_textfigure_tmpa_dim }
+ \coffin_join:NnnNnnnn
+ #1 { b } { r }
+ #2 { t } { r }
+ { \l__examzh_textfigure_figure_coffin_horizontal_transform_dim + \l__examzh_textfigure_figure_xshift_dim }
+ { -1em + \l__examzh_textfigure_figure_yshift_dim }
+ }
+\cs_new_protected:cpn { __examzh_textfigure_fig_pos_set_bottom-right:NN } #1#2
+ {
+ \coffin_join:NnnNnnnn
+ #1 { b } { r }
+ #2 { t } { r }
+ { \l__examzh_textfigure_figure_xshift_dim }
+ { -1em + \l__examzh_textfigure_figure_yshift_dim }
+ }
+\cs_new_protected:cpn { __examzh_textfigure_fig_pos_set_top-left:NN } #1#2
+ {
+ \coffin_join:NnnNnnnn
+ #1 { t } { l }
+ #2 { b } { l }
+ { 0pt + \l__examzh_textfigure_figure_xshift_dim }
+ { 1em + \l__examzh_textfigure_figure_yshift_dim }
+ }
+\cs_new_protected:cpn { __examzh_textfigure_fig_pos_set_bottom-left:NN } #1#2
+ {
+ \coffin_join:NnnNnnnn
+ #1 { b } { l }
+ #2 { t } { l }
+ { 0pt + \l__examzh_textfigure_figure_xshift_dim }
+ { -1em + \l__examzh_textfigure_figure_yshift_dim }
+ } \ No newline at end of file
diff --git a/Master/texmf-dist/tex/latex/exam-zh/exam-zh.cls b/Master/texmf-dist/tex/latex/exam-zh/exam-zh.cls
index 817ee767e5a..3f98de7858d 100644
--- a/Master/texmf-dist/tex/latex/exam-zh/exam-zh.cls
+++ b/Master/texmf-dist/tex/latex/exam-zh/exam-zh.cls
@@ -1,12 +1,12 @@
%
% Copyright (c) 2022 Zeping Lee
% Released under the LaTeX Project Public License v1.3c License.
-% Repository: https://gitee.com/zepinglee/exam-zh
+% Repository: https://gitee.com/xkwxdyy/exam-zh
%
\NeedsTeXFormat{LaTeX2e}[2017/04/15]
\RequirePackage{expl3}
-\ProvidesExplClass {exam-zh} {2022-08-15} {v0.1.18} {LaTeX template for Chinese exam}
+\ProvidesExplClass {exam-zh} {2022-08-28} {v0.1.19} {LaTeX template for Chinese exam}
% 检查 LaTeX2e kernel 版本
\msg_new:nnn { exam-zh } { latex-too-old }
@@ -86,6 +86,7 @@
\RequirePackage { exam-zh-choices }
\RequirePackage { exam-zh-symbols }
\RequirePackage { exam-zh-chinese-english }
+\RequirePackage { exam-zh-textfigure }
\AtEndPreamble
{
@@ -182,8 +183,9 @@
\NewDocumentCommand { \ExamPrintAnswer } { }
{
- \clist_use:Nn \g__examzh_print_answer_cmd_set_clist {}
- \clist_if_empty:NF \g__examzh_print_answer_keys_set_clist
+ \clist_if_exist:NT \g__examzh_print_answer_cmd_set_clist
+ { \clist_use:Nn \g__examzh_print_answer_cmd_set_clist {} }
+ \clist_if_exist:NT \g__examzh_print_answer_keys_set_clist
{
\keys_set:nx { exam-zh }
{ \g__examzh_print_answer_keys_set_clist }
@@ -499,6 +501,11 @@
\dim_set:Nn \lineskiplimit { .5em }
\skip_set:Nn \lineskip { .5em }
+% 增加对 minipage 的处理
+% https://tex.stackexchange.com/a/358080/246645
+\dim_set:Nn \normallineskiplimit { .5em }
+\skip_set:Nn \normallineskip { .5em }
+
% 设置 enumitem 列表格式
@@ -534,9 +541,14 @@
\setlist[enumerate, 2]
{
- left = 2em,
- labelsep = 0pt,
- label = { ( \arabic * ) }
+ % labelindent = *,
+ leftmargin = 0pt,
+ widest = 0,
+ itemindent = 4em,
+ labelsep = 0pt,
+ % labelwidth = 2em,
+ listparindent = \parindent,
+ label = {( \arabic * )},
}
% 多种方法: method环境
@@ -1193,7 +1205,7 @@
}
\keys_set:nn { exam-zh / page }
{
- show-columnline = true,
+ show-columnline = false,
columnline-width = 0.4pt
}