如何使星号成为计数器的一部分?

如何使星号成为计数器的一部分?

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没有中间值的 会产生冲突的编号。您可以将 重命名为或,无论 的名称如何。请记住,如果您重命名环境,则必须进行相应的更改。theoremtheoremstarTheoremConditiontheorem\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星号,后跟作为参数传递给环境的标签所引用的数字;我们需要\getrefnumberbyrefcount才能完全展开它。然后,还设置当前标签以便\label在环境主体中使用 并\theoremstar启动无编号定理环境。最后,我们只需结束无编号定理即可。

当然,这不是初学者会想到的。这就是该网站存在的原因。;-)

相关内容