amsart
我正在用amsthm
包来编号定理的常见风格写一篇文章。
我需要枚举某些条件,其中两个条件必须具有相同的数字,而仅以 为差\ast
。目前,我找到了以下解决方案:
\newtheorem {theorem1}{Theorem}[section] \newtheorem {theorem_minus_one}{}[section] \newtheorem {cond}[theorem1]{} \newtheorem{cond_starred}[theorem_minus_one]{*} \setcounter{theorem_minus_one}{\value{theorem1}-1}\label{more_funct} \begin{cond_starred} More functoriality \end{cond_starred}
抛开优雅问题不谈,它会产生一个 *A.5 形式的数字,其中 A 是节号,* 是名称cond_starred
。如果我想引用它,我需要手动添加 *。
我希望这个条件的编号看起来像 A.5*。并且参考编号也应该通过命令以这种形式创建\ref
。
有任何想法吗?
答案1
你的意思是这样的吗?我们只是滥用编号方案,使其theoremstar
与上一个 具有相同的编号theorem
,但添加了一个星号。请记住,两个中间theoremstar
没有中间值的 会产生冲突的编号。您可以将 重命名为或,无论 的名称如何。请记住,如果您重命名环境,则必须进行相应的更改。theorem
theoremstar
Theorem
Condition
theorem
\thetheoremstar
\documentclass{article}
\usepackage{amsthm}
\newtheorem {theorem}{Theorem}[section]
\newtheorem {theoremstar}{Theorem}
\renewcommand\thetheoremstar{*\thetheorem} % this is a very bad abuse, but it works :)
\begin{document}
\section{My first section}
\begin{theorem}\label{t}
BLA.
\end{theorem}
\begin{theoremstar}\label{tt}
BLA BLE BLI BLO BLU.
\end{theoremstar}
Theorem~\ref{tt} improves Theorem~\ref{t}.
\end{document}
答案2
不要打我……我忍不住:
% arara: lualatex
% arara: lualatex
\documentclass{article}
\usepackage{fontspec}
\setmainfont{ObelixPro-cyr.ttf}
% the following is shamelessly stolen from tohecz
\usepackage{amsthm}
\newtheorem{theorem}{Theorem}[section]
\newtheorem{astTheorem}{Theorem}
\newcommand*\asterix{\includegraphics[scale=.1]{ast}}
\renewcommand\theastTheorem{\protect\asterix\thetheorem}
\begin{document}
\section{Asterix the Gaul}
\begin{theorem}\label{1}
Alea iacta est: The die is cast
\end{theorem}
\begin{astTheorem}\label{2}
Singularis Porcus: Wild boar
\end{astTheorem}
Theorem~\ref{2} improves Theorem~\ref{1}.
\end{document}
答案3
这允许在任何地方使用变体定理,但需要为环境提供一个标签作为参数。我更喜欢这种方式,因为在撰写论文时移动事物可能会将变体定理推到不同的地方,编号可能会出错。
如示例所示,\begin{theorem}
或的可选参数是有效的(当然,它是可选的)。\begin{theorem*}
\documentclass{article}
\usepackage{refcount}
\usepackage{amsthm}
\newtheorem{theorem}{Theorem}[section]
\newtheorem*{theoremstar}{Theorem \thmstarnumber}
\makeatletter
\newenvironment{theorem*}[1]
{\edef\thmstarnumber{*\getrefnumber{#1}}%
\let\@currentlabel\thmstarnumber\theoremstar}
{\endtheoremstar}
\makeatother
\begin{document}
\section{My first section}
\begin{theorem}[S. Else]\label{t}
Bla.
\end{theorem}
\begin{theorem*}{t}[W. Ever]\label{tt}
Bla bla bla.
\end{theorem*}
Theorem~\ref{tt} improves Theorem~\ref{t}.
\end{document}
它是如何工作的?我定义了一个无编号定理类型,其名称取决于运行时设置的宏的值
\newtheorem*{theoremstar}{Theorem \thmstarnumber}
该值由环境传递theorem*
:
\newenvironment{theorem*}[1]
{\edef\thmstarnumber{*\getrefnumber{#1}}%
\let\@currentlabel\thmstarnumber\theoremstar}
{\endtheoremstar}
第一个命令将 的值设置为\thmstarnumber
星号,后跟作为参数传递给环境的标签所引用的数字;我们需要\getrefnumber
byrefcount
才能完全展开它。然后,还设置当前标签以便\label
在环境主体中使用 并\theoremstar
启动无编号定理环境。最后,我们只需结束无编号定理即可。
当然,这不是初学者会想到的。这就是该网站存在的原因。;-)