Fragen zu amsthm und ntheorem

Redefinition von Makros, Definition eigener Befehle sowie neuer Umgebungen


guy.brush™
Forum-Century
Forum-Century
Beiträge: 185
Registriert: So 8. Aug 2010, 19:43
Wohnort: Earth

Fragen zu amsthm und ntheorem

Beitrag von guy.brush™ »

Hallo,

ein paar Informationen vorab:

Ich hoffe, mit meinem Anliegen hier richtig zu sein. Ich habe LaTeX mir nebenher während dem letzten Semester etwas angeeignet.

Ich verwende Linux, TeXLive und Kile. Jeweils in der Regel auf dem neuesten Stand.

Dieses Anliegen (und ein weiteres, welches ich demnächst noch posten werde) könnte bei einigen die Frage aufwerfen: "Warum zum Henker macht er sich nur solche Gedanken darüber?". Nun, ich möchte diese Frage hier nicht beantworten und falls jemand wirklich das Gefühl hat, er müsse dies für ein besseres Verständnis meiner Fragen wissen, der kann mir gerne eine PM schreiben. Dann beantworte ich die Frage(n) gerne :).


Nun...grundlegend möchte ich mir einige neue Theorem-Umgebungen definieren. Sie sollen am Ende etwa wie folgt aussehen:

1.2 Satz (Zusatzinformation) Dies hier ist der tolle Satz.

Beweis: Dies ist der Beweis. [QED-Symbol rechtsbündig]

Der ganze Satz (also ohne Beweis) sollte dann noch in einem 0.5pt dicken Rahmen in roter Farbe umrahmt werden. Dieses Problem würde ich aber gerne später (mit eurere Hilfe) lösen, sobald die ersten Schwierigkeiten behoben sind.

Insbesondere zu "amsthm" habe ich mir mittlerweile einiges durchgelesen.

