哪个参数设置 amsthm 库中示例环境前后的间距?
梅威瑟:
\documentclass{article}
\usepackage{lipsum}
\usepackage{amsthm}
\newtheorem{example}{Exam}[section]
\begin{document}
\section{My section}
\lipsum[2] % Dummy text
\begin{example}
\lipsum[1] % Dummy text
\begin{equation}
x^2 + y^2 = 1
\end{equation}
\end{example}
\lipsum[2] % Dummy text
\end{document}
答案1
该amsthm
包为类定理结构提供了三种预定义样式:plain
(默认样式)definition
和remark
;该remark
样式在结构前后留出的空间比其他两种样式要少,如以下示例所示:
\documentclass{article}
\usepackage{amsthm}
\usepackage[hmargin=2cm]{geometry}% just for the example
\usepackage{lipsum}% just to generate text for the example
\newtheorem{exai}{Plain}
\theoremstyle{definition}
\newtheorem{exaii}{Definition}
\theoremstyle{remark}
\newtheorem{exaiii}{Remark}
\begin{document}
\lipsum[4]
\begin{exai}
\lipsum[4]
\end{exai}
\lipsum[4]
\begin{exaii}
\lipsum[4]
\end{exaii}
\lipsum[4]
\begin{exaiii}
\lipsum[4]
\end{exaiii}
\lipsum[4]
\end{document}
控制结构前后间距的内部长度为\thm@preskip
(对于前空间)和\thm@postskip
(对于后空间);amsthm.sty
可以发现:
\def\thm@space@setup{%
\thm@preskip=\topsep \thm@postskip=\thm@preskip
因此,的值将用于使用和样式\topsep
构建的结构;另一方面,对于样式,具有:plain
definition
remark
amsthm.sty
\def\th@remark{%
\thm@headfont{\itshape}%
\normalfont % body font
\thm@preskip\topsep \divide\thm@preskip\tw@
\thm@postskip\thm@preskip
}
\topsep
因此,对于备注样式,用此样式建造的结构将使用一半的值。
plain
如果你想改变和样式的默认值definition
,你可以在序言中使用类似
\makeatletter
\def\thm@space@setup{%
\thm@preskip=.5\topsep \thm@postskip=\thm@preskip
}
\makeatother
完整示例:
\documentclass{article}
\usepackage{lipsum}
\usepackage{amsthm}
\makeatletter
\def\thm@space@setup{%
\thm@preskip=.5\topsep \thm@postskip=\thm@preskip
}
\makeatother
\newtheorem{example}{Exam}[section]
\begin{document}
\section{My section}
\lipsum[2] % Dummy text
\begin{example}
\lipsum[1] % Dummy text
\begin{equation}
x^2 + y^2 = 1
\end{equation}
\end{example}
\lipsum[2] % Dummy text
\end{document}
当然,这会影响 和 两种样式的所有定理类结构plain
,definition
并且还会影响结构后的间距,因为\thm@postskip=\thm@preskip
;如果您只想更改特定结构,则可以使用\newtheoremstyle
(请参阅 的文档
amsthm
)适当地定义设置。一个小例子(使用太小的间距。但这只是为了举例):
\documentclass{article}
\usepackage{lipsum}
\usepackage{amsthm}
\newtheoremstyle{example}% ⟨name⟩
{3pt}%⟨Space above⟩
{3pt}%⟨Space below⟩
{\itshape}%⟨Body font⟩
{}%⟨Indent amount⟩
{\bfseries}% ⟨Theorem head font⟩
{.}%⟨Punctuation after theorem head⟩
{.5em}%⟨Space after theorem head⟩2
{}%⟨Theorem head spec (can be left empty, meaning ‘normal’)⟩
\theoremstyle{example}
\newtheorem{example}{Exam}[section]
\begin{document}
\section{My section}
\lipsum[2] % Dummy text
\begin{example}
\lipsum[1] % Dummy text
\begin{equation}
x^2 + y^2 = 1
\end{equation}
\end{example}
\lipsum[2] % Dummy text
\end{document}