Skip to content

Commit

Permalink
feat: 新增定理类环境共享计数器选项 (#206,#207)
Browse files Browse the repository at this point in the history
  • Loading branch information
atxy-blip committed May 7, 2023
1 parent 736c8d5 commit d3f2148
Show file tree
Hide file tree
Showing 3 changed files with 80 additions and 27 deletions.
10 changes: 10 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,14 @@

## [未发布]

### 新增

- 新增定理类环境共享计数器选项 `theorem/share-counter` - [#207]

### 修复

- 修复批量创建环境时缺少 `\crefname` 的问题 - [#206]

## [1.2.1] - 2023-05-03

### 修复
Expand Down Expand Up @@ -547,6 +555,8 @@
[#200]: https://github.com/nju-lug/NJUThesis/discussions/200
[#202]: https://github.com/nju-lug/NJUThesis/discussions/202
[#204]: https://github.com/nju-lug/NJUThesis/issues/204
[#206]: https://github.com/nju-lug/NJUThesis/issues/206
[#207]: https://github.com/nju-lug/NJUThesis/issues/207

[更新日志]: https://keepachangelog.com/zh-CN/1.0.0/
[语义化版本]: https://semver.org/lang/zh-CN/
Expand Down
15 changes: 8 additions & 7 deletions docs/njuthesis-setup.def
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
% njuthesis 参数设置文件 v1.2.1 2023-05-03
% njuthesis 参数设置文件 v1.3.0 2023-05-07

% 一些提醒:
% 1. \njusetup 内部千万不要有空行
Expand Down Expand Up @@ -214,12 +214,13 @@
% define,
% 默认创建内置的七种定理环境
%
% style = remark,
% header-font = \sffamily \bfseries,
% body-font = \normalfont,
% qed-symbol = \ensuremath { \male },
% counter = section,
% type = {...}
% style = remark,
% header-font = \sffamily \bfseries,
% body-font = \normalfont,
% qed-symbol = \ensuremath { \male },
% counter = section,
% share-counter = true,
% type = {...}
% 以上设置项在重新调用 theorem/define 后生效
}

Expand Down
82 changes: 62 additions & 20 deletions source/njuthesis.dtx
Original file line number Diff line number Diff line change
Expand Up @@ -109,7 +109,7 @@ To produce the documentation run the original source files ending with
%
%<class>\NeedsTeXFormat{LaTeX2e}
%<*!(driver|install)>
%<+!driver>\GetIdInfo $Id: njuthesis.dtx 1.2.1 2023-05-03 13:30:00
%<+!driver>\GetIdInfo $Id: njuthesis.dtx 1.3.0 2023-05-07 19:00:00
%<+!driver> +0800 NJU LUG <git+nju-lug-email-3104-issue-@yaoge123.cn>$
%<class> {Thesis template for Nanjing University}
%<class>\ProvidesExplClass{njuthesis}
Expand Down Expand Up @@ -380,7 +380,7 @@ To produce the documentation run the original source files ending with
% \thanks{E-mail: \href{mailto:git+nju-lug-email-3104-issue-@yaoge123.cn}
% {git+nju-lug-email-3104-issue-@yaoge123.cn}}}
%
% \date{v1.2.1 \quad 2023-05-03}
% \date{v1.3.0 \quad 2023-05-07}
%
% \maketitle
%
Expand Down Expand Up @@ -1870,16 +1870,24 @@ To produce the documentation run the original source files ending with
% 定理计数器范围。
% \end{function}
%
% \begin{function}[added=2023-05-07]{theorem/share-counter}
% \begin{syntax}
% \OPT{share-counter} = <\TFF>
% \end{syntax}
% 是否共享计数器。
% \end{function}
%
% 模板的默认设置等效于
%
% \begin{latexexample}[moretexcs={\njusetup,\bfseries,\itshape,\mdlgwhtsquare},
% emph={[2]theorem},emph={[3]style,header-font,body-font,qed-symbol,counter}]
% \njusetup[theorem]{
% style = plain,
% header-font = \normalfont \bfseries ,
% body-font = \itshape ,
% qed-symbol = \ensuremath { \mdlgwhtsquare },
% counter = chapter
% style = plain,
% header-font = \normalfont \bfseries ,
% body-font = \itshape ,
% qed-symbol = \ensuremath { \mdlgwhtsquare },
% counter = chapter,
% share-counter = false
% }
% \end{latexexample}
%
Expand Down Expand Up @@ -1926,12 +1934,14 @@ To produce the documentation run the original source files ending with
% \opt{theorem/type} 保存的列表以及前方的样式设置并创建相应环境。
% 这也就意味着该选项在 \opt{theorem/type} 为空时会报错。
%
% 在下面这个例子中,我们先创建了预置的七种环境,随后将定理内部文字字体改为
% 在下面这个例子中,我们先创建了预置的七种环境。除了无编号的
% \env{proof},其余六种共用一个计数器。随后我们将定理内部文字字体改为
% 宋体,定义了 \env{exercise} 和 \env{solution} 两种定理环境,后者没有编号。
%
% \begin{latexexample}[moretexcs={\njusetup,\normalfont},
% emph={[2]theorem},emph={[3]define,body-font,type}]
% \njusetup[theorem]{
% share-counter = true ,
% define ,
% body-font = \normalfont ,
% type = {
Expand Down Expand Up @@ -6143,6 +6153,13 @@ To produce the documentation run the original source files ending with
% \end{macrocode}
% \end{macro}
%
% \begin{macro}{\l_@@_thm_share_tl}
% 存储共享的计数器名称。
% \begin{macrocode}
\tl_new:N \l_@@_thm_share_tl
% \end{macrocode}
% \end{macro}
%
% \begin{macrocode}
\keys_define:nn { nju / theorem }
{
Expand Down Expand Up @@ -6185,6 +6202,15 @@ To produce the documentation run the original source files ending with
% \end{macrocode}
% \end{macro}
%
% \begin{macro}{theorem/share-counter}
% \changes{v1.3}{2023/05/07}{批量创建定理类环境时可以共享计数器。}
% 是否在分组内使用同一计数器。
% \begin{macrocode}
share-counter .bool_set:N = \l_@@_thm_share_bool,
share-counter .initial:n = false,
% \end{macrocode}
% \end{macro}
%
% \begin{macro}{theorem/define}
% 创建定理类环境。
% \begin{macrocode}
Expand All @@ -6193,21 +6219,22 @@ To produce the documentation run the original source files ending with
{
\clist_if_empty:NT \g_@@_thm_type_clist
{ \msg_error:nn { njuthesis } { empty-theorem-type } }
\tl_clear:N \l_@@_thm_share_tl
\clist_map_inline:Nn \g_@@_thm_type_clist
{ \@@_thm_define:nn ##1 }
{ \@@_thm_define:Nnn \l_@@_thm_share_tl ##1 }
}
}
% \end{macrocode}
% \end{macro}
%
% \begin{macro}{\@@_thm_define:nn}
% \begin{macro}{\@@_thm_define:Nnn}
% 配置定理环境。
% \begin{arguments}
% \item 环境名与类型标识,|clist| 型变量
% \item 定理头名称
% \end{arguments}
% \begin{macrocode}
\cs_new_protected:Npn \@@_thm_define:nn #1#2
\cs_new_protected:Npn \@@_thm_define:Nnn #1#2#3
{
\bool_if:NF \g_@@_opt_load_nthm_bool
{ \msg_error:nn { njuthesis } { missing-ntheorem } }
Expand All @@ -6218,7 +6245,7 @@ To produce the documentation run the original source files ending with
% 拆分环境名与类型标识。这里是考虑到标识符不一定出现在环境名中,
% 典型如 \env{proof} 环境默认无编号但也不含星号。
% \begin{macrocode}
\clist_set:Nn \l_@@_tmp_clist { #1 }
\clist_set:Nn \l_@@_tmp_clist { #2 }
\clist_pop:NN \l_@@_tmp_clist \l_@@_tmpa_tl
\clist_pop:NN \l_@@_tmp_clist \l_@@_tmpb_tl
% \end{macrocode}
Expand All @@ -6227,10 +6254,21 @@ To produce the documentation run the original source files ending with
\tl_if_in:NnT \l_@@_tmpb_tl { + }
{ \exp_args:NV \theoremsymbol \l_@@_thm_qed_symbol_tl }
\tl_if_in:NnTF \l_@@_tmpb_tl { * }
{ \@@_thm_new:VVn \l_@@_tmpa_tl \c_novalue_tl {#2} }
{ \@@_thm_new:VVn \l_@@_tmpa_tl \l_@@_thm_counter_tl {#2} }
{ \@@_thm_new:VVVn \l_@@_tmpa_tl \c_novalue_tl #1 {#3} }
{ \@@_thm_new:VVVn \l_@@_tmpa_tl \l_@@_thm_counter_tl #1 {#3} }
% \end{macrocode}
% 存储共享的计数器。
% \begin{macrocode}
\bool_if:NT \l_@@_thm_share_bool
{
\tl_gset_eq:NN #1 \l_@@_tmpa_tl
\bool_gset_false:N \l_@@_thm_share_bool
}
% \end{macrocode}
% 设置 \pkg{cleveref} 引用名。
% \begin{macrocode}
\bool_if:NT \g_@@_opt_load_cref_bool
{ \crefname { \l_@@_tmpa_tl } {#2} {#2} }
{ \exp_args:NV \crefname \l_@@_tmpa_tl {#3} {#3} }
% \end{macrocode}
% 清除保存的证毕符号。
% \begin{macrocode}
Expand All @@ -6239,7 +6277,7 @@ To produce the documentation run the original source files ending with
% \end{macrocode}
% \end{macro}
%
% \begin{macro}{\@@_thm_new:nnn,\@@_thm_new:VVn}
% \begin{macro}{\@@_thm_new:nnnn,\@@_thm_new:VVVn}
% 包装 \tn{newtheorem} 以便展开输入的变量。根据 \file{interface3.pdf}
% 手册 5.3 节最后一段建议的展开顺序,这里将 |V| 型参数放在靠前的位置。
% \begin{arguments}
Expand All @@ -6250,17 +6288,21 @@ To produce the documentation run the original source files ending with
% 根据环境结束命令是否存在可以判断该环境是否有定义,
% 相应地可以利用局部定义切换定义和重定义环境的命令。
% \begin{macrocode}
\cs_new_protected:Npn \@@_thm_new:nnn #1#2#3
\cs_new_protected:Npn \@@_thm_new:nnnn #1#2#3#4
{
\group_begin:
\cs_if_exist:cT { end #1 }
{ \cs_set_eq:NN \newtheorem \renewtheorem }
\tl_if_novalue:nTF {#2}
{ \newtheorem * {#1} {#3} }
{ \newtheorem {#1} {#3} [#2] }
{ \newtheorem * {#1} {#4} }
{
\tl_if_empty:nTF {#3}
{ \newtheorem {#1} {#4} [#2] }
{ \newtheorem {#1} [#3] {#4} }
}
\group_end:
}
\cs_generate_variant:Nn \@@_thm_new:nnn { VVn }
\cs_generate_variant:Nn \@@_thm_new:nnnn { VVVn }
% \end{macrocode}
% \end{macro}
%
Expand Down

0 comments on commit d3f2148

Please sign in to comment.