\newtheorem anpassen

Erstellung eines Literaturverzeichnisses mit BibTeX, Biber, BibLaTeX und Co.


Verena
Forum-Anfänger
Forum-Anfänger
Beiträge: 44
Registriert: Mi 18. Nov 2015, 14:41

\newtheorem anpassen

Beitrag von Verena »

Liebe alle,

ich möchte in meinem Dokument verteilt über ein Kapitel immer wieder Beispiele einfügen (dazwischen steht Text). Alle Beispiele sollen eingerückt sein und die Nummerierung links vom Beispiel stehen.

Nun hab ich also versucht, mit dem Paket amsthm zu arbeiten.
Folgende Formatierungen schaffe ich aber leider überhaupt nicht:
- Die Beispiele sollten rechts und links noch eingerückt werden (ca. 1cm).
- "Beispiel X" steht derzeit fett, soll dies aber nicht.
- "Beispiel X" soll etwas weiter links stehen als der Text, nämlich so wie bei Aufzählungen üblich.

Zwischendurch habe ich mit description gearbeitet, hatte jedoch die selben Schwierigkeiten.

Minimalbeispiel:
%
\documentclass[paper=a4, 12pt, oneside, headsepline, headings=optiontoheadandtoc]{scrbook}
\usepackage[french, ngerman]{babel}
\usepackage[backend=biber, style=authoryear-comp, isbn=false, dashed=false, maxitems=2, maxnames=3, uniquename=false]{biblatex}
\usepackage[utf8]{inputenc}
\usepackage[babel, german=quotes]{csquotes}
\usepackage[T1]{fontenc}
\usepackage{lmodern}

% Beispiele formatieren -> hier sitzt mein Problem
\usepackage{amsthm}
\theoremstyle{definition}
\newtheorem{bsp}{Bsp.}
\AtBeginEnvironment{bsp}{\small\singlespacing}

\begin{document}

\begin{bsp}
Hier steht das erste Beispiel, welches nummeriert werden soll.
\end{bsp}

Hier steht ein anderer Fließtext.

\begin{bsp}
Hier steht ein zweites Beispiel, welches entsprechend mit "2" nummeriert werden soll.
\end{bsp}

\printbibliography
\end{document}
Oder sollte ich doch nicht amsthm dafür verwenden?
Hat jemand eine Idee?
Das wäre toll, DANKE!

Gast

Beitrag von Gast »

Hier ein paar Vorschläge ohne amsthm. Prinzipiell haben sie alle ähnliche Eigenschaften. Rechts und links wird eingerückt, am Anfang steht ein automatisch nummeriertes Label.

bsp misst die Länge des längsten Labels und passt alle Umgebungen daran an, das heißt alle Umgebungen haben die gleiche linke Einrückung, die gerade so gestaltet ist, dass das längste Label gut hereinpasst. Da das längste Label gefunden werden muss, braucht diese Lösung zwei LaTeX-Durchläufe, um zu funktionieren.

asp misst nur die Länge des aktuellen Labels. Das heißt alle asps haben unterschiedliche linke Einzüge, die aber niemals in den Text laufen.

csp hat einen voreingestellten linken Einzug.

Für größere Symmetrie kannst Du überall statt \setlength{\rightmargin}{1cm}%
\setlength{\rightmargin}{\leftmargin}%
schreiben.
\documentclass[paper=a4, 12pt, oneside, headsepline, headings=optiontoheadandtoc]{scrbook}
\usepackage[french, ngerman]{babel}
\usepackage[utf8]{inputenc}
\usepackage[babel, german=quotes]{csquotes}
\usepackage[T1]{fontenc}
\usepackage{lmodern}
\usepackage{csquotes}
\usepackage{kantlipsum}

\usepackage{etoolbox}

\usepackage{hyperref}
\usepackage{cleveref}

% BSP
\makeatletter
\newlength{\bsplabelwidth}
\setlength{\bsplabelwidth}{\labelwidth}
\newlength{\bsplabelwidthmax}
\newlength{\bsplabelwidthtmp}

\AtEndDocument{%
  \ifbool{@filesw}
    {\immediate\write\@mainaux{%
       \global\deflength{\bsplabelwidth}{\the\bsplabelwidthmax}}}
    {}%
}

