Michael F. Plass (source code)

= Michael F. Plass
{c}

<Michael F. Plass> is a <computer scientist> whose work connects <typography> with <mathematical optimization>. With <Donald E. Knuth>, he coauthored the 1981 paper that describes the <Knuth-Plass line-breaking algorithm>: choosing breaks for an entire paragraph with <dynamic programming>, allowing later text to influence earlier choices. The original byline places both authors in Stanford University's Computer Science Department.<Breaking paragraphs into lines by Donald E. Knuth and Michael F. Plass>[Page1119: original byline, affiliation and summary]{ref}

The authors' historical account credits <Michael F. Plass> with introducing feasible breakpoints into the developing algorithm in summer 1977, reducing the active possibilities considered. They report its implementation in the first complete version of <TeX> in March 1978. These dates describe the development of the method, rather than the later publication date.<Breaking paragraphs into lines by Donald E. Knuth and Michael F. Plass>[Page1176: feasible-breakpoint refinement and implementation chronology]{ref}

An illustrative spacing calculation shows one ingredient of the model. Suppose fixed boxes total 24 width units and two spaces each have normal width 3 and stretchability 2. Their natural total width is 30. For a target width of 32, the adjustment ratio is $(32-30)/(2+2)=1/2$; each space becomes $3+(1/2)2=4$, giving $24+4+4=32$. This original numerical example shows proportional stretching, before the paragraph-wide choice of breaks.

The full method also represents break preferences with penalties and accounts for relevant relationships between successive lines. <Line breaking with squared slack cost> is a useful simpler model for understanding global choices, while the published <Knuth-Plass line-breaking algorithm> handles adjustable spacing and additional preferences.<Breaking paragraphs into lines by Donald E. Knuth and Michael F. Plass>[Pages1121–1122: boxes, glue and penalties; pages1158–1159: active-node state]{ref}