我想定义一个以换行符结尾的新环境。但是像 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}