Folgendes verwirrt mich noch sehr:
  1. Welches Paket ist denn jetzt besser? "amsthm" oder "ntheorem"? Oder worin bestehen die Unterschiede? Irgendwie habe ich häufiger von "amsthm" gehört, aber "ntheorem" scheint mehr Funktionen zu bieten und (teilweise?) mit "amsthm" zu kooperieren, wobei es keine Erweiterung oder Weiterenwicklung von "amsthm" darzustellen scheint.
  2. Ich kann ja per \usepackage[amsthm]{ntheorem} das "amsthm" irgendwie in "ntheorem" einbetten. Ich habe aber noch nicht so ganz verstanden, was das genau bringen soll.
  3. Wie definiere ich am besten jeweils die proof-Umgebung so um, wie ich sie oben gerne hätte?
    Ich habe nur folgendes gefunden, was mich ziemlich verwirrt (inkl. Formatierung):
    \makeatletter
    \renewenvironment{proof}[1][\bfseries\proofname]{\par
      \pushQED{\qed}%
      \sffamily \topsep6\p@\@plus6\p@\relax
      \trivlist
      \item[\hskip\labelsep
            \itshape
        #1\@addpunct{:}]\ignorespaces
    }{%
      \popQED\endtrivlist\@endpefalse
    }
    \makeatother
    
  4. Warum funktioniert die Anpassung der headspec Option (mit "amsthm") hier nicht?

    Hinweis: Ich glaube, den Fehler gefunden zu haben: "/swapnumbers" darf nicht mehr auftauchen. Dann scheint alles zu funktionieren und der Standard-Abstand scheint zwischen thmname, thmnumber und thmnote jeweils ein reguläres Leerzeichen zu betragen.

    Die Anpassung selbst lautet:
    {\thmname{#1}\thmnumber{ #2} (\thmnote{ #3})}% Manually specify 
    
    % Es klappt übrigens auch folgendes nicht wie gewünscht:
    {\normalfont\bfseries \thmname{#1}\thmnumber{ #2}\thmnote{ (#3)}}
    
    Und das gesamte Minimalbeispiel:
    \documentclass[a4paper,11pt,twoside]{report}
    
    % Einbinden benötigter Pakete
    \usepackage[T1]{fontenc}
    \usepackage[ngerman]{babel}
    \usepackage[utf8]{inputenc}
    \usepackage[a4paper,left=3.1cm,right=3.1cm,top=2.9cm,bottom=2.9cm]{geometry}
    \usepackage[intlimits]{amsmath}
    \usepackage{amsthm}
    
    % Weitere Anpassungen/Einstellungen
    % \parindent=0mm
    \setlength{\parindent}{0mm}
    
    \newtheoremstyle{nochtoller}% 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}% name of head font
      {}% punctuation between head and body
      { }% space after theorem head; " " = normal interword space
      {\thmname{#1}\thmnumber{ #2} (\thmnote{ #3})}% Manually specify head
    
    % Hier kommen jetzt die neuen Theorem-Umgebungs Definitionen
    \swapnumbers
    \theoremstyle{nochtoller}
    \newtheorem{vartheorem}{Theorem der Ultrasuperlative}[section]
    
    \begin{document}
    
    \chapter{Die mega tollen Erfindungen des 20. Jahrhunderts}
    
    \section{Waschmaschine}
    
    \subsection{Waschmaschine mit Kn"opfen}
    
    \section{Die geschmacksneutrale Pfanne}
    
    \begin{vartheorem}[Zusatz]
      blabla\\
    blubbel
    \end{vartheorem}
    
    \end{document}
    
    Ich hatte gelesen, dass ein leeres Argument {} bedeuten würde, dass hier die Standardwerte genommen werden. Gerade bei den Abständen above/below wollte ich die Standardwerte belassen. Bei der "punctuation between head and body" scheint das leere Argument aber für "nichts" zu stehen und nicht für den standardmäßigen Punkt, der dort normalerweise stehen würde.

    Der Output verbleibt dabei normal:
    1.2.1 Theorem der Ultrasuperlative (Zusatz) blabla
    blubbel

Viele Grüße,

guy.brush™
Zuletzt geändert von guy.brush™ am Mo 9. Aug 2010, 02:17, insgesamt 8-mal geändert.

Benutzeravatar
Stefan Kottwitz
Admin
Admin
Beiträge: 2537
Registriert: Di 8. Jul 2008, 00:39
Kontaktdaten:

Theorem-Pakete

Beitrag von Stefan Kottwitz »

amsthm und ntheorem sind beide gut. Schau in der Doku, welche Features Du benötigst und welche bereitgestellt werden, das kann dann entscheiden.

ntheorem platziert Endmarken wie q.e.d. und entsprechende Symbole besser.
ntheorem bietet gerahmte und schattierte Theoreme.

Stefan

guy.brush™
Forum-Century
Forum-Century
Beiträge: 185
Registriert: So 8. Aug 2010, 19:43
Wohnort: Earth

Beitrag von guy.brush™ »

Hallo Stefan,

vielen Dank erst einmal.

Ich habe oben jetzt die Fragen angepasst bzw. zu Ende aufgeschrieben und den fehlenden Code gepostet.


Ich hatte vorhin die .pdf bzgl. "ntheorem" etwas überflogen, da mich schon alleine die 67 Seiten (im Vergleich zu 5 bei "amsthm") etwas abgeschreckt hatten ;).

Das besser positionierte QED-Symbol scheint sich wohl darauf zu beziehen, wenn es z.B. nach einer Display-Math Umgebung auftritt.

Ob sich "ntheorem" besser verhält, falls in der proof- oder theorem-Umgebungn direkt zu Beginn eine Aufzählung/Liste kommt, habe ich jetzt noch nicht gefunden.

Dass Rahmen + Schattierungen gleich inbegriffen sind, empfinde ich als sehr vorteilhaft.



Ich verstehe jetzt aber noch nicht so ganz, worin die Nachteile von "ntheorem" liegen. Immerhin habe ich wesentlich häufiger von "amsthm" Paket gehört und gelesen. Es wird z.B. hier gar nicht mit aufgeführt.


Nachtrag: Eine Liste bzgl. aller Theoreme, Definitionen und Co. klingt natürlich auch sehr interessant. Dieses Feature scheint "ntheorem" zu bieten.

Was ich zumindest bei "amsthm" noch nicht gefunden habe, ist, wie man die optionale Zusatzbemerkung verändern kann (ich möchte diesen ja aufrecht und in bold haben). Ich meine folgenden Zusatz:
\begin{theorem}[ZUSATZ]
...
\end{theorem}
Also Ändern des headspec soll dies ermöglichen, dass ich auch den "ZUSATZ" so anpassen kann, wie ich möchte. Doch ich hatte irgendwo gelesen (ich glaube im englischen Wikibooks), dass der Zusatz dann nicht mehr optional sei.


Nachtrag 2: So, nachdem ich jetzt wesentlich intensiver die .pdf zu "ntheorem" durchgelesen habe, muss ich doch leider noch ein paar Fragen hinzufügen, was ich nicht verstanden habe bzw. keine Lösung dafür finden konnte:
  1. Ich verstehe nicht wirklich, wie die \newtheoremstyle definiert werden müssen. Es wird erwähnt, dass das ganze als "trivlist" implementiert wird und dann ganz verkorkst aussehen darf/muss :).
  2. Ich konnte leider nicht ausfindig machen, wie ich normale Rahmen oder Schattierungen in Dicke, Farbe, etc. verändern kann (insb. Rahmen nicht). Welche Befehle stehen mir da zur Verfügung und wie wende ich sie an?
  3. Ich bin etwas skeptisch geworden, weil bzgl. "ntheorem" in der .pdf einige mögliche Inkompatibilitäten erwähnt werden, insb. mit "amsmath", was für mich doch etwas wichtiger ist. Auch die Unbekanntheit des Packages gegenüber "amsthm" macht mir etwas Sorgen. Sind diese Gedanken unberechtigt?
  4. Macht mir "ntheorem" in Bezug auf die Referenzen irgendwas aus "amsmath" oder Ähnlichem "kaputt"?
  5. Kann ich es irgendwie einstellen, dass innerhalb einer solchen theorem-Umgebung (egal, ob ich "amsthm" oder "ntheorem" nutze) kein Seitenumbruch stattfindet, außer, wenn die Umgebung größer als 1 Seite wäre? Oder, wenn die Umgebung x % einer Seite einnimmt und dann ein Seitenumbruch erfolgen müsste? [Beispiel: Satz ist > 50 % der Seite ==> Seitenumbruch ist bei diesem Satz erlaubt.]
  6. Gibt es eine bessere oder schönere Implementierung von farbigen Rahmen, sofern ich "amsthm" benutze, als folgende?
    \usepackage{framed}
    \newenvironment{fshaded}{%
    \def\FrameCommand{\fcolorbox{framecolor}{shadecolor}}%
    \MakeFramed {\FrameRestore}}%
    {\endMakeFramed}
    \newenvironment{sa}[1][]{\definecolor{shadecolor}{rgb}{1,1,1}%
    \definecolor{framecolor}{rgb}{1,0,0}%
    \begin{fshaded}\begin{Satz}[#1]}{\end{Satz}\end{fshaded}}
    
    Ich hoffe, ich habe keinen Code vergessen :). Ganz blicke ich da auch noch nicht durch, aber ich glaube, der oben erwähnte "ZUSATZ" fehlt hier noch.
  7. Dieses Problem hat sich gerade erst aufgetan: Ich würde gerne, dass die Thereom-Umgebungen ebenfalls mit ins Inhaltsverzeichnis aufgenommen werden. Ich finde aber aktuell keine Möglichkeit, wie dies gehen sollte.

Benutzeravatar
nfa019
Forum-Century
Forum-Century
Beiträge: 115
Registriert: Mi 2. Jun 2010, 22:32

Beitrag von nfa019 »

hier ist dein Beispiel mit ntheorem
\documentclass[a4paper,11pt,twoside]{report}

% Einbinden benötigter Pakete
\usepackage[T1]{fontenc}
\usepackage[ngerman]{babel}
\usepackage[utf8]{inputenc}
\usepackage[a4paper,left=3.1cm,right=3.1cm,top=2.9cm,bottom=2.9cm]{geometry}
\usepackage[intlimits]{amsmath}
% Weitere Anpassungen/Einstellungen
% \parindent=0mm
\setlength{\parindent}{0mm}

\usepackage{framed} % falls du framed theorems willst
\usepackage{pstricks} % falls du shaded theorems willst
\usepackage{auto-pst-pdf} % für pstricks mit pdflatex
\usepackage[framed,amsmath,thmmarks]{ntheorem}

\theoremstyle{changebreak}
\theoremheaderfont{\normalfont\bfseries}
\theorembodyfont{\normalfont}

\newtheorem{vartheorem}{MeinSatz}[section]
\newframedtheorem{ftheorem}{MeinRahmenSatz}[section]
\shadecolor{red}
\newshadedtheorem{stheorem}{MeinSchattenSatz}[section]


\theoremstyle{nonumberplain}
\theoremsymbol{\rule{1.5ex}{1.5ex}}
\theoremseparator{:}

\newtheorem{meinbeweis}{Beweis}

\begin{document}

\listtheorems{vartheorem,ftheorem} 

\chapter{Die mega tollen Erfindungen des 20. Jahrhunderts}

\section{Waschmaschine}

\subsection{Waschmaschine mit Kn"opfen}

\section{Die geschmacksneutrale Pfanne}

\begin{vartheorem}[Zusatz]
  blabla\\
blubbel
\end{vartheorem}

\begin{ftheorem}[anderer Zusatz]
\begin{itemize}
  \item bla
  \item blubb
\end{itemize}
\end{ftheorem}

\begin{stheorem}[anderer Zusatz]
\begin{itemize}
  \item bla
  \item blubb
\end{itemize}
\end{stheorem}

\begin{meinbeweis}
dies ist der Beweis mit Gleichung am Ende
\[ (a+b)^2 = a^2 + 2ab + b^2. \]
\end{meinbeweis}
\end{document}
 
es ist noch nicht ganz das was du willst, aber das obige habe ich relativ schnell mit der doku zu ntheorem rausgefunden.

Wie man Rahmendicke/farbe usw. ändert findest du sicher in der Doku des framed Paketes.

Ich benutze ntheorem zusammen mit amsmath und habe damit keine Probleme.

Frauke

guy.brush™
Forum-Century
Forum-Century
Beiträge: 185
Registriert: So 8. Aug 2010, 19:43
Wohnort: Earth

Beitrag von guy.brush™ »

Hmm...das Problem war das Definieren von neuen theoremstyles mit "ntheorems". Mit "amsmath" habe ich es ja mittlerweile hinbekommen.

Was die "framed" Dokumentation angeht, so scheine ich irgendwie zu blöd dafür zu sein (oder übersetze es falsch). Auf jedenfall bringt mich die Dokumentation nicht so viel weiter.

Die shaded Dinger würde ich erstmal nicht so gerne nehmen. Irgendwie scheint man da ja auch erst eine .dvi Datei und dann .pdf Datei erstellen zu müssen (oder so) [wegen "pstricks"].


Generell würde mich gerade sehr interessieren, was die beste Implementation für "framed" Boxen bei Benutzung von "amsthm" wäre.

Und wie ich in beiden Fällen die Theorem-Umgebungen ebenfals ins Inhaltsverzeichnis mit einbetten kann.
Arch Linux - KDE - TeXLive - Kile - \me = Advanced Newbie

Interessensschwerpunkte: Mathematik- und Formelsatz sowie mathematische (Mikro-)Typographie
Offenes Problem: negierte \xarrow-Pfeile beliebiger Länge

Benutzeravatar
nfa019
Forum-Century
Forum-Century
Beiträge: 115
Registriert: Mi 2. Jun 2010, 22:32

Beitrag von nfa019 »

so ?
\documentclass[a4paper,11pt,twoside]{report}

% Einbinden benötigter Pakete
\usepackage[T1]{fontenc}
\usepackage[ngerman]{babel}
\usepackage[utf8]{inputenc}
\usepackage[a4paper,left=3.1cm,right=3.1cm,top=2.9cm,bottom=2.9cm]{geometry}
\usepackage[intlimits]{amsmath}
% Weitere Anpassungen/Einstellungen
% \parindent=0mm
\setlength{\parindent}{0mm}

\usepackage{color,ifthen,framed} 
\usepackage[framed,amsmath,thmmarks]{ntheorem}

\theoremstyle{changebreak}
\theoremheaderfont{\normalfont\bfseries}
\theorembodyfont{\normalfont}

\newtheorem{vartheorem}{MeinSatz}[section]

%### 
\newenvironment{fshaded}{%
\def\FrameCommand{\fcolorbox{framecolor}{shadecolor}}%
\MakeFramed {\FrameRestore}}%
{\endMakeFramed}
\newenvironment{theoremshaded}{\definecolor{shadecolor}{rgb}{.85,.85,1}%
\definecolor{framecolor}{rgb}{.1,.0,.7}%
\begin{fshaded}}{\end{fshaded}}

\newenvironment{theorem}[1][]{%
\begin{theoremshaded}\ifthenelse{\equal{#1}{}}{\begin{vartheorem}}{\begin{vartheorem}[#1]}}%
{\end{vartheorem}\end{theoremshaded}}
%###

\theoremstyle{nonumberplain}
\theoremsymbol{\rule{1.5ex}{1.5ex}}
\theoremseparator{:}

\newtheorem{meinbeweis}{Beweis}

\begin{document}

\listtheorems{vartheorem} 

\chapter{Die mega tollen Erfindungen des 20. Jahrhunderts}

\section{Waschmaschine}

\subsection{Waschmaschine mit Kn"opfen}

\section{Die geschmacksneutrale Pfanne}

\begin{theorem}[Zusatz]
  blabla\\
blubbel
\end{theorem}

\begin{theorem}
	\begin{itemize}
	  \item ohne Zusatz
	\end{itemize}
\end{theorem}


\begin{meinbeweis}
dies ist der Beweis mit Gleichung am Ende
\[ (a+b)^2 = a^2 + 2ab + b^2. \]
\end{meinbeweis}
\end{document}

Die Farbe kannst du ja noch ändern :)

Frauke

guy.brush™
Forum-Century
Forum-Century
Beiträge: 185
Registriert: So 8. Aug 2010, 19:43
Wohnort: Earth

Beitrag von guy.brush™ »

Vielen Dank. Nehme ich richtig an, dass
\ifthenelse{\equal{#1}{}}
überprüft, ob der optionale Paramter wirklich übergeben worden ist? Falls ja, weshalb muss man das so machen?



Kennt jemand noch die Möglichkeit, die thereom-Umgebungen ins Inhaltsverzeichnis einzubetten?

Und kennt "amsthm" auch derartige Listen, wie "nthereom" sie kennt?

Konnte via google jetzt nichts zu herausfinden. Vielleicht habe ich aber auch nur zu blöd gesucht :).
Arch Linux - KDE - TeXLive - Kile - \me = Advanced Newbie

Interessensschwerpunkte: Mathematik- und Formelsatz sowie mathematische (Mikro-)Typographie
Offenes Problem: negierte \xarrow-Pfeile beliebiger Länge

guy.brush™
Forum-Century
Forum-Century
Beiträge: 185
Registriert: So 8. Aug 2010, 19:43
Wohnort: Earth

Beitrag von guy.brush™ »

Also ich habe hier 2 Anleitungen gefunden, wie man die thereom-Umgebungen in das Inhaltsverzeichnis einbetten kann. Leider verstehe ich beide Varianten nicht und weiß nicht, ob überhaupt eine von beiden gut ist (denn komplizierter als vermutet sehen beide aus).

Weiterhin kann ich absolut nichts zum "framed" Package finden, wie ich z.B. die Rahmendicke bestimmen kann. Ich finde meistens andere Dinge, aber nicht das, was ich suche. Vielleicht bin ich auch einfach nur zu blöd :?:
Arch Linux - KDE - TeXLive - Kile - \me = Advanced Newbie

Interessensschwerpunkte: Mathematik- und Formelsatz sowie mathematische (Mikro-)Typographie
Offenes Problem: negierte \xarrow-Pfeile beliebiger Länge

Benutzeravatar
nfa019
Forum-Century
Forum-Century
Beiträge: 115
Registriert: Mi 2. Jun 2010, 22:32

Beitrag von nfa019 »

guy.brush™ hat geschrieben:Also ich habe hier 2 Anleitungen gefunden, wie man die thereom-Umgebungen in das Inhaltsverzeichnis einbetten kann. Leider verstehe ich beide Varianten nicht und weiß nicht, ob überhaupt eine von beiden gut ist (denn komplizierter als vermutet sehen beide aus).
Vielleicht probierst du sie mal aus, alles können wir hier auch nicht für dich machen, ein bisschen Mut zur (Verständnis-)Lücke ist beim Probieren durchaus erlaubt.
Weiterhin kann ich absolut nichts zum "framed" Package finden, wie ich z.B. die Rahmendicke bestimmen kann. Ich finde meistens andere Dinge, aber nicht das, was ich suche. Vielleicht bin ich auch einfach nur zu blöd :?:
steht alles drin :)
\documentclass[a4paper,11pt,twoside]{report}

% Einbinden benötigter Pakete
\usepackage[T1]{fontenc}
\usepackage[ngerman]{babel}
\usepackage[utf8]{inputenc}
\usepackage[a4paper,left=3.1cm,right=3.1cm,top=2.9cm,bottom=2.9cm]{geometry}
\usepackage[intlimits]{amsmath}
% Weitere Anpassungen/Einstellungen
% \parindent=0mm
\setlength{\parindent}{0mm}

\usepackage{color,ifthen,framed} 
\usepackage[framed,amsmath,thmmarks]{ntheorem}

\theoremstyle{changebreak}
\theoremheaderfont{\normalfont\bfseries}
\theorembodyfont{\normalfont}

\newtheorem{vartheorem}{{\color{red}MeinSatz}}[section]

%### 
\newenvironment{fshaded}{%
\def\FrameCommand{%
\setlength\fboxrule{\FrameRule}\fcolorbox{framecolor}{shadecolor}}% 
\MakeFramed {\FrameRestore}}%
{\endMakeFramed}
\newenvironment{theoremshaded}{\setlength{\FrameRule}{0.5pt}\definecolor{shadecolor}{rgb}{.85,.85,1}%
\definecolor{framecolor}{rgb}{1.0,.0,.0}%
\begin{fshaded}}{\end{fshaded}}

\newenvironment{theorem}[1][]{%
\begin{theoremshaded}\ifthenelse{\equal{#1}{}}{\begin{vartheorem}}{\begin{vartheorem}[#1]}}%
{\end{vartheorem}\end{theoremshaded}}
%###

\theoremstyle{nonumberplain}
\theoremsymbol{\rule{1.5ex}{1.5ex}}
\theoremseparator{:}

\newtheorem{meinbeweis}{Beweis}

\begin{document}

\listtheorems{vartheorem} 

\chapter{Die mega tollen Erfindungen des 20. Jahrhunderts}

\section{Waschmaschine}

\subsection{Waschmaschine mit Kn"opfen}

\section{Die geschmacksneutrale Pfanne}

\begin{theorem}[Zusatz]
  blabla\\
blubbel
\end{theorem}

\begin{theorem}
	\begin{itemize}
	  \item ohne Zusatz
	\end{itemize}
\end{theorem}


\begin{meinbeweis}
dies ist der Beweis mit Gleichung am Ende
\[ (a+b)^2 = a^2 + 2ab + b^2. \]
\end{meinbeweis}
\end{document}
 
[/quote]

guy.brush™
Forum-Century
Forum-Century
Beiträge: 185
Registriert: So 8. Aug 2010, 19:43
Wohnort: Earth

Beitrag von guy.brush™ »

Ausprobiert habe ich jetzt ja :). [Siehe diesen Thread, in dem du ja auch schon gepostet hast :).]



Danke für den erweiterten Beispiel-Code :). Irgendwie wollte ich da nicht durchpeilen. Tut mir leid. Aktuell bin ich aber auch etwas platt im Schädel, denn ich habe in letzter Zeit so viel durchgelesen zum Thema LaTeX, KOMA und einzelne Pakete :). Dafür bin ich schon relativ weit, was ein Template für meine Skripte und Übungsblätterlösungen angeht :).
Arch Linux - KDE - TeXLive - Kile - \me = Advanced Newbie

Interessensschwerpunkte: Mathematik- und Formelsatz sowie mathematische (Mikro-)Typographie
Offenes Problem: negierte \xarrow-Pfeile beliebiger Länge

Antworten