如何操作定理正文缩进(使用 amsthm 包)?

如何操作定理正文缩进(使用 amsthm 包)?

我想创建以下格式来总结假设(我正在使用report文档类):

Body text. Body text. Body text. Body text. Body text. Body text. Body text. Body text. 

     Hypothesis 1 Lorem ipsum dolor sit amet, consectetur adipiscing elit.
     Phasellus iaculis imperdiet blandit. 

Body text. Body text. Body text. Body text. Body text. Body text. Body text. Body text. 

到目前为止,这是我已经想出的办法(我正尝试使用软件包来实现amsthm):

\documentclass[11pt]{report}
\usepackage[bottom=2cm, top=2cm, left=3cm, right=2cm]{geometry}
\usepackage{lipsum}

\usepackage{amsthm} 
\newtheoremstyle{hypothesis}
    {5pt}
    {5pt}
    {\itshape} 
    {1cm} 
    {\bfseries} 
    {} 
    {.5em}
    {}
\theoremstyle{hypothesis}
\newtheorem{hypo}{Hypothesis}

\begin{document}
\lipsum[1]

\begin{hypo}
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Phasellus iaculis imperdiet blandit.
\end{hypo}

\lipsum[2]
\end{document}

其结果如下:

在此处输入图片描述

如您所见,我几乎已经完成了。我现在唯一需要做的就是假设正文具有与假设头相同的缩进(即,当假设正文继续在新行上时,该行必须从假设头开始的同一位置开始)。

我觉得这应该很简单,但我似乎无法弄清楚。任何帮助都将不胜感激。

答案1

修改https://tex.stackexchange.com/a/106582/4427

\documentclass[a4paper]{scrartcl}
\usepackage{amsthm,thmtools}
\usepackage{etoolbox}
\usepackage{lipsum}
\usepackage{showframe}

\makeatletter
\patchcmd\@thm
  {\trivlist}
  {\list{}{\theoremmargins}}
  {}{}
\newcommand{\xdeclaretheorem}[2][]{%
  \declaretheorem[#1]{#2}%
  \expandafter\patchcmd\csname thmt@original@end#2\endcsname
    {\endtrivlist}{\endlist}{}{}%
}
\newcommand{\theoremmargins}{\leftmargin=0pt}
\newcommand{\theoremindent}{\leftmargin=2.5em\rightmargin=2.5em}

\declaretheoremstyle[
  headfont=\bfseries,
  bodyfont=\itshape,
  headindent=0pt,
]{INDENTthm}

\xdeclaretheorem[
  preheadhook=\let\theoremmargins\theoremindent,
  within=section,
  style=INDENTthm,
  name=Hypothesis
]{hyp}

\declaretheorem[
  style=plain,
  name=Theorem
]{thm}

\begin{document}
\lipsum[1]
\begin{thm}
\lipsum*[2]
\begin{enumerate}
\item a
\item b
\end{enumerate}
\end{thm}
\lipsum[2]
\begin{hyp}
\lipsum*[2]
\begin{enumerate}
\item a
\item b
\end{enumerate}
\end{hyp}
\end{document}

像往常一样,showframe只是为了显示文本块边界。

在此处输入图片描述

答案2

使用 来做到这一点非常简单ntheorem;有一个预定义的长度\theoremindent

\documentclass[11pt]{report}
\usepackage[bottom=2cm, top=2cm, left=3cm, right=2cm]{geometry}
\usepackage{amsmath}
\usepackage{lipsum}

\usepackage[thmmarks, amsmath, thref]{ntheorem}
\theoremstyle{plain}
\theoremseparator{.}
\theoremindent1\parindent
\newtheorem{hypo}{Hypothesis}

\begin{document}
\lipsum[1]

\begin{hypo}
  Lorem ipsum dolor sit amet, consectetur adipiscing elit. Phasellus iaculis imperdiet blandit.
\end{hypo}

\lipsum[2]
\end{document} 

在此处输入图片描述

相关内容