// The optional packages;
docstring lyxpreamble(from_ascii(features.getPackages()));
+ // We try to load babel late, in case it interferes
+ // with other packages. But some packages also need babel to be loaded
+ // before, e.g. jurabib has to be called after babel.
+ // So load babel after the optional packages but before the user-defined
+ // preamble. This allows the users to redefine babel commands, e.g. to
+ // translate the word "Index" to the German "Stichwortverzeichnis".
+ // For more infos why this place was chosen, see
+ // http://www.mail-archive.com/lyx-devel@lists.lyx.org/msg128425.html
+ // if you encounter problem, you can shift babel to its old place behind
+ // the user-defined preamble
+ if (use_babel && !features.isRequired("jurabib")) {
+ // FIXME UNICODE
+ lyxpreamble += from_utf8(babelCall(language_options.str())) + '\n';
+ lyxpreamble += from_utf8(features.getBabelOptions());
+ }
+
+ // PDF support.
+ // * Hyperref manual: "Make sure it comes last of your loaded
+ // packages, to give it a fighting chance of not being over-written,
+ // since its job is to redefine many LATEX commands."
+ // * Email from Heiko Oberdiek: "It is usually better to load babel
+ // before hyperref. Then hyperref has a chance to detect babel.
+ // * Has to be loaded before the "LyX specific LaTeX commands" to
+ // avoid errors with algorithm floats.
+ odocstringstream oss;
+ pdfoptions().writeLaTeX(oss);
+ lyxpreamble += oss.str();
+
// this might be useful...
lyxpreamble += "\n\\makeatletter\n";
if (!bullets_def.empty())
lyxpreamble += bullets_def + "}\n\n";
- // We try to load babel late, in case it interferes
- // with other packages.
- // Jurabib has to be called after babel, though.
- if (use_babel && !features.isRequired("jurabib")) {
- // FIXME UNICODE
- lyxpreamble += from_utf8(babelCall(language_options.str())) + '\n';
- lyxpreamble += from_utf8(features.getBabelOptions());
- }
-
- // PDF support. Hypreref manual: "Make sure it comes last of your loaded
- // packages, to give it a fighting chance of not being over-written,
- // since its job is to redefine many LATEX commands."
- // Has to be put into lyxpreamble (preserving line-counting for error
- // parsing).
- odocstringstream oss;
- pdfoptions().writeLaTeX(oss);
- lyxpreamble += oss.str();
-
lyxpreamble += "\\makeatother\n\n";
int const nlines =