如何引用自定义编号定理?

如何引用自定义编号定理?

简短形式:假设我有零星编号的定理:

Thm A
Thm 1
Thm B

下面的代码显示了如何在打印定理时强制使用这种编号。但是,当我通过 引用这些定理时\ref,它们仍然分别显示为“Thm 1”、“Thm 2”、“Thm 3”。如何强制\ref显示它们的显示标题?

这个问题的历史

长格式:我设计了一种方法,通过前面的引理/命题的编号来复制 Serre 对推论的编号 [请参阅底部的完整代码]。例如:

Section 1
Lemma 1.1
Corollary 1.1
Proposition 1
Corollary 1

Section 2
Lemma 2.1
Proposition 2
Lemma 2.2
Corollary 2.2A
Corollary 2.2B
I want to say: by Corollary 2.2A, we win!
Instead, TeX gives: by Corollary 2, we win!

但是,显示的推论编号不会影响推论的内部编号。例如,第一个补充推论 (1.1) 在内部被记住为推论 1,第二个推论 (2.1) 被记住为推论 2,等等。
然后,当我在文本中引用推论时,我得到的是内部编号的引用。如何修改内部编号以匹配标记的文本?

\documentclass[11pt]{amsart}
\usepackage{amsmath}

\makeatletter
\newtheorem*{rep@theorem}{\rep@title}
\newcommand{\newreptheorem}[2]{%
\newenvironment{rep#1}[2][]{%
 \def\rep@title{#2 \ref{##2}##1}%
 \begin{rep@theorem}}%
 {\end{rep@theorem}}}
\makeatother

\newtheorem{lem}{Lemma}
\newreptheorem{lem}{Corollary}
\newtheorem{Lem}[lem]{Lemma}%*
\numberwithin{lem}{section}
\newtheorem{prop}{Proposition}
\newreptheorem{prop}{Corollary}
\newtheorem{Prop}[prop]{Proposition}
\newtheorem{Cor}{Corollary}%}[lem]{
\newtheorem{cor}[Cor]{Corollary}%*

\begin{document}
\section{asdf}
\begin{lem}\label{lem1}
\end{lem}
\begin{replem}{lem1}\label{cor1}
\end{replem}
\begin{prop}\label{p1}
\end{prop}
\begin{repprop}{p1}\label{cor2}
\end{repprop}
\section{fdsa}
\begin{lem}\label{lem2}
\end{lem}
\begin{prop}\label{p2}
\end{prop}
\begin{lem}\label{lem3}
\end{lem}
\begin{replem}[A]{lem3}\label{cor3}
\end{replem}
\begin{replem}[B]{lem3}\label{cor4}
\end{replem}

By Corollary \ref{cor3}, we win!
\end{document}

一个解决方案是说:“根据推论\ref{lem3}A...”而不是“根据推论” \ref{cor3};但是,推论往往会频繁移动,所以我想找到一种方法使参考独立于实际引理。

答案1

通过查询条件的状态\@lemmamode和命题计数器的值来“试验”解决方案。

这样,引用看起来就是正确的了。

hyperref但是,这样做到时候就会出现麻烦!

\documentclass[11pt]{amsart}
\usepackage{amsmath}
\usepackage{etoolbox}

\newcommand{\corcntrfmtlem}{%
  \ifnum\value{prop} > 0\relax
  \thelem.\Alph{cor}%
  \else
  \arabic{lem}.\arabic{cor}%
  \fi
}

\newcommand{\corcntrfmtprop}{%
  \arabic{cor}%
}


\makeatletter
\newif\if@lemmamode


\newtheorem{lem}{Lemma}[section]
\newtheorem{prop}{Proposition}
\newtheorem{cor}{Corollary}[prop]% Restart the cor counter

\AfterEndEnvironment{lem}{\@lemmamodetrue}% Enable lemma mode
\AfterEndEnvironment{prop}{\@lemmamodefalse} % Disable lemma mode

\renewcommand{\thecor}{%
  \if@lemmamode
  \corcntrfmtlem%
  \else
  \corcntrfmtprop%
  \fi\relax
}
\makeatother

\begin{document}
\section{asdf}
\begin{lem}\label{lem1}
\end{lem}
\begin{cor}\label{cor1}
\end{cor}
\begin{prop}\label{p1}
\end{prop}

\begin{cor}\label{cor2}
\end{cor}


\section{fdsa}
\begin{lem}\label{lem2}
\end{lem}
\begin{prop}\label{p2}
\end{prop}
\begin{lem}\label{lem3}
\end{lem}
\begin{cor}\label{cor2a}
\end{cor}
\begin{cor}\label{cor2b}
\end{cor}



By Corollary \ref{cor2a} and \ref{cor2b}, we will win!
\end{document}

在此处输入图片描述

相关内容