我正在尝试获取一个定理环境,它有一个标题、一个换行符,然后是正文,最后剩下一行。类似以下内容:
我目前正在使用thmtools
。我知道这thmbox
提供了一种“简单”的方式来实现这一点,但我希望能够访问更丰富的可能性thmtools
。特别是,我想获得头部的精确格式,因此仅仅使用thmbox
选项是thmtools
行不通的,因为它不允许我进行这种格式化。目前,我得到的代码如下所示:
\documentclass{minimal}
\usepackage{mdframed,amsthm}
\usepackage{thmtools}
\newmdenv[
leftmargin = 0pt,
innerleftmargin = 1em,
innertopmargin = 0pt,
innerbottommargin = 0pt,
innerrightmargin = 0pt,
rightmargin = 0pt,
linewidth = 0.3pt,
topline = false,
rightline = false,
bottomline = false
]{leftbar}
\declaretheoremstyle[
notebraces={}{},
headpunct=\newline,
headformat=\NAME{} \NUMBER. \NOTE,
% postheadhook={\begin{leftbar}},
% prefoothook=\end{leftbar},
]{foostyle}
\declaretheorem[
name=Foo,
style=foostyle,
]{fooenv}
\begin{document}
\begin{fooenv}[Title]
Body with stuff in it.
\end{fooenv}
\end{document}
现在,如果我注释掉前/后挂钩,我就会得到预期的换行符。但是,如果我取消注释它们,我会得到我想要的栏,但会丢失换行符,因此栏也会覆盖环境的“标题”。我想我在那些前/后挂钩上做错了什么,但我不够专业,无法分辨出什么……
答案1
postheadhook
这是文档中的条目thmtools
:
后头钩值:LaTeX 代码。此代码将在调用原始 begin-theorem 代码后执行。请注意,所有后端似乎都会延迟排版实际的头部,因此此处的代码可能应该进入水平模式以确保它位于头部之后,但如果您的正文以另一个列表开头,这将改变间距/换行行为。
我真的不是这方面的专家,但据我所知,这意味着您应该保留垂直模式,postheadhook
以便钩子能够按照您的意愿运行,并实际写入头部之后。事实上,如果您这样做,您甚至不必手动添加\newline
,因为一旦钩子正常运行,该行就会在环境开始时自动跳过leftbar
。
\documentclass{article}
\usepackage{mdframed,amsthm}
\usepackage{thmtools}
\newmdenv[
leftmargin = 0pt,
innerleftmargin = 1em,
innertopmargin = 0pt,
innerbottommargin = 0pt,
innerrightmargin = 0pt,
rightmargin = 0pt,
linewidth = 0.3pt,
topline = false,
rightline = false,
bottomline = false
]{leftbar}
\declaretheoremstyle[
notebraces={}{},
headpunct=,
headformat=\NAME{} \NUMBER. \NOTE,
postheadhook=\leavevmode\begin{leftbar},
prefoothook=\end{leftbar},
]{foostyle}
\declaretheorem[
name=Foo,
style=foostyle,
]{fooenv}
\begin{document}
\begin{fooenv}[Title]
Body with stuff in it.
\end{fooenv}
\end{document}