Как использовать название теоремы в рамке в качестве символа QED?

Как использовать название теоремы в рамке в качестве символа QED?

Мне интересно, есть ли относительно простой способ добиться результата, подобного следующему:

введите описание изображения здесь

В частности, я хотел бы иметь возможность присваивать имена и/или номера теоремам/леммам/предложениям, а затем заменять стандартный символ КЭД этой теоремы/леммы/предложения на структурированную версию имени/номера теоремы/леммы/предложения.

У меня нет минимального рабочего примера, потому что, к сожалению, мои знания об изменении сред теорем достаточно низки, и я не имею ни малейшего понятия, как начать. Любые предложения будут высоко оценены.

решение1

Это делает то, что вам нужно, хотя я нахожу это громоздким и не очень информативным.

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

Если доказательство задерживается, используйте proof*среду, которая хочет в качестве аргумента метку, использованную в относительной теореме.

Как видите, доказательства могут быть вложенными. Я показал только вложенное доказательство внутри «отложенного» доказательства, но вы можете проверить, что оно работает и в стандартной proofсреде.

введите описание изображения здесь

Несколько слов пояснения.

Сначала я изменяю определение, чтобы \@begintheoremдобавить пару настроек. Если теорема не пронумерована, я устанавливаю (глобально, потому что мы уже в среде) \qed@currentв \qed@empty(который определен как стандартный символ QED, позже мы увидим почему); если теорема пронумерована, я делаю \xdef\qed@current{#2}, потому что #2содержит номер теоремы (но не в явной форме, поэтому нужно полностью его развернуть).

В случае, если номера теорем содержат инструкции по форматированию или когда используются разные системы счисления ( babelнапример, греческие цифры с ), это следует

\protected@edef\@tempa{#2}\global\let\qed@current\@tempa

чтобы избежать проблем. В стандартных английских настройках это не должно быть необходимо.

За исключением этих двух изменений, \@begintheoremон такой же, как и оригинал.

Затем я переопределяю \qedsymbol. Он сравнивается \qed@thiscurrentс \qed@empty; если он тот же, он набирает стандартный символ, в противном случае он набирает

\fbox{\scriptsize\qed@thiscurrent}

поскольку, как мы увидим, \qed@thiscurrentсодержит номер доказываемой в данный момент теоремы.

Также \proofnameпереопределено добавление «of <number>», \qed@thiscurrentесли последняя сформулированная теорема пронумерована.

Окружение proofизменено для установки (локально) \qed@thiscurrentзначения \qed@current; наконец, proof*определено, чтобы делать то же самое, proofно извлекать число с помощью \ref.

Случай простого proofследования теореме прост: \qed@thiscurrentбудет содержать номер теоремы. То же самое для proof*.

Если proofсреда находится внутри другой proof, оператор будет сброшен глобально \qed@current, но это не повлияет \qed@thiscurrentна конец основного доказательства, поскольку \qed@thiscurrentвложенное доказательство устанавливается локально и \end{proof}вернет локальное \qed@thiscurrentзначение к предыдущему.

решение2

Если мы используемамстмpackage, то мы можем сделать это, перехватив \qedsymbolкоманду и взломав способ, которым среды теоремы конструируются внутри. Это сводится к добавлению некоторого кода для \@begintheoremперезаписи \qedsymbol, чтобы он стал коробочной версией последнего номера теоремы.

введите описание изображения здесь

В коде ниже есть две проблемы. Первая заключается в том, что \qedsymbolбыл утерян - но \realqedsymbolвместо этого вы можете использовать.

Вторая проблема заключается в том, что если вы, скажем, утверждаете одну теорему, а затем доказываете другую лемму в середине доказательства, прежде чем вернуться к основному результату, то последнее число в рамке будет неверным. Простейшим решением для этого, вероятно, будет определение команды типа

\newcommand\QedSymbol[1]{\gdef\qedsymbol{\fbox{\ref{#1}}}}

для ручной установки \qedsymbolэквивалента упакованной \refкоманде. Чтобы использовать это, вам просто нужно написать, \label{MyWondrousTheorem}чтобы добавить ссылку на вашу (замечательную) теорему, а затем использовать \Qedsymbol{MyWondrousTheorem}перед концом доказательства.

Если в среде, подобной теореме, нет номера теоремы, то \qedsymbolвозвращается к \realqedsymbol, реальному \qedsymbol.

Я не тестировал это подробно, поэтому вполне возможно, что это что-то сломает или есть другие особые случаи, когда это не работает.

Вот код.

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

Другой способ сделать это, который исправил бы проблему с промежуточным результатом, появляющимся в середине доказательства, — переопределить \qedsymbolв начале среды доказательства. Однако этот подход был бы возможен только в том случае, если бы все среды, подобные теоремам, использовали один и тот же счетчик (как в моем MWE). Преимущество кода выше в том, что он будет (должен?:) работать, даже если разные среды, подобные теоремам, используют разные счетчики.

решение3

Это адаптировано из того, что я использовал в прошлом (не уверен, откуда я это взял):

введите описание изображения здесь

Код:

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

решение4

Пакет ntheoremпозволяет переопределять \qedsymbolдовольно просто. Объединяя с xparse, я определяю Proofокружение, которое может принимать два необязательных аргумента: первый — необязательный аргумент классического окружения доказательства, но ограниченный скобками ; второй необязательный аргумент — символ конца доказательства, который по умолчанию представляет собой квадрат, но может быть ссылкой на доказанную теорему (на самом деле, любую ссылку или любой текст). В последнем случае я решил поместить его в \fcolorbox.

Пример:

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

введите описание изображения здесь

Связанный контент