我已经使用以下证明环境有一段时间了:
\renewenvironment{proof}
{
\vspace{6 pt}
\begin{mdframed}[skipabove=0pt, skipbelow=0pt, innertopmargin=0pt, innerbottommargin=0pt, bottomline=false,topline=false,rightline=false]%
\noindent \textit{\textbf{Proof.}}
}
{%
\end{mdframed}
\vspace{6 pt}
}
但每 50 页就会发生一次(这只是说这种情况并不经常发生),类似这样的事情:
问题显然在于底部的那条小线往下拉了一点(大约多出了一行文本),而它应该与文本处于同一高度(因为我将底部边距设置为零),但不幸的是事实并非如此。我不知道如何强制 mdframed 坚持使用该文本。垂直空间用于模拟将边距设置为零后丢失的空间。
还有其他更好的想法吗?
(我真的很喜欢这行,原因如下:可以立即看到证明有多长,并且它确实很好地将结果与证明分开,以便对证明感兴趣的读者不会永远查看文本块。所以如果可以解决这个问题,我将不胜感激!更重要的是,它会给我错误消息(坏框),所以当我的文档有数百页时,我不想查看错误是否“只是这样”还是其他问题。)
已添加:示例代码失败。只是为了让您了解这种现象有多么随机:如果我在文档的其他地方修改某些内容,并且此特定证明位于高出几行的位置,则该行将正确对齐。
\begin{proof}
We already know that localization is right-exact by \refthm{localization-and-tensor}, so it suffices to show that localization preserves injective maps ; in other words, if $M_1 \subseteq M_2$, then the map $S^{-1} M_1 \to S^{-1}M_2$ defined by $S^{-1}M_1 \ni \frac ms \to \frac ms \in S^{-1}M_2$ is injective. There is not much to say : given $\frac ms \in S^{-1}M_1 \setminus \{0\}$, there exists no $s' \in S$ such that $sm = 0$ ; therefore $\frac ms \in S^{-1}M_2 \setminus \{0\}$. Flatness of $S^{-1}A$ as an $A$-module follows by \refthm{localization-and-tensor}.
\end{proof}
为了删除所有黑框,以下是 \refthm 的定义方式:
\newcommand{\refthm}[1]{Theorem~\ref{#1}}
(其中 \ref 来自 amsmath 包)这里有一个完全相同内容的例子,但修改了 4-5 页之前的内容,以便相同的内容能够正确显示在页面中间:
编辑:当遵循egreg的回答时,我注意到一些稍微不良的现象,但并不成问题:
我曾经控制过间距前和后通过在框的前后添加一些垂直间距来消除左侧的线条。是否有一些 tcolorbox 命令可以让我整齐地完成此操作?我不太喜欢手动进行垂直间距。
答案1
我的印象是,当校样结束得太接近页面末尾时,就会出现问题,因此mdframed
试图打破它。
从这个角度来看,该tcolorbox
计划似乎更加强大。
\documentclass{article}
\usepackage{amsthm}
\usepackage[many]{tcolorbox}
\usepackage{xpatch}
\usepackage{lipsum}
\xpatchcmd{\proof}{\itshape}{\bfseries\itshape}{}{}
\tcolorboxenvironment{proof}{
blanker,
before skip=\topsep,
after skip=\topsep,
borderline west={0.4pt}{0.4pt}{black},
breakable,
left=12pt,
right=12pt, % I'd avoid this
}
\begin{document}
\lipsum[2]
\begin{proof}
\lipsum*[3]
\end{proof}
\lipsum[3]
\end{document}