Я полагаю, что обычно вы явно указываете cleveref, как называть вашу метку, используя \crefname{type}{singular}{plural}
, однако это не работает, так как здесь "type" должен быть именем счетчика (я полагаю). Я также пробовал использовать , но \label[type]{label}
безрезультатно. Есть ли способ сделать так, чтобы две среды разделяли счетчик, но чтобы cleveref мог различать их? (Или, может быть, есть какой-то способ использовать два счетчика, но чтобы они всегда были равны/зависимы, чтобы достичь того же эффекта?)
Ниже приведен пример:
\documentclass{article}
\usepackage[colorlinks, linkcolor=blue]{hyperref}
\usepackage[noabbrev, capitalise]{cleveref}
\usepackage{tikz}
%new theorem environment
\newcounter{theo}[section]\setcounter{theo}{0}
\renewcommand{\thetheo}{\arabic{section}.\arabic{theo}}
\newenvironment{theo}{%
\refstepcounter{theo}%
\tikz[baseline=(current bounding box.east),outer sep=0pt]
\node[anchor=east,rectangle,fill=green!20]
{\strut \textbf{Theorem~\thetheo.}};
\newline
}
\crefname{theo}{Theorem}{Theorems}
%new lemma environment
\newenvironment{lem}{%
\refstepcounter{theo}
\tikz[baseline=(current bounding box.east),outer sep=0pt]
\node[anchor=east,rectangle,fill=blue!20]
{\strut \textbf{Lemma~\thetheo.}};
\newline
}
\begin{document}
\begin{theo}\label{thrm}
Just some text.
\end{theo}
\begin{lem}\label{lm1}
Just some more text.
\end{lem}
\begin{lem}\label[Lemma]{lm2}
Just some more text.
\end{lem}
\noindent
\cref{thrm}\\ %give Theorem 0.1
\cref{lm1}\\ %give Lemma 0.2
\cref{lm2}\\ %give Lemma 0.3
\end{document}
Внизу примера я использую \cref три раза. В комментарии я отображаю желаемый вывод. Здесь я использовал, \crefname{theo}{Theorem}{Theorems}
чтобы дать среде "theo" правильное имя, как вы можете видеть, затем среда "lem" получает то же имя, когда на нее ссылаются. Во второй раз, когда я использую среду "lem", я маркирую ее с помощью \label[Lemma]{lm2}
, что, как оказалось, не дает желаемого эффекта.
(Примечание: код, использующий tikz, не имеет значения, я добавил его как небольшое оправдание того, чтобы не использовать вместо него команду \newtheorem.)
решение1
Вы можете назначить lem и theo одному и тому же регистру счетчика (с осторожностью:-)
\documentclass{article}
\usepackage[colorlinks, linkcolor=blue]{hyperref}
\usepackage[noabbrev, capitalise]{cleveref}
\usepackage{tikz}
%new theorem environment
\newcounter{theo}[section]\setcounter{theo}{0}
\renewcommand{\thetheo}{\arabic{section}.\arabic{theo}}
\newenvironment{theo}{%
\refstepcounter{theo}%
\tikz[baseline=(current bounding box.east),outer sep=0pt]
\node[anchor=east,rectangle,fill=green!20]
{\strut \textbf{Theorem~\thetheo.}};
\newline%BADNESS 10000!!!!!
}
\makeatletter
\let\c@lem\c@theo
%now def not \let so it picks up current value
\def\p@lem{\p@theo}
\def\thelem{\thetheo}
\makeatother
\crefname{theo}{Theorem}{Theorems}
\crefname{lem}{Lemma}{Lemmas}
%new lemma environment
\newenvironment{lem}{%
\refstepcounter{lem}%
\tikz[baseline=(current bounding box.east),outer sep=0pt]
\node[anchor=east,rectangle,fill=blue!20]
{\strut \textbf{Lemma~\thetheo.}};
\newline%BADNESS 10000!!!!!
}
\begin{document}
\begin{theo}\label{thrm}
Just some text.
\end{theo}
\begin{lem}\label{lm1}
Just some more text.
\end{lem}
\begin{lem}\label{lm2}
Just some more text.
\end{lem}
\noindent
\cref{thrm}\\ %give Theorem 0.1
\cref{lm1}\\ %give Lemma 0.2
\cref{lm2}\\ %give Lemma 0.3
\end{document}
решение2
Не нужно никаких программных ухищрений — просто загрузите либо пакет amsthm
, либо ntheorem
пакет перед обоими hyperref
и cleveref
, а затем определите среды, подобные теоремам, обычным способом. В частности, совершенно нормально, если несколько сред, подобных теоремам, совместно используют один и тот же счетчик ( theo
в следующем коде):
\documentclass{article}
\usepackage{amsthm} %or: \usepackage{ntheorem}
\usepackage[colorlinks, linkcolor=blue]{hyperref}
\usepackage[noabbrev, capitalise]{cleveref}
% two new theorem-like environments
\newtheorem{theo}{Theorem}[section] % subordinate 'theo' cntr to 'section' cntr
\newtheorem{lem}[theo]{Lemma} % make 'lem' and 'theo' share same cntr
\crefname{theo}{Theorem}{Theorems}
\crefname{lem}{Lemma}{Lemmas}
\begin{document}
\setcounter{section}{2} % just for this example
\begin{theo}\label{thrm}Just some text.\end{theo}
\begin{lem}\label{lm1}Just some more text.\end{lem}
\begin{lem}\label{lm2}Still more text.\end{lem}
\cref{thrm} \dots
\cref{lm1,lm2} \dots
\end{document}