将 mbox 放在右侧,即使其前面有一个换行符

将 mbox 放在右侧,即使其前面有一个换行符

我想在页面的右侧写两个单词。sometext TWO WORDS因此我把一个放在\hfill前面,因为我不想在这两个单词之间有任何中断,所以我使用\mbox

sometext \hfill \mbox{TWO WORDS}

但有时我在前面有一段很长的文本\hfill,因此会放置一个换行符,但总是在后面\hfill。因此TWO WORDS保持在左边。

我尝试过使用ragged可能性,但没有成功。

那么,我怎样才能在句子之前断开\hfill或将句子的一部分向右调整呢?

答案1

重要的是要记住,\hspace并且\hfill在行首“折叠为零”。\hspace*另一方面,则不然。其他人已经提到了这一点,但还有一些微妙之处需要考虑。

\newcommand\OnRight[1]{%
  \unskip           % (1)
  \hfill            % (2)
  \penalty100\relax % (3)
  \hspace*{0.5em}%    (4)
  \hspace*{\fill}%    (5)
  \mbox{#1}%          (6)
}
  1. 防止前导空格影响输出
  2. 不设置当前行的对齐方式
  3. 更喜欢换行而不是过满的行
  4. 需要包含的默认“硬空间”
  5. 向右推的弹性空间
  6. 牢不可破的内容本身

下面的最小示例演示了其中一些(并非全部)功能。

\documentclass{article}
\newcommand\OnRight[1]{%
  \unskip\hfill\penalty100\relax\hspace*{0.5em}\hspace*{\fill}\mbox{#1}%
}
\begin{document}
\begin{itemize}
  \item a short line \OnRight{\fbox{abc xyz}}
  \item a single line that is longer but edging towards two but not quite \OnRight{\fbox{abc mno xyz}}
  \item a single line that is xx longer but edging towards two but not quite \OnRight{\fbox{abc mno xyz}}
  \item a single line that is extra longer but edging towards two but not quite \OnRight{\fbox{abc mno xyz}}
  \item a single line that is extra longer but edging towards two but not quite quite \OnRight{\fbox{abc mno xyz}}
\end{itemize}
\end{document}

更新:Ulrike 建议(我认为)进行以下改进:

\newcommand\OnRight[1]{%
  \begingroup
    \parfillskip=0pt\relax
    \unskip\hfil\penalty100\relax\hspace*{0.5em}\hfil\mbox{#1}%
    \par
  \endgroup
}

我不完全确定你是否总是想\par在那里插入,所以我暂时保留这两种解决方案:)

相关内容