使用 parskip 和 thmtools 时的间距

使用 parskip 和 thmtools 时的间距

我有以下非常具体的问题,这可能只是 thmtools 包中的一个错误,但我想知道我是否可以解决它。

基本上,如果我包含该parskip包并尝试使用shaded该包的样式thmtools,那么定理环境内的垂直间距就会变得混乱,段落之间和枚举列表项之间的所有空白都会消失,如下所示:

在此处输入图片描述

有什么方法可以解决这个问题吗?

这是 MWE 代码:

\documentclass{article}
\usepackage{amsthm}
\usepackage{thmtools}
\declaretheorem[shaded]{theorem}
\usepackage{parskip}

\begin{document}
\begin{theorem}
The following is an enumerated list: 
\begin{enumerate}
    \item one
    \item two
    \item three
\end{enumerate}

This is a paragraph.

This is another paragraph.
\end{theorem}

Here is the same content outside of a theorem environment:
\begin{enumerate}
    \item one
    \item two
    \item three
\end{enumerate}

This is a paragraph.

This is another paragraph.
\end{document}

答案1

这实际上不是 的一个错误thmtools。使用shaded样式时,thmtools会加载包,并使用包的环境shadethm包装定理。shadeboxshadethm

环境shadebox将其内容排版在里面minipage,默认情况下,\parskip=0pt它位于其中(参见为什么 \parskip 在小页面中为零?)。

幸运的是,shadebox环境有一个名为的钩子,它在内部\shadesetinsideminipage恢复,所以我们也可以让他恢复:\parindentshadebox\parskip

\documentclass{article}
\usepackage{amsthm}
\usepackage{thmtools}
\declaretheorem[shaded]{theorem}
\usepackage{parskip}

\newlength\saveparskip
\setlength\saveparskip\parskip
\renewcommand\shadesetinsideminipage{%
    \setlength\parindent\saveparindent % \saveparindent is defined inside `shadethm' package
    \setlength\parskip\saveparskip     % this line restores \parskip
}
\begin{document}
    
    \begin{theorem}
        The following is an enumerated list: 
        \begin{enumerate}
            \item one
            \item two
            \item three
        \end{enumerate}
        
        This is a paragraph.
        
        This is another paragraph.
    \end{theorem}
    
    Here is the same content outside of a theorem environment:
    \begin{enumerate}
        \item one
        \item two
        \item three
    \end{enumerate}
    
    This is a paragraph.
    
    This is another paragraph.
\end{document}

在此处输入图片描述

相关内容