Gibt es eine Möglichkeit, Cleveref dazu zu bringen, zwischen zwei Umgebungen mit demselben Zähler zu unterscheiden?

Gibt es eine Möglichkeit, Cleveref dazu zu bringen, zwischen zwei Umgebungen mit demselben Zähler zu unterscheiden?

Ich glaube, dass Sie cleveref normalerweise explizit mit angeben, wie Ihr Label heißen soll \crefname{type}{singular}{plural}. Dies funktioniert jedoch nicht, da hier „Typ“ der Name des Zählers sein muss (glaube ich). Ich habe auch versucht, \label[type]{label}ohne Erfolg mit zu verwenden. Gibt es eine Möglichkeit, zwei Umgebungen zu erreichen, die sich einen Zähler teilen, aber cleveref in der Lage sein soll, zwischen ihnen zu unterscheiden? (Oder gibt es vielleicht eine Möglichkeit, zwei Zähler zu verwenden, die aber immer gleich/abhängig sind, um denselben Effekt zu erzielen?)

Nachfolgend sehen Sie ein Beispiel:

\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}

Am Ende des Beispiels verwende ich \cref dreimal. In einem Kommentar zeige ich die gewünschte Ausgabe an. Hier habe ich \crefname{theo}{Theorem}{Theorems}der „theo“-Umgebung den richtigen Namen gegeben, wie Sie sehen, erhält die „lem“-Umgebung dann denselben Namen, wenn sie darauf verwiesen wird. Beim zweiten Mal verwende ich die „lem“-Umgebung mit , \label[Lemma]{lm2}was sich jedoch als nicht den gewünschten Effekt herausstellt.

(Hinweis: Der Code, der tikz verwendet, ist nicht relevant. Ich habe ihn als kleine Begründung dafür hinzugefügt, stattdessen nicht den Befehl \newtheorem zu verwenden.)

Antwort1

Sie können lem und theo demselben Zählregister zuordnen (mit Vorsicht :-)

Bildbeschreibung hier eingeben

\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}

Antwort2

Keine Programmierverrenkungen nötig – laden Sie einfach entweder das amsthmoder das ntheoremPaket vor hyperrefund cleverefund definieren Sie dann die theoremähnlichen Umgebungen auf die übliche Weise. Insbesondere ist es völlig in Ordnung, wenn mehrere theoremähnliche Umgebungen denselben Zähler gemeinsam nutzen ( theoim folgenden Code):

Bildbeschreibung hier eingeben

\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}

verwandte Informationen