I think this works:
\makeatletter
\AtEveryCitekey{%
\blx@langsetup\abx@field@hyphenation%
\blx@hyphenreset%
}
\makeatother
In \abx@field@hyphenation
is hyphenation value. Probably it needs some testing, if it is set.
edit:
Some time ago, I was looking at biblatex language switching because of problem with my citation style[1]. I didn't understand this code at all, so I ended with ugly hack[2].
But when I looked yesterday on biblatex's patch of babel you posted, I have found line
\blx@langsetup\languagename\select@language
Function \blx@langsetup
uses edef
to define \blx@languagename
, which is used by macro \blx@hyphenreset
to load hyphenation patterns, and then loads localization strings for given language. So in fact, instead of
\blx@langsetup\abx@field@hyphenation%
it is possible to use just
\edef\blx@languagename{\abx@field@hyphenation}%
Then there is problem with French language. When used as the main document language, instead of
... (Fis-
el 1985)...
there is
...(FISCHEL
1985)...
I think there is issue only with French, I tried Czech, Russian and Spanish and they worked correctly.
With babel
, we can solve this issue with
\select@language\abx@field@hyphenation%
but, polyglossia
in xelatex has same issue and this trick is there not working, I don't know how to fix that.
Anyway, if you don't need French with polyglossia
, this is the current solution
\makeatletter
\AtEveryCitekey{%
\ifcsdef{abx@field@hyphenation}{%
\edef\blx@languagename{\abx@field@hyphenation}%
\select@language\abx@field@hyphenation%
\blx@hyphenreset%
}{}%
}
\makeatother
[1] Biblatex - using two languages in one reference entry
[2] Biblatex - using two languages in one reference entry
The hyphenrules
environment just changes the language; moreover \hyphenation
commands are always global and refer to the current language, so this is the best strategy
\documentclass[draft]{article}
\usepackage[ngerman,english]{babel}
\hyphenation{pot-able}
\begin{hyphenrules}{ngerman}
\hyphenation{mord-op-fer}
\end{hyphenrules}
\begin{document}
...
\end{document}
You can also, for greater clarity, insert the first \hyphenation
command in a proper hyphenrules
environment.
A useful addition to babel
might be the following
\makeatletter
\let\@@hyphenation\hyphenation
\renewcommand{\hyphenation}[2][\languagename]{%
\begingroup
\@ifundefined{l@#1}
{\@nolanerr{#1}}
{\bbl@patterns{#1}%
\languageshorthands{none}%
\@@hyphenation{#2}}%
\endgroup
}
\makeatother
so that the previous input could become
\hyphenation{pot-able} % or \hyphenation[english]{pot-able}
\hyphenation[ngerman]{mord-op-fer}
Best Answer