Ich versuche, eine Theoremumgebung zu konstruieren, die ungefähr so aussieht:
1.1 Theorem Statement of the theorem. Here is some extra text so you can see how the
theorem body text should be indented (aligned with theorem head).
Der Satzkopf sollte fett gedruckt sein und danach keine Satzzeichen enthalten. Der Abstand zwischen thmnumber
und thmname
sollte anpassbar sein. Fließtext normal.
Ich möchte die Umgebung auch für Definitionen verwenden können (die nicht nummeriert werden), daher sollte es möglich sein, die Nummer zu entfernen, ohne die Ausrichtung des Theoremkopfes zu beeinträchtigen. Beispiel:
Definition Statement of the definition. It should be aligned the same way as a
theorem.
Here is some body text in the document. Note that the theorem numbers are not in the
margin.
1.1 Theorem Statement of the theorem. Here is some extra text so you can see how the
theorem body text should be indented (aligned with theorem head).
Antwort1
Hier ist eine Möglichkeit, dies zu tun; dadurch werden auch Listen wie enumerate
in der Anweisung eingehalten, welche Lösungen dies \hangindent
nicht tun.
\documentclass{article}
\usepackage{showframe} % just for the example
\usepackage{amsthm}
\usepackage{enumitem}
\usepackage{xparse}
\usepackage{lipsum}
\newtheoremstyle{fctaylor}% name
{\topsep}% Space above
{\topsep}% Space below
{\normalfont}% Body font
{}% Indent amount (empty = no indent, \parindent = para indent)
{\bfseries}% Thm head font
{}% Punctuation after thm head
{0pt}% Space after thm head: " " = normal interword space;
{\makethmhead{#1}{#2}{#3}}
\newlength\fctaylortheoremindent
\AtBeginDocument{\setlength\fctaylortheoremindent{3em}} % <- customize here
\newlength\fctaylorlabelsep
\AtBeginDocument{\setlength\fctaylorlabelsep{1em}} % <- customize here
\makeatletter
\newcommand{\makethmhead}[3]{%
\gdef\thisthmhead{%
\makebox[\fctaylortheoremindent][l]{\bfseries#2}%
{\bfseries#1}%
\@ifnotempty{#3}{ (#3)}%
\hspace{\fctaylorlabelsep}%
}%
}
\makeatother
\newenvironment{fctayloritemize}
{\list{}{%
\leftmargin=\fctaylortheoremindent
\labelwidth=\dimexpr\fctaylortheoremindent-\labelsep\relax
\itemindent=0pt
}}
{\endlist}
\NewDocumentCommand{\newfctaylortheorem}{smomo}{%
\IfBooleanTF{#1}
{\newtheorem*{fctaylor@#2}{#4}}
{\IfNoValueTF{#3}
{\IfNoValueTF{#5}
{\newtheorem{fctaylor@#2}{#4}}
{\newtheorem{fctaylor@#2}{#4}[#5]}}
{\newtheorem{fctaylor@#2}[fctaylor@#3]{#4}}}%
\NewDocumentEnvironment{#2}{o}
{\IfNoValueTF{##1}{\begin{fctaylor@#2}}{\begin{fctaylor@#2}[##1]}%
\begin{fctayloritemize}\item[\thisthmhead\hfill]}
{\end{fctayloritemize}\end{fctaylor@#2}}%
}
\theoremstyle{fctaylor}
\newfctaylortheorem{thm}{Theorem}[section]
\newfctaylortheorem*{defn}{Definition}
\begin{document}
\section{One}
\begin{defn}
\lipsum*[2]
\end{defn}
\begin{thm}\label{A}
\lipsum*[2]
\end{thm}
\begin{thm}[Somebody]\label{B}
Something that should show how the text is split across line boundaries
and is correctly indented. And some equivalent conditions:
\begin{enumerate}[label=\upshape(\alph*),ref=(\alph*)]
\item a condition
\item another
\item and another
\end{enumerate}
which show the point made.
\end{thm}
\ref{A} and \ref{B}
\end{document}
Antwort2
Hier ist eine Möglichkeit mitthmtools
als Frontend füramsthm:
Der Code (passen Sie die Einstellungen Ihren Bedürfnissen an; ändern Sie sie insbesondere so, \thmindent
dass die gewünschte hängende Einrückung für die theoremartigen Strukturen erreicht wird):
\documentclass{article}
\usepackage{amsmath}
\usepackage{amsthm}
\usepackage{thmtools}
\usepackage{lipsum}
\newlength\thmindent
\setlength\thmindent{2.5em}
\declaretheoremstyle[
spaceabove=6pt,
spacebelow=6pt,
headfont=\normalfont\bfseries,
notefont=\normalfont\bfseries,
notebraces={(}{)},
bodyfont=\normalfont,
postheadspace=0.5em,
numberwithin=section,
headformat={\makebox[\thmindent]{\NUMBER\hfill}\NAME\NOTE},
postheadhook=\hangindent=\thmindent
]{nuswapindented}
\declaretheoremstyle[
spaceabove=6pt,
spacebelow=6pt,
headfont=\normalfont\bfseries,
notefont=\normalfont\bfseries,
notebraces={(}{)},
bodyfont=\normalfont,
postheadspace=0.5em,
numbered=no,
headformat={\makebox[\thmindent]{\mbox{}\hfill}\NAME\NOTE},
postheadhook=\hangindent=\thmindent
]{unnuswapindented}
\declaretheorem[style=nuswapindented,name=Theorem]{theo}
\declaretheorem[style=unnuswapindented,name=Definition]{defi}
\begin{document}
\section{Test section}
\lipsum[4]
\begin{defi}
\lipsum[4]
\end{defi}
\lipsum[4]
\begin{theo}
\lipsum[4]
\end{theo}
\end{document}
Antwort3
ntheorem
Dies ist mit dem Paket und seinem Theoremstil möglich change
. Der Abstand zwischen Theoremname und Theoremnummer kann durch Patchen des Änderungstheoremstils angepasst werden: Ich führe eine neue Dimension ein, thlabelsep
die standardmäßig 0.5em
in der Präambel festgelegt ist und geändert werden kann:
\documentclass{article}
\usepackage[utf8]{inputenc}
\usepackage{amsmath}
\usepackage[thmmarks, amsmath, thref]{ntheorem}
\usepackage{cleveref}
\newdimen\thlabelsep
\global\thlabelsep0.5em
\makeatletter
\renewtheoremstyle{change}%
{\item[\hskip\labelsep \theorem@headerfont ##2\hskip\thlabelsep##1\theorem@separator]}%
{\item[\hskip\labelsep \theorem@headerfont ##2\hskip\thlabelsep##1\ (##3)\theorem@separator]}
\makeatother
\theoremstyle{change}
\thlabelsep1.5em
\theoremheaderfont{\bfseries\upshape}
\theoremseparator{}
\theorembodyfont{\upshape}
\newtheorem{thm}{Theorem}[section]
\theoremstyle{nonumberplain}
\newtheorem{defn}{Definition}
\begin{document}
\section{Two Conjectures}
\begin{defn}
A Sophie Germain prime is a prime number $ p $ such that $ 2p + 1$ is also prime.
\end{defn}
\begin{thm}
There is an infinity of twin primes. Related: There is an infinity of Sophie Germain primes.
\end{thm}
\end{document}