使用changepage中的adjustwidth套用在定理环境之外会使得输出结果出现神秘空行。
这可通过在添加一行-baselineskip解决。
但是这种解决方法会在添加宏包enumitem后失效。准确来说,空行被消去了大半但并未完全,这导致定理上下行距不一致。
我有两个问题,第一个是为什么在定理环境后套一个adjustwidth会使输出内容开头多出空行,但是证明环境不会有空行。第二个是为什么用了enumitem之后再使用-baselineskip仍会多出空行。最后我希望能有一个良好的解决方案,使得既能保持enumitem宏包又能使定理上下保持恰当的距离。
另外我发现,在只套用adjustwidth后不只是上边的行距变大,同时下边的也缩小了。这导致使用-baselineskip会使得上下整体的行距较未使用adjustwidth的行距缩小。
这些问题在使用
\setlength{\leftskip}{40pt}
\setlength{\rightskip}{40pt}
代替adjustwidth后不会出现。然而在证明环境中使用setlength仍会有问题。譬如,若在行间公式中使用\proofhere,由于证毕号占用的位置是公式编号,而公式编号不会随setlength而变化,这导致证毕符号会超出证明文本最右端40pt。因此,我才采用了adjustwidth。
所以,出于上述原因,如果有某种方法可以在我使用setlength时仍保证证毕号与证明文本的右端对齐,那我就不需要纠结adjustwidth的各种问题了。
下面是使用adjustwidth, -baselineskip, enumitem时的源码。
\documentclass[a4paper, 10pt]{ctexart}
\usepackage{amsmath, amsthm, changepage, enumitem}
\newtheorem{theorem}{\textsf{定理}}[section]
\newenvironment{zhengming}
{
\begin{adjustwidth}{40pt}{40pt}
\begin{proof}
}
{
\end{proof}
\end{adjustwidth}
}
\newenvironment{dingli}
{
\begin{adjustwidth}{40pt}{40pt}
\vspace{-\baselineskip}
\begin{theorem}
}
{
\end{theorem}
\end{adjustwidth}
}
\ctexset{section={format+={\heiti}}}
\renewcommand{\proofname}{\textbf{\heiti 证明}}
\begin{document}
测试文本测试测试文本测试测试文本测试测试文本测试测试文本测试
\begin{dingli}
测试文本测试测试文本测试测试文本测试测试文本测试测试文本测试
\end{dingli}
测试文本测试测试文本测试测试文本测试测试文本测试测试文本测试
\begin{dingli}
测试文本测试测试文本测试测试文本测试测试文本测试测试文本测试
\end{dingli}
测试文本测试测试文本测试测试文本测试测试文本测试测试文本测试
\begin{zhengming}
测试文本测试测试文本测试测试文本测试测试文本测试测试文本测试
\begin{equation*}
E = mc^2. \qedhere
\end{equation*}
\end{zhengming}
测试文本测试测试文本测试测试文本测试测试文本测试测试文本测试
\end{document}
改成这样:
\setlist[trivlist]{nosep}
\newenvironment{zhengming}
{\setlength\partopsep{0pt}%
\begin{adjustwidth}{40pt}{40pt}
\begin{proof}
}
{
\end{proof}
\end{adjustwidth}
}
\newenvironment{dingli}
{\setlength\partopsep{0pt}%
\begin{adjustwidth}{40pt}{40pt}
\vspace{-\baselineskip}
\begin{theorem}
}
{
\end{theorem}
\end{adjustwidth}
}
非常感谢!完美实现了效果。但是在使用newenvironmentstyle修改样式后这样的方法会失效,有什么补救办法吗?
@u68039
\newenvironmentstyle
是什么?实测这样不会失效:前后间距不为
0pt
时,需要自己使用\vskip -..
减去间距。