Seite 1 von 3

Eigene Umgebung für "Sätze" etc. definieren

Verfasst: Di 12. Apr 2011, 15:04
von Saduras
Hallo,

ich TeXe ein Teil meiner Unimitschriften, damit ich eine übersichtliche und schicke Mitschrift hab. Als Mathestudent gibt es dabei eine nahezu gleichbleibende unterteilung in Definitionen, Sätze und Beweise.
Da ich dafür bisher noch keine wirklich zufriedenstellende Formatierung gefunden hab versuch ich grade mir meine eigenen Umgebungen dafür zu konstruieren.

Mir ist das Paket amsthm bekannt und ich hab es auch bereits benutzt, leider war ich damit nicht so ganz zufrieden. Deswegen der Versuch mit den eigenen Umgebungen.

Meine Grundidee ist folgende:
- Bezeichnung (Satz, Definition,...) Links mit Nummerierung
- Eingerückt dann Inhalt

Das hab ich versucht mit Tabellen zu realisieren, doch gibt es dann probleme, wenn in der Umgebung "\\" oder "&" verwendet wird...
\newenvironment{satz}[1]
		{\begin{tabular}{l l} Satz #1: & }
		{\end{tabular}Ende}
Den Inhalt in eine Box zu packen scheitert daran, dass ich im begin-Teil keine "{"-Klammer offen lassen darf/kann, die ich erst wieder im end-Teil schließe...

Wie lässt sich das realisieren? Oder ist mein Ansatz ganz falsch?
Mir ist ja eigentlich schon bekannt, dass man sich in LaTeX nicht so viel um die Formatierung kümmern sollte und so, aber das was ich bisher gefunden hab stellte mich nicht ganz zufrieden.

Danke!

Eigene Umgebung für "Sätze" etc. definieren

Verfasst: Do 19. Mai 2011, 10:25
von Saduras
Hallo again,

ich hab doch wieder amsthm verwendet und bin sogar auf etwas gestoßen, was meiner ursprünglichen Idee sehr nahe kommt!
Und zwar kann man beim definieren eines neuen theorem-styles einen negativen Wert für das Einrücken der Überschrift angeben.

Minimalbeispiel:
\documentclass{article}
\usepackage{ngerman} %neue deutsche Rechtschreibung
\usepackage[utf8]{inputenc} %richtige umwandlung von umlauten
\usepackage{amsthm}

\begin{document}
	
	\newtheoremstyle{style}% ⟨name⟩ 
		{0.5em}%	⟨Space above⟩ 
		{0.7em}%	⟨Space below⟩ 
		{}%	⟨Body font⟩
		{-9em}%	⟨Indent amount⟩
		{\bfseries}% ⟨Theorem head font⟩ 
		{:}%	⟨Punctuation after theorem head⟩ 
		{\newline}%	⟨Space after theorem head⟩ 
		{}%	⟨Theorem head spec (can be left empty, meaning ‘normal’)⟩
		
		\theoremstyle{style} 
		\newtheorem{satz}{Satz}[section]
		
		
		\section{Das erste Kapietel}
		\begin{satz}
			Irgend ein Inhalt bzw. eine Aussage\dots
		\end{satz}
		
		\begin{satz}
			Weiterer Inhalt
		\end{satz}
\end{document}
Eine Kleinigkeit stört mich jedoch noch:
Nun stehen die Satz-Bezeichnungen außerhalb des eigentlich Seiteninhaltes und deshalb nicht so eingerückt wie die Section-Überschriften. (siehe Bsp)
Es wäre schöner, wenn diese übereinander stehen und nur der Inhalt eines Satzes eingerückt ist.
Vielleicht kann man irgendwie zusätzlich zum Seitenabstand noch eine weitere Einrückung von normalem Text definieren?
Oder ist es möglich section-Überschriften und head-Zeilen so zu manipulieren, dass ich auch "links überstehen"?

Wäre super, wenn sich damit jemand auskennt!
Danke!

Eigene Umgebung für "Sätze" etc. definieren

Verfasst: Do 29. Sep 2011, 16:16
von Anfänger
Servus zusammen,

ich hab genau das gleiche Problem.

Hilfe bitte!

Verfasst: Do 29. Sep 2011, 16:56
von bloodworks
So zum Bleistift:
\documentclass{article} 
\usepackage{ngerman} %neue deutsche Rechtschreibung 
\usepackage[latin1]{inputenc} %richtige umwandlung von umlauten 
\usepackage{amsthm} 

\begin{document} 
    
   \newtheoremstyle{style}% ⟨name⟩ 
      {0.5em}%   ⟨Space above⟩ 
      {0.7em}%   ⟨Space below⟩ 
      {}%   ⟨Body font⟩ 
      {0em}%   ⟨Indent amount⟩ 
      {\bfseries}% ⟨Theorem head font⟩ 
      {}%   ⟨Punctuation after theorem head⟩ 
      { }%   ⟨Space after theorem head⟩ 
      {Satz \arabic{section}.\arabic{satz}:\\  \hspace*{1cm}}%   ⟨Theorem head spec (can be left empty, meaning ‘normal’)⟩ 
      
      \theoremstyle{style} 
      \newtheorem{satz}{Satz}[section] 
      
      
      \section{Das erste Kapietel} 
      \begin{satz} 
         Irgend ein Inhalt bzw. eine Aussage\dots 
      \end{satz} 
      
      \begin{satz} 
         Weiterer Inhalt 
      \end{satz} 
      
  
     
\end{document} 
 
Geht natürlich nur bei einzeiligen Sätzen.
Im Prinzip kann man so was auch selber machen:
\documentclass{article} 
\usepackage{ngerman} %neue deutsche Rechtschreibung 
\usepackage[latin1]{inputenc} %richtige umwandlung von umlauten 
\usepackage{ calc} 

      \newcounter{satzi}[section]\stepcounter{satzi}
      \newlength{\myindent}
      \setlength{\myindent}{1cm}
      \newenvironment{mysatz}{\vspace*{0pt}\noindent\begin{minipage}[t]{\textwidth}Satz \refstepcounter{satzi}\arabic{section}.\arabic{satzi}:\newline  \hspace*{\myindent}\begin{minipage}[t]{\textwidth -\myindent} }{\end{minipage}\end{minipage}\\[.3\baselineskip]}
      
\begin{document} 
    
\section{bla}
      
d
  

     \begin{mysatz}
    W test Test TEst etst test   test Test TEst etst test   test Test TEst etst test   test Test TEst etst test
    \end{mysatz}
     Was anderesW
     
    \begin{mysatz}
    W test Test TEst etst test   test Test TEst etst test   test Test TEst etst test   test Test TEst etst test
    \end{mysatz}
     Was anderesW
    \section{bla}
      

  
    \begin{mysatz}
    W test Test TEst etst test   test Test TEst etst test   test Test TEst etst test   test Test TEst etst test
    \end{mysatz} 

\end{document} 

Verfasst: Fr 30. Sep 2011, 09:44
von Anfänger
Servus und danke erstmal.
Das mit der Umgebung schaut gut aus. Jetzt wäre nur noch meine Frage: Wie bekomme ich die Nummerierung weg? Wenn ich den Counter-Befehl weglasse, kommt bei mir immer der Fehler:
! Missing number, treated as zero.
<to be read again>

Hier mein Testversuch:
\documentclass{article}
\usepackage{ngerman} %neue deutsche Rechtschreibung
\usepackage[latin1]{inputenc} %richtige umwandlung von umlauten
\usepackage{ calc}
\usepackage{amsthm}

      \newlength{\myindent}
      \setlength{\myindent}{1cm}
      \newenvironment{mysatz}{\vspace*{0pt}\noindent\begin{minipage}[t]{\textwidth}\textbf{Satz:}  \hangindent*{\myindent}}{\end{minipage}\\[.3\baselineskip]}


\begin{document}
   
\section{bla}
     
d
 

     \begin{mysatz}
    W test Test TEst etst test   test Test TEst etst test   test Test TEst etst test   test Test TEst etst test
    \end{mysatz}
     Was anderesW
     
    \begin{mysatz}
    W test Test TEst etst test   test Test TEst etst test   test Test TEst etst test   test Test TEst etst test
    \end{mysatz}
     Was anderesW
    \section{bla}
     

    \begin{mysatz}
    W test Test TEst etst test   test Test TEst etst test   test Test TEst etst test   test Test TEst etst test
    \end{mysatz}

\end{document} 

Verfasst: Fr 30. Sep 2011, 10:25
von bloodworks
Das finde ich jetzt aber nicht sehr nett von dir. Oben schreibst du noch, du hast das genau gleiche Problem, jetzt plötzlich nicht mehr. SO was nennt man Thread jacking. Für eine eigene Frage solltest du ein eigenes Thema aufmachen.
Wie dem auch sei. Bitte schön:
  \newlength{\myindent} 
       \setlength{\myindent}{1cm} 
       \newenvironment{mysatz}{\vspace*{0pt}\noindent\begin{minipage}[t]{\textwidth}\textbf{Satz:} \par\hangindent=\myindent\parindent=\myindent}{\end{minipage}\\[.3\baselineskip]}

Verfasst: Fr 30. Sep 2011, 10:40
von Anfänger
Wunderbar!
Zu meiner Verteidigung: Ich hab mich spontan umentschieden.
:D
Jetzt hast du mir schon so weit geholfen, da muss ich unanständigerweise gleich noch was fragen:
Ich würde noch gerne um das ganze Ding, also die ganze Umgebung, einen Kasten machen. Wie krieg ich das hin?
Und noch eine nicht so wichtige Frage: Warum fängt der Text, den ich in den Satz schreibe, nicht nach dem "Satz:" an? Ich hab gedacht, genau dafür ist "\hangindent" gut?

Vielen Dank für die große Hilfe bis jetzt!

Verfasst: Fr 30. Sep 2011, 10:50
von bloodworks
Nein \hangindent rückt Absätze ein. Und ist sehr low level. (Ich geben keine Grantie dafür, dass die Verwendung von hangindent nicht irgendwelche unerwünschten Effekte hat. ) Das kannst du eben an den Anfang eins Absatzes schreiben um den gesamten Absatz einzurücken. Ich denke das triffts noch eher:
\documentclass{scrbook}
\usepackage[ngerman]{babel}


\usepackage{calc, blindtext}
\usepackage{mdframed}
  \newlength{\myindent} 
       \setlength{\myindent}{1cm} 
       \newenvironment{mysatz}{\begin{mdframed}[skipbelow=.2\baselineskip, skipabove=.2\baselineskip]\textbf{Satz:}\hangindent=\myindent}{\end{mdframed}}
\begin{document}

\begin{mysatz}
\blindtext
\end{mysatz}
\blindtext

\blindtext

\end{document}
DU kannst die minipage weglassen. Aber bedenke: Rahmen sind eine sehr starke Auszeichnung. Die ziehen sehr viel Aufmerksamkeit uns sollten eher sparsam eingesetzt werden, sonst wird das lesen auch sehr anstrengend.

Verfasst: Fr 30. Sep 2011, 10:57
von Anfänger
Super! Ich danke dir! Ich werd's behutsam einsetzen, aber das ist genau das, was ich wollte.

Verfasst: Mo 3. Okt 2011, 11:44
von Anfänger
Da bin ich schon wieder! :oops:

Wie bereits erwähnt, ist jetzt eigentlich von der Formatierung her aller super. Das Einzige, was noch ein bisschen stört, ist die Tatsache, dass die Sätze beim Seitenumbruch geteilt werden. Ich hab ein bisschen recherchiert und die "mdframed"-Option "nobreak" gefunden. Jetzt schaut das bei mir so aus:
	\newenvironment{satz}{%
	\begin{mdframed}[skipbelow=.6\baselineskip,%
	  skipabove=.6\baselineskip,%
	  innerleftmargin=0,%
	  innerrightmargin=0,%
	  nobreak=true]%
	 \textbf{Satz:}%
	  \hangindent=\myindent}%
	{\end{mdframed}}
Das Vorgeplänkel ist wie oben. Allerdings kommt dann der Fehler
! Package xkeyval Error: `nobreak' undefined in families `mdf'.

See the xkeyval package documentation for explanation.

Was mach ich falsch? Danke im Voraus!