Eigene "Beweisumgebung"

Redefinition von Makros, Definition eigener Befehle sowie neuer Umgebungen


Benutzeravatar
localghost
Forum-Meister
Forum-Meister
Beiträge: 826
Registriert: Di 8. Jul 2008, 15:40
Wohnort: Braunschweig

Ansatz

Beitrag von localghost »

Du hast lange gebraucht, um das Beispiel zu reduzieren. Entweder hast Du die Links ignoriert oder den Inhalt dahinter nicht verstanden. Daran solltest Du zukünftig intensiv arbeiten.

Meine ursprüngliche Idee, die Umgebung proof aus amsthm (das auch deine Vorlage lädt) zu verwenden, war nicht optimal. Denn sie bietet kein optionales Argument. Mir ist aber das hier eingefallen.
% !TeX program = pdflatex
\documentclass[
  fontsize=12pt,
  numbers=noenddot,
  open=right,
  twoside,
  fleqn,
  ngerman                   % globale Sprachoption für »babel« (und andere Pakete)
]{scrreprt}
\usepackage[T1]{fontenc}    % Cork Encoding einschalten
\usepackage{selinput}       % Halbautomatische Festlegung ↵
\SelectInputMappings{       % der Eingabe-Kodierung ↵
  adieresis={ä},            % mit Hilfe ausgewählter Glyphen ↵
  germandbls={ß}            % siehe: http://partners.adobe.com/public/developer/en/opentype/glyphlist.txt
}
\usepackage{babel}          % Sprache des Dokuments
\usepackage{mathtools}      % Verbesserungen für »amsmath«, das auch geladen wird
\usepackage{amsthm}         % Umgebungen für Theoreme und Beweise

\newtheoremstyle{boldhead}  % Name
{3pt}                       % Space above
{3pt}                       % Space below
{}                          % Body font
{}                          % Indent amount
{\bfseries}                 % Theorem head font
{:}                         % Punctuation after theorem head
{.5em}                      % Space after theorem head
{}                          % Theorem head spec (can be left empty, meaning "normal")

\theoremstyle{boldhead}
\newtheorem*{beh}{Beh.}
\newtheorem*{bew}{Bew.}

