我想定义一个具有自定义布局的定理环境。特别是,我希望定理的主体缩进,就像这样
Text body. Text body. Text body.
Theorem 1 (Pythagoras).
Let a,b,c the sides of a rectangular triangle.
Without loss of generality, we assume that a<b<c .
Then, the following equality holds:
a^2 + b^2 = c^2
More text. And even more text.
quote
我相信,这与环境是相似的。
我怎样才能做到这一点?
最好,我想使用现有的\newtheorem
命令,但这不是强制性的。
答案1
由于您想使用标准 LaTeX 定理命令,这里有一个解决方案:让我们\newline\quote
在定理的开头和\endquote
结尾插入。一个完整的可编译示例:
\documentclass{article}
\makeatletter
\def\@begintheorem#1#2{\trivlist
\item[\hskip \labelsep{\bfseries #1\ #2}]\mbox\newline\quote\itshape}
\def\@opargbegintheorem#1#2#3{\trivlist
\item[\hskip \labelsep{\bfseries #1\ #2\ (#3)}]\mbox\newline\quote\itshape}
\def\@endtheorem{\endquote\endtrivlist}
\makeatother
\newtheorem{thm}{Theorem}
\begin{document}
\section*{The Theorem of Pythagoras}
Text body. Text body. Text body.
\begin{thm}[Pythagoras]
Let $a,b,c$ the sides of a rectangular triangle.
Without loss of generality, we assume that $a<b<c$ .
Then, the following equality holds:
\[a^2 + b^2 = c^2\]
\end{thm}
More text. And even more text.
\end{document}
输出:
这是您的起点。您可以插入有关间距和格式的其他命令。例如,您可能会注意到我\mbox
之前使用\newline
来获得换行符 - 如果我\mbox{}
改为写,则会有更多空间,如果我省略它,则此时不能换行(或使用\leavevmode
)。简单地写\par
而不是\newline
是行不通的。
您也可以考虑使用以下有用的定理包之一:
两者都提供自定义定理布局的命令。
答案2
我只是这样做了(使用amsthm
):
\newtheoremstyle{indenteddefinition}{\topsep}{\topsep}{\hangindent=2em}{}{}{}{.5em}{}
但这只适用于一个段落。更好的是:
\newtheoremstyle{indenteddefinition}{.5\topsep}{.5\topsep}{\addtolength{\leftskip}{2.5em}}{-2.5em}{}{}{ }{}
但我意识到这并不嵌套。
答案3
我用过ntheorem
我的答案。您可能想查看手册的第 7 页(预定义定理样式)。
\documentclass[a4paper]{scrartcl}
\usepackage{amssymb, amsmath} % needed for math
\usepackage[utf8]{inputenc} % this is needed for umlauts
\usepackage[ngerman]{babel} % this is needed for umlauts
\usepackage[T1]{fontenc} % this is needed for correct output of umlauts in pdf
\usepackage{ntheorem}
\theoremstyle{break}
\theoremindent20pt
\theoremheaderfont{\normalfont\bfseries\hspace{-\theoremindent}}
\newtheorem{theorem}{Theorem}
\begin{document}
Text body. Text body. Text body.
\begin{theorem}[Pythagoras]
Let $a,b,c$ the sides of a rectangular triangle.
Without loss of generality, we assume that $a<b<c$.
Then, the following equality holds:
\[a^2 + b^2 = c^2\]
\end{theorem}
More text. And even more text.
\end{document}
结果是