textPs= implements a proprietary copy-fitting algorithm which will automatically adjust the font size(s) to optimally fill the text area with text, minimizing extra space at the bottom while avoiding overflow.

Copy-fitting can be enabled and controlled collectively for the entire text layer, on a paragraph basis, even for an individual text span.

Specify the minimum font size with \fs and the maximum font size with \copyfit. Any number of ranges are permitted in the same RTF string. Sizes for all ranges are varied proportionally, ensuring that the desired font size ratios are maintained.

\copyfit is considered a character formatting command and has scope rules like \fs and \b.

Copy-fitting is disabled by specifying \copyfit with a size equal to or smaller than the size specified with \fs.

Limiting the number of lines

In addition to specifying the range of font sizes, the behavior of the copy-fitting algorithm can be further controlled with the \copyfitlines or \copyfitmaxlines commands, which limit the number of lines the algorithm will generate. Both commands accept a line count parameter or 0, to not limit the number of lines in the copy-fitted region.

\copyfitlines permits text to overflow to additional lines when it does not fit into the specified number of lines. Explicit line breaks in the text segment to be copy-fitted are always honored.

\copyfitmaxlines always truncates extra output lines which exceed the specified limit. The specified number of lines will never be exceeded, even if explicit line breaks are present. For this release of Image Serving, no more than N-1 \line markers may be present in the copy-fitted text span. Behavior is undefined if this limit is exceeded.


The following examples assume that bodies of text are provided with variables named $A$, $B$, and $C$.

Maintain the same ratio between font sizes throughout the range:

{\fs10\copyfit100 $A${\fs20\copyfit200 $B$}$C$}

$B$ will always be rendered twice as large as the rest of the text. When much text is specified, $A$ and $C$ is rendered with \fs10 and $B$ with \fs20. With little text, $A$ and $C$ will use \fs100 and $B$ \fs200.

Converge to a common large font size if only a small amount of text is drawn:

{\copyfit100\fs10 $A${\fs20 $B$}$C$}

At the smallest end of the range, $B$ is rendered with \fs20, twice as large as $A$ and $C$ at \fs10. All text is drawn at \fs100 (50 pts) at the opposite end of the range.

Converge to a common small font size if much text is to be rendered:

{\fs10\copyfit100 $A${\copyfit200 $B$}$C$}

All text is drawn with \fs10 on the small end of the range, while at its largest, $A$ and $C$ are rendered with \fs100 and $B$ with \fs200.

Disable copy-fitting for an inner text span:

{\fs10\copyfit100 $A${\fs50\copyfit0 $B$}$C$}

The font size for $A$ and $C$ can vary between 10 and 100, while $B$ is always rendered with \fs50.

Limit the output to a single line, even if more vertical space is available, but permit it to overflow to additional lines if too much text is specified to fit into a single line at \fs10:

{\fs10\copyfit100 \copyfitlines1 $A$}

Limit the output to a single line, even if more vertical space is available. If too much text is specified to fit into a single line at \fs10 it is truncated:

{\fs10\copyfit100 \copyfitmaxlines1 $A$}

On this page