使用 thmtools 在定理环境左侧添加一个栏

使用 thmtools 在定理环境左侧添加一个栏

我正在尝试获取一个定理环境,它有一个标题、一个换行符,然后是正文,最后剩下一行。类似以下内容: 我正在寻找的结果。 我目前正在使用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}

相关内容