使用 mdframed 产生不需要的灰线

使用 mdframed 产生不需要的灰线

我使用 mdframed 在定理环境的左侧用双线包围它(试图重现 Hatcher 的“代数拓扑”)。它几乎完美地工作,除了两条连接我的主要垂直线的小水平灰线:

在此处输入图片描述

下面是生成上述图片的最小代码:

\documentclass{article}
\usepackage{lipsum}
\usepackage{amsthm}
\usepackage{tikz}
\usepackage[framemethod=tikz]{mdframed}

\newtheorem{thm}{Theorem}
\mdfdefinestyle{double-line}{%
outerlinewidth=0.4pt,%
innerlinewidth=0.4pt,%
middlelinewidth=1.5pt,%
middlelinecolor=white,%
innertopmargin=-6.5pt,%
innerbottommargin=1pt,% 
innerleftmargin = 5pt,%
bottomline=false,%
topline=false,%
rightline=false}
\surroundwithmdframed[style=double-line]{thm}

\begin{document}
\begin{thm}
\lipsum[3]
\end{thm}
\end{document}

有人知道为什么会出现这些灰线,以及如何去除它们吗?


编辑:感谢@Sigur的评论,我在他的网站上找到了Hatcher的解决方案(http://pi.math.cornell.edu/~hatcher/AT/typography.html,第 4 点):

\long\def\proclaim #1. #2\par{\bigbreak\vbox{\hbox {\vrule\kern1.5pt\vrule
\everypar{\leftskip 5pt\rightskip 4pt}\vbox{\noindent {\bf #1.\enspace}{\sl#2}}}}
\par\ifdim\lastskip<\medskipamount \removelastskip\penalty55\medskip\fi}

但是,我不确定如何使用此代码以使其围绕我的定理环境。有什么想法吗?


EDIT2/3:@Bernard 的解决方案几乎是完美的,但我注意到,当不使用 parskip 时,它在列表方面表现不佳,而当使用 parskip 时,它在短结尾行方面表现不佳。

parskip

theorem环境与环境之间的间距proof太大,但似乎与双条环境无关,所以我创建了另一个问题(见这里)。

尽管如此,当定理环境以短线结束时,双线就不够长了:

在此处输入图片描述

\documentclass{article}
\usepackage{lipsum}
\usepackage{fullpage}

\usepackage{framed}
\usepackage{amsthm, thmtools}
\usepackage{enumitem}
\usepackage{etoolbox}

\newenvironment{dbleftbar}{%
  \def\FrameCommand{\vrule width0.6pt\hspace{0.15em}\vrule width0.6pt \hspace{0.5em}}%
  \MakeFramed {\advance\hsize-\width \FrameRestore}}%
 {\endMakeFramed}

% With parskip
\usepackage{parskip}
\declaretheorem[%
name            =Theorem,%
postheadhook    =\vspace*{\parskip}\begin{dbleftbar}\vspace*{-5pt},%
prefoothook     =\vspace*{-1pt}\end{dbleftbar}%
]{Thm}

\begin{document}
\begin{Thm}\leavevmode
\begin{enumerate}[wide=0pt, leftmargin=*]
    \item Lorem i
\end{enumerate}
\end{Thm}
\hrule

\begin{Thm}\leavevmode
\begin{enumerate}[wide=0pt, leftmargin=*]
    \item Lorem ip
\end{enumerate}
\end{Thm}
\hrule

\begin{Thm}
Lorem
\end{Thm}
\hrule

\begin{Thm}
Lorem ip
\end{Thm}
\hrule
\end{document} 

没有parskip

此处,使用列表时双线会更长。

在此处输入图片描述

答案1

我提出了一个带有包的解决方案, framed并定义了一个环境,我对其进行了修改以通过环境获得双杠 :thmtoolsFramedleftbarleftdblbar

\documentclass{article}
\usepackage{lipsum}
\usepackage{framed}
\usepackage{amsthm, thmtools}

\newenvironment{dbleftbar}{%
  \def\FrameCommand{\vrule width0.6pt\hspace{0.15em}\vrule width0.6pt \hspace{0.5em}}%
  \MakeFramed {\advance\hsize-\width \FrameRestore}}%
 {\endMakeFramed}

\declaretheorem[name=Theorem, postheadhook=\begin{dbleftbar}\rule{0pt}{2ex}, prefoothook=\smallskip\end{dbleftbar}]{Thm}

\begin{document}

\begin{Thm}
\lipsum[11]
\end{Thm}

\end{document} 

在此处输入图片描述

相关内容