In a LaTeX document I'm writing, I get an overfull hbox warning because of the word "multi-disciplinary", which happens to be rendered at the end of a line.
I can get rid of this particular warning by changing it into multi-discipli\-nary
, but the same problem will happen elsewhere, since this word is used a lot in the paper.
I'd like to use the \hyphenation{}
command instead, but obviously my tentative \hyphenation{multi-disci-pli-na-ry}
does not work, because it does not understand the first dash correctly.
What incantation do I need to get correct indentation in a word that already contains a dash?
Bonus question: Where could I have found the answer to that question myself?
This question is related to
latex
hyphenation
I had the same problem. I use hyphenat plus the following macro:
\RequirePackage{hyphenat}
\RequirePackage{expl3}
% The following defs make sure words that contain an explicit `-` (hyphen) are still hyphenated the normal way, and double- and triple hyphens keep working the way they should. Just don't use a `-` as the last token of your document. Also note that `-` is now a macro that is not fully expandable
\ExplSyntaxOn
% latex2e doesn't like commands starting with 'end', apparently expl3 doesn't have any problems with it
\cs_new:Npn \hyphenfix_emdash:c {---}
\cs_new:Npn \hyphenfix_endash:c {--}
\cs_new:Npn \hyphenfix_discardnext:NN #1#2{#1}
\catcode`\-=\active
\cs_new_protected:Npn -{
\futurelet\hyphenfix_nexttok\hyphenfix_i:w
}
\cs_new:Npn \hyphenfix_i:w {
\cs_if_eq:NNTF{\hyphenfix_nexttok}{-}{
%discard the next `-` token
\hyphenfix_discardnext:NN{\futurelet\hyphenfix_nexttok\hyphenfix_ii:w}
}{
% from package hyphenat
\hyp
}
}
\cs_new:Npn \hyphenfix_ii:w {
\cs_if_eq:NNTF{\hyphenfix_nexttok}{-}{
\hyphenfix_discardnext:NN{\hyphenfix_emdash:c}
}{
\hyphenfix_endash:c
}
}
\ExplSyntaxOff
Note that this uses the expl3 package from latex3.
It makes the -
an active character that scans forward to see if it is followed by more dashes. If so, it stays a -
, to make sure --
and ---
keep working. If not, it becomes the \hyp
command from hyphenat, enabling word breaks in the rest of the word. This is a generic solution that makes all words that contain explicit hyphens hyphenate normally.
Note that -
becomes a macro that is not fully expandable, so try to include this after loading other packages that may not expect -
to be a macro
Edit: This is my second version, the first version was less robust when a {
or }
followed a hyphen. This one is not, but unlike the first version the -
in this version is not fully expandable.
To avoid hyphenation in already hyphenated word I used non-breaking space ~
in combination with backward space \!
. For example, command
3~\!\!\!\!-~\!\!\!D
used in the text, suppress hyphenation in word 3-D. Probably not the best solution, but it worked for me!
I use package hyphenat
and then write compound words like Finnish word Internet-yhteys (Eng. Internet connection) as Internet\hyp yhteys
. Looks goofy but seems to be the most elegant way I've found.
I answered something similar here: LaTeX breaking up too many words
I said:
you should set a hyphenation penalty somewhere in your preamble:
\hyphenpenalty=750
The value of 750 suited my needs for a two column layout on letter paper (8.5x11 in) with a 12 pt font. Adjust the value to suit your needs. The higher the number, the less hyphenation will occur. You may also want to have a look at the hyphenatpackage, it provides a bit more than just hyphenation penalty
multi-disciplinary
will not be hyphenated, as explained by kennytm. But multi-\-disciplinary
has the same hyphenation opportunities that multidisciplinary
has.
I admit that I don't know why this works. It is different from the behaviour described here (emphasis mine):
The command
\-
inserts a discretionary hyphen into a word. This also becomes the only point where hyphenation is allowed in this word.
multi\hskip0pt-\hskip0pt disciplinary
You can e.g. define like
\def\:{\hskip0pt}
and then write
multi\:-\:disciplinary
Note that the babel Russian language package has its own set of dashes that do not prohibit hyphenation, "~
(double quotation+tilde) for example.
The problem (as KennyTM noted) is that LaTeX won't hyphenate words with dashes in them. Luckily, there's a standard package (part of ncctools) that addresses that very problem, called extdash
. This defines new hyphen and dash commands that do not disrupt hyphenation, and which can allow or prevent line breaks at the hyphen/dash. I prefer to use it with the shortcuts
option, so I can use, e.g., \-/
rather than \Hyphdash
. Here's what you want:
\usepackage[shortcuts]{extdash}
...
multi\-/disciplinary
To prevent breaking at that hyphen, use multi\=/disciplinary
(Aside: The Chicago Manual of Style advises dropping the hyphens attaching affixes like 'multi', unless the word is ambiguous or unintelligible without it.)
Source: Stackoverflow.com