diff --git a/elegantbook-cn.tex b/elegantbook-cn.tex index 98fa908..6d583e3 100644 --- a/elegantbook-cn.tex +++ b/elegantbook-cn.tex @@ -5,8 +5,8 @@ \author{Ethan Deng \& Liam Huang} \institute{Elegant\LaTeX{} Program} -\date{Aug, 15, 2022} -\version{4.4} +\date{Aug 17, 2022} +\version{4.5} \bioinfo{自定义}{信息} \extrainfo{要让一群人团结起来,需要的不是英明的领导,而是共同的敌人。—— 比企谷八幡} @@ -446,24 +446,36 @@ tlmgr update --self --all --reinstall-forcibly-removed \documentclass[thmcnt=section]{elegantbook} \end{lstlisting} +如果希望全局的定理类环境使用同一个计数器,可以使用文档类选项 \lstinline{usesamecnt}: + +\begin{lstlisting} + \documentclass[usesamecnt]{elegantbook} +\end{lstlisting} + \subsection{自定义定理类环境} 4.4 版本新增了一个自定义定理类环境的命令:\lstinline|\elegantnewtheorem|,它的参数含义如下: \begin{lstlisting} % fancy 模式(默认) -\elegantnewtheorem{env}{title}{style}{prefix} +\elegantnewtheorem{env}{title}{style}{prefix}[numbered-like] % simple 模式 -\elegantnewtheorem{env}{title}{style} +\elegantnewtheorem{env}{title}{style}[numbered-like] \end{lstlisting} 该命令可以同时定义编号环境 \lstinline|env| 和不编号环境 \lstinline|env*|。 其中 \lstinline|style| 支持的参数有:\lstinline|defstyle|,\lstinline|thmstyle|,\lstinline|prostyle|,分别对应“定义”,“定理”,“命题”三种样式。 +如果添加了可选参数 \lstinline{numbered-like},将会使该定理类环境与名为 \lstinline{numbered-like} 的定理类环境使用同一计数器。\textbf{注意}:该参数在使用 \lstinline{usesamecnt} 选项时不起作用,并且会在终端以及 \lstinline{.log} 文件中输出一个警告,来提示用户该选项不起作用: + +\begin{lstlisting} + [numbered-like] won't make sence with option + `usesamecnt'. +\end{lstlisting} \begin{itemize} - \item 在炫彩模式(\lstinline{fancy})下,需要 4 个参数来定义一个新的定理类环境,分别是: - 定理类环境名,定理类环境的标题,定理类环境的样式,该定理类环境的前缀: + \item 在炫彩模式(\lstinline{fancy})下,需要 5 个参数来定义一个新的定理类环境,分别是: + 定理类环境名,定理类环境的标题,定理类环境的样式,该定理类环境的前缀,(可选)该定理类环境继承的定理类环境: \begin{lstlisting} % 导言区 @@ -501,8 +513,8 @@ Class elegantbook Warning: Because you didn't provide a prefix. (elegantbook) on input line 3. \end{lstlisting} - \item 在简单模式(\lstinline{simple})下,需要 3 个参数来定义一个新的定理类环境,分别是: - 定理类环境名,定理类环境的标题,定理类环境的样式,该定理类环境的前缀: + \item 在简单模式(\lstinline{simple})下,需要 4 个参数来定义一个新的定理类环境,分别是: + 定理类环境名,定理类环境的标题,定理类环境的样式,该定理类环境的前缀,(可选)该定理类环境继承的定理类环境: \begin{lstlisting} % 导言区 \elegantnewtheorem{examplesimple}{自定义定理类环境}{thmstyle} @@ -965,6 +977,12 @@ Lebesgue 积分有几种不同的定义方式。我们将采用逐步定义非 根据用户的反馈,我们不断修正和完善模板。由于 3.00 之前版本与现在版本差异非常大,在此不列出 3.00 之前的更新内容。 +\datechange{2022/08/17}{版本 4.5 pre} +\begin{change} + \item \textbf{重要改动}:提供了一个新的文档类选项 \lstinline|usesamecnt|,可以使全局的定理类环境使用同一个计数器。 + \item \textbf{重要改动}:修改了 \lstinline|\elegantnewtheorem| 命令,使其有第五个(可选)参数。 +\end{change} + \datechange{2022/08/15}{版本 4.4 正式发布。} \begin{change} diff --git a/elegantbook-en.tex b/elegantbook-en.tex index bb4c3e5..ee46a40 100644 --- a/elegantbook-en.tex +++ b/elegantbook-en.tex @@ -5,7 +5,7 @@ \author{Ethan Deng \& Liam Huang} \institute{Elegant\LaTeX{} Program} -\date{May 25, 2022} +\date{Aug 15, 2022} \version{4.4} \bioinfo{Bio}{Information} diff --git a/elegantbook.cls b/elegantbook.cls index 93f4dd9..a2154df 100644 --- a/elegantbook.cls +++ b/elegantbook.cls @@ -16,7 +16,6 @@ \RequirePackage{etoolbox} \SetupKeyvalOptions{family=ELEGANT, prefix=ELEGANT@, setkeys=\kvsetkeys} \newcommand{\ekv}[1]{\kvsetkeys{ELEGANT}{#1}} - % ----- Colors ----- \DeclareStringOption[blue]{color} \DeclareStringOption[en]{lang} @@ -56,6 +55,7 @@ \DeclareVoidOption{fancy}{\ekv{mode=fancy}} \DeclareVoidOption{simple}{\ekv{mode=simple}} +\DeclareBoolOption[false]{usesamecnt} \DeclareVoidOption{answer}{\ekv{result=answer}} \DeclareVoidOption{noanswer}{\ekv{result=noanswer}} @@ -895,6 +895,19 @@ \RequirePackage[many]{tcolorbox} % \newlength{\normalparindent} % \setlength{\normalparindent}{\parindent} +\newcommand{\ELEGANT@tmp@tl}{} +\ifELEGANT@usesamecnt + \newcounter{ELEGANT@samecnt} + \counterwithin{ELEGANT@samecnt}{\ELEGANT@thmcnt} + \tcbset{ + new/usesamecnt/.style = {use counter = ELEGANT@samecnt} + } +\else + \tcbset{ + new/usesamecnt/.style = {} + } +\fi + \ifdefstring{\ELEGANT@mode}{fancy}{ \tcbset{ common/.style={ @@ -962,14 +975,23 @@ % will define two environments: numbered ``theorem'' and no-numbered ``theorem*'' % WARNING FOR MULTILINGUAL: this cs will automatically find \theoremname's definition, % WARNING FOR MULTILINGUAL: it should be defined in language settings. - \newcommand{\ELEGANT@newtheorem}[3]{ + \NewDocumentCommand \ELEGANT@newtheorem { m m m O{} }{ \ifcsundef{#1name}{% \ClassError{elegantbook}{% \ #1name undefined, \MessageBreak Please check in language setting }{} }{\relax} - \DeclareTColorBox[auto counter,number within=\ELEGANT@thmcnt]{#1}{ g o t\label g }{ + \expandafter\ifblank\expandafter{#4}{ + \tcbset{ + new/usecnt/.style={} + } + }{ + \tcbset{ + new/usecnt/.style= {use counter from = #4} + } + } + \DeclareTColorBox[auto counter,number within=\ELEGANT@thmcnt,usesamecnt,usecnt]{#1}{ g o t\label g }{ common,#3, IfValueTF={##1} {ELEGANT@title={#1}{##1}} @@ -998,8 +1020,8 @@ } % define several environment % we define headers like \definitionname before - \ELEGANT@newtheorem{definition}{def}{defstyle} \ELEGANT@newtheorem{theorem}{thm}{thmstyle} + \ELEGANT@newtheorem{definition}{def}{defstyle} \ELEGANT@newtheorem{postulate}{pos}{thmstyle} \ELEGANT@newtheorem{axiom}{axi}{thmstyle} \ELEGANT@newtheorem{corollary}{cor}{thmstyle} @@ -1030,16 +1052,24 @@ % will define two environments: numbered ``theorem'' and no-numbered ``theorem*'' % WARNING FOR MULTILINGUAL: this cs will automatically find \theoremname's definition, % WARNING FOR MULTILINGUAL: it should be defined in language settings. - \newcommand{\ELEGANT@newtheorem}[2]{ + \NewDocumentCommand \ELEGANT@newtheorem { m m O{} } { \theoremstyle{#2} - \newtheorem{#1}{\csname #1name\endcsname}[\ELEGANT@thmcnt] + \ifELEGANT@usesamecnt + \newtheorem{#1}[ELEGANT@samecnt]{\csname #1name\endcsname} + \else + \ifblank{#3}{ + \newtheorem{#1}{\csname #1name\endcsname}[\ELEGANT@thmcnt] + }{ + \newtheorem{#1}[#3]{\csname #1name\endcsname} + } + \fi \newtheorem*{#1*}{\csname #1name\endcsname} } % define several environment % we define headers like \definitionname before - \ELEGANT@newtheorem{definition}{defstyle} \ELEGANT@newtheorem{theorem}{thmstyle} + \ELEGANT@newtheorem{definition}{defstyle} \ELEGANT@newtheorem{postulate}{thmstyle} \ELEGANT@newtheorem{axiom}{thmstyle} \ELEGANT@newtheorem{corollary}{thmstyle} @@ -1056,12 +1086,19 @@ % and a warning will be raised \newcommand{\ELEGANT@newtheorem@warning}{} \newcommand{\ELEGANT@newtheorem@error}{} -\NewDocumentCommand\elegantnewtheorem{ m m m g } +\newcommand{\ELEGANT@usesamecnt@warning}{} +\NewDocumentCommand\elegantnewtheorem{ m m m g O{} } { + \renewcommand{\ELEGANT@usesamecnt@warning}{ + \ClassWarning{elegantbook}{% + [#5] won't make sence with option \MessageBreak + `usesamecnt'. + } + } \renewcommand{\ELEGANT@newtheorem@warning}{ \ClassWarning{elegantbook}{% - Because you didn't provide a prefix. \MessageBreak - We use #1 as the default prefix. \MessageBreak + Because you didn't provide a prefix, \MessageBreak + we use #1 as the default prefix. \MessageBreak You have to use \MessageBreak \ref{#1:label} to refer a \MessageBreak \begin{#1}{name}{label} environment. \MessageBreak @@ -1078,11 +1115,16 @@ The 4th parameter ``prefix'' isn't allowed. } } + \ifELEGANT@usesamecnt + \ifblank{#5}{}{\ELEGANT@usesamecnt@warning} + \else + \renewcommand{\ELEGANT@tmp@tl}{#5} + \fi \expandafter\def\csname #1name\endcsname{#2} \ifdefstring{\ELEGANT@mode}{simple}{% \IfValueTF{#4} {\ELEGANT@newtheorem@error} - {\ELEGANT@newtheorem{#1}{#3}} + {\ELEGANT@newtheorem{#1}{#3}[\ELEGANT@tmp@tl]} }{\relax} \ifdefstring{\ELEGANT@mode}{fancy}{% \IfValueTF{#4} @@ -1090,13 +1132,13 @@ \def\ELEGANT@temp@prefix{#4} \ifdefempty{\ELEGANT@temp@prefix} { - \ELEGANT@newtheorem{#1}{#1}{#3} + \ELEGANT@newtheorem{#1}{#1}{#3}[\ELEGANT@tmp@tl] \ELEGANT@newtheorem@warning } - {\ELEGANT@newtheorem{#1}{#4}{#3}} + {\ELEGANT@newtheorem{#1}{#4}{#3}[\ELEGANT@tmp@tl]} } { - \ELEGANT@newtheorem{#1}{#1}{#3} + \ELEGANT@newtheorem{#1}{#1}{#3}[\ELEGANT@tmp@tl] \ELEGANT@newtheorem@warning } }{\relax} @@ -1323,7 +1365,7 @@ commentstyle=\color{gray}, emph={elegantpaper,fontenc,fontspec,xeCJK,citestyle,FiraMono,xunicode,figure,fig,image,img,table,itemize,enumerate,ctex,microtype,description,times,booktabs,tabular,PDFLaTeX,XeLaTeX,type1cm,BibTeX,device,color,mode,lang,amsthm,tcolorbox,titlestyle,cite,ctex,listings,base,math,scheme,toc,esint,chinesefont,amsmath,bibstyle,natbib,pgfornament}, emphstyle={\color{frenchplum}}, - morekeywords={DeclareSymbolFont,SetSymbolFont,toprule,midrule,bottomrule,institute,version,includegraphics,setmainfont,setsansfont,setmonofont ,setCJKmainfont,setCJKsansfont,setCJKmonofont,RequirePackage,figref,tabref,email,maketitle,keywords,definecolor,extrainfo,logo,cover,subtitle,appendix,chapter,section,hypersetup,mainmatter,frontmatter,tableofcontents,elegantpar,heiti,kaishu,lstset,pagecolor,zhnumber,marginpar,part,equote,marginnote,bioinfo,datechange,listofchange,lvert,lastpage,songti,heiti,fangsong,setCJKfamilyfont,textbf,elegantnewtheorem,thmcnt,colorlet}, + morekeywords={DeclareSymbolFont,SetSymbolFont,toprule,midrule,bottomrule,institute,version,includegraphics,setmainfont,setsansfont,setmonofont ,setCJKmainfont,setCJKsansfont,setCJKmonofont,RequirePackage,figref,tabref,email,maketitle,keywords,definecolor,extrainfo,logo,cover,subtitle,appendix,chapter,section,hypersetup,mainmatter,frontmatter,tableofcontents,elegantpar,heiti,kaishu,lstset,pagecolor,zhnumber,marginpar,part,equote,marginnote,bioinfo,datechange,listofchange,lvert,lastpage,songti,heiti,fangsong,setCJKfamilyfont,textbf,elegantnewtheorem,thmcnt,colorlet,usesamecnt}, frame=single, tabsize=2, rulecolor=\color{structurecolor}, @@ -1387,7 +1429,7 @@ \renewcommand*{\cleardoublepage}{\clearpage\if@twoside \ifodd\c@page\else \hbox{}% \thispagestyle{empty}% -beforechap\newpage% +\newpage% \if@twocolumn\hbox{}\newpage\fi\fi\fi}