\newtheorem
我正在尝试根据文件输入的内容在命令中设置一个可选计数器.sty
。例如
\DeclareOption{empty}{
\edef\counter{}
}
\DeclareOption{section}{
\edef\counter{\detokenize{section}}
}
\ProcessOptions\relax
\theoremstyle{definition}
\newtheorem{definition}{Definition}[\counter]
\providecommand*{\definitionautorefname}{Definition}
包裹amsthm
接受section
或。chapter
相反\counter
,我想不是通过设置某个特定值来设置计数器\counter
。我已尝试过\empty
,0
以及{}
如上所述。
当然,我可以为每个条件使用一组 if,\newtheorem
并且只需设置\newtheorem{definition}{Definition}
我不想关联任何计数器即可。不过,我想避免这种痛苦的选择。
提前致谢。
答案1
我认为您不应该强迫您的软件包的用户对定义进行编号,而要独立于定理和朋友。
没有理由强迫作者采用这样的风格
引理 1
定理 1
定理 2
定义 1
引理 2
定理 3
(可能带有部分前缀,但那无关紧要)而不是更常见和友好的
引理 1
定理 2
定理 3
定义 4
引理 5
定理 6
(再次带有可能的前缀)。我讨厌阅读这样的交叉引用
见第二章第二部分第六段
或者
第五章第三部分第二段第2条第2款第2条
这些内容来自一本真正的书,书中使用“部分”代替章节,使用“段落”代替小节,并且没有命名小节。页眉中没有关于如何找到所引用定理的任何线索。
在您提出的“空”风格中,读者将不知道引理 2 是在定理 1 之前还是之后。
无论如何,如果你坚持这样做(可能是因为严格的教职规定),诀窍就是定义你自己的设施。
\DeclareOption{empty}{\let\package@thmprefix=F}
\DeclareOption{section}{\let\package@thmprefix=T\def\package@thmlevel{section}}
\DeclareOption{chapter}{\let\package@thmprefix=T\def\package@thmlevel{chapter}}
\DeclareOption{empty}{\let\package@thmprefix=F}
\DeclareOption{section}{\let\package@thmprefix=T\def\package@thmlevel{section}}
\DeclareOption{chapter}{\let\package@thmprefix=T\def\package@thmlevel{chapter}}
\ExecuteOptions{empty}
\ProcessOptions\relax
\RequirePackage{amsthm}
\def\package@newtheorem#1#2{%
\if\package@thmprefix F%
\newtheorem{#1}{#2}%
\else
\newtheorem{#1}{#2}[\package@thmlevel]
\fi
}
\package@newtheorem{lemma}{Lemma}
\package@newtheorem{theorem}{Theorem}
\theoremstyle{definition}
\package@newtheorem{definition}{Definition}
这是测试文件
\documentclass{book}
\usepackage{package}
%\usepackage[section]{package}
%\usepackage[chapter]{package}
\begin{document}
\chapter{Title}
\section{Title}
\begin{lemma}
Text
\end{lemma}
\begin{theorem}
Text
\end{theorem}
\begin{theorem}
Text
\end{theorem}
\section{Title}
\begin{definition}
Text
\end{definition}
\begin{lemma}
Text
\end{lemma}
\begin{theorem}
Text
\end{theorem}
\end{document}