Wie verwende ich den eingerahmten Theoremnamen als QED-Symbol?

Wie verwende ich den eingerahmten Theoremnamen als QED-Symbol?

Ich frage mich, ob es eine relativ einfache Möglichkeit gibt, ein Ergebnis ähnlich dem folgenden zu erzielen:

Bildbeschreibung hier eingeben

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.

Bildbeschreibung hier eingeben

Einige erklärende Worte.

Zuerst ändere ich die Definition von , \@begintheoremum ein paar Einstellungen hinzuzufügen. Wenn der Satz nicht nummeriert ist, setze ich (global, weil wir uns bereits in einer Umgebung befinden) \qed@currentauf \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 #2die 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 ( babelz. 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 \@begintheoremist es dasselbe wie das Original.

Dann definiere ich neu \qedsymbol. Es vergleicht \qed@thiscurrentmit \qed@empty; ​​wenn es gleich ist, setzt es das Standardsymbol, andernfalls setzt es

\fbox{\scriptsize\qed@thiscurrent}

weil, wie wir sehen werden, \qed@thiscurrentdie Nummer des aktuell bewiesenen Theorems enthält.

Außerdem \proofnamewird es neu definiert, um „von <number>“ hinzuzufügen \qed@thiscurrent, wenn der zuletzt angegebene Satz nummeriert ist.

Die proofUmgebung wird geändert, um (lokal) \qed@thiscurrentauf zu setzen \qed@current; schließlich proof*wird definiert, dass es wie folgt funktioniert, proofdie Nummer jedoch mit abgerufen wird \ref.

Der Fall einer einfachen proofBefolgung eines Theorems ist einfach: \qed@thiscurrententhält die Theoremnummer. Dasselbe gilt für proof*.

Befindet sich eine proofUmgebung innerhalb einer anderen proof, wird die Anweisung global zurückgesetzt \qed@current. Dies hat jedoch keine Auswirkungen \qed@thiscurrentauf das Ende des Hauptbeweises, da \qed@thiscurrentder 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 \qedsymbolBefehl 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.

Bildbeschreibung hier eingeben

Es gibt zwei Probleme mit dem folgenden Code. Das erste ist, dass das \qedsymbolverloren gegangen ist - Sie können jedoch \realqedsymbolstattdessen 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 \qedsymboleines 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, \qedsymbolwird 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 \qedsymbolam 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):

Bildbeschreibung hier eingeben

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 ntheoremPaket ermöglicht eine ganz einfache Neudefinition \qedsymbol. In Kombination mit xparsedefiniere ich eine ProofUmgebung, 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} 

Bildbeschreibung hier eingeben

verwandte Informationen