Eigene Umgebung für "Sätze" etc. definieren Thema ist als GELÖST markiert

Redefinition von Makros, Definition eigener Befehle sowie neuer Umgebungen


Saduras

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

Beitrag 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!

Saduras

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

Beitrag 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!

Anfänger
Forum-Anfänger
Forum-Anfänger
Beiträge: 10
Registriert: Do 29. Sep 2011, 16:08

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

Beitrag von Anfänger »

Servus zusammen,

ich hab genau das gleiche Problem.

Hilfe bitte!

Benutzeravatar
bloodworks
Moderator
Moderator
Beiträge: 1425
Registriert: Mo 19. Jan 2009, 10:52
Wohnort: /dev/null

Beitrag 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} 
[1] Nützliche Webdokumente für Anfänger und Fortgeschrittene
[2]Minimalbeispiel | [3]FAQ
[4]Regelwerk | [5] Knigge
Wenn nicht anderst angegeben ist mein System: texlive 2012, pdflatex, x86-64, Snow Leopard utd.
Angehöriger der Liga zur Verwendung von texdoc
texdoc mathmode koma l2picfaq l2tabu lshort-en
Achtung: Aufforderungen ein Minimalbeispiel oder mehr Erklärungen zu einer Frage zu liefern sind keine persönlichen Angriffe. Sie dienen viel mehr dazu die Kommunikation zwischen Fragendem und potentiellen Helfern zu erleichtern und zu präzisieren.


Anfänger
Forum-Anfänger
Forum-Anfänger
Beiträge: 10
Registriert: Do 29. Sep 2011, 16:08

Beitrag 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} 

Benutzeravatar
bloodworks
Moderator
Moderator
Beiträge: 1425
Registriert: Mo 19. Jan 2009, 10:52
Wohnort: /dev/null

Beitrag 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]}
[1] Nützliche Webdokumente für Anfänger und Fortgeschrittene
[2]Minimalbeispiel | [3]FAQ
[4]Regelwerk | [5] Knigge
Wenn nicht anderst angegeben ist mein System: texlive 2012, pdflatex, x86-64, Snow Leopard utd.
Angehöriger der Liga zur Verwendung von texdoc
texdoc mathmode koma l2picfaq l2tabu lshort-en
Achtung: Aufforderungen ein Minimalbeispiel oder mehr Erklärungen zu einer Frage zu liefern sind keine persönlichen Angriffe. Sie dienen viel mehr dazu die Kommunikation zwischen Fragendem und potentiellen Helfern zu erleichtern und zu präzisieren.


Anfänger
Forum-Anfänger
Forum-Anfänger
Beiträge: 10
Registriert: Do 29. Sep 2011, 16:08

Beitrag 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!

Benutzeravatar
bloodworks
Moderator
Moderator
Beiträge: 1425
Registriert: Mo 19. Jan 2009, 10:52
Wohnort: /dev/null

Beitrag 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.
[1] Nützliche Webdokumente für Anfänger und Fortgeschrittene
[2]Minimalbeispiel | [3]FAQ
[4]Regelwerk | [5] Knigge
Wenn nicht anderst angegeben ist mein System: texlive 2012, pdflatex, x86-64, Snow Leopard utd.
Angehöriger der Liga zur Verwendung von texdoc
texdoc mathmode koma l2picfaq l2tabu lshort-en
Achtung: Aufforderungen ein Minimalbeispiel oder mehr Erklärungen zu einer Frage zu liefern sind keine persönlichen Angriffe. Sie dienen viel mehr dazu die Kommunikation zwischen Fragendem und potentiellen Helfern zu erleichtern und zu präzisieren.


Anfänger
Forum-Anfänger
Forum-Anfänger
Beiträge: 10
Registriert: Do 29. Sep 2011, 16:08

Beitrag von Anfänger »

Super! Ich danke dir! Ich werd's behutsam einsetzen, aber das ist genau das, was ich wollte.

Anfänger
Forum-Anfänger
Forum-Anfänger
Beiträge: 10
Registriert: Do 29. Sep 2011, 16:08

Beitrag 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!

Antworten