Estou tentando construir um ambiente de teorema que se pareça aproximadamente com isto:
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).
O cabeçalho do teorema deve estar em negrito, sem pontuação depois. O espaçamento entre thmnumber
e thmname
deve ser ajustável. Corpo do texto normal.
Quero poder usar o ambiente também para definições (que não serão numeradas), portanto, deve ser possível remover o número sem afetar o alinhamento do cabeçalho do teorema. Exemplo:
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).
Responder1
Aqui está uma maneira de fazer isso; isso também obedecerá a listas como enumerate
na declaração, cujas soluções \hangindent
não obedecerão.
\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}
Responder2
Aqui está uma possibilidade usandothmtools
como front-end paraamsthm:
O código (ajuste as configurações de acordo com suas necessidades; em particular, altere \thmindent
para obter o recuo deslocado desejado para as estruturas semelhantes a teoremas):
\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}
Responder3
Isso pode ser feito com o ntheorem
pacote e seu change
estilo de teorema. O espaçamento entre o nome do teorema e o número do teorema pode ser ajustado corrigindo o estilo do teorema de mudança: Introduzo uma nova dimensão, thlabelsep
cujo padrão é 0.5em
e pode ser alterado no preâmbulo:
\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}