Wie kann ich eine benutzerdefinierte Theoremumgebung *nur* auf verschachtelte Theoreme anwenden?

Wie kann ich eine benutzerdefinierte Theoremumgebung *nur* auf verschachtelte Theoreme anwenden?

Inein vorheriger Threadfragte ich nach der Möglichkeit, eine benutzerdefinierte Theoremumgebung zu definieren, deren QED-Symbol eine Boxversion des Namens/der Nummer/der Bezeichnung des Theorems wäre. Dort wurde mir freundlicherweise die folgende Lösung angeboten:

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

Das Ergebnis dieses Codes ist wie folgt: Bildbeschreibung hier eingeben

Ist es möglich, den gegebenen Code so zu ändern, dass „Verschachtelung erkannt“ wird, d. h. so, dass die Theoreme/Lemmas/Propositionen auf der „obersten Ebene“ (nicht verschachtelt) ihr übliches QED-Symbol behalten, während die Theoreme/Lemmas/Propositionen auf den nachfolgenden Ebenen (diejenigen, die in denen der obersten Ebene verschachtelt sind) als solche mit QED-Symbolen gekennzeichnet werden, die die eingerahmten Namen/Nummern/Beschriftungen der Theoreme/Lemmas/Propositionen sind?

Abgesehen vom obigen Code habe ich kein MWE, weil ich buchstäblich keine Ahnung habe, wie man so etwas codiert. Ich habe ein paar andere Foren zu TeX.SX gefunden (HierUndHier), die sich mit der Formatierung verschachtelter Umgebungen befassen, aber ich war nie in der Lage, den Code, den ich habe, an den darin bereitgestellten Code anzupassen.

Für jede Hilfe wäre ich sehr dankbar.

Antwort1

Die Idee besteht darin, eine Bedingung hinzuzufügen, die wahr ist, wenn ein Beweis beginnt, und den Code entsprechend zu ändern: Wenn die Bedingung falsch ist, führen wir keine Verschachtelung durch und setzen daher auf \qed@current, \qed@emptyandernfalls verwenden wir denselben Mechanismus wie in der anderen Antwort.

\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
       \ifqed@inproof
         \xdef\qed@current{#2}%
       \else
         \global\let\qed@current\qed@empty
       \fi}%
    \@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\protect\qed@thiscurrent}%
  \fi
}
\renewcommand{\proofname}{%
  Proof%
  \ifx\qed@thiscurrent\qed@empty
  \else
    \ of \qed@thiscurrent
  \fi
}
\newif\ifqed@inproof
\xpretocmd{\proof}{\let\qed@thiscurrent\qed@current\qed@inprooftrue}{}{}
\newenvironment{proof*}[1]
  {\def\qed@thiscurrent{\ref{#1}}\proof}
  {\endproof}
\def\debug{\show\qed@thiscurrent}
\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}

Bildbeschreibung hier eingeben

verwandte Informationen