# How to avoid linebreak after command and before period?

I use XeLaTeX with the memoir class to typeset my linguistics thesis. In the running text, I often mention prefixes, which have a following hyphen. For example: "un- is an inherited Germanic negation prefix".

Now, sometimes this prefix will be before a comma, or at the end of a sentence. And sometimes, LaTeX will insert a linebreak after the hyphen, but before the period. Here's a MWE:

\documentclass[a4paper,
openright,
oneside,
12pt,
]{memoir}
\usepackage{fontspec}
\usepackage{geometry}
\setmainfont{Linux Libertine}

\begin{document}
\noindent In (6.269), the first person pronoun \textit{wɨ} co-occurs with the coreferential bound marker \textit{j-}.
For Wayana, Tavares (2005: 413) states that first and second person pronouns cannot occur in P position.
\end{document}


Here's what it looks like:

Now, I don't understand why LaTeX would allow a period at the start of the beginning. The OP of How to avoid a linebreak before a comma? was also wondering that, but no satisfying solution was found there. I have also seen Line break after command, before period, which features a non-basic custom command.

Any ideas?

• A simple solution would be to use an en dash – instead of a hyphen -. I actually prefer that for citation forms of morphemes. – Alan Munn Oct 19 '20 at 14:14
• While this might be a solution for some individual cases, it is not a general solution. In my specific MWE, it does not work -- the only difference is the length of the line, but the linebreak is the same! – folran Oct 19 '20 at 14:32
• It certainly works for me with your MWE as posted. – Alan Munn Oct 19 '20 at 14:35
• For me, this code does not work, and I think I've used a standard en-dash?  \documentclass[a4paper, openright, oneside, 12pt, ]{memoir} \usepackage{fontspec} \usepackage{geometry} \setmainfont{Linux Libertine} \begin{document} \noindent In (6.269), the first person pronoun \textit{wɨ} co-occurs with the coreferential bound marker \textit{j–}. For Wayana, Tavares (2005: 413) states that first and second person pronouns cannot occur in P position. \end{document}  – folran Oct 19 '20 at 14:48
• You mean you still get the linebreak after the en dash? – Alan Munn Oct 19 '20 at 14:52

The problem arises because TeX thinks a that a hyphen is always a good place to break a line. It doesn't really know about the beginning of the line, in the sense that it can avoid putting a . there. So a word that ends with hyphen will always potentially pose this problem.

You can use the solution adopted by the ngerman language definition file to create a non-breaking hyphen as discussed in the first question you link to How to avoid a linebreak before a comma?. Here I've just made a \nbhyphen command to introduce a no-break hyphen. Alternatively, you could define a \prefix macro which would add the hyphen automatically. I've replaced your \textit with \emph since you want the formatting of words/morphemes to revert automatically to upright if they are themselves embedded in \emph.

\documentclass[a4paper,
openright,
oneside,
12pt,
]{memoir}
\usepackage{fontspec}
\usepackage[english]{babel} % for textormath macro
\usepackage{geometry}
\setmainfont{Linux Libertine O}
\providecommand{\texorpdfstring}[2]{#1}
\newcommand\nbhyphen
{%
\texorpdfstring{\textormath{\leavevmode\hbox{-}}{-}}% tex string
{-}% PDF string
}
\newcommand\prefix[1]{#1\nbhyphen}

\begin{document}

% use \nbhyphen
\noindent In (6.269), the first person pronoun \emph{wɨ} co-occurs with the coreferential bound marker \emph{j\nbhyphen}.
For Wayana, Tavares (2005: 413) states that first and second person pronouns cannot occur in P position.

% alternate syntax: make a command for prefix
\noindent In (6.269), the first person pronoun \emph{wɨ} co-occurs with the coreferential bound marker \emph{\prefix{j}}.
For Wayana, Tavares (2005: 413) states that first and second person pronouns cannot occur in P position.

\end{document}


If luatex with babel is an option, you can use the tools provided by the latter to deal with special hyphenation cases. In this particular case, the following should work:

\usepackage[english]{babel}

\babelposthyphenation{english}{={.}} % (1)
{ { pre = -, no= -, penalty = 10000 },  % (2)
{}, % (3)
}


The pattern (1) means ‘explicit hyphen followed by a dot’ (the braces around the dot prevent it from being interpreted as ‘any character’, as customary in regexps). The second argument reinserts the explicit hyphen with a penalty (2), and then retains the second char (the dot, 3). See Non–standard hyphenation with luatex.

If you frequently show prefixes, it's better to define a suitable command for them, so you can decide even at the last moment how to print them.

\documentclass[
a4paper,
openright,
oneside,
12pt,
]{memoir}
\usepackage{geometry}
\usepackage{fontspec}

\setmainfont{Linux Libertine O}

\newcommand{\prefix}[1]{\mbox{\textit{#1-}}}

\begin{document}

\subsubsection*{Original}

\noindent In (6.269), the first person pronoun \textit{wɨ} co-occurs with
the coreferential bound marker \textit{j-}. For Wayana, Tavares (2005: 413)
states that first and second person pronouns cannot occur in P position.

\subsubsection*{With macro}

\noindent In (6.269), the first person pronoun \textit{wɨ} co-occurs with
the coreferential bound marker \prefix{j}. For Wayana, Tavares~(2005:~413)
states that first and second person pronouns cannot occur in P~position.

\end{document}


Note the ties I inserted in order to avoid possible bad breaks.