Hier reproduzieren wir den in http://texwelt.de/wissen/fragen/24620/svmono56-richtige-namen-eigener-theoremumgebungen-mit-cleveref erwähnten Fehler mit bereits vorhandenen Umgebungen (und vereinfachen die Problemstellung somit ein wenig). Dafür machen wir das Beispiel realistischer für die deutschsprachige Leserschaft durch deutschprachenspezifische Pakete und Optionen und lassen pdflatex auf die folgende Eingabe los:

Öffne in Overleaf
\documentclass[deutsch,envcountsame,envcountsect]{hacked-svmono}%%% V5.6 aus https://www.springer.com/gp/authors-editors/book-authors-editors/resources-guidelines/rights-permissions-licensing/manuscript-preparation/5636, without the block that loads ntheorem (otherwise error).
%\documentclass[deutsch,envcountsame]{hacked-svmono}%%% Doens't work in a similar way.
%\documentclass[deutsch,envcountsect]{hacked-svmono}%%% Works, but the counters are different.
\usepackage[ngerman]{babel}
\usepackage[ngerman]{cleveref}
\crefname{corollary}{Kor.}{Kore.}
\Crefname{corollary}{Korollar}{Korollare}
\begin{document}
\chapter{MeinKapitel}
\section{MeinAbschnitt}
\section{MeinUnterabschnitt}
\begin{theorem}[MeinSatz]1+1=2\end{theorem}
\begin{corollary}[MeinKorollar]
  \label{corl:MyCorl}
  %\label[corollary]{corl:MyCorl}%%% Ulrike's solution as an alternative to the line above. (It works but is less automatic than we wish it to be.)
  0+1+1=2.\end{corollary}
Verweisen wir mal drauf: \cref{corl:MyCorl}.
\end{document}

Die letzte Zeile der Ausgabe

pdflatex output

ist falsch, denn es gibt kein Theorem 1.2.2. Nimmt man Ulrike's Lösung mit dem optionalen Argument für \label, so erscheint die letzte Zeile richtig:

Verweisen wir mal drauf: Kor. 1.2.2.

Jedoch muss man wohl bei der Lösung bei allen nummerierten Theoremumgebungen, auf die verwiesen wird, immer an das optionale Argument denken; vergisst man's einmal, so erhält man möglicherweise unbemerkte Fehler. Kann man nicht irgendeine Änderung in der Präambel, in svmono oder in cleveref machen, derart dass der Hauptteil \begin{document}...\end{document} nicht verändert werden muss?

gefragt 20 Apr '19, 01:20

user0's gravatar image

user0
1021227
Akzeptiert-Rate: 0%

bearbeitet 21 Apr '19, 20:30

Das Hauptproblem ist, dass svmono weder amsthm, noch ntheorem, noch LaTeXs internes \newtheorem verwendent, sondern da was eigenes drum herum bastelt (dieses \spnewtheorem). Das kennt cleveref natürlich nicht und deshalb funktioniert da nichts.

(23 Apr '19, 05:30) Henri

@Henri Danke. Vermutlich könnte man deine Lösung https://texwelt.de/wissen/fragen/24620/svmono56-richtige-namen-eigener-theoremumgebungen-mit-cleveref/24640 auch in hacked-svmono für vorhandene Umgebungen reinbasteln. Etwa \global\@namedef{#1}{\@spthm{#2}{\csname #1name\endcsname}{#4}{#5}} in der Definition von \@spothm durch \global\@namedef{#1}{\@spthm{#2}{\csname #1name\endcsname}{#4}{#5\defaultlabel{#1}}} ersetzen. Es bleibt trotzdem ein Problem, wenn wir innerhalb von theoremähnlichen Umgebungen \label zusätzlich für etwas anderes, etwa für Gleichungen, nutzen wollen.

(24 Apr '19, 22:24) user0

@Henri Vielleicht wäre die "richtigere" Lösung, die Option nospthms zu nutzen und doch amsthm zu laden und stattdessen das Problem zu lösen, wie man unterschiedliche QED-Bezeichnungen an Enden unterschiedlicher Umgebungen reinkriegt.

(24 Apr '19, 23:12) user0

@user0 Auf spthm zu verzichten und dafür amsthm zu verwenden erscheint mir am sinnvollsten. Diese svmono-Klasse ist irgendwie nicht so das Gelbe vom Ei.

(26 Apr '19, 02:36) Henri

Darüber hinaus ist svmono.cls am 23. April 2019 (dem Datum der Datei nach zu urteilen) verändert worden ohne die Versionsnummer hochzusetzen. Mir fehlen die Worte.

(21 Mai '19, 22:00) user0
Deine Antwort auf die Frage: (Bemerkungen bitte oben als Kommentar)
Vorschau umschalten

Folgen dieser Frage

Per E-Mail:

Wenn sie sich anmelden, kommen Sie für alle Updates hier in Frage

Per RSS:

Antworten

Antworten und Kommentare

Markdown-Grundlagen

  • *kursiv* oder _kursiv_
  • **Fett** oder __Fett__
  • Link:[Text](http://url.com/ "Titel")
  • Bild?![alt Text](/path/img.jpg "Titel")
  • nummerierte Liste: 1. Foo 2. Bar
  • zum Hinzufügen ein Zeilenumbruchs fügen Sie einfach zwei Leerzeichen an die Stelle an der die neue Linie sein soll.
  • grundlegende HTML-Tags werden ebenfalls unterstützt

Frage-Themen:

×32
×5
×4
×3

gestellte Frage: 20 Apr '19, 01:20

Frage wurde gesehen: 2,667 Mal

zuletzt geändert: 21 Mai '19, 22:00