help / color / mirror / Atom feed
From: Ingo Schwarze <schwarze@usta.de>
To: Yuri Pankov <yuripv@yuripv.net>
Cc: mandoc-discuss <discuss@mandoc.bsd.lv>,
	Mateusz Piotrowski <0mp@FreeBSD.org>,
	Benjamin Kaduk <bjk@FreeBSD.org>
Subject: Re: two spaces after a period, closing bracket, and a newline
Date: Fri, 23 Nov 2018 23:42:17 +0100	[thread overview]
Message-ID: <20181123224217.GC7177@athene.usta.de> (raw)
In-Reply-To: <8e6d76be-ac90-bef5-91ec-276481f754cc@yuripv.net>

Hi Yuri, Mateusz, Benjamin,

Yuri Pankov wrote on Fri, Nov 23, 2018 at 11:35:41PM +0300:

> Reported by Mateusz Piotrowski in
> https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=232779:
> A simple

This is very far from simple.  ;-)

> rendering issue -- two spaces are displayed after a period and
> closing bracket,

Brackets would behave differently in this respect - we are talking
about a closing parenthesis here.

> *and* there's a new line, i.e. `printf "foo.)\nbar" |
> mandoc` displays "foo.)  bar".

Yes, that is a feature.

Mandoc does some heuristics to guess where sentences end, and so
does groff, traditionally, even though the behaviour of both is not
completely identical.  When these programs detect the (likely) end
of a sentence, they insert a double space into the output,
conforming to traditional typewriter conventions, even though
this is no longer common practice in proportional-font typesetting.
But i do think the double space after the end of a sentence still
makes reading text in monospace fonts easier.

The basic idea is to assume the end of a sentence when a full stop,
an exclamation mark, or a question mark appears at the end of an
input line.  If that character is preceded by an alphanumeric
character (assumed to be the end of a word), it is even assumed
to be the end of a sentence when followed by one or more closing
delimiters.  They said, "Like in this case."

There are many subtleties, in particular when macros are involved.

That said, in your minimal example "foo.)\nbar", the double space
is unambigously correct.

The case reported by Mateusz, "port...)\ncan be used" is slightly
less clear.  Then again, an ellipsis often marks the end of a
sentence, like in this case...  So mandoc treats it just like the
full stop when it appears at the end of an input line.

Benjamin Kaduk wrote:

> The rendering changes if you put a space before the ellipsis, FWIW.

Yes, in that case, mandoc no longer feels sure whether this is a
sentence, because in English text, the punctuation marking the end
end of a sentence is supposed to follow the last word without
intervening whitespace.

> Escaping the '.'s with backslashes also works.

Do *NOT* do that, if "\." appears in a manual page, that is almost
always wrong and rarely has the effect intended by the author.

If you need to escape a delimiter (including a dot) such that it
is not treated as a delimiter, put a zero-width space "\&" next
to it - conventionally, it is put before the dot in trailing
macro arguments (e.g. .Sq \&.) and after the dot to prevent end
of sentence detection (e.g. e.g.\&), but either order works.
For details, see


So if you really want to prevent end of sentence detection here,
you would say

  Any netmap port type (physical interface,
  VALE switch, pipe, monitor port...\&)
  can be used.

While i admit there are some weird cases and some groff-mandoc
differences in this area, i don't see anything to fix in the specific
case you report.  Also, groff and mandoc behave identically for
this input file:

.Dd November 23, 2018
.Dt TEST 1
.Nm test
.Nd test
Any netmap port type (physical interface, VALE switch, pipe, monitor port...)
can be used.

Both emit the double space.

 To unsubscribe send an email to discuss+unsubscribe@mandoc.bsd.lv

  reply	other threads:[~2018-11-23 22:42 UTC|newest]

Thread overview: 3+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-11-23 20:35 Yuri Pankov
2018-11-23 22:42 ` Ingo Schwarze [this message]
2018-11-24 16:00   ` Yuri Pankov

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20181123224217.GC7177@athene.usta.de \
    --to=schwarze@usta.de \
    --cc=0mp@FreeBSD.org \
    --cc=bjk@FreeBSD.org \
    --cc=discuss@mandoc.bsd.lv \
    --cc=yuripv@yuripv.net \
    --subject='Re: two spaces after a period, closing bracket, and a newline' \


* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).