段落和示例环境之间的控制空间 - amsthm 包

段落和示例环境之间的控制空间 - amsthm 包

哪个参数设置 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(默认样式)definitionremark;该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构建的结构;另一方面,对于样式,具有:plaindefinitionremarkamsthm.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}

当然,这会影响 和 两种样式的所有定理类结构plaindefinition并且还会影响结构后的间距,因为\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}

相关内容