
Ich frage mich, ob es eine relativ einfache Möglichkeit gibt, ein Ergebnis ähnlich dem folgenden zu erzielen:
Insbesondere möchte ich in der Lage sein, Theoremen/Lemmas/Propositionen Namen und/oder Nummern zuzuweisen und dann das Standard-QED-Symbol dieses Theorems/Lemmas/dieser Proposition durch eine skizzierte Version des Namens/der Nummer des Theorems/Lemmas/der Proposition zu ersetzen.
Ich habe hier kein minimales funktionierendes Beispiel, da meine Kenntnisse über das Ändern von Theoremumgebungen leider so gering sind, dass ich nicht die geringste Ahnung habe, wie ich anfangen soll. Ich wäre für jeden Vorschlag sehr dankbar.
Antwort1
Dies bewirkt, was Sie möchten, ich finde es allerdings umständlich und nicht wirklich informativ.
\documentclass{book}
\usepackage{amsthm,xpatch}
\makeatletter
\let\qed@empty\openbox % <--- change here, if desired
\def\@begintheorem#1#2[#3]{%
\deferred@thm@head{%
\the\thm@headfont\thm@indent
\@ifempty{#1}
{\let\thmname\@gobble}
{\let\thmname\@iden}%
\@ifempty{#2}
{\let\thmnumber\@gobble\global\let\qed@current\qed@empty}
{\let\thmnumber\@iden\xdef\qed@current{#2}}%
\@ifempty{#3}
{\let\thmnote\@gobble}
{\let\thmnote\@iden}%
\thm@swap\swappedhead
\thmhead{#1}{#2}{#3}%
\the\thm@headpunct\thmheadnl\hskip\thm@headsep
}\ignorespaces
}
\renewcommand{\qedsymbol}{%
\ifx\qed@thiscurrent\qed@empty
\qed@empty
\else
\fbox{\scriptsize\qed@thiscurrent}%
\fi
}
\renewcommand{\proofname}{%
Proof%
\ifx\qed@thiscurrent\qed@empty
\else
\ of \qed@thiscurrent
\fi
}
\xpretocmd{\proof}{\let\qed@thiscurrent\qed@current}{}{}
\newenvironment{proof*}[1]
{\def\qed@thiscurrent{\ref{#1}}\proof}
{\endproof}
\makeatother
\newtheorem{thm}{Theorem}[section]
\newtheorem{lem}[thm]{Lemma}
\newtheorem*{nthm}{Theorem}
\begin{document}
\chapter{Title}
\section{Title}
\begin{thm}
Pigs can fly.
\end{thm}
\begin{proof}
Would you doubt it?
\end{proof}
\begin{nthm}
Unnumbered.
\end{nthm}
\begin{proof}
What should we say?
\end{proof}
The following theorem will be proved later.
\begin{thm}\label{thm:later}
$P=NP$.
\end{thm}
Long text here.
\begin{proof*}{thm:later}
Oh, well! Should I really do it? We'll use the following lemma.
\begin{lem}
Something surely can fly.
\end{lem}
\begin{proof}
Clear.
\end{proof}
Now use the lemma and apply the well known identity
\[
1=0.\qedhere
\]
\end{proof*}
\end{document}
Wenn sich ein Beweis verzögert, verwenden Sie die proof*
Umgebung, die als Argument das im relativen Theorem verwendete Label verlangt.
Wie Sie sehen, können Beweise verschachtelt werden. Ich habe nur einen verschachtelten Beweis innerhalb eines „verzögerten“ Beweises gezeigt, aber Sie können überprüfen, ob er auch mit der Standardumgebung funktioniert proof
.
Einige erklärende Worte.
Zuerst ändere ich die Definition von , \@begintheorem
um ein paar Einstellungen hinzuzufügen. Wenn der Satz nicht nummeriert ist, setze ich (global, weil wir uns bereits in einer Umgebung befinden) \qed@current
auf \qed@empty
(was als Standard-QED-Symbol definiert ist, wir werden später sehen, warum); wenn der Satz nummeriert ist, setze ich \xdef\qed@current{#2}
, weil #2
die Satznummer enthält (aber nicht in expliziter Form, daher muss sie vollständig erweitert werden).
Falls die Theoremnummern Formatierungsanweisungen enthalten oder unterschiedliche Zahlensysteme verwendet werden ( babel
z. B. griechische Ziffern mit ), sollte dies
\protected@edef\@tempa{#2}\global\let\qed@current\@tempa
um Probleme zu vermeiden. In Standardeinstellungen in Englisch sollte dies nicht erforderlich sein.
Abgesehen von diesen beiden Änderungen \@begintheorem
ist es dasselbe wie das Original.
Dann definiere ich neu \qedsymbol
. Es vergleicht \qed@thiscurrent
mit \qed@empty
; wenn es gleich ist, setzt es das Standardsymbol, andernfalls setzt es
\fbox{\scriptsize\qed@thiscurrent}
weil, wie wir sehen werden, \qed@thiscurrent
die Nummer des aktuell bewiesenen Theorems enthält.
Außerdem \proofname
wird es neu definiert, um „von <number>
“ hinzuzufügen \qed@thiscurrent
, wenn der zuletzt angegebene Satz nummeriert ist.
Die proof
Umgebung wird geändert, um (lokal) \qed@thiscurrent
auf zu setzen \qed@current
; schließlich proof*
wird definiert, dass es wie folgt funktioniert, proof
die Nummer jedoch mit abgerufen wird \ref
.
Der Fall einer einfachen proof
Befolgung eines Theorems ist einfach: \qed@thiscurrent
enthält die Theoremnummer. Dasselbe gilt für proof*
.
Befindet sich eine proof
Umgebung innerhalb einer anderen proof
, wird die Anweisung global zurückgesetzt \qed@current
. Dies hat jedoch keine Auswirkungen \qed@thiscurrent
auf das Ende des Hauptbeweises, da \qed@thiscurrent
der verschachtelte Beweis lokal festgelegt wird und den lokalen Wert auf den vorherigen Wert \end{proof}
zurücksetzt .\qed@thiscurrent
Antwort2
Wenn wir dieamsthamPaket, dann können wir dies tun, indem wir den \qedsymbol
Befehl kapern und die Art und Weise hacken, wie die Theoremumgebungen intern erstellt werden. Dies läuft darauf hinaus, Code zum \@begintheorem
Überschreiben hinzuzufügen \qedsymbol
, sodass es zu einer Box-Version der letzten Theoremnummer wird.
Es gibt zwei Probleme mit dem folgenden Code. Das erste ist, dass das \qedsymbol
verloren gegangen ist - Sie können jedoch \realqedsymbol
stattdessen verwenden.
Das zweite Problem ist, dass, wenn Sie beispielsweise einen Satz formulieren und dann in der Mitte des Beweises ein weiteres Lemma beweisen, bevor Sie zum Hauptergebnis zurückkehren, die letzte eingerahmte Zahl falsch sein wird. Die einfachste Lösung hierfür ist wahrscheinlich die Definition eines Befehls wie
\newcommand\QedSymbol[1]{\gdef\qedsymbol{\fbox{\ref{#1}}}}
zum manuellen Setzen \qedsymbol
eines Boxbefehls \ref
. Um dies zu verwenden, müssten Sie nur schreiben, \label{MyWondrousTheorem}
dass Sie einen Verweis auf Ihren (wunderbaren) Satz hinzufügen und ihn dann \Qedsymbol{MyWondrousTheorem}
vor dem Ende des Beweises verwenden.
Wenn die theoremähnliche Umgebung keine Theoremnummer hat, \qedsymbol
wird auf zurückgegriffen \realqedsymbol
, das reelle \qedsymbol
.
Ich habe das nicht ausführlich getestet, daher ist es möglich, dass etwas kaputt geht oder dass es andere Sonderfälle gibt, in denen es nicht funktioniert.
Hier ist der Code.
\documentclass{article}
\usepackage{amsmath,amsthm}
\makeatletter% the hack to change the qedsymbol automatically
\let\@@begintheorem=\@begintheorem% save real AMS theorem environment
\let\realqedsymbol\qedsymbol
\def\@begintheorem#1#2[#3]{%
\@@begintheorem{#1}{#2}[#3]% start the theorem
\@ifempty{#2}{\let\qedsymbol\realqedsymbol}{\gdef\qedsymbol{\fbox{#2}}}
}
\makeatother
\swapnumbers\numberwithin{equation}{section}
\newtheorem{Proposition}[equation]{Proposition}
\newtheorem{Lemma}[equation]{Lemma}
\begin{document}
\section{Important facts}
\begin{Lemma}
$1+1=2$
\end{Lemma}
\begin{proof}Count.
\end{proof}
\begin{Proposition}
$1+3=4$
\end{Proposition}
\begin{proof}Count more carefully.
\end{proof}
\begin{Proposition}
$2+2=4$
\end{Proposition}
\begin{proof}Count more carefully.
\end{proof}
\end{document}
\documentclass{article}
\usepackage{amsmath,amsthm}
\makeatletter
\let\@@begintheorem=\@begintheorem% save real AMS theorem environment
\let\@qedsymbol\qedsymbol
\def\@begintheorem#1#2[#3]{%
\@@begintheorem{#1}{#2}[#3]% start the theorem
\@ifempty{#2}{\let\qedsymbol\@qedsymbol}{\gdef\qedsymbol{\fbox{#2}}}
}
\makeatother
\swapnumbers\numberwithin{equation}{section}
\newtheorem{Proposition}[equation]{Proposition}
\newtheorem{Lemma}[equation]{Lemma}
\begin{document}
\section{Important facts}
\begin{Lemma}
$1+1=2$
\end{Lemma}
\begin{proof}Count.
\end{proof}
\begin{Proposition}
$1+3=4$
\end{Proposition}
\begin{proof}Count more carefully.
\end{proof}
\begin{Proposition}
$2+2=4$
\end{Proposition}
\begin{proof}Count more carefully.
\end{proof}
\end{document}
Eine andere Möglichkeit, dies zu tun und das Problem mit einem Zwischenergebnis mitten in einem Beweis zu beheben, wäre, es \qedsymbol
am Anfang der Beweisumgebung neu zu definieren. Dieser Ansatz wäre jedoch nur möglich, wenn alle theoremähnlichen Umgebungen denselben Zähler verwenden würden (wie in meinem MWE). Der obige Code hat den Vorteil, dass er auch dann funktioniert (sollte?:), wenn verschiedene theoremähnliche Umgebungen unterschiedliche Zähler verwenden.
Antwort3
Dies ist eine Anpassung dessen, was ich in der Vergangenheit verwendet habe (ich bin nicht sicher, woher ich es habe):
Code:
\documentclass{article}
\usepackage{amsmath}
\newcommand*{\QED}[1]{%
\ifmmode% Check for math mode.
\tag*{\fbox{#1}}%
\else%
{\rightskip\fill\parfillskip-\rightskip%
\linepenalty100%
\exhyphenpenalty0%
\linebreak[0] % <-- Need space here (allows for a break.
\hspace*{\fill}\fbox{#1}}%
\fi%
}%
\begin{document}
In text mode you can use \verb|QED| as shown here.\QED{2.2}
You can also use it in math mode
\begin{align*}
F &= ma \\
\implies E &= mc^2\QED{2.3}
\end{align*}
\end{document}
Antwort4
Das ntheorem
Paket ermöglicht eine ganz einfache Neudefinition \qedsymbol
. In Kombination mit xparse
definiere ich eine Proof
Umgebung, die zwei optionale Argumente annehmen kann: Das erste ist das optionale Argument einer klassischen Beweisumgebung, aber durch Klammern abgegrenzt; das zweite optionale Argument ist das Symbol für das Ende des Beweises, das standardmäßig ein Quadrat ist, aber ein Verweis auf den bewiesenen Satz sein kann (tatsächlich jeder Verweis oder jeder Text). Im letzteren Fall habe ich mich entschieden, es in ein zu setzen \fcolorbox
.
Beispiel:
\documentclass[A4paper]{article}
\usepackage[utf8]{inputenc}
\usepackage[svgnames]{xcolor}
\usepackage{amsfonts,empheq}
\usepackage[amsmath, thref, thmmarks]{ntheorem}
\usepackage{cleveref}
\usepackage{xparse}
\usepackage{chngcntr}
\theoremstyle{plain}
\theoremseparator{.} \theoremheaderfont{\bfseries}
\theorembodyfont{\itshape}
\newtheorem{Thm}{Theorem}[section]
\newtheorem{Lem}{Lemma}%[section]
\theoremstyle{nonumberplain}
\theoremheaderfont{\itshape}
\theorembodyfont{\upshape}
\newtheorem{proof}{Proof}
\NewDocumentEnvironment{Proof}{d() o}
{\IfNoValueTF{#1}{\begin{proof}}{\begin{proof}[#1]}
\IfNoValueTF{#2}{\qedsymbol{\ensuremath{\Box}}}{\qedsymbol{\fcolorbox{red}{Lavender}{\color{red}\upshape#2}}}}%
{\qed\end{proof}}%
\counterwithin{Lem}{Thm}
\begin{document}
\section{Some Not So Standard Results}
\begin{Thm}\label{special}
$ \mathrm{SL}_n(\mathbb{K}) ⊂ \mathrm{ GL}_n(\mathbb{K})$.
\end{Thm}
\begin{Proof}[\Cref{special}]
We shall prove first:
\begin{Lem}\label{basic}
$ \mathrm{SL}_n(\mathbb{K}) ⊂ \mathrm{ GL}_n(\mathbb{K})$.
\end{Lem}
%% First proof of lemma
\begin{Proof}(of the lemma)[\Cref{basic}]
Easy enough.
\end{Proof}
%% Second proof of lemma
\begin{Proof}(another one)
Still easier proof.
\end{Proof}
%% End of theorem proof
Left as an exercise ;\,o)
\end{Proof}
\end{document}