Setting em-dashes with hair spaces

Em-dashes — when used to separate parenthetical clauses — are often used without any spacing, but I rather prefer them with a hair (or perhaps thin) space on either side.

The ‘obvious’ way to do this is probably to write A\,---\,B rather than A---B (no spaces) or A --- B (unfortunately large spaces). However, this does not allow line breaks around the dash, should they be needed.

The best solution I've been able to come up with is this:

\newcommand{\mdash}
{\discretionary{}{}{\kern 0.1em}---\discretionary{}{}{\kern 0.1em}}


It looks like that works, but:

• Does this look like good practice?
• Is there a standard way to do this?
• Is there any way to, say, call this command ---- rather than \mdash{}?
• You can call it \frenchdash since it's the typographical norm in French… – Bernard Jan 29 at 22:26
• @Bernard fr.wikipedia.org/wiki/Tiret appears to suggest a full-width space around an em-dash, as well as a prohibition on line breaks… – tjollans Jan 29 at 22:46
• Your own solution is OK. If you like the result, do it. Or, if you always use a particular font, you might edit that font (in FontForge) so that its ordinary emdash looks like you want, with space on either side. That's what I do. – user139954 Jan 29 at 22:47
• @tjollans: More precisely: a normal space before an opening emdash and a thin unbreakable space after, and the symmetric layout for a closing emdash (cf Jacques André, Petites leçons de typographie, p.32 — I suppose you read French :o) – Bernard Jan 29 at 23:08
• take a look at how ltugboat.cls defines \Dash. we've been using it for years, and have had no line-breaking problems (although i seem to remember that we chose to allow breaks only after the dash). – barbara beeton Jan 30 at 15:24

tugboat has been setting em-dashes with thin spaces for years. (the editors are not fond of the dash nearly crashing into whatever is on either side.)

here is a somewhat simplified version of the tugboat definitions. Observe that it wipes out preceding and following spaces so results are uniform.

\DeclareRobustCommand{\thinskip}{\hskip 0.16667em\relax}
\def\emdash{---}
\def\d@sh#1#2{\unskip#1\thinskip#2\thinskip\ignorespaces}
\def\Dash{\d@sh\nobreak\emdash}
\def\Ldash{\d@sh\empty{\hbox{\emdash}\nobreak}}
\def\Rdash{\d@sh\nobreak\emdash}


a line break is permissible on either side of the basic \Dash. (the use of \thinskip with \hskip rather than \thinspace is what allows this.)

if a line break should be permitted on only the right or left of the dash, \Rdash and \Ldash are provided to accommodate that.

• Thanks, though it looks like \Dash and \Rdash are identical in this definition. That should be easily fixed by changing \Dash to \def\Dash{\d@sh\empty\emdash} – tjollans Feb 5 at 9:30
• it's a fact that in tugboat \Dash and \Rdash are identical. ordinarily (for tugboat, anyhow) it's not really desirable to have a "following" dash break to a new line; the exception is when the first of paired em-dashes encloses a parenthetical comment, and then a break is allowed intentionally (hence the \Ldash). – barbara beeton Feb 5 at 15:02