提问于:
浏览数:
3925
2 回答
0
前面两个都比较常规, 第三个, 常规判断肯定不行, 要定义新的环境.
0
需要编译两次。很难简短解释。
```tex
\documentclass{article}
\usepackage{amsthm}
\usepackage{etoolbox}
% 定义 theorem 环境
\newtheorem{theorem}{Theorem}
\counterwithin*{theorem}{section}
\makeatletter
% 定义供用户使用的 lemma 环境
\newenvironment{lemma}[1][]{%
\stepcounter{lemma}%
% 把命令名储存在 \@tempa 中
% - 为保证命名唯一,此处使用 lem@sec<thesec>@thm<thm>
% - 使用 <thesec> 而非 <sec>,是为了应对有附录的情况
\edef\@tempa{lem@sec\thesection @thm\the\c@theorem}%
% 如果这是 theorem 后的第二个 lemma 环境,那么向 aux 文件写入信息,
% 相当于写入了 \global\let\lem@sec<thesec>@thm<thm>=\@empty
\ifnum\the\c@lemma=2\relax
\immediate\write\@auxout
{\string\global\string\cslet{\@tempa}\string\@empty}%
\fi
% 如果 \lem@sec<thesec>@thm<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)
-
-
回复 undefined :「单用amsmath 宏包这个定理格式都差不多调好」amsmath 宏包没有修改和提供任何和定理环境有关的样式或功能,你可能哪里理解错了。 – 论坛 github.com/CTeX 2020-01-10 04:57 回复
-
回复 undefined :哦哦,这样谢谢。主要是这个ctex类下,单用amsmath 宏包这个定理格式都差不多调好,但是用了amsthm感觉就得重头再来。我再网上找找看amsthm怎么把格式定义的和 – 187****7292 2020-01-09 16:51 回复
-
回复 undefined :你说的是哪个 lemma?我的回答中,只有 "\newtheorem*{@lemma*}{Lemma}" 这一行,即加星号的 \newtheorem* – 论坛 github.com/CTeX 2020-01-09 00:02 回复
-
回复 undefined :对了,您说的lemma的定义依赖amsthm包。能把全文的lemma改成mylemmahappyhhh吧。我试了一下仿佛没出问题,这个lemma应该就是个计数器? – 187****7292 2020-01-08 17:15 回复
-
-
回复 undefined : 刘海洋的书是 2013 年出版的,在书出版(实际是定稿)之后,xecjk 和 amsthm 的代码都有改动,现在已经不冲突了。可能的 xecjk 的相关改动是 https – 论坛 github.com/CTeX 2020-01-08 04:58 回复
-
-
回复 undefined :刘海洋的书,P108 2.2.4定理类环境:在使用xelatex时,amsthm 必须在fontspec宏包之前载入,而由于ctex文档类中的xeCJK宏包会自动调用fon – 187****7292 2020-01-07 21:15 回复
-
回复 undefined :1. 就我目前的了解,amsthm 和 ctex 应该无冲突 2. 整个实现中,只有 @lemma* 环境的定义依赖 amsthm 宏包。所有定理包应该都有定义无编号定理的 – 论坛 github.com/CTeX 2020-01-06 02:49 回复
-
-
你的回答
请登录后回答
你的回答将会帮助更多人,请务必认真回答问题。