From f4dd0ba56116a036f50674396e69ec3d48bf9625 Mon Sep 17 00:00:00 2001 From: Georg Baum Date: Wed, 26 Feb 2014 20:43:04 +0100 Subject: [PATCH] Load listings after babel (bug #8995) Babel makes the character ':' active in french documents, and the listings package cannot cope with that if it is loaded before babel. If it is loaded after babel it works. This makes the french EmbeddedObjects manual compilable. --- src/BufferParams.cpp | 38 ++++++++++++++++++++++---------------- 1 file changed, 22 insertions(+), 16 deletions(-) diff --git a/src/BufferParams.cpp b/src/BufferParams.cpp index 77769b2ab2..3b85ff7a19 100644 --- a/src/BufferParams.cpp +++ b/src/BufferParams.cpp @@ -1280,6 +1280,15 @@ void BufferParams::validate(LaTeXFeatures & features) const if (pdfoptions().colorlinks) features.require("color"); } + if (!listings_params.empty()) { + // do not test validity because listings_params is + // supposed to be valid + string par = + InsetListingsParams(listings_params).separatedParams(true); + // we can't support all packages, but we should load the color package + if (par.find("\\color", 0) != string::npos) + features.require("color"); + } // some languages are only available via polyglossia if (features.runparams().flavor == OutputParams::XETEX @@ -1530,21 +1539,6 @@ bool BufferParams::writeLaTeX(otexstream & os, LaTeXFeatures & features, os << "}\n"; } - if (!listings_params.empty() || features.isRequired("listings")) - os << "\\usepackage{listings}\n"; - - if (!listings_params.empty()) { - os << "\\lstset{"; - // do not test validity because listings_params is - // supposed to be valid - string par = - InsetListingsParams(listings_params).separatedParams(true); - // we can't support all packages, but we should load the color package - if (par.find("\\color", 0) != string::npos) - features.require("color"); - os << from_utf8(par) - << "}\n"; - } if (!features.isProvided("geometry") && (use_geometry || nonstandard_papersize)) { odocstringstream ods; @@ -1943,7 +1937,8 @@ bool BufferParams::writeLaTeX(otexstream & os, LaTeXFeatures & features, + atlyxpreamble + "\\makeatother\n\n"; // We try to load babel late, in case it interferes with other packages. - // Jurabib, hyperref and varioref have to be called after babel, though. + // Jurabib, hyperref, varioref and listings (bug 8995) have to be + // called after babel, though. if (use_babel && !features.isRequired("jurabib") && !features.isRequired("hyperref") && !features.isRequired("varioref") @@ -1955,6 +1950,17 @@ bool BufferParams::writeLaTeX(otexstream & os, LaTeXFeatures & features, features.needBabelLangOptions())) + '\n'; lyxpreamble += from_utf8(features.getBabelPostsettings()); } + if (!listings_params.empty() || features.isRequired("listings")) + lyxpreamble += "\\usepackage{listings}\n"; + if (!listings_params.empty()) { + lyxpreamble += "\\lstset{"; + // do not test validity because listings_params is + // supposed to be valid + string par = + InsetListingsParams(listings_params).separatedParams(true); + lyxpreamble += from_utf8(par); + lyxpreamble += "}\n"; + } // xunicode needs to be loaded at least after amsmath, amssymb, // esint and the other packages that provide special glyphs