amsthm und cref Problem

Formelsatz für Mathematik, Naturwissenschaften und Technik


ko3rn3r
Forum-Anfänger
Forum-Anfänger
Beiträge: 48
Registriert: Mi 23. Jan 2019, 13:46

amsthm und cref Problem

Beitrag von ko3rn3r »

Hallo,
ich habe das Problem, dass, wenn ich "amsthm" und "cref" zusammen verwende, es zu einem Fehler kommt, wenn ich den Verweis an die Aufgaben-Umgebung mache: "\begin{aufgabe}[Test]\label{test}".
Nur an dieser Stelle kommt es zu einem Problem. Wenn sich das Label an der "\begin{enumtask}"-Umgebung befindet, funktioniert es.
Wenn ich den markierten Teil (%______) auskommentiere, sprich nicht das "amsthm"-Paket verwende, funktioniert alles (auch mit dem Verweis der Aufgaben-Umgebung: "\begin{aufgabe}[Test]\label{test}").
Das möchte ich aber wirklich ungern, da ich die Umgebung gerne verändern möchte.

Liebe Grüße!

Code: Alles auswählen

\documentclass{report} 
\usepackage{enumitem} 
\usepackage[capitalise]{cleveref} 
  
%_______________________________
\usepackage{amsthm} 
\newtheoremstyle{Aufgabenstellung}% name of the style to be used
{}% measure of space to leave above the theorem. E.g.: 3pt
{}% measure of space to leave below the theorem. E.g.: 3pt
{}% name of font to use in the body of the theorem
{}% measure of space to indent
{\bfseries\sffamily}% name of head font
{}% punctuation between head and body
{1em}% space after theorem head; " " = normal interword space
{\thmname{#1}\thmnumber{ #2}\thmnote{: #3}}% Manually specify head

\theoremstyle{Aufgabenstellung}
%______________________________________________
\newtheorem{aufgabe}{Aufgabe}[chapter]

\newlist{enumtask}{enumerate}{1} 
\setlist[enumtask]{label=\alph*), ref=\theaufgabe\alph*)} 

\crefname{enumtaski}{Aufgabe}{Aufgaben} 



\begin{document} 
\chapter{Kapitel} 
\begin{aufgabe}[Test]\mbox{} 
    \begin{enumtask} 
    \item test 1 
    \item test 2 \label{item:bla} 
    \end{enumtask} 
\end{aufgabe} 
\cref{item:bla} 

\begin{aufgabe}[Test]\label{test} 
    bla bla bla 
\end{aufgabe} 

\cref{test} 
\end{document}

Bartman
Forum-Meister
Forum-Meister
Beiträge: 2138
Registriert: Do 16. Jul 2009, 21:41
Wohnort: Hessische Provinz

Beitrag von Bartman »

Ich bekomme keine Fehlermeldung, aber statt der Benennung des Querverweises auf die Aufgaben-Umgebung erhalte ich Fragezeichen. Das lässt sich beheben, wenn man cleveref nach amsthm lädt.

ko3rn3r
Forum-Anfänger
Forum-Anfänger
Beiträge: 48
Registriert: Mi 23. Jan 2019, 13:46

Beitrag von ko3rn3r »

Hallo, danke für deine Antwort!
Stimmt, es kommt nicht zu einem Fehler, sondern zu einer Warnung:
" cref reference format for label type `aufgabe' undefined ".

Aber auch wenn ich "cref zum Schluss lade, bleiben die Fragezeichen.

ko3rn3r
Forum-Anfänger
Forum-Anfänger
Beiträge: 48
Registriert: Mi 23. Jan 2019, 13:46

Beitrag von ko3rn3r »

Hallo,
meintest du es so?
Kann es sein, dass man irgendwie noch ein Befehl definieren muss, den man im Label dann aufruft? Also in der Art wie: "fig:bla" oder "sec:bla2" als Bezeichnung des Labels damit "cleverref" weiß was er vorne dran schreiben muss?

Vielen Dank im Voraus und Liebe Grüße!

Code: Alles auswählen


