PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Ref bei mdframed



Oelle74
12-11-2016, 20:51
Hallo,
ich habe Probleme bei Referenz auf Theorems unter Verwendung von mdframed. Es wird großteils falsch refenziert.
Anbei ein Bsp.-Code und das pdf, das ich daraus erhalte.
Was muss ich ändern?
Danke!



\documentclass[12pt,a4paper]{scrbook}

\usepackage{amsfonts, amsmath, amssymb, latexsym, amscd}

\usepackage[framemethod=tikz]{mdframed}


\newcounter{theorem}
\setcounter{theorem}{0}
\renewcommand\thetheorem{Beispiel \thechapter.\arabic{theorem}}
\makeatletter
\mdf@dolist{\mdf@do@stringoption}{%
{theoremtitle=={}}%
}
\renewrobustcmd\mdfcreateextratikz{%
\node[anchor=west,rounded corners,draw,thick,shading=axis,left color=gray!20,xshift=0.5cm,minimum height=.7cm,minimum width=2cm] at (P-|O)
{~\mdf@frametitlefont{\thetheorem}%
\ifdefempty{\mdf@theoremtitle}%
{~}%
{:~\mdf@theoremtitle~}%
};
}
\makeatother
\mdfdefinestyle{theoremstyle}{%
outerlinewidth=1pt,
innerlinewidth=0pt,
roundcorner=5pt,
linecolor=black,
shadow=false,
splittopskip=1cm, % THIS IS THE REQUIRED OPTION FOR SPACE ABOVE THE SPLIT ON THE SECOND PAGE
splitbottomskip=1cm, % THIS IS THE REQUIRED OPTION FOR SPACE BELOW THE SPLIT ON THE FIRST PAGE
innertopmargin=1.2\baselineskip,
skipabove={\dimexpr0.5\baselineskip+\topskip\relax },
needspace=3\baselineskip,
frametitlefont=\sffamily\bfseries,
settings={\global\stepcounter{theorem}},
}
\newenvironment{bsp}[1][]
{\begin{mdframed}[style=theoremstyle,theoremtitle={#1}]
\relax}{
\end{mdframed}
}


\begin{document}

\chapter{Start}

\begin{bsp}\label{bsp1}
Bsp 1
\end{bsp}

\begin{bsp}\label{bsp2}
Bsp 2
\end{bsp}

\begin{bsp}\label{bsp3}
Bsp 3
\end{bsp}

\ref{bsp1} und \ref{bsp2} und \ref{bsp3}

\end{document}


6217

Johannes_B
13-11-2016, 09:22
Du musst \refstepcounter anstatt des einfachen \stepcounter nutzen.

Oelle74
13-11-2016, 10:55
Habs jetzt geändert, und dafür kommt auch der Name nicht nur die Nummer beim Zitieren. Ist dies auch änderbar, dass nur auf die Nummer referenziert wird?



\documentclass[12pt,a4paper]{scrbook}

\usepackage{amsfonts, amsmath, amssymb, latexsym, amscd}

\usepackage[framemethod=tikz]{mdframed}


\newcounter{theorem}
\setcounter{theorem}{0}
\renewcommand\thetheorem{Beispiel \thechapter.\arabic{theorem}}
\makeatletter
\mdf@dolist{\mdf@do@stringoption}{%
{theoremtitle=={}}%
}
\renewrobustcmd\mdfcreateextratikz{%
\node[anchor=west,rounded corners,draw,thick,shading=axis,left color=gray!20,xshift=0.5cm,minimum height=.7cm,minimum width=2cm] at (P-|O)
{~\mdf@frametitlefont{\thetheorem}%
\ifdefempty{\mdf@theoremtitle}%
{~}%
{:~\mdf@theoremtitle~}%
};
}
\makeatother
\mdfdefinestyle{theoremstyle}{%
outerlinewidth=1pt,
innerlinewidth=0pt,
roundcorner=5pt,
linecolor=black,
shadow=false,
splittopskip=1cm, % THIS IS THE REQUIRED OPTION FOR SPACE ABOVE THE SPLIT ON THE SECOND PAGE
splitbottomskip=1cm, % THIS IS THE REQUIRED OPTION FOR SPACE BELOW THE SPLIT ON THE FIRST PAGE
innertopmargin=1.2\baselineskip,
skipabove={\dimexpr0.5\baselineskip+\topskip\relax },
needspace=3\baselineskip,
frametitlefont=\sffamily\bfseries,
settings={\global\refstepcounter{theorem}},
}
\newenvironment{bsp}[1][]
{\begin{mdframed}[style=theoremstyle,theoremtitle={#1}]
\relax}{
\end{mdframed}
}


\begin{document}

\chapter{Start}

\begin{bsp}\label{bsp1}
Bsp 1
\end{bsp}

\begin{bsp}\label{bsp2}
Bsp 2
\end{bsp}

\begin{bsp}\label{bsp3}
Bsp 3
\end{bsp}

Beispiel \ref{bsp1} und Beispiel \ref{bsp2} und Beispiel \ref{bsp3}

\end{document}


6218

Johannes_B
13-11-2016, 11:08
Du stellst doch ganz explizit ein, dass die Darstellung des Zählers das Wort Beispiel enthält. Und nun willst du das nicht mehr? Versteh ich nicht.


\documentclass[12pt,a4paper]{scrbook}

\usepackage{amsfonts, amsmath, amssymb, latexsym, amscd}

\usepackage[framemethod=tikz]{mdframed}


\newcounter{theorem}
\renewcommand\thetheorem{\thechapter.\arabic{theor em}}
\makeatletter
\mdf@dolist{\mdf@do@stringoption}{%
{theoremtitle=={}}%
}
\renewrobustcmd\mdfcreateextratikz{%
\node[anchor=west,rounded corners,draw,thick,shading=axis,left color=gray!20,xshift=0.5cm,minimum height=.7cm,minimum width=2cm] at (P-|O)
{~\mdf@frametitlefont{Beispiel~\thetheorem}%
\ifdefempty{\mdf@theoremtitle}%
{~}%
{:~\mdf@theoremtitle~}%
};
}
\makeatother
\mdfdefinestyle{theoremstyle}{%
outerlinewidth=1pt,
innerlinewidth=0pt,
roundcorner=5pt,
linecolor=black,
shadow=false,
splittopskip=1cm, % THIS IS THE REQUIRED OPTION FOR SPACE ABOVE THE SPLIT ON THE SECOND PAGE
splitbottomskip=1cm, % THIS IS THE REQUIRED OPTION FOR SPACE BELOW THE SPLIT ON THE FIRST PAGE
innertopmargin=1.2\baselineskip,
skipabove={\dimexpr0.5\baselineskip+\topskip\relax },
needspace=3\baselineskip,
frametitlefont=\sffamily\bfseries,
settings={\global\refstepcounter{theorem}},
}
\newenvironment{bsp}[1][]
{\begin{mdframed}[style=theoremstyle,theoremtitle={#1}]
\relax}{
\end{mdframed}
}


\begin{document}

\chapter{Start}

\begin{bsp}\label{bsp1}
Bsp 1
\end{bsp}

\begin{bsp}\label{bsp2}
Bsp 2
\end{bsp}

\begin{bsp}\label{bsp3}
Bsp 3
\end{bsp}

\ref{bsp1} und \ref{bsp2} und \ref{bsp3}

\end{document}

klops
13-11-2016, 11:17
Das hast Du selbst dadurch verbrochen, dass Du "Beispiel" in \thetheorem mit eingefügt hast.

\documentclass[12pt,a4paper]{scrbook}

\usepackage{amsfonts, amsmath, amssymb, latexsym, amscd}

\usepackage[framemethod=tikz]{mdframed}

\newcounter{theorem}[chapter]% Zähler in Abhängigkeit von chapter zurücksetzen
\renewcommand\thetheorem{\thechapter.\arabic{theor em}}
\makeatletter
\mdf@dolist{\mdf@do@stringoption}{%
{theoremtitle=={}}%
}
\renewrobustcmd\mdfcreateextratikz{%
\node[anchor=west,rounded corners,draw,thick,shading=axis,left color=gray!20,xshift=0.5cm,minimum height=.7cm,minimum width=2cm] at (P-|O)
{~\mdf@frametitlefont{Beispiel~\thetheorem}%
\ifdefempty{\mdf@theoremtitle}%
{~}%
{:~\mdf@theoremtitle~}%
};
}
\makeatother
\mdfdefinestyle{theoremstyle}{%
outerlinewidth=1pt,
innerlinewidth=0pt,
roundcorner=5pt,
linecolor=black,
shadow=false,
splittopskip=1cm, % THIS IS THE REQUIRED OPTION FOR SPACE ABOVE THE SPLIT ON THE SECOND PAGE
splitbottomskip=1cm, % THIS IS THE REQUIRED OPTION FOR SPACE BELOW THE SPLIT ON THE FIRST PAGE
innertopmargin=1.2\baselineskip,
skipabove={\dimexpr0.5\baselineskip+\topskip\relax },
needspace=3\baselineskip,
frametitlefont=\sffamily\bfseries,
settings={\refstepcounter{theorem}},% \stepcounter und \refstepcounter sind
% bereits global
}
\newenvironment{bsp}[1][]
{\begin{mdframed}[style=theoremstyle,theoremtitle={#1}]
\relax}{
\end{mdframed}
}


\begin{document}

\chapter{Start}

\begin{bsp}\label{bsp1}
Bsp 1
\end{bsp}

\begin{bsp}\label{bsp2}
Bsp 2
\end{bsp}

\begin{bsp}\label{bsp3}
Bsp 3
\end{bsp}

Beispiel \ref{bsp1} und Beispiel \ref{bsp2} und Beispiel \ref{bsp3}

\end{document}
Ich habe auch gleich eingefügt, dass theorem mit chapter zurückgesetzt wird, weil es sonst IMHO wenig sinnvoll wäre, den Zähler in Abhöngigkeit von chapter auszugeben. Außerdem habe ich das sinnlose \setcounter{theorem}{0} entfernt. Das ist nämlich bereits in \newcounter{theorem} enthalten. Auch das \global vor \refstepcounter habe ich entfernt, da \setcounter, \stepcounter und \refstepcounter ohnehin global arbeiten und daher das \global IMHO im Zweifelsfall sogar stören könnte.

Oelle74
13-11-2016, 11:17
Ich hab mir das aus einem anderen Beispiel kopiert und anscheinend nicht ganz verstanden.
Ich verwende den Code für ein altes Projekt von mir, wo ich mit ref nur die Nummer benötige. Was muss ich dazu im Code ändern?

klops
13-11-2016, 11:41
Haben Johannes und ich doch zeitgleich gezeigt. Vergleiche meinen Code mit Deinem, dann siehst Du, was ich geändert habe. Hast Du meinen Code überhaupt ausprobiert?

Oelle74
13-11-2016, 12:15
Super, danke!