Readability is not simply "being able to read each word", but also being able to understand the relationships between the words, between the paragraphs and so on.
Titles are put into evidence because that's their role: stick out as much as necessary for the reader to spot them and know that something has changed. Paragraphs are indented for the same reason and lists are given a different treatment because they are different from normal paragraphs. The interline leading is not too wide so that the eye can catch easily the next start.
Here's an example where some of the "rules" above are broken: one can probably read that text, but not as fluently as if it were well presented.
Just to get the ball rolling (and to get to play with MetaPost), here is what I have so far:
(updated with a few ideas I had, I still need to test out Barbara’s and mforbes’ hints and ideas)
beginfig(1);
defaultscale := .8; % make the text a little smaller
u := 1.5in;
phi := 1.618033988749895;
for i:= 0 upto 5: z.hexc[i] = right scaled u rotated (i*360/6); endfor;
path hexa; hexa := for i:=0 upto5: z.hexc[i]--endfor cycle;
fill hexa withcolor .9[green,white]; draw hexa;
dotlabel.rt("r", z.hexc0); dotlabel.urt("ur", z.hexc1);
dotlabel.ulft("ul", z.hexc2); dotlabel.lft("l", z.hexc3);
dotlabel.llft("ll", z.hexc4); dotlabel.lrt("lr", z.hexc5);
path recto; recto := z.hexc1--z.hexc2--z.hexc4--z.hexc5--cycle;
path verso; verso := recto shifted (-1u,0);
for i:=verso,recto:%,recto shifted (1u,0):
draw i withpen pencircle scaled 1.2; endfor;
picture mforbes; mforbes :=
image(
z.a = (1.27106916798686u, 0.469505571318668u);
z.tll = (0.117300021398114u, 0.294835256924744u);
z.tlr = (0.798192881206518u, 0.294835256924744u);
z.tur = (0.798192881206518u, 1.61553741320908u);
z.tul = (0.117300021398114u, 1.61553741320908u);
z.x = (0.435936138301u, 0);
z.y = (0.689095323638u, 1.73205080756888u);
dotlabels.lrt(a,tll,tlr,tur,tul,x,y);
);
drawoptions( withcolor .5 red );
draw mforbes shifted llcorner recto;
% Bringhurst's lines:
draw z.hexc1--z.hexc3--z.x shifted llcorner recto--z.hexc0--
z.y shifted llcorner recto--z.hexc4--z.a shifted llcorner recto--z.hexc2
%dashed evenly
;
drawoptions();
% Van de Graaf: http://en.wikipedia.org/wiki/Canons_of_page_construction
picture van_de_Graaf; van_de_Graaf := image(
path Van_de_Graaf[];
Van_de_Graaf0 := ulcorner verso--lrcorner recto--ulcorner recto
--llcorner verso--urcorner recto;
draw Van_de_Graaf0 dashed evenly;
% subpath (0,1) is the first line, (1,2) is the second, etc.
z.vdG0 = (subpath(3,4) of Van_de_Graaf0) intersectiontimes
(subpath(3,4) of hexa);
z.vdG1 = point xpart z.vdG0 of subpath(3,4) of hexa; % show this point
z.vdG2 = point ypart z.vdG0 of subpath(1,2) of hexa; % on this path
% ypart(z.vdG1) == xpart(z.vdG1) ?
dotlabel.lft("vdG1", z.vdG1);
dotlabel.urt("vdG2", z.vdG2);
% Close, but no cigar. Back to the drawing board.
% van de Graaf continued to project lines from the intersections:
z.vdG3 = (subpath(1,2) of Van_de_Graaf0) intersectionpoint
(subpath(3,4) of Van_de_Graaf0);
z.vdG4 = (xpart z.vdG3, ypart urcorner recto);
z.vdG5 = (subpath(0,1) of Van_de_Graaf0) intersectionpoint
(subpath(2,3) of Van_de_Graaf0);
z.vdG6 = (xpart z.vdG5, ypart urcorner verso);
dotlabels.ulft(vdG3, vdG4, vdG5, vdG6);
Van_de_Graaf1 := (z.vdG5)--(z.vdG4);
Van_de_Graaf2 := (z.vdG6)--(z.vdG3);
drawoptions( dashed evenly );
draw Van_de_Graaf1; draw Van_de_Graaf2;
drawoptions();
% Nope. Not even close.
z.guess_a = whatever[z.vdG6,z.vdG3] = whatever[z.hexc0,z.hexc5];
% Did I hit it? Pleasepleasepleasepleaseplease...
dotlabel.lrt("guess a", z.guess_a);
% Nope.
% That intersection of cross-page vdG's looks promising
);
draw van_de_Graaf withcolor .5 white;
z.golden1 = point 1/phi of subpath(5,4) of hexa;
z.golden2 = point 1/phi of subpath(2,1) of hexa;
drawoptions( withcolor .5[green,red] );
dotlabel.bot(btex $\phi$ etex, z.golden1);
dotlabel.top(btex $\phi$ etex, z.golden2);
drawoptions();
endfig;
end
(I haven't used MetaPost much, so if you have suggestions on improving, please share)
Best Answer
Don't stare at this one for too long.