\documentclass{report} 
\usepackage{enumitem} 
  
\usepackage{amsthm} 
\newtheoremstyle{Aufgabenstellung}% name of the style to be used 
{}% measure of space to leave above the theorem. E.g.: 3pt 
{}% measure of space to leave below the theorem. E.g.: 3pt 
{}% name of font to use in the body of the theorem 
{}% measure of space to indent 
{\bfseries\sffamily}% name of head font 
{}% punctuation between head and body 
{1em}% space after theorem head; " " = normal interword space 
{\thmname{#1}\thmnumber{ #2}\thmnote{: #3}}% Manually specify head 

\theoremstyle{Aufgabenstellung} 

\newtheorem{aufgabe}{Aufgabe}[chapter] 
\renewcommand{\theaufgabe}{\arabic{aufgabe}} % zählt die Aufgaben arabisch (1, 2, 3, ...)

\usepackage{hyperref}

\usepackage[capitalise]{cleveref} 
\crefname{enumtaski}{Aufgabe}{Aufgaben} 
\newlist{enumtask}{enumerate}{1} 
\setlist[enumtask]{label=\alph*), ref=\theaufgabe\alph*)} 


\begin{document}
	
\chapter{Kapitel}

\begin{aufgabe}[Test]\mbox{} 
    \begin{enumtask} 
    \item test 1 
    \item test 2 \label{bla} 
    \end{enumtask} 
\end{aufgabe}

Die \cref{bla} kann referenziert werden!

\begin{aufgabe}[Test]\label{test} 
    bla bla bla 
\end{aufgabe} 

Hier scheitert es jedoch: \cref{test}

\end{document}


Gast

Beitrag von Gast »

Wenn du erst eine neue Theorem-Umgebung definierst und dann cleveref lädst, kann das Paket natürlich keinen Einfluss mehr darauf nehmen. Daher wird auch immer wieder empfohlen: Erst Pakete laden, dann eigene Definitionen etc. Leider machen das ganz viele Leute nicht so – auch Leute, die Anleitungen schreiben oder diese unsäglichen Vorlagen.

ko3rn3r
Forum-Anfänger
Forum-Anfänger
Beiträge: 48
Registriert: Mi 23. Jan 2019, 13:46

Beitrag von ko3rn3r »

Vielen Dank für deine Antwort!
Stimmt in der Dokumentation stand es auch unter Punkt 14: Bekannte Bugs.
\newtheorem muss nach cleveref geladen werden. Das ist schon alles.
Hiermit klappt es :)

Code: Alles auswählen

\documentclass{report} 
\usepackage{enumitem} 
 
\usepackage{amsthm} 

\newtheoremstyle{Aufgabenstellung}% name of the style to be used 
{}% measure of space to leave above the theorem. E.g.: 3pt 
{}% measure of space to leave below the theorem. E.g.: 3pt 
{}% name of font to use in the body of the theorem 
{}% measure of space to indent 
{\bfseries\sffamily}% name of head font 
{}% punctuation between head and body 
{1em}% space after theorem head; " " = normal interword space 
{\thmname{#1}\thmnumber{ #2}\thmnote{: #3}}% Manually specify head


\usepackage{hyperref}

\usepackage[capitalise]{cleveref} 
	\crefname{enumtaski}{Aufgabe}{Aufgaben} 
	\newlist{enumtask}{enumerate}{1} 
	\setlist[enumtask]{label=\alph*), ref=\theaufgabe\alph*)} 

\theoremstyle{Aufgabenstellung} 
\newtheorem{aufgabe}{Aufgabe}[chapter] 
\renewcommand{\theaufgabe}{\arabic{aufgabe}}

\begin{document}
	
\chapter{Kapitel}

\begin{aufgabe}[Test]\mbox{} 
    \begin{enumtask} 
    \item test 1 
    \item test 2 \label{bla} 
    \end{enumtask} 
\end{aufgabe}

Die \cref{bla} kann referenziert werden!

\begin{aufgabe}[Test]\label{test} 
    bla bla bla 