\newcounter{bsp}
\newcommand*{\bspformat}[1]{Bsp.~#1}
\newenvironment{bsp}
  {\list{}{%
     \setlength{\labelwidth}{\bsplabelwidth}%
     \setlength{\leftmargin}{\labelwidth}%
     \addtolength{\leftmargin}{\labelsep}%
     \setlength{\rightmargin}{1cm}%
     \renewcommand*{\makelabel}[1]{##1\hss}}%
   \refstepcounter{bsp}%
   \settowidth{\bsplabelwidthtmp}{\bspformat{\thebsp}}%
   \ifdimgreater{\bsplabelwidthtmp}{\bsplabelwidthmax}
     {\global\deflength{\bsplabelwidthmax}{\bsplabelwidthtmp}}
     {}%
   \item[\bspformat{\thebsp}]}
  {\endlist}
\makeatother
\crefname{bsp}{Bsp.}{Bsp.}

% ASP
\newcounter{asp}
\newcommand*{\aspformat}[1]{Asp.~#1}
\newenvironment{asp}
  {\refstepcounter{asp}
   \list{}{%
     \settowidth{\labelwidth}{\aspformat{\theasp}}%
     \setlength{\leftmargin}{\labelwidth}%
     \addtolength{\leftmargin}{\labelsep}%
     \setlength{\rightmargin}{1cm}%
     \renewcommand*{\makelabel}[1]{##1\hss}}%
   \item[\aspformat{\theasp}]}
  {\endlist}

\crefname{asp}{Asp.}{Asp.}

% CSP
\newcounter{csp}
\newcommand*{\cspformat}[1]{Csp.~#1}
\newenvironment{csp}
  {\refstepcounter{csp}
   \list{}{%
     \setlength{\labelwidth}{1cm}%
     \setlength{\leftmargin}{\labelwidth}%
     \addtolength{\leftmargin}{\labelsep}%
     \setlength{\rightmargin}{1cm}%
     \renewcommand*{\makelabel}[1]{##1\hss}}%
   \item[\cspformat{\thecsp}]}
  {\endlist}

\crefname{csp}{Csp.}{Csp.}

\begin{document}
\begin{bsp}\label{uno}
Hier steht das erste Beispiel, welches nummeriert werden soll.
\end{bsp}

Hier steht ein anderer Fließtext. \ref{uno} and \ref{due} vs \cref{uno,due}
\begin{bsp}\label{due}
Hier steht ein zweites Beispiel, welches entsprechend mit \enquote{2} nummeriert werden soll.
Loremm ipsum dolor sit amet.
\end{bsp}

\kant[1]

\begin{asp}\label{odin}
Hier steht ein zweites Beispiel, welches entsprechend mit \enquote{2} nummeriert werden soll.
Loremm ipsum dolor sit amet.
\end{asp}
\ref{odin} and \ref{test} and \ref{een}

\begin{csp}\label{een}
Hier steht ein zweites Beispiel, welches entsprechend mit \enquote{2} nummeriert werden soll.
Loremm ipsum dolor sit amet.
\end{csp}

\begin{enumerate}
  \item lorem
  \item ipsum\label{test}
  \item dolor
\end{enumerate}

\begin{bsp}
\kant[2]
\end{bsp}

\setcounter{bsp}{999}
\kant[1]
\begin{bsp}
\kant[2-3]
\end{bsp}
\setcounter{asp}{999}
\begin{asp}
\kant[6]
\end{asp}
\setcounter{csp}{999}
\begin{csp}
\kant[7]
\end{csp}
\end{document} 

Verena
Forum-Anfänger
Forum-Anfänger
Beiträge: 44
Registriert: Mi 18. Nov 2015, 14:41

Beitrag von Verena »

Wow, tausend Dank für die tolle Hilfe!
Da war ich doch recht weit weg von der perfekten Lösung :D

Verena
Forum-Anfänger
Forum-Anfänger
Beiträge: 44
Registriert: Mi 18. Nov 2015, 14:41

Beitrag von Verena »

Jetzt hätte ich noch zwei Fragen:

(1)
Mir gefällt asp sehr gut, nur soll der Zeilenabstand einfach sein und die Schriftart small. Folgendermaßen habe ich das eingefügt:
% ASP
\newcounter{asp}
\newcommand*{\aspformat}[1]{Asp.~#1}
\newenvironment{asp}
  {\refstepcounter{asp}
   \list{}{%
    \small 
     \renewcommand{\baselinestretch}{1.00}
     \settowidth{\labelwidth}{\aspformat{\theasp}}%
     \setlength{\leftmargin}{\labelwidth}%
     \addtolength{\leftmargin}{\labelsep}%
     \setlength{\rightmargin}{1cm}%
     \renewcommand*{\makelabel}[1]{##1\hss}}%
   \item[\aspformat{\theasp}]}
  {\endlist}

\crefname{asp}{Asp.}{Asp.}
Wenn ich vor dem Beispiel keine Leerzeile einfüge, gehen \small und \baselinestrech1.00 auf den vorherigen Absatz über.
Mit Leerzeile davor klappt es aber.

Meine Frage wäre, ob es besser / professioneller geht?
Würdet ihr die Befehle anders schreiben oder an eine andere Stelle einfügen?


(2)
Im Text habe ich nun noch ein Beispiel, das in einer Tabelle steht. Es soll in die Nummerierung der Beispiele eingehen.
Gibt es irgendeinen Befehl, mit welchem ich diesem Beispiel innerhalb der Tabelle sagen könnte, dass es als Beispiel (asp) gezählt, aber keine Formatierung erhalten soll?

Gast

Beitrag von Gast »

Ich kann es bei mir nicht nachvollziehen, dass das \small auf vorherigen Text überspringt. Kannst Du dazu bitte ein vollständiges Minimalbeispiel zeigen? Unten ist es zumindest nicht der Fall.

Zu (2) Du kannst mit \refstepcounter{asp} den Zähler um eins erhöhen, mit \theasp kannst Du ihn ausgeben, falls Du das möchtest.
\documentclass[paper=a4, 12pt, oneside, headsepline, headings=optiontoheadandtoc]{scrbook}
\usepackage[french, ngerman]{babel}
\usepackage[utf8]{inputenc}
\usepackage[babel, german=quotes]{csquotes}
\usepackage[T1]{fontenc}
\usepackage{lmodern}
\usepackage{csquotes}
\usepackage{kantlipsum}

\usepackage{etoolbox}

\usepackage{hyperref}
\usepackage{cleveref}

% ASP
\newcounter{asp}
\newcommand*{\aspformat}[1]{Asp.~#1}
\newenvironment{asp}
  {\refstepcounter{asp}
   \list{}{%
     \small
     \settowidth{\labelwidth}{\aspformat{\theasp}}%
     \setlength{\leftmargin}{\labelwidth}%
     \addtolength{\leftmargin}{\labelsep}%
     \setlength{\rightmargin}{1cm}%
     \renewcommand*{\makelabel}[1]{##1\hss}}%
   \item[\aspformat{\theasp}]}
  {\endlist}

\crefname{asp}{Asp.}{Asp.}

\begin{document}
\begin{asp}\label{uno}
Hier steht das erste Beispiel, welches nummeriert werden soll.
\end{asp}

Hier steht ein anderer Fließtext. \ref{uno} and \ref{due} vs \cref{uno,due}
\begin{asp}\label{due}
Hier steht ein zweites Beispiel, welches entsprechend mit \enquote{2} nummeriert werden soll.
Loremm ipsum dolor sit amet.
\end{asp}

\kant[1]

\begin{tabular}{lr}
\refstepcounter{asp}Beispiel~\theasp & manuelles Beispiel\\
\texttt{\string\refstepcounter\{asp\}} & setzt den Zähler um eins hoch\\
\texttt{\string\theasp}& sorgt für die Ausgabe\\
\end{tabular}

\begin{asp}
\kant[2]
\end{asp}
\end{document}

Verena
Forum-Anfänger
Forum-Anfänger
Beiträge: 44
Registriert: Mi 18. Nov 2015, 14:41

Beitrag von Verena »

Tausend Dank, das hilft mir sehr!!!

Hier mein vollständiges Minimalbeispiel. Ich kopiere mal alles aus meiner Präambel mit rein, was eventuell eine kollidierende Formatierung enthalten könnte.

Habe noch ein wenig herumgetüftelt. Inzwischen ist es so, dass die Formatierung nicht mehr auf den vorheringen Absatz übergeht.
Aber der einfache Zeilenabstand funktioniert leider nicht..... Schriftgröße small passt immerhin, aber am Zeilenabstand tut sich nichts. Wie kann ich den denn einstellen?

\documentclass[paper=a4, 12pt, oneside, headsepline, headings=optiontoheadandtoc]{scrbook}

\usepackage[french, ngerman]{babel}
\usepackage[backend=biber, style=authoryear-comp, isbn=false, dashed=false, maxitems=2, maxnames=3, uniquename=false]{biblatex}
\renewcommand*{\postnotedelim}{\addcolon\space}
\usepackage[utf8]{inputenc}
\usepackage[babel, german=quotes]{csquotes}
\usepackage[T1]{fontenc}
\usepackage{graphicx}
\usepackage{lmodern}
\usepackage{framed}
\usepackage{enumerate} \usepackage{enumitem}
\usepackage{pdfpages}
\pdfoptionpdfminorversion=5
\usepackage{booktabs}
\usepackage{textcomp} 
\usepackage{etoolbox}
\usepackage{kantlipsum}
\usepackage{tabularx}

\usepackage{setspace} 
\setstretch{1.3} %Zeilenabstand im Fließtext
\AtBeginBibliography{\singlespacing} %in Bibliographie einfacher Zeilenabstand
\usepackage{chngcntr}
\usepackage{float}
\usepackage{microtype} 
\setkomafont{pagehead}{\normalfont\footnotesize} 

\usepackage{cleveref}

\makeatletter
\newlength{\bsplabelwidth}
\setlength{\bsplabelwidth}{\labelwidth}
\newlength{\bsplabelwidthmax}
\newlength{\bsplabelwidthtmp}

\AtEndDocument{%
  \ifbool{@filesw}
    {\immediate\write\@mainaux{%
       \global\deflength{\bsplabelwidth}{\the\bsplabelwidthmax}}}
    {}%
}

%BSP
\newcounter{bsp}
\newcommand*{\bspformat}[1]{Bsp.~#1}
\newenvironment{bsp}
  {\list{}{%
\small % -> hat keine Formatierung zur Folge
\renewcommand{\baselinestretch}{1.00} % -> hat keine Formatierung zur Folge
     \setlength{\labelwidth}{\bsplabelwidth}%
     \setlength{\leftmargin}{\labelwidth}%
     \addtolength{\leftmargin}{\labelsep}%
     \setlength{\rightmargin}{1cm}%
     \renewcommand*{\makelabel}[1]{##1\hss}}%
   \refstepcounter{bsp}%
   \settowidth{\bsplabelwidthtmp}{\bspformat{\thebsp}}%
   \ifdimgreater{\bsplabelwidthtmp}{\bsplabelwidthmax}
     {\global\deflength{\bsplabelwidthmax}{\bsplabelwidthtmp}}
     {}%
   \item[\bspformat{\thebsp}]}
  {\endlist}
\makeatother
\crefname{bsp}{Bsp.}{Bsp.}


% ASP
\newcounter{asp}
\newcommand*{\aspformat}[1]{Asp.~#1}
\newenvironment{asp}
  {\refstepcounter{asp}
   \list{}{%
\small % -> hat keine Formatierung zur Folge
\renewcommand{\baselinestretch}{1.00} % -> hat keine Formatierung zur Folge
     \settowidth{\labelwidth}{\aspformat{\theasp}}%
     \setlength{\leftmargin}{\labelwidth}%
     \addtolength{\leftmargin}{\labelsep}%
     \setlength{\rightmargin}{1cm}%
     \renewcommand*{\makelabel}[1]{##1\hss}}%
   \item[\aspformat{\theasp}]}
  {\endlist}

\crefname{asp}{Asp.}{Asp.}


% eingerückte Zitate
\newenvironment{myquote}%bei quote wird das Zitat beidseitig eingerückt, bei list nicht unbedingt 
	{\vspace{0pt}\begin{quote}
	%\setlength{\parskip}{0cm}
	\renewcommand{\baselinestretch}{1.00}
	\small}
	{\end{quote}\vspace{-4pt}}
	
\bibliography{Dokument}

\begin{document}

Hier steht ein Text, in normaler Schriftgröße und in eineinhalbfachem Zeilenabstand. Das bleibt nun auch so. Hier also alles super.
\begin{asp}
Hier steht nun das Beispiel, in Schriftgröße \small. Leider ist der Zeilenabstand aber immer noch 1.5. Ich hätte ihn gerne auf 1.00.
\end{asp}
Hier steht wieder normaler Text.
\begin{bsp}
Hier steht nun das zweite Beispiel, in Schriftgröße \small. Leider ist der Zeilenabstand aber immer noch 1.5. Ich hätte ihn gerne auf 1.00.
\end{bsp}

\end{document}

Gast

Beitrag von Gast »

Probier mal
\documentclass[paper=a4, 12pt, oneside, headsepline, headings=optiontoheadandtoc]{scrbook}

\usepackage[french, ngerman]{babel}
\usepackage[backend=biber, style=authoryear-comp, isbn=false, dashed=false, maxitems=2, maxnames=3, uniquename=false]{biblatex}
\renewcommand*{\postnotedelim}{\addcolon\space}
\usepackage[utf8]{inputenc}
\usepackage[babel, german=quotes]{csquotes}
\usepackage[T1]{fontenc}
\usepackage{graphicx}
\usepackage{lmodern}
\usepackage{framed}
\usepackage{enumerate} \usepackage{enumitem}
\usepackage{pdfpages}
\pdfoptionpdfminorversion=5
\usepackage{booktabs}
\usepackage{textcomp}
\usepackage{etoolbox}
\usepackage{kantlipsum}
\usepackage{tabularx}

\usepackage{setspace}
\setstretch{1.3} %Zeilenabstand im Fließtext
\AtBeginBibliography{\singlespacing} %in Bibliographie einfacher Zeilenabstand
\usepackage{chngcntr}
\usepackage{float}
\usepackage{microtype}
\setkomafont{pagehead}{\normalfont\footnotesize}

\usepackage{cleveref}

\makeatletter
\newlength{\bsplabelwidth}
\setlength{\bsplabelwidth}{\labelwidth}
\newlength{\bsplabelwidthmax}
\newlength{\bsplabelwidthtmp}

\AtEndDocument{%
  \ifbool{@filesw}
    {\immediate\write\@mainaux{%
       \global\deflength{\bsplabelwidth}{\the\bsplabelwidthmax}}}
    {}%
}

%BSP
\newcounter{bsp}
\newcommand*{\bspformat}[1]{Bsp.~#1}
\newenvironment{bsp}
  {\list{}{%
     \setlength{\labelwidth}{\bsplabelwidth}%
     \setlength{\leftmargin}{\labelwidth}%
     \addtolength{\leftmargin}{\labelsep}%
     \setlength{\rightmargin}{1cm}%
     \renewcommand*{\makelabel}[1]{##1\hss}}%
   \refstepcounter{bsp}%
   \settowidth{\bsplabelwidthtmp}{\bspformat{\thebsp}}%
   \ifdimgreater{\bsplabelwidthtmp}{\bsplabelwidthmax}
     {\global\deflength{\bsplabelwidthmax}{\bsplabelwidthtmp}}
     {}%
   \small
   \setstretch{1}%
   \item[\bspformat{\thebsp}]}
  {\endlist}
\makeatother
\crefname{bsp}{Bsp.}{Bsp.}


% ASP
\newcounter{asp}
\newcommand*{\aspformat}[1]{Asp.~#1}
\newenvironment{asp}
  {\refstepcounter{asp}
   \list{}{%
     \settowidth{\labelwidth}{\aspformat{\theasp}}%
     \setlength{\leftmargin}{\labelwidth}%
     \addtolength{\leftmargin}{\labelsep}%
     \setlength{\rightmargin}{1cm}%
     \renewcommand*{\makelabel}[1]{##1\hss}}%
   \small
   \setstretch{1}%
   \item[\aspformat{\theasp}]}
  {\endlist}

\crefname{asp}{Asp.}{Asp.}


% eingerückte Zitate
\newenvironment{myquote}%bei quote wird das Zitat beidseitig eingerückt, bei list nicht unbedingt
   {\vspace{0pt}\begin{quote}
   %\setlength{\parskip}{0cm}
   \renewcommand{\baselinestretch}{1.00}
   \small}
   {\end{quote}\vspace{-4pt}}
   
\bibliography{Dokument}

\begin{document}

Hier steht ein Text, in normaler Schriftgröße und in eineinhalbfachem Zeilenabstand. Das bleibt nun auch so. Hier also alles super.
\begin{asp}
Hier steht nun das Beispiel, in Schriftgröße \string\small. Leider ist der Zeilenabstand aber immer noch 1.5. Ich hätte ihn gerne auf 1.00.
\end{asp}
Hier steht wieder normaler Text.
\begin{bsp}
Hier steht nun das zweite Beispiel, in Schriftgröße \string\small. Leider ist der Zeilenabstand aber immer noch 1.5. Ich hätte ihn gerne auf 1.00.
\end{bsp}

\end{document}
Wenn Du \baselinestretch umdefinieren möchtest, brauchst Du ein \selectfont danach. Mit \setstretch passiert das automatisch.

Das \setstretch darf außerdem nicht im zweiten Argument von \list stehen wie in
\newenvironment{asp}
  {\refstepcounter{asp}
   \list{}{%
\small % -> hat keine Formatierung zur Folge
\renewcommand{\baselinestretch}{1.00} % -> hat keine Formatierung zur Folge
     \settowidth{\labelwidth}{\aspformat{\theasp}}%
     \setlength{\leftmargin}{\labelwidth}%
     \addtolength{\leftmargin}{\labelsep}%
     \setlength{\rightmargin}{1cm}%
     \renewcommand*{\makelabel}[1]{##1\hss}}%
   \item[\aspformat{\theasp}]}
  {\endlist}
es muss nach dem \list-Aufruf kommen.
\newenvironment{asp}
  {\refstepcounter{asp}
   \list{}{%
     \settowidth{\labelwidth}{\aspformat{\theasp}}%
     \setlength{\leftmargin}{\labelwidth}%
     \addtolength{\leftmargin}{\labelsep}%
     \setlength{\rightmargin}{1cm}%
     \renewcommand*{\makelabel}[1]{##1\hss}}%
   \small
   \setstretch{1}%
   \item[\aspformat{\theasp}]}
  {\endlist}
das hängt damit zusammen, wie TeX Absätze baut. \setstretch beziehen sich immer auf den ganzen aktuellen Absatz. Egal wo im Folgenden das \setstretch steht, es hat überall dieselbe Auswirkung
\par
Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. \setstretch{4} Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet.
\par
(ich habe hier explizit \par geschrieben, um den Absatz zu kennzeichnen, normalerweise lässt man einfach eine ganze Zeile leer). Insbesondere bewirkt auch ein \setstretch ganz am Ende des Absatzes eine Änderung des Zeilenabstandes. Erst wenn Du \setstretch nach der Leerzeile/dem \par ausführst, hat es keine Auswirkung auf den Absatz mehr.

Wenn man sich die interne Definition von \list ansieht, dann stellt man fest, dass das zweite Argument ausgeführt wird, bevor der vorherige Absatz (wenn nötig) beendet wird. Wenn Du den vorherigen Absatz nicht selbst beendest, würde das \setstretch also zu früh ausgeführt. Daher ist es eine Lösung, das \setstretch nach dem \list auszuführen, denn da ist der vorherige Absatz garantiert beendet. Alternativ könntest Du den vorherigen Absatz auch explizit schon vorher mit \par beenden.

Verena
Forum-Anfänger
Forum-Anfänger
Beiträge: 44
Registriert: Mi 18. Nov 2015, 14:41

Beitrag von Verena »

Das funktioniert (sogar ohne Markierung durch \par) perfekt, TAUSEND DANK, auch für die Erklärungen !!!!!

Antworten