사용자 정의 정리 환경을 중첩 정리*에만* 적용하려면 어떻게 해야 합니까?

사용자 정의 정리 환경을 중첩 정리*에만* 적용하려면 어떻게 해야 합니까?

~ 안에이전 스레드, 나는 QED 기호가 정리 이름/번호/레이블의 박스 버전이 되는 사용자 정의 정리 환경을 정의할 가능성에 대해 물었습니다. 그곳에서 나는 다음과 같은 해결책을 친절하게 제공받았습니다.

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

해당 코드의 결과는 다음과 같습니다. 여기에 이미지 설명을 입력하세요

"중첩을 감지"하는 방식, 즉 "최상위"(중첩되지 않은)의 정리/기본형/명제는 일반적인 QED 기호를 유지하는 반면 정리/기본형/명제는 일반 QED 기호를 유지하는 방식으로 주어진 코드를 수정하는 것이 가능합니까? 후속 수준(최상위 수준에 중첩된 수준)은 정리/기본형/명제의 상자 이름/번호/레이블인 QED 기호로 지정됩니다.

위의 코드를 제외하고는 MWE가 없습니다. 왜냐하면 저는 문자 그대로 이러한 코드를 어떻게 작성해야 할지 전혀 모르기 때문입니다. 저는 TeX.SX에서 몇 가지 다른 포럼을 찾았습니다(여기그리고여기) 중첩된 환경의 서식 지정을 처리하지만 거기에 제공된 코드에 내가 가지고 있는 코드를 적용할 수 없었습니다.

어떤 도움이라도 대단히 감사하겠습니다.

답변1

아이디어는 증명이 시작될 때 참인 조건을 추가하고 그에 따라 코드를 변경하는 것입니다. 조건이 거짓이면 중첩되지 않으므로 로 설정하고 \qed@current, \qed@empty그렇지 않으면 다른 답변과 동일한 메커니즘을 사용합니다.

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

여기에 이미지 설명을 입력하세요

관련 정보