我想创建一个显示“解决方案”作为标题的环境。在此标题之后,我希望文本在新行之后开始,因此以下代码应该有效
\newenvironment{sol}{$\triangleright$ \textbf{Solution.} \newline}{$\triangleleft$}
它确实有效,但如果我以 enumitem 环境开始文本,则环境的垂直空间和newline
添加的方式会很糟糕。
答案1
不要插入\newline
,而要使用\par
。同时,您还需要\nobreak
以确保后续内容与“标题”保持一致。但是,如果您使用列表,仍然可能会发生中断,因此您可能需要在页面边界周围进行一些手动干预(或求助于类似needspace
检查页面上的可用空间)。
\documentclass{article}
\usepackage{lipsum}
\usepackage{enumitem}
\newenvironment{sol}{%
$\triangleright$ \textbf{Solution.} \par\nobreak
}{%
$\triangleleft$%
}
\begin{document}
\lipsum[1][1-5]
\begin{sol}
\lipsum[2][1-5]
\end{sol}
\begin{sol}
\begin{itemize}
\item \lipsum[3][1-5]
\end{itemize}
\lipsum[3][6-10]
\end{sol}
\begin{sol}
\begin{itemize}[nosep]
\item \lipsum[4][1-5]
\end{itemize}
\lipsum[4][6-10]
\end{sol}
\end{document}