我想构建一个环境,打印封闭的文本并在文本后面添加一个预定义的框。这是 MWE:
\documentclass{minimal}
\newenvironment{problem}{%
\bigskip
\textbf{Problem}
\begin{trivlist}
\item[]
}{
\mbox{}\hfil
\linebreak[2]\mbox{}\hfill\fbox{$>>$~Solution}
\end{trivlist}
}
\begin{document}
\begin{problem}
Shorttext. Shorttext. Shorttext. Shorttext.
\end{problem}
\begin{problem}
Shorttext. Shorttext. Shorttext. Shorttext.
Shorttext. Shorttext. Shorttext. Shorttext.
\end{problem}
\begin{problem}
Shorttext. Shorttext. Shorttext. Shorttext.
Shorttext. Shorttext. Shorttext. Shorttext.
Short.
\end{problem}
\end{document}
不幸的是,框并不总是按照我想要的方式定位。有时它会超出文本列的右边界,而不是被拉出到下一行。当框单独拉出到最后一行时,它不会立即刷新,如上面的 MWE 所示(参见环境的第 3 次出现problem
):
更新:我在第 106 页的 TeXBook 中找到了解决方案。
请指教如何实现末端框的所需位置。
答案1
也许这就是你想要的:
\documentclass{minimal}
\newenvironment{problem}{%
\bigskip
\textbf{Problem}
\begin{trivlist}
\item[]
}{
\linebreak[2] \mbox{}\hspace*{\fill}\fbox{$>>$~Solution}
\end{trivlist}
}
\begin{document}
\begin{problem}
Shorttext. Shorttext. Shorttext. Shorttext.
\end{problem}
\begin{problem}
Shorttext. Shorttext. Shorttext. Shorttext.
Shorttext. Shorttext. Shorttext. Shorttext.
\end{problem}
\begin{problem}
Shorttext. Shorttext. Shorttext. Shorttext.
Shorttext. Shorttext. Shorttext. Shorttext.
Short.
\end{problem}
\end{document}
可防止\hspace*
在 内发生换行\mbox{}\hspace*{\fill}\fbox{$>>$~Solution}
。但您还需要在 之前提供一个换行位置,之后的空格\linebreak[2]
是必需的。我不确定您为什么会觉得需要在\mbox{}\hfill
之前换行。