如何定义这个新的环境,并避免其中隐藏的错误?

如何定义这个新的环境,并避免其中隐藏的错误?

我想定义一个以换行符结尾的新环境。但是像 displaymath 这样的环境已经在其自身之后开始换行,所以在这种情况下我不会开始换行。也就是说,只在普通文本之后开始换行,而不是在环境之后。如何实现?

原始定义如下,它也在环境后开始换行符。

\newenvironment{note}{%
\noindent
\textsc{Note}
\vskip\medskipamount % or other desired dimension
\leaders\vrule width \textwidth\vskip0.4pt % or other desired thickness
\vskip\medskipamount % ditto
\nointerlineskip
}{\mbox{}~\newline\mbox{} \hfill$\Omega$\newline}

根据 Peter Grill 的建议,我定义了\smartsmallskip。并根据 David 的建议,我将 更改\newline\par

\def\smartsmallskip{\par
  \ifdim\lastskip>0pt \else \smallskip\fi
}

\newenvironment{note}{%
\noindent
\textsc{Note}
\vskip\medskipamount % or other desired dimension
\leaders\vrule width \textwidth\vskip0.4pt % or other desired thickness
\vskip\medskipamount % ditto
\nointerlineskip
}{\smartsmallskip\hfill$\Omega$\par}

还有一些问题需要我处理吗?

答案1

这应该可以满足您的要求;\smallskip我没有在最后一行之前使用 ,而是在 Omega 旁边使用了 支柱(实际上,我认为不应该有额外的空格,并且符号应该放在最后一行的末尾)。由于 ,该行不应该与标题和正文分离\nopagebreak,最后一行也是如此。

\documentclass{article}
\usepackage{lipsum}

\newenvironment{note}
  {\par\vspace{\topsep}%
   \noindent\textsc{Note}\par\nopagebreak
   \medskip
   \hrule
   \nopagebreak
   \medskip}
  {\par\skip0=\lastskip\nopagebreak
   \hspace*{\fill}\mbox{\ifdim\skip0>0pt \else\rule{0pt}{2ex}\fi$\Omega$}\par
   \vspace{\topsep}}
    \begin{document}


\lipsum[1]

\begin{note}
\lipsum*[2]
\end{note}

\lipsum[3]

\end{document}

在此处输入图片描述

相关内容