\newenvironment{beweis}[1][]{ % neue Umgebung mit einem optionalen Argument ↵
  \begin{bew}[#1]             % basierend auf »bew«
}{\qed\end{bew}}              % Einfügen des QED-SYmbols

\begin{document}
  \begin{beh}
    Du bist dem dir gegebenen Link auf die Instruktionen zur Erstellung einen Minimalbeispiels nicht gefolgt.
  \end{beh}

  \begin{beweis}[direkt]
    Als Beweis genügt ein einziger Satz von dir:
    \begin{quote}
      "`Da ich nicht genau weiß, wofür alle die Pakete gut sind, habe ich sie mal alle mit geladen."'
    \end{quote}
    Nach Studium der oben genannten Instruktionen wüsstest Du mit Sicherheit, welche Pakete zur Reproduktion des Problems notwendig sind und welche nicht. In deinem Fall hier nur »amsthm«.
  \end{beweis}
\end{document}
Die Anpassungen von Umgebungen ähnlich theorem (siehe Code) mit \newtheoremstyle liest Du bitte in der Anleitung von amsthm nach. Das obige Beispiel stellt dafür nur ein Gerüst dar.
TeX und LaTeX, Fragen und Antworten – TeXwelt

¹ Es tut mir Leid. Meine Antworten sind begrenzt. Sie müssen die richtigen Fragen stellen.
² System: TeX Live 2024, TeXworks

Besserwisser

Re: Ansatz

Beitrag von Besserwisser »

localghost hat geschrieben:Meine ursprüngliche Idee, die Umgebung proof aus amsthm (das auch deine Vorlage lädt) zu verwenden, war nicht optimal. Denn sie bietet kein optionales Argument.
Laut Abschnitt 5 der amsthm-Anleitung bietet es das sehr wohl:
\documentclass[
  fontsize=12pt,
  numbers=noenddot,
  open=right,
  twoside,
  fleqn,
  ngerman                   % globale Sprachoption
]{scrreprt}
\usepackage{babel}          % Sprache des Dokuments umschaltbar
\usepackage{amsthm}         % Umgebungen für Theoreme und Beweise

\begin{document}

\begin{proof}
So sieht es aus, wenn man das optionale Argument nicht verwendet.
\end{proof}

\begin{proof}[\proofname{} (Satz des Pythagoras)]
Und so geht es mit dem optionalen Argument.
\end{proof}
\end{document}
Zur Beeinflussung der Platzierung des q.e.d.-Symbols und ggf. zur Wahl eines anderen q.e.d.-Symbols sei ebenfalls auf Abschnitt 5 der amsthm-Anleitung verwiesen.

Man kann aber natürlich auch die Original-Definition kopieren, um das optionale Argument auf den Titel zu reduzieren und "Beweis" immer davor setzen zu lassen. Zur Verdeutlichung weiterer Möglichkeiten habe ich auch noch ein wenig die Fonts geändert:
\documentclass[
  fontsize=12pt,
  numbers=noenddot,
  open=right,
  twoside,
  fleqn,
  ngerman                   % globale Sprachoption
]{scrreprt}
\usepackage{babel}          % Sprache des Dokuments umschaltbar
\usepackage{amsthm}         % Umgebungen für Theoreme und Beweise

\makeatletter% <-- Erklärung gibt es beim Draufklicken.
% Umdefinierung von proof basierend auf dem Originalcode aus amsthm.sty:
\renewenvironment{proof}[1][\relax]{% Default für optionales Argument geändert.
  % Jetzt aber erst einmal genau wie in der Originaldefinition
  \par\pushQED{\qed}%
  \normalfont 
  \topsep 6pt plus 1pt\relax
  \trivlist
  \item[\hskip\labelsep
    % Jetzt machen wir ein paar Änderungen für ein fettes "Beweise":
    \textbf{\proofname}
    % optional eine kursiver Beweisname in Klammern:
    \ifx\relax#1\relax\unskip\else \textit{(#1)}\fi
    % und dahinter wieder einen fetten Doppelpunkt statt eines Punktes.
    \textbf{:}]%
    % Ab hier wieder die Originaldefinition
    \ignorespaces
}{%
  \popQED\endtrivlist\@endpefalse
}
\makeatother% <-- Erklärung gibt es beim Draufklicken.

\begin{document}

\begin{proof}
So sieht es aus, wenn man das optionale Argument nicht verwendet.
\end{proof}

\begin{proof}[Satz des Pythagoras]
Und so geht es mit dem optionalen Argument.
\end{proof}
\end{document}
Wie man mal wieder sieht, führen eben viele Wege nach Rom. Der Startpunkt sollte aber, wie von localghost bereits im allerersten Kommentar erklärt eben ein vollständiges Minimalbeispiel des Fragestellers sein.

Dimitri
Forum-Guru
Forum-Guru
Beiträge: 418
Registriert: Fr 22. Mär 2013, 16:50

Beitrag von Dimitri »

Vielen Dank für eure hilfreichen Antworten! :-) TOLLES FORUM! :-)

JA, ich dachte halt, wenn ich alle die Pakete eingebe, dann könnt ihr Mir noch Verbesserungsvorschläge machen, was ich ändern oder weglassen sollte:
Gibts da noch was, was ihr anders machen würdet???

UND NOCH NE FRAGE:
Kriegt man das auch hin, dass die Klammern z.B. bei "(" Satz des Pythagoras ")" NUR DANN stehen, wenn ich sie manuell eingebe???

Grüße

Dimitri
Forum-Guru
Forum-Guru
Beiträge: 418
Registriert: Fr 22. Mär 2013, 16:50

Beitrag von Dimitri »

Mit anderen Worten:

Ich hätte gerne, dass die Klammern auch FETT sind...
\documentclass[12pt, pdftex, pointlessnumbers, twoside, openright, fleqn]{scrreprt}


\usepackage{a4}                            
\usepackage{amsmath}
\usepackage{amsthm}
\usepackage{array}
\usepackage[german]{babel}
\usepackage[german]{nomencl}                  

\makeatletter
\g@addto@macro{\thm@space@setup}{\thm@headpunct{:}}
\makeatother

\newtheorem*{Bew1}{Beweis}

\makeatletter
\let\@addpunct\@gobble
\makeatother

\newenvironment{Bew}{\begin{Bew1}~~~~}{\qed \end{Bew1}}


\begin{document}
\begin{Bew}
Zwischen \glqq Beweis\grqq ~und \glqq :\grqq ~will ich, ab und an, noch etwas schreiben können... (z.B.: "Beweis (Satz des Pythagoras):")
\end{Bew}
\end{document}

Dimitri
Forum-Guru
Forum-Guru
Beiträge: 418
Registriert: Fr 22. Mär 2013, 16:50

Beitrag von Dimitri »

Sry, falsches Minimalbeispiel...

Ich meine das hier:
\documentclass[12pt, pointlessnumbers, twoside, openright, fleqn]{scrreprt}


