简短形式:假设我有零星编号的定理:
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}