\documentclass{article}
\usepackage{lmodern}
\usepackage{ifluatex}
\ifnum 0\ifluatex 1\fi=1 % if LuaLaTeX
\usepackage{luatex85}
\fi
\usepackage[a6paper]{geometry}
\usepackage{parskip}
\usepackage[para,online,flushleft]{threeparttable}
\usepackage{array}
\PassOptionsToPackage{unicode}{hyperref}
\usepackage{bookmark}
\hypersetup{
  hidelinks,
  breaklinks}
\urlstyle{same}  % don't use monospace font for urls
\usepackage{float}
\usepackage{uspace}


%\setlength{\emergencystretch}{3em}  % prevent overfull lines
\DeclareRobustCommand{\expl}[1]{\textsf{#1}}
\newcommand{\zwsp}{\textsc{zero width space}}
\newcommand{\nnbsp}{\textsc{narrow no-break space}}
\newcommand{\nbsp}{\textsc{non-breaking space}}
\newcommand{\shy}{\textsc{soft hyphen}}
\newcommand{\enquad}{\textsc{en quad}}
\newcommand{\enspaceC}{\textsc{en space}}
\newcommand{\emquad}{\textsc{em quad}}
\newcommand{\emspaceC}{\textsc{em space}}
\newcommand{\threePerEm}{\textsc{three-per-em space}}
\newcommand{\fourPerEm}{\textsc{four-per-em space}}
\newcommand{\sixPerEm}{\textsc{six-per-em space}}
\newcommand{\figuresp}{\textsc{figure space}}
\newcommand{\punctsp}{\textsc{punctuation space}}
\newcommand{\thinsp}{\textsc{thin space}}
\newcommand{\hairsp}{\textsc{hair space}}

\overfullrule=0.5em

\begin{document}

\section{\zwsp{}}

\expl{\LaTeX{} does not hyphenate word after solidus (forward slash) in
  compounds like `input/output'. Inserting \zwsp{} after the solidus in such
  compound forces \LaTeX{} to consider the compound to be two words and thus
  it will use the usual line breaking algorithm for the second word of the
  compound. The following few lines are testing behaviour \emph{without}
  \zwsp{} inserted:}

Here, we are---testing line breaking of `input/output' compound.

Here, we are--testing line breaking of `input/output' compound.

\expl{Notice how both lines cause hbox overflow because \LaTeX{} cannot find
  good line break.}

\expl{And now \emph{with} \zwsp{} inserted:}

Here, we are---testing line breaking of `input/​output' compound.

Here, we are--testing line breaking of `input/​output' compound.

\pagebreak
\section{\nnbsp{}}

\expl{\nnbsp{} is used, e.g., in German and Czech typography to separate
  multi-part abbreviations. Here is an example with `s. r. o.', which is an
  equivalent of LLC or GmbH in Czech. It should be typeset with narrow space
  between letters and no line break should occur between the letters:}

\begin{tabular}{l | p{0.75\textwidth}}
  s.r.o. & \expl{without any spaces} \tabularnewline
  s.~r.~o. & \expl{with usual \nbsp{} (\textasciitilde{})} \tabularnewline
  s. r. o. & \expl{with \nnbsp{}} \tabularnewline
\end{tabular}

\expl{The following sentence is showing line breaking when ordinary space is
  used:}

He invested all of his savings into Pyramid s. r. o. and lost all of it.

\expl{And here we use \nnbsp{} for much nicer result:}

He invested all of his savings into Pyramid s. r. o. and lost all of it.

\pagebreak

\section{\nbsp{}}

\expl{Here, we are testing the use of Unicode character \nbsp{}:}

Telephone number example for Czechia: +420 123 456 789

Telephone number example for Czechia: +420 123 456 789

\expl{The line above overflows hbox because line break cannot be inserted
  between digits groups due to use of \nbsp{}.}

\pagebreak

\section{\shy{}}
\expl{Sometimes, text might come with words pre-​hyphenated using \shy{}
  character. Let's use the name `Kurremkarmerruk', name of Master Namer from
  Earthsea novels by Ursula K.\ Le~Guin, as an example here. Without manually
  inserted \shy{}, it will be hyphenated but it will overflow hbox slightly:}

The name of the Master Namer is `Kurremkarmerruk'.

\expl{Here is the same with with \shy{} inserted as follows:
  Kur-rem-kar-mer-ruk.}

The name of the Master Namer is `Kur­rem­kar­mer­ruk'.

\expl{Note: I claim no correctness of the above hyphenation of the name. This
  is purely just an example.}

\pagebreak

\section{\figuresp{} and \punctsp{}}

\expl{\figuresp{} and \punctsp{} can be used to align numbers in tables. The
  below table (partial table of Earth athmosphere constituents) does not use
  either. The numbers are centered in their column.}

\begin{figure}[H]
\centering
\begin{tabular}{l | c}
  Element & ppmv \tabularnewline
  \hline
  Nitrogen &     780,840\tabularnewline
  Oxygen &       209,460\tabularnewline
  Argon &          9,340\tabularnewline
  Carbon dioxide &   400 \tabularnewline
  Neon &               18.18
\end{tabular}
\end{figure}

\expl{Below is the same table as above but with addition of \figuresp{} and
  \punctsp{} to pad the numbers so that they all seem the same width to
  \LaTeX{}:}

\begin{figure}[H]
\centering
\begin{tabular}{l | c}
  Element & ppmv \tabularnewline
  \hline
  Nitrogen &      780,840   \tabularnewline
  Oxygen &        209,460   \tabularnewline
  Argon &           9,340   \tabularnewline
  Carbon dioxide &    400   \tabularnewline
  Neon &               18.18
\end{tabular}
\end{figure}

\pagebreak

\section{en, em and other spaces}

\expl{Unicode contains several more space characters, some of which are shown in
the following table:}

\begin{center}
\begin{threeparttable}
\begin{tabular}[c]{l | >{\raggedright}p{0.666\textwidth}}
  a b c & \expl{\emspaceC{}}\tabularnewline
  a b c & \expl{\emquad{} is canonically equivalent{\tnote{i} } to \emspaceC{}}\tabularnewline
  a b c & \expl{\enspaceC{}}\tabularnewline
  a b c & \expl{\enquad{} is canonically equivalent{\tnote{i} } to \enspaceC{}}\tabularnewline
  a b c & \expl{\threePerEm{}}\tabularnewline
  a b c & \expl{\fourPerEm{}}\tabularnewline
  a b c & \expl{\sixPerEm{}}\tabularnewline
  a b c & \expl{\figuresp{}}\tabularnewline
  a b c & \expl{\punctsp{}}\tabularnewline
  a b c & \expl{\thinsp{}}\tabularnewline
  a b c & \expl{\hairsp{}}\tabularnewline
  abc   & \expl{no spaces, for comparison}\tabularnewline
\end{tabular}
\begin{tablenotes}
\item[\expl{i}] \expl{\footnotesize See \url{http://unicode.org/notes/tn5/}
    for explanation of the term.}
\end{tablenotes}
\end{threeparttable}
\end{center}

\end{document}
