How can I make a pair of words stick together in line breaks?
You do not need to define any macro.
Simply learn to type MS~Access. The tilde is TeX's syntax for preventing a break. (IIRC, how it works is that it creates a very high penalty for a break at that spot.)
The macro business in the other answers is a red herring. The tilde does the work, whether in a macro expansion or not.
The correct answer may be to put the two word in an \mbox{keep together}
. Then you avoid hyphenation, but not overfull lines.
You may define a macro to help you save some time when writing:
\newcommand{\MSaccess}{\textsc{ms~access}}
The flip side is that macros eat spaces. Therefore, in you text, you have to write \MSaccess{}
to avoid that a space following the macros disappears. You may try to load the package xspace, and define the command as:
\newcommand{\MSaccessx}{\textsc{ms~access}\xspace}
Unfortunately, there are situations where xspace
does not work, and it may be better to define the command using the TeX
-command def
:
\def\MSA/{\mbox{\textsc{ms~access}}}
Then, you can write \MSA/
(notice the slash), and LaTeX
will not eat a following space. Unfortunately, such commands may be awkward to type keyboards other than US-English.
If you use small caps in your macro, be sure that the font you use has real small caps, and of course, small caps has to be letterspaced (see Bringhurst, The Elements of Typographic Style). Actually, also the MS
should be letterspaced according to Bringhurst.
I agree with Anon in his answer: Typographically a line break between MS
and Access
looks better than a sloppy paragraph or an overfull line (a line sticking out in the right margin). Even worse
will be that `Ac-
cess` is hyphenated.
I suggest that you write your article, and when your are finished, as the last touch up when proof reading, you check the line breaks to see if you have places where there is a line break between MS
and Access
(or Access is hyphenated) and then put the words in an \mbox{MS Access}
.
This MWE demonstrates some of the differences:
\documentclass[onepage]{article}
\usepackage{lmodern,xspace}
\usepackage[utf8]{inputenx}
\usepackage[T1]{fontenc}
\newcommand{\MSaccess}{\textsc{MS}~Access} % NB! \textsc has no effect
\newcommand{\MSaccessx}{\textsc{MS}~Access\xspace}
\def\MSA/{\mbox{\textsc{ms~access}}}
\begin{document}
\thispagestyle{empty}
Here is a text which only purpose is to demonstrate that
\MSaccess without \emph{xspace} eats spaces.
Here is the text which only purpose is to demonstrate the wonders
\emph{xspace} does for \MSaccessx and that \emph{xspace} does not eat spaces. But look here
«\MSaccessx», and how we get a space before the nice, French citation mark (NB!
\emph{xspace} may be configured to avoid this).
And here is the eminent `def`-macro that does not eat any spaces, as I state,
\MSA/ is OK, and does not fail because of strange punctuation, «\MSA/».
\end{document}
I don't know if there's a built-in mechanism like \hyphenation
for this, but you could simply define own commands for such word groups, for example
\newcommand{\MSaccess}{MS~Access}
which you then can use in the text.
Usage:
Some random text \MSaccess{}, some more text...
should output
Some random text MS Access, some more text
where there is no line break allowed between MS
and Access
.
As user Sveinung pointed out in the comments, the above command will still allow hyphenation of the involved words, i.e. MS<linebreak>Access
would be forbidden, but LaTeX
could possibly hyphenate it toMS Ac-<linebreak>cess
. This may be OK in some cases, especially when the words that should be kept together are rather long. If also hyphenation shall not be allowed, one can change the command from above to
\newcommand{\MSaccess}{\mbox{MS Access}}
which will then also prevent hyphenation.