\usepackage{a4}                            
\usepackage{amsmath}
\usepackage{amsthm}
\usepackage{array}
\usepackage[ngerman]{babel}
\usepackage[german]{nomencl}                  

\makeatletter
\g@addto@macro{\thm@space@setup}{\thm@headpunct{:}}
\makeatother

\newtheorem*{Bew1}{Beweis}

\makeatletter
\let\@addpunct\@gobble
\makeatother

\newenvironment{Bew}[1][]{\begin{Bew1}[#1]~~~~}{\qed \end{Bew1}}


\begin{document}
\begin{Bew}[Satz des Pythagoras]
Zwischen \glqq Beweis\grqq ~und \glqq :\grqq ~will ich, ab und an, noch etwas schreiben können... (z.B.: "Beweis (Satz des Pythagoras):")
\end{Bew}

\end{document} 

Epllus
Forum-Guru
Forum-Guru
Beiträge: 470
Registriert: So 23. Sep 2012, 17:31

Beitrag von Epllus »

Dann würde ich sagen, ist Besserwissers zweite Lösung die richtige Wahl, da man ihn gut anpassen kann:
\documentclass[ 
  fontsize=12pt, 
  numbers=noenddot, 
  open=right, 
  twoside, 
  fleqn, 
  ngerman                   % globale Sprachoption 
]{scrreprt} 
\usepackage{babel}          % Sprache des Dokuments umschaltbar 
\usepackage{amsthm}         % Umgebungen für Theoreme und Beweise 

\makeatletter
\renewenvironment{proof}[1][\relax]{%
  \par\pushQED{\qed}% 
  \normalfont 
  \topsep 6pt plus 1pt\relax 
  \trivlist 
  \item[\hskip\labelsep 
    % Jetzt machen wir ein paar Änderungen für ein fettes "Beweise": 
    \textbf{\proofname} 
    % schauen ob es ein optionales Argument gibt: 
    \ifx\relax#1\relax\unskip\else 
    % zuerst fette Klammer auf, dann kursiver Text, dann fette Klammer zu.
    \textbf{(}\textit{#1}\textbf{)}\fi 
    % und dahinter wieder einen fetten Doppelpunkt statt eines Punktes. 
    \textbf{:}]% 
    % Ab hier wieder die Originaldefinition 
    \ignorespaces 
}{% 
  \popQED\endtrivlist\@endpefalse 
} 
\makeatother

\begin{document} 

\begin{proof} 
So sieht es aus, wenn man das optionale Argument nicht verwendet. 
\end{proof} 

\begin{proof}[Satz des Pythagoras] 
Und so geht es mit dem optionalen Argument. 
\end{proof} 
\end{document} 
Vielleicht mag der Code für sich etwas verwirrend sein, aber ihn anschauen und versuchen die wichtigen Teile rauszufinden lohnt sich.

Grüße
Epllus

Dimitri
Forum-Guru
Forum-Guru
Beiträge: 418
Registriert: Fr 22. Mär 2013, 16:50

Beitrag von Dimitri »

Geht das auch irgendwie mit meinem Beispiel, da ich ansonsten ziemlich viel ändern müsste (Ich habe eine Unmenger solcher Umgebungen... -.-).

Gibt es auch ne Möglichkeit den Abstand von "qed" manuell einzustellen, sodass er z.B. 4 Leerzeichen hinter dem Text steht???

Viele Grüße

Dimitri
Forum-Guru
Forum-Guru
Beiträge: 418
Registriert: Fr 22. Mär 2013, 16:50

Beitrag von Dimitri »

Kann ich solche Änderungen z.B. auch bei "theorem", etc. erzwingen???
\documentclass[
  fontsize=12pt,
  numbers=noenddot,
  open=right,
  twoside,
  fleqn,
  ngerman                   % globale Sprachoption
]{scrreprt}
\usepackage{babel}          % Sprache des Dokuments umschaltbar
\usepackage{amsthm}         % Umgebungen für Theoreme und Beweise

\makeatletter
\renewenvironment{proof}[1][\relax]{%
  \par\pushQED{\qed}%
  \normalfont
  \topsep 6pt plus 1pt\relax
  \trivlist
  \item[\hskip\labelsep
    % Jetzt machen wir ein paar Änderungen für ein fettes "Beweise":
    \textbf{\proofname}
    % schauen ob es ein optionales Argument gibt:
    \ifx\relax#1\relax\unskip\else
    % zuerst fette Klammer auf, dann kursiver Text, dann fette Klammer zu.
    \textbf{(}\textit{#1}\textbf{)}\fi
    % und dahinter wieder einen fetten Doppelpunkt statt eines Punktes.
    \textbf{:}]%
    % Ab hier wieder die Originaldefinition
    \ignorespaces
}{%
  \popQED\endtrivlist\@endpefalse
}
\makeatother

\begin{document}

\begin{proof}
So sieht es aus, wenn man das optionale Argument nicht verwendet.
\end{proof}

\begin{proof}[Satz des Pythagoras]
Und so geht es mit dem optionalen Argument.
\end{proof}

DAS IST NEU -->

\begin{theorem}[Theorem von Ali Baba]
das sollte auch möglich sein
\end{theorem}
\end{document}

Besserwisser

Beitrag von Besserwisser »

Dimitri hat geschrieben:JA, ich dachte halt, wenn ich alle die Pakete eingebe, dann könnt ihr Mir noch Verbesserungsvorschläge machen, was ich ändern oder weglassen sollte:
Gibts da noch was, was ihr anders machen würdet???
Du sollst nicht denken! Du sollst machen, was man Dir sagt!

Entsprechende Anmerkungen habe ich übrigens bereits in meinem ersten Kommentar geliefert.
Dimitri hat geschrieben:Kriegt man das auch hin, dass die Klammern z.B. bei "(" Satz des Pythagoras ")" NUR DANN stehen, wenn ich sie manuell eingebe???
Das ist in meinem ersten Beispiel in meinem letzten Kommentar der Fall.
Dimitri hat geschrieben:Geht das auch irgendwie mit meinem Beispiel, da ich ansonsten ziemlich viel ändern müsste (Ich habe eine Unmenger solcher Umgebungen... -.-)
Zum einen ist es mit einem ordentlichen Editor eine Sache von Sekunden alle Umgebungen mit Namen XYZ in Umgebungen mit Namen QVW zu ändern, zum anderen kannst Du natürlich statt \renewenvironment auch in meinem Beispiel \newenvironment verwenden und statt proof dann einen Namen der bis dahin hoch nicht vergeben ist. Du solltest nicht einfach nur abschreiben, sondern Dir dabei auch etwas denken! Spaß beiseite: Etwas mehr Eigenintiative in Richtung auch mal etwas ausprobieren bringt Dich sicher weiter, als Dir nur Lösungen vorkauen zu lassen, und nicht wissen zu wollen, wie es funktioniert! Und sei beruhigt. Ich habe in 20 Jahren noch nie erlebt, dass ein Computer wegen eines Fehlers in LaTeX explodiert.

Übrigens habe ich zu einer Zeit plainTeX gelernt, als das einzige Buch auf dem Markt "The TeXbook" war. Gelernt habe ich 50% durch Studium von Lösungen anderer mit gleichzeitigem Lesen im TeXbook und 50% durch schlichtes Ausprobieren. Später bei LaTeX war das dann erst einmal genauso. Heute sind Anfänger in der beneidenswerten Situation, dass sie sich nicht mehr mit plainTeX herumschlagen müssen und es (neben vielen schlechten) eine ganze Reihe sehr guter LaTeX-Bücher für Anfänger gibt. Trotzdem ist ausprobieren noch immer etwas, woran man einiges lernen kann. Natürlich sollte man sich die Mühe machen, den einen oder anderen Befehl in vorgekauten Lösungen nachzuschlagen. So würde ich beispielsweise inzwischen erwarten, dass Du weißt, was \textbf und \textit bewirken. Dazu muss man auch gar nicht lange suchen. Das steht einerseits in der LaTeX2e-Kurzbeschreibung (aka l2kurz) andererseits auch in "LaTeX2e font selection" (aka fntguide). Beides ist im Wiki in den wichtigen Netzdokumenten zu finden.
Dimitri hat geschrieben:Gibt es auch ne Möglichkeit den Abstand von "qed" manuell einzustellen, sodass er z.B. 4 Leerzeichen hinter dem Text steht???
Ich habe diesbezüglich in meinem letzten Kommentar bereits einen Hinweis geliefert. Ich muss mich hoffentlich nicht wiederholen …

Zu Deiner letzten Frage: Bitte lies endlich die Anleitung zu amsthm! Dort findest Du ein Beispiel lem, bei dem ebenfalls ein optionales Argument verwendet wird! Solange Du mit dem zufrieden bist, was bereits voreingestellt ist, oder was durch minimale Modifikation des \newtheoremstyle-Beispiels aus der amsthm-Anleitung mögloch ist, ist das kein Problem. Wenn man allerdings beispielsweise den optionalen Titel kursiv haben will, ohne jedes Mal im optionalen Argument ein \emph{…} oder \textit{…} zu setzen, dann wird es ein ganz klein wenig aufwändiger. Dann muss man entweder eine wrapper-Umgebung definieren:
\documentclass{article}
\usepackage{amsthm}
\newtheoremstyle{note}% (name)
{3pt}% (Space above)
{3pt}% (Space below)
{}% (Body font)
{}% (Indent amount)
{\bfseries}% (Theorem head font) BW: gändert
{:}% (Punctuation after theorem head)
{.5em}% (Space after theorem head)
{}% (Theorem head spec (can be left empty, meaning ‘normal’))

\theoremstyle{note}
\newtheorem{theoremx}{Theorem}
\newenvironment{theorem}[1][\relax]{%
  \ifx\relax#1\relax % Wenn das optionale Argument unverändert bzw. leer ist
    \theoremx[]% dann verwenden wir theoremx ebenfalls mit leerem optionalem
               % Argument
  \else % sonst
    \theoremx[{\normalfont\textit{#1}}]% mit optionalem Argument, wobei das
                                % optionale Argument gleich die gewünschte
                                % Formatierung für den Text mit bekommt.
  \fi
}{%
  \endtheoremx
}
\begin{document}

\begin{theorem}
Test
\end{theorem}

\begin{theorem}[Testtitel]
Test
\end{theorem}
\end{document}
oder aber man muss etwas tiefer in die Möglichkeiten von \newtheoremstyle eintauchen:
\documentclass{article}
\usepackage{amsthm}
\makeatletter%<-- Draufklicken für eine Erklärung
% Das folgende ist aus der amsthm-Anleitung weitgehend direkt übernommen
\newtheoremstyle{specialnote}% (name) BW: Name geändert
{3pt}% (Space above)
{3pt}% (Space below)
{}% (Body font)
{}% (Indent amount)
{\bfseries}% (Theorem head font) BW: gändert
{:}% (Punctuation after theorem head)
{.5em}% (Space after theorem head)
{% BW: geändert (und das ist wirklich etwas trickreich und würde ich von einem
 %               Anfänger nicht erwarten!)
  \the\thm@headfont% Das ist die Schrift, die drei Argumente zuvor eingestellt
                   % wurde. Weiß man aber nur, wenn man in den Code von amsthm
                   % geschaut hat. :-( Als Anfänger hätte ich hier schlicht direkt \bfseries
                   % hingeschrieben, was aber natürlich nicht ideal ist.
  #1% Das ist der Platzhalter für den den Umgebungstitle (z. B. `Theorem')
  \ifx\relax#2\relax\else% Wenn der Platzhalter für die Nummer nicht leer ist
    \ #2% erst ein Leerzeichen, dann die Nummer ausgeben
  \fi
  \ifx\relax#3\relax\else% Wenn der Platzhalter für den optionalen Titel nicht
                         % leer ist:
    \ (% ein Leerzeichen gefolgt von einer runden Klammer ausgeben
    \begingroup
      \normalfont% lokal zur Gruppe auf die normale Schrift (also nicht mehr
                 % \thm@headfont) umschalten
      \itshape% lokal zur Gruppe auf italic umschalten
      #3% den Platzhalter for den optionalen Titel ausgeben.
    \endgroup% Gruppe beenden und damit wieder \thm@headfont verwenden
    )% runde Klammer schließen
  \fi
}% (Theorem head spec (can be left empty, meaning ‘normal’))
\makeatother% siehe oben

\theoremstyle{specialnote}
\newtheorem{theorem}{Theorem}

\begin{document}

\begin{theorem}
Test
\end{theorem}

\begin{theorem}[Testtitel]
Test
\end{theorem}
\end{document}
Bei genauerem Hinsehen findet man ein paar kleine Unterschiede beim Ergebnis. Die resultieren eben daraus, dass man im zweiten Beispiel mehr Freiheiten hat. Will man die runden Klammern nicht immer, sondern sie ggf. im optionalen Argument mit angeben, dann ist ebenfalls die zweite Lösung der richtige Weg. Dort kann man die runden Klammern ja einfach bei \newtheoremstyle entfernen. Wie das geht? Einfach die Kommentare lesen, dann sollte sich die Antwort selbst für diejenigen ergeben, die den Code selbst nicht verstehen.

Das war jetzt aber das letzte Mal, dass ich Dir nicht nur eine Angel gegeben, sondern auch noch den Fisch aus dem Wasser gezogen habe. Letzteres machst Du bitte künftig selbst! Anderenfalls muss ich annehmen, dass meine Versuche, Dir etwas beizubringen, nicht fruchten. Dann müsste ich Dich zwecks fertiger Lösungen auf kostenpflichtigen Support verweisen.

Antworten