\hзаполнить между строками

\hзаполнить между строками

В первом абзаце, выведенном следующей программой, 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

следует добавить невыбрасываемый клей-заполнитель, не вызывая разрыва линии.

Связанный контент