PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Verweise auf \newtheorem-Umgebungen



Soldberg
03-11-2010, 12:59
Hallo,

bei Verweisen auf Lemmata oder Sätze durch \ref erhält man nur die Nr. und muss "Lemma" oder "Satz" von Hand davor schreiben:


\documentclass{scrbook}
\newtheorem{theorem}{Satz}[chapter]
\newtheorem{lemma}[theorem]{Lemma}
\begin{document}
\begin{lemma}\label{Aussage1}
Text Text
\end{lemma}

\begin{theorem}\label{Aussage2}
Text Text
\end{theorem}
siehe Lemma \ref{Aussage1}, siehe Satz \ref{Aussage2}
\end{document}

Ich finde das allerdings recht unpraktisch. Mache ich nun aus einem Satz ein Lemma, so muss ich im ganzen Dokument nach Verweisen auf den Satz suchen und dort von Hand "siehe Satz" auf "siehe Lemma" ändern. Das ist aufwendig und fehleranfällig, gerade bei langen Dokumenten über mehrere Dateien (durch Ändern des Labels findet man die Stellen immerhin). Typisch Latex wäre für mich, die Umgebung zu ändern und alle Namen mit Nr. passen automatisch. Geht das irgendwie?

Viele Grüße
Soldberg

Schweinebacke
03-11-2010, 13:30
Du suchst vermutlich cleveref (http://www.ctan.org/pkg/cleveref).

Soldberg
03-11-2010, 13:44
danke, das Paket liest sich interessant. Zum Laufen habe ich es aber leider noch nicht gekriegt:

\documentclass{scrbook}
\newtheorem{theorem}{Satz}[chapter]
\newtheorem{lemma}[theorem]{Lemma}
\begin{document}
\begin{lemma}\label{Aussage1}
Text Text
\end{lemma}

\begin{theorem}\label{Aussage2}
Text Text
\end{theorem}
\cref{Aussage1}, \cref{Aussage2}
\end{document}
Das \cref gibt anscheinend den Name des Zählers aus, das hilft mir ja aber nicht weiter. Da Lemma und Satz den gleichen Zähler haben, würde auch reines Umbenennen des Zählers denke ich nicht helfen.

Schweinebacke
03-11-2010, 13:53
Dein Beispiel funktioniert nicht, weil Du u. a. das Paket cleveref gar nicht geladen hast. Bezüglich theorem etc. sei auf die Anleitung zu cleveref verwiesen. Folgendes funktioniert jedenfalls:
\documentclass{scrbook}
\usepackage{ntheorem}
\usepackage{cleveref}
\newtheorem{theorem}{Satz}[chapter]
\newtheorem{lemma}[theorem]{Lemma}
\begin{document}
\begin{lemma}\label{Aussage1}
Text Text
\end{lemma}

\begin{theorem}\label{Aussage2}
Text Text
\end{theorem}
\cref{Aussage1}, \cref{Aussage2}
\end{document}

Soldberg
03-11-2010, 14:03
:o Sorry, das \usepackage ist beim kopieren verloren gegangen, mir hat aber sowieso ntheorem gefehlt. Dein Beispiel ist immer noch nicht genau das was ich wollte (es erscheint z.B. "theorem" statt "Satz" bei einem \cref). Ich vermute aber das wird irgendwo in der Anleitung erklärt, die werde ich mir dann jetzt nochmal genauer anschauen.

Danke für deine Hilfe.

Schweinebacke
03-11-2010, 14:26
es erscheint z.B. "theorem" statt "Satz" bei einem \cref Wenn Du die Umgebung nicht theorem sondern Satz nennst, dann steht da AFAIK automatisch Satz. Ansonsten geht das vielleicht etwas über die alias-Geschichte, die in der cleveref-Anleitung erklärt ist. Ich habe das aber bisher noch nie gebraucht und deshalb selbst noch nicht genau gelesen.

voss
03-11-2010, 14:32
bei Verweisen auf Lemmata oder Sätze durch \ref erhält man nur die Nr. und muss "Lemma" oder "Satz" von Hand davor schreiben:

Ich finde das allerdings recht unpraktisch. Mache ich nun aus einem Satz ein Lemma, so muss ich im ganzen Dokument nach Verweisen auf den Satz suchen und dort von Hand "siehe Satz" auf "siehe Lemma" ändern. Das ist aufwendig und fehleranfällig, gerade bei langen Dokumenten über mehrere Dateien (durch Ändern des Labels findet man die Stellen immerhin). Typisch Latex wäre für mich, die Umgebung zu ändern und alle Namen mit Nr. passen automatisch. Geht das irgendwie?



\documentclass{scrbook}
\newtheorem{theorem}{Satz}[chapter]
\newtheorem{lemma}[theorem]{Lemma}
\def\Ref#1{Satz~\ref{#1}}
\begin{document}
\begin{lemma}\label{Aussage1}
Text Text
\end{lemma}

\begin{theorem}\label{Aussage2}
Text Text
\end{theorem}
siehe Lemma \ref{Aussage1}, siehe \Ref{Aussage2}
\end{document}

Herbert

Soldberg
03-11-2010, 17:35
Hallo Herbert,

aber bei deiner Lösung muss ich doch wieder im ganzen Dokument Referenzen ändern, wenn ich aus einem Satz ein Lemma mache, oder?

Soldberg
03-11-2010, 17:45
Wenn Du die Umgebung nicht theorem sondern Satz nennst, dann steht da AFAIK automatisch Satz.
Da hast Du vermutlich recht. Eine Alternative ist denke ich \crefformat :

\documentclass{scrbook}
\usepackage{ntheorem}
\usepackage{cleveref}
\newtheorem{theorem}{Satz}[chapter]
\newtheorem{lemma}[theorem]{Lemma}
\crefformat{lemma}{Lemma #2#1#3}
\crefformat{theorem}{Satz (#2#1#3)}

\begin{document}
\begin{lemma}\label{Aussage1}
Text Text
\end{lemma}

\begin{theorem}\label{Aussage2}
Text Text
\end{theorem}
\cref{Aussage1}, \cref{Aussage2}
\end{document}

voss
03-11-2010, 17:46
aber bei deiner Lösung muss ich doch wieder im ganzen Dokument Referenzen ändern, wenn ich aus einem Satz ein Lemma mache, oder?

Wieso im ganzen Dokument?
- wenn du es einmal machst, ersetzt du \Ref durch \ref
- wenn du es für das ganze Dokument machst, dann nach
der Definition von \Ref einfach \let\Ref\ref

Herbert

rstuby
03-11-2010, 18:02
Nein, wenn EIN Satz zu einem Lemma gemacht wird, nicht ALLE Sätze, denke ich.

Soldberg
03-11-2010, 18:13
Nein, wenn EIN Satz zu einem Lemma gemacht wird, nicht ALLE Sätze, denke ich.
Genau so meinte ich es.
Ein Beispiel dazu:

\documentclass{scrbook}
\newtheorem{theorem}{Satz}[chapter]
\newtheorem{lemma}[theorem]{Lemma}
\def\Ref#1{Satz~\ref{#1}}
\begin{document}
\begin{theorem}\label{Aussage1}
Text Text
\end{theorem}
\begin{theorem}\label{Aussage2}
Text Text
\end{theorem}
siehe \Ref{Aussage1}, siehe \Ref{Aussage2}\\
Text\\
siehe \Ref{Aussage1}, siehe \Ref{Aussage2}\\
Text\\
\end{document}
Jetzt will ich aus dem zweiten Satz ein Lemma machen. Mit dem zuletzt von mir geposteten Code muss ich nur \begin{theorem} zu \begin{lemma} ändern und die Referenzen passen automatisch alle.

voss
03-11-2010, 18:34
Genau so meinte ich es.
Ein Beispiel dazu:
Jetzt will ich aus dem zweiten Satz ein Lemma machen. Mit dem zuletzt von mir geposteten Code muss ich nur \begin{theorem} zu \begin{lemma} ändern und die Referenzen passen automatisch alle.

Jetzt habe ich verstanden ...
Das geht natürlich nicht mit meiner Idee.

Herbert