定义引理时对格式的需求

2020-01-05 15:05发布

我现在希望定义如下的引理环境 1.引理的编号只有1个阿拉伯数字; 2.引理的编号随着定理、章节编号的增加自动清零; 3.当两个定理之间的引理只有1个的时候不编号,2个及以上的编号。 具体例子可以按如下...

我现在希望定义如下的引理环境 1.引理的编号只有1个阿拉伯数字; 2.引理的编号随着定理、章节编号的增加自动清零; 3.当两个定理之间的引理只有1个的时候不编号,2个及以上的编号。 具体例子可以按如下情形 ``` 定理…… 引理 定理…… 引理1 引理2 定理 引理1 引理2 引理3 …… ``` 我现在的情况是可以使用amsmath宏包的\numberwithin实现2的功能,但是同时1就不能实现。 所以应该怎样设置计数器实现这样的需求?
2条回答
论坛 github.com/C
2020-01-05 17:40
需要编译两次。很难简短解释。 ```tex \documentclass{article} \usepackage{amsthm} \usepackage{etoolbox} % 定义 theorem 环境 \newtheorem{theorem}{Theorem} \counterwithin*{theorem}{section} \makeatletter % 定义供用户使用的 lemma 环境 \newenvironment{lemma}[1][]{% \stepcounter{lemma}% % 把命令名储存在 \@tempa 中 % - 为保证命名唯一,此处使用 lem@sec@thm % - 使用 而非 ,是为了应对有附录的情况 \edef\@tempa{lem@sec\thesection @thm\the\c@theorem}% % 如果这是 theorem 后的第二个 lemma 环境,那么向 aux 文件写入信息, % 相当于写入了 \global\let\lem@sec@thm=\@empty \ifnum\the\c@lemma=2\relax \immediate\write\@auxout {\string\global\string\cslet{\@tempa}\string\@empty}% \fi % 如果 \lem@sec@thm == \@empty,那么有至少两个引理,使用编号的引理环境; % 否则使用不编号的 \expandafter\ifx\csname \@tempa\endcsname\@empty \def\@lem@envname{lemma@numbered}% \else \def\@lem@envname{lemma@unnumbered}% \fi \csname\@lem@envname\endcsname[#1] }{% \csname end\@lem@envname\endcsname } % 定义计数器 lemma,记录每个 themrem 后 lemma 环境的数量 \newcounter{lemma}[theorem] % 定义内部引理环境 \newtheorem{lemma@numbered}{Lemma} % 编号的 \newtheorem*{lemma@unnumbered}{Lemma} % 不编号的 \counterwithin*{lemma@numbered}{theorem} % 测试用命令 \def\test@unnumbered{ \begin{theorem} content \end{theorem} \begin{lemma} content \end{lemma} } \def\test@numbered{ \begin{theorem} content \end{theorem} \begin{lemma} content \end{lemma} \begin{lemma} content \end{lemma} } \def\testA{\section{title} \test@unnumbered \test@numbered} \def\testB{\section{title} \test@numbered \test@unnumbered} \makeatother \begin{document} \testA \testB \appendix \testA \testB \end{document} ``` ![](https://pics.latexstudio.net/data/images/202001/948ecc045299ecf.png)

一周热门 更多>