如何在自定义环境之后立即添加预定义框刷新?

如何在自定义环境之后立即添加预定义框刷新?

我想构建一个环境,打印封闭的文本并在文本后面添加一个预定义的框。这是 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 中找到了解决方案。

MWE 的输出

请指教如何实现末端框的所需位置。

答案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之前换行。

相关内容