Hi, Doug!

At 2018-06-26T21:28:23-0400, Doug McIlroy wrote:
> Ancient history: when I wrote BCPL roff, I immediately noticed the
> page-level density gradient from thick on the left to thin on the
> right if padding spaces were inserted from the right. I next tried
> randomly distributing the padding. This was even worse because it
> led one to perceive false phrase boundaries at the wider spaces.
> The text became maddening to read. Only then did I try alternating
> left- and right-padding, which has stood the test of time.

My browser history revealed to me that I had seen the "River
(typography)" Wikipedia article before, but apparently it didn't cut a
deep enough channel into my long-term memory.

I was poking around on the Unix v7 man page archive the other day, and
discovered to my delight that BCPL roff's request list was documented
there.  Unfortunately, it was marked up in...BCPL roff embedded within a
man page, which hopelessly confused groff.  I've attached a version
which can be viewed with "man -l" (or just nroff -man) on a modern
system.

> But all this is a frill. Justified text seemed like a nice idea
> at the time, because it distinguished computer-composed documents
> from old-fashioned typewritten documents. But it soon became old
> hat and people migrated back to ragged right margins, which may
> not look as neat from afar, but also seem to be easier to read
> both because of even spacing and because the variable margin 
> provides distinguishablility to help a reader track vertical
> position on the page.

In my own case, I haven't found that last point to be true; I find full
justification more attractive when I gaze at the page, but while reading
I swiftly forget to notice whether the text is set ragged right or not,
and in practice I forget which convention was used.

