Gallery › Lettering and type

Hundred Lines

A chalkboard on which the same sentence is handwritten nine times, and no two letters match.

Hundred Lines, a chalkboard covered in the same sentence written by hand nine times, each line a little more ragged
Click the picture for the full-size render.

How it is made

The HandScript font draws every letter as a fresh handwritten stroke, so no two copies of the same letter are alike. This piece reuses it wholesale and turns two knobs the font leaves alone: the jitter and the pen width are overridden for each line, so the writing gets sloppier from the first line to the last.

Details

Category
Lettering and type
Tags
handwriting chalk
Libraries
none: this piece is plain PostScript
Added
2026-07-17
Page size
560 × 620 points

Source

View source the whole program in a scrolling window, or read gallery/hundred_lines.ps on GitHub. To draw it yourself, from a checkout of the repository:

pscat --page 560x620 gallery/hundred_lines.ps

Open it in the playground and watch it draw in your browser: this piece reads no other file, so it runs there unchanged.

The first 40 of 273 lines of the source
%!PS-Adobe-3.0
%%Title: Hundred Lines
%%Creator: pscat gallery — Stage 10, Gallery II
%%BoundingBox: 0 0 560 620
%%EndComments

% The Stage 12 /HandScript dynamic font, set to writing lines on a
% chalkboard: the same sentence over and over, and no two lines — no
% two *letters* — come out alike, because every glyph is generated
% fresh by BuildChar with rand-driven jitter. The punishment sentence
% is the font's own design doctrine. Two knobs the letter demo didn't
% pull: the jitter amplitude J climbs line by line (the writer gets
% bored), and both J and the pen width W are overridden through the
% font's scratch dict, which stays writable after definefont even
% where the font dict itself is locked (gs does this).
%
% Font copied from examples/handwriting.ps (Stage 12), with one
% adaptation: stroke width reads /W so the page can pick a chalkier
% pen. Seeded LCG: same file, same board, run to run.

% ---------------------------------------------------------------- font

/HandScriptDict 18 dict def
HandScriptDict begin

  /FontType 3 def
  /FontMatrix [0.001 0 0 0.001 0 0] def
  /FontBBox [-50 -300 600 800] def

  % --- the skeletons: /name [advance [stroke] [stroke] ...] --------
  % Design grid: baseline 0, x-height 500, ascenders ~750, descenders
  % to -250. Each stroke is a flat [x y x y ...] polyline; the
  % renderer smooths it into quadratic-style curves, so corners round
  % off the way a moving pen rounds them.
  /CharDefs 48 dict def
  CharDefs begin
    /.notdef    [300] def
    /space      [300] def
    /a [520 [370 460 190 510 50 330 70 120 220 10 360 90 380 240]
            [380 500 380 150 420 10 480 40]] def