Jesteś w: Start / Przedsięwzięcia/Projects / TeX Pearls / 2007 Pearls / pawel-jackowski / bachotex2007-pawel-jackowski-pearl1.tex

bachotex2007-pawel-jackowski-pearl1.tex

TeX document icon bachotex2007-pawel-jackowski-pearl1.tex — TeX document, 2 KB (2743 bytes)

Zawartość pliku

%%% Custom overfull text

% How to replace a black overfull rule at the end of too long lines
% of a paragraph?

% Well, there is no a direct way to do so, but one should never underestimate
% \TeX's bells and whistles. First of all, we can test if the last (h)box was
% overfull by checking the value of \badness; if it is larger then 10000 it
% definitely means that the box was overfull (\badness never exceeds 10000 for
% underfull boxes). Assuming that \box0 is the box we want to test, we can say

\def\ooops{\hbox to\wd0{\setbox0=\hbox to\wd0{\unhbox0}% reset the box to get \badness
  \unhbox0 \ifnum\badness>10000 \rlap{\sixrm\quad Ooops!}\fi}}

% And how to get the box that is the line of a paragraph? By setting of the
% \interlinepenalty parameter to a strongly negative value we can force a page
% break between every two lines of a paragraph. In the \output routine, we can
% recognize those special penalties via the \outputpenalty parameter. The
% \output routine is not necessarily supposed to \shipout the page -- it may
% simply return all its content back to the `recent contributions'.

\interlinepenalty=-50000 % force the break between each two lines
\maxdeadcycles=50        % allow upto 50 \outputs with no \shipout
\newtoks\orioutput
\orioutput=\output       % wrap the original \output routine

\output
 {\ifnum\outputpenalty>-20000 \the\orioutput
  \else \ifnum\outputpenalty<-\maxdimen \the\orioutput
  \else
    \unvbox255        % flush the entire list back
    \setbox0=\lastbox % strip the very last box
    \nointerlineskip  % avoid doubled interline glue
    \ooops            % make the test and return the box back.
    \advance\outputpenalty by50000
    \penalty\outputpenalty % weak lie that nothing happened...
  \fi\fi}

\hfuzz=\maxdimen % no overfullrule, no messages
\hsize=2.5in     % provoke overfulls
This completely useless example shows a not-so-useless trick, which might be
used for quite advanced applications, such as line-numbering, some kind of
paragraph decoration, page optimization and probably many others. Things
become much more complicated if math displays, {\tt\string\marks}, {\tt\string\marks}
or {\tt\string\vadjusts} come into play, but they don't spoil all of the game.\par
% compare with:
\interlinepenalty=0 \hfuzz=0pt
This completely useless example shows a not-so-useless trick, which might be
used for quite advanced applications, such as line-numbering, some kind of
paragraph decoration, page optimization and probably many others. Things
become much more complicated if math displays, {\tt\string\marks}, {\tt\string\marks}
or {\tt\string\vadjusts} come into play, but they don't spoil all of the game.\par

\end