Hundred Lines
A chalkboard on which the same sentence is handwritten nine times, and no two letters match.
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