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 19 Apr, 19:20

user0's gravatar image

user0
2415
Akzeptiert: 11%

bearbeitet 21 Apr, 14: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.

(22 Apr, 23: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, 16: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, 17: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.

(25 Apr, 20: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, 16:00) user0
Sei der Erste, der diese Frage beantwortet!
Knebel-Vorschau

Folge dieser Frage

Per E-Mail:

Wenn Du Dich anmeldest, kannst Du Updates hier abonnieren

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üge einfach zwei Leerzeichen an die Stelle ein, an der die neue Zeile sein soll.
  • grundlegende HTML-Tags werden ebenfalls unterstützt

Zugeordnete Themen:

×29
×4
×3
×2

Frage gestellt: 19 Apr, 19:20

Frage wurde angeschaut: 170 Mal

Zuletzt aktualisiert: 21 Mai, 16:00