For example, I was going to try and rebut you on this point with
reference to Oxford University Press's "A Very Short Introduction"
series, which has been going for a couple of decades.  I remembered two
things about it: (1) early titles were printed with a sans-serif font,
but that swiftly gave way to serif fonts and stayed that way for many
years (I can't speak to any titles within the last few years) and (2)
they used to be set ragged right and are now set full.

So I went and checked my library.  I was right about (1) but not about
(2).  They're still ragged right after all these years.

I'm wondering how many decisions in typographical style are made in the
absence of any experimental data regarding readability, and I fear the
answer is "more than I'd care to know".

Regards,
Branden
.\" From Unix v7.  Minimally hacked up by Branden to render on modern
.\" groff, which doesn't know the ".li n" request, which means "treat
.\" next n lines 'literally'" (Just ignore the control character '.'?
.\" Or does it mean more than that?)
.TH ROFF 1 
.SH NAME
roff  \-  format text
.SH SYNOPSIS
.B roff
[ \fB+\fIn\fR ] [ \fB\-\fIn\fR ] [
.B \-s
] [
.B \-h
] file ...
.PP
.B nroff \-mr
[ option ] ... file ...
.br
.B troff \-mr
[ option ] ... file ...
.SH DESCRIPTION
.I Roff
formats text according to control lines embedded
in the text in the given files.
Encountering a nonexistent file terminates printing.
Incoming inter-terminal messages are turned off during printing.
The optional flag arguments mean:
.br
.ns
.TP 5
.BI + n
Start printing at the first page with number
.IR n .
.br
.ns
.TP 5
.BI \- n
Stop printing at the first page numbered higher
than
.IR n .
.br
.ns
.TP 5
.B  \-s
Stop before each page (including the first)
to allow paper manipulation;
resume on receipt of an interrupt signal.
.br
.ns
.TP 5
.B  \-h
Insert tabs in the output stream to replace
spaces whenever appropriate.
.PP
.DT
Input consists of intermixed
.I "text lines,"
which contain information to be formatted, and
.I "request lines,"
which contain instructions about how to format
it.
Request lines begin with a distinguished
.I "control character,"
normally a period.
.PP
Output lines may be
.I filled
as nearly as possible with words without regard to
input lineation.
Line
.I breaks
may be caused at specified places by
certain commands, or by the appearance of an
empty input line or an input line beginning with a space.
.PP
The capabilities of
.I roff
are specified in the attached Request Summary.
Numerical values are denoted there by n or +n,
titles by t, and single characters by c.
Numbers denoted +n may be signed + or \-,
in which case they signify relative changes to
a quantity, otherwise they signify
an absolute resetting.
Missing n fields are ordinarily taken to be 1,
missing t fields to be empty, and c fields to shut off
the appropriate special interpretation.
.PP
Running titles usually appear at top and bottom of every
page.
They are set by requests like
.PP
.in +10
.if t \&.he \(fmpart1\(fmpart2\(fmpart3\(fm
.if n \&.he 'part1'part2'part3'
.in -10
.PP
Part1 is left justified, part2 is centered,
and part3 is right justified on the page.
Any % sign in a title is replaced by the current
page number.
Any nonblank may serve as a quote.
.PP
ASCII tab characters are replaced in the input by a
.I "replacement character,"
normally a space,
according to the
column settings given by a .ta command.
(See .tr for how to convert this character on output.)
.PP
Automatic hyphenation of filled output is done
under control of .hy.
When a word contains a designated
.I "hyphenation character,"
that character disappears from the output and
hyphens can be introduced into
the word at the marked places only.
.PP
The
.B \-mr
option of
.I nroff
or 
.IR troff (1)
simulates
.I roff
to the greatest extent possible.
.SH FILES
/usr/lib/suftab suffix hyphenation tables
.br
/tmp/rtm?       temporary
.br
.SH BUGS
.I Roff
is the simplest of the text formatting
programs, and is utterly frozen.
.bp
.tc |
.tr |
.in 0
.ce
REQUEST SUMMARY
.PP
.ul
.ta \w'.tr cdef.. 'u +\w'Break 'u +\w'Initial 'u
.di x
                        \ka
.br
.di
.in \nau
.ti 0
Request Break   Initial Meaning
.na
.ti 0
.\" groff doesn't know the .li request. -- GBR
.de li
\\$*\c
..
.li
\&.ad   yes     yes     Begin adjusting right margins.
.ti 0
.li
\&.ar   no      arabic  Arabic page numbers.
.ti 0
.li
.\" The \*- string is an overlooked hold-over from v6 man pages. -- GBR
.ds - \-\"
\&.br   yes     \-      Causes a line break \*- the filling of
the current line is stopped.
.ti 0
.li
\&.bl|n yes     \-      Insert of n blank lines, on new page if necessary.
.ti 0
.li
\&.bp|+n        yes     n=1     Begin new page and number it n; no n means `+1'.
.ti 0
.li
\&.cc|c no      c=.     Control character becomes `c'.
.ti 0
.li
\&.ce|n yes     \-      Center the next n input lines,
without filling.
.ti 0
.li
\&.de|xx        no      \-      Define parameterless macro 
to be invoked by request `.xx'
(definition ends on line beginning `\fB..\fR').
.ti 0
.li
\&.ds   yes     no      Double space; same as `.ls 2'.
.ti 0
.li
.\" The \*a string is an overlooked hold-over from v6 man pages. -- GBR
.ds a \(aq\"
\&.ef|t no      t=\*a\*a\*a\*a  Even foot title becomes t.
.ti 0
.li
\&.eh|t no      t=\*a\*a\*a\*a  Even head title becomes t.
.ti 0
.li
\&.fi   yes     yes     Begin filling output lines.
.ti 0
.li
\&.fo   no      t=\*a\*a\*a\*a  All foot titles are t.
.ti 0
.li
\&.hc|c no      none    Hyphenation character becomes `c'.
.ti 0
.li
\&.he|t no      t=\*a\*a\*a\*a  All head titles are t.
.ti 0
.li
\&.hx   no      \-      Title lines are suppressed.
.ti 0
.li
\&.hy|n no      n=1     Hyphenation is done, if n=1;
and is not done, if n=0.
.ti 0
.li
\&.ig   no      \-      Ignore input lines through
a line beginning with `\fB..\fR'.
.ti 0
.li
\&.in|+n        yes     \-      Indent n spaces from left margin.
.ti 0
.li
\&.ix +n        no      \-      Same as `.in' but without break.
.ti 0
.li
\&.li|n no      \-      Literal, treat next n lines as text.
.ti 0
.li
\&.ll|+n        no      n=65    Line length including indent is n characters.
.ti 0
.li
\&.ls|+n        yes     n=1     Line spacing set to n lines per output line.
.ti 0
.li
\&.m1|n no      n=2     Put n blank lines between the top
of page and head title.
.ti 0
.li
\&.m2|n no      n=2     n blank lines put between head title
and beginning of text on page.
.ti 0
.li
\&.m3|n no      n=1     n blank lines put between end of
text and foot title.
.ti 0
.li
\&.m4|n no      n=3     n blank lines put between the foot title
and the bottom of page.
.ti 0
.li
\&.na   yes     no      Stop adjusting the right margin.
.ti 0
.li
\&.ne|n no      \-      Begin new page, if n output lines
cannot fit on present page.
.ti 0
.li
\&.nn|+n        no      \-      The next n output lines are not numbered.
.ti 0
.li
\&.n1   no      no      Add 5 to page offset;
number lines in margin from 1 on each page.
.ti 0
.li
\&.n2|n no      no      Add 5 to page offset;
number lines from n;
stop if n=0.
.ti 0
.li
\&.ni|+n        no      n=0     Line numbers are indented n.
.ti 0
.li
\&.nf   yes     no      Stop filling output lines.
.ti 0
.li
.\" Unix v7 man page source missing break boolean for .nx. -- GBR
\&.nx|file      no?     \-      Switch input to `file'.
.ti 0
.li
\&.of|t no      t=\*a\*a\*a\*a  Odd foot title becomes t.
.ti 0
.li
\&.oh|t no      t=\*a\*a\*a\*a  Odd head title becomes t.
.ti 0
.li
\&.pa|+n        yes     n=1     Same as `.bp'.
.ti 0
.li
\&.pl|+n        no      n=66    Total paper length taken to be n lines.
.ti 0
.li
\&.po|+n        no      n=0     Page offset.
All lines are preceded by n spaces.
.ti 0
.li
\&.ro   no      arabic  Roman page numbers.
.ti 0
.li
\&.sk|n no      \-      Produce n blank pages starting next page.
.ti 0
.li
\&.sp|n yes     \-      Insert block of n blank lines,
except at top of page.
.ti 0
.li
\&.ss   yes     yes     Single space output lines,
equivalent to `.ls 1'.
.ti 0
.li
\&.ta|n|n..             \-      Pseudotab settings.
Initial tab settings are columns 9 17 25 ...
.ti 0
.li
\&.tc|c no      space   Tab replacement character becomes `c'.
.ti 0
.li
\&.ti|+n        yes     \-      Temporarily indent next output
line n spaces.
.ti 0
.li
\&.tr|cdef..    no      \-      Translate c into d, e into f, etc.
.ti 0
.li
\&.ul|n no      \-      Underline the letters and numbers
in the next n input lines.
.br
.tr ||

Attachment: signature.asc
Description: PGP signature

Reply via email to