在以下程序输出的第一段中,dolor
设置在右边距。在第二段中,这种情况没有发生,大概是因为当\hfill
发生这种情况时我们仍然在第一行。
\hsize 4in
lorem ipsum
lorem ipsum
lorem ip
\hfill dolor
lorem ipsum
lorem ipsum
lorem ipsum
lorem ipsum
lorem ip
\hfill dolor
lorem ipsum
lorem ipsum
lorem ipsum
lorem ipsum
lorem ip%
\break\null
\hfill dolor
lorem ipsum
lorem ipsum
lorem ipsum
lorem ipsum
lorem ipsum
\break\null
\hfill dolor
\bye
我如何确保将其dolor
设置在右边距,而不管它出现在什么位置?也就是说,如果 dolor 之前的文本长度发生变化,我如何才能获得第三段的效果,而不是第四段的效果(带有额外的换行符)?
答案1
TeXbook 对此进行了很好的描述(在索引中查找 Bourbaki)。
\def\NN#1{\leavevmode\llap{\hbox to\parindent{#1\hss}}\ignorespaces} % for reference
\def\signed#1{{\unskip\nobreak\hfil\penalty50
\hskip2em\hbox{}\nobreak\hfil#1%
\parfillskip=0pt \finalhyphendemerits=0 \par}}
\hsize 4in
\NN1
lorem ipsum
lorem ipsum
lorem ip
\signed{dolor}
\NN2
lorem ipsum
lorem ipsum
lorem ipsum
lorem ipsum
lorem ip
\signed{dolor}
\NN3
lorem ipsum
lorem ipsum
lorem ipsum
lorem ipsum
lorem ip%
\signed{dolor}
\NN4
lorem ipsum
lorem ipsum
lorem ipsum
lorem ipsum
lorem ipsum
lorem ipsum
lorem ipsum
lorem ipsum
lorem ipsum
l
\signed{dolor}
\NN5
lorem ipsum
lorem ipsum
lorem ipsum
lorem ipsum
lorem ipsum
lorem ipsum
lorem ipsum
lorem ipsum
lorem ipsum
lo
\signed{dolor}
\bye
答案2
\leavevmode\penalty50\hbox{}\nobreak\hfill dolor
应添加不可丢弃的填充胶,而无需强制断线。