\end{aufgabe} 

Hier scheitert es nicht mehr: \cref{test}

\end{document}
Anonymous hat geschrieben:Wenn du erst eine neue Theorem-Umgebung definierst und dann cleveref lädst, kann das Paket natürlich keinen Einfluss mehr darauf nehmen. Daher wird auch immer wieder empfohlen: Erst Pakete laden, dann eigene Definitionen etc. Leider machen das ganz viele Leute nicht so – auch Leute, die Anleitungen schreiben oder diese unsäglichen Vorlagen.

ko3rn3r
Forum-Anfänger
Forum-Anfänger
Beiträge: 48
Registriert: Mi 23. Jan 2019, 13:46

Beitrag von ko3rn3r »

Okay ich hätte doch noch eine Frage und zwar möchte ich gerne, dass mehrere Aufgaben mit einem Befehl zusammen aufgerufen werden (\cref{test1,test2}). Dies klappt auch bei den Teilaufgaben, jedoch nicht wenn die Referenzierung an den "normalen" Aufgaben liegt.

Lieb Grüße

Code: Alles auswählen


\documentclass{report} 
\usepackage{enumitem} 
 
\usepackage{amsthm} 

\newtheoremstyle{Aufgabenstellung}% name of the style to be used 
{}% measure of space to leave above the theorem. E.g.: 3pt 
{}% measure of space to leave below the theorem. E.g.: 3pt 
{}% name of font to use in the body of the theorem 
{}% measure of space to indent 
{\bfseries\sffamily}% name of head font 
{}% punctuation between head and body 
{1em}% space after theorem head; " " = normal interword space 
{\thmname{#1}\thmnumber{ #2}\thmnote{: #3}}% Manually specify head


\usepackage{hyperref}

\usepackage[german,capitalise]{cleveref} 
	\crefname{enumtaski}{Aufgabe}{Aufgaben}
	\newlist{enumtask}{enumerate}{1}
	\setlist[enumtask]{label=\alph*), ref=\theaufgabe\alph*)}

\theoremstyle{Aufgabenstellung}
\newtheorem{aufgabe}{Aufgabe}[chapter]
\renewcommand{\theaufgabe}{\arabic{aufgabe}}

\begin{document}
	
\chapter{Kapitel}

\begin{aufgabe}[Test]\mbox{} \label{test1} 
    \begin{enumtask} 
    \item test 1 \label{foo}
    \item test 2 \label{bar} 
    \end{enumtask} 
\end{aufgabe}

Die \cref{foo,bar} können referenziert werden!

\begin{aufgabe}[Test]\label{test2}
    bla bla bla 
\end{aufgabe} 

Hier scheitert es doch noch mal: \cref{test1,test2}

\end{document}


Bartman
Forum-Meister
Forum-Meister
Beiträge: 2138
Registriert: Do 16. Jul 2009, 21:41
Wohnort: Hessische Provinz

Beitrag von Bartman »

Lies den Abschnitt 8.1.3 "Automatic \newtheorem Definitions".

Off-Topic: Für die aktuelle Rechtschreibung solltest Du besser die Option ngerman wählen. Da sie außer cleveref wahrscheinlich noch weitere Pakete in Deiner Präambel beeinflussen soll, kannst Du sie gleich als Option der Klasse verwenden.

ko3rn3r
Forum-Anfänger
Forum-Anfänger
Beiträge: 48
Registriert: Mi 23. Jan 2019, 13:46

Beitrag von ko3rn3r »

Vielen Dank!
Folgender Befehl führt zum Erfolg:

Code: Alles auswählen

\crefname{aufgabe}{Aufgabe}{Aufgaben}
Bartman hat geschrieben:Lies den Abschnitt 8.1.3 "Automatic \newtheorem Definitions".

Off-Topic: Für die aktuelle Rechtschreibung solltest Du besser die Option ngerman wählen. Da sie außer cleveref wahrscheinlich noch weitere Pakete in Deiner Präambel beeinflussen soll, kannst Du sie gleich als Option der Klasse verwenden.

Antworten