
В первом абзаце, выведенном следующей программой, 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 (ищите Бурбаки в индексе).
\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
следует добавить невыбрасываемый клей-заполнитель, не вызывая разрыва линии.