我想在页面的右侧写两个单词。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)
}
- 防止前导空格影响输出
- 不设置当前行的对齐方式
- 更喜欢换行而不是过满的行
- 需要包含的默认“硬空间”
- 向右推的弹性空间
- 牢不可破的内容本身
下面的最小示例演示了其中一些(并非全部)功能。
\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
在那里插入,所以我暂时保留这两种解决方案:)