: pimpl_(new Impl)
{
setBaseClass(defaultBaseclass());
- cite_engine_.push_back("basic");
+ cite_engine_ = "basic";
cite_engine_type_ = ENGINE_TYPE_DEFAULT;
makeDocumentClass();
paragraph_separation = ParagraphIndentSeparation;
use_package(package, packagetranslator().find(use));
} else if (token == "\\cite_engine") {
lex.eatLine();
- vector<string> engine = getVectorFromString(lex.getString());
- setCiteEngine(engine);
+ cite_engine_ = lex.getString();
} else if (token == "\\cite_engine_type") {
string engine_type;
lex >> engine_type;
os << "\n\\cite_engine ";
- if (!cite_engine_.empty()) {
- LayoutModuleList::const_iterator be = cite_engine_.begin();
- LayoutModuleList::const_iterator en = cite_engine_.end();
- for (LayoutModuleList::const_iterator it = be; it != en; ++it) {
- if (it != be)
- os << ',';
- os << *it;
- }
- } else {
+ if (!cite_engine_.empty())
+ os << cite_engine_;
+ else
os << "basic";
- }
os << "\n\\cite_engine_type " << theCiteEnginesList.getTypeAsString(cite_engine_type_);
bool const use_babel = features.useBabel() && !features.isProvided("babel");
bool const use_polyglossia = features.usePolyglossia();
bool const global = lyxrc.language_global_options;
- if (use_babel || (use_polyglossia && global)) {
+ if (features.useBabel() || (use_polyglossia && global)) {
language_options << features.getBabelLanguages();
if (!language->babel().empty()) {
if (!language_options.str().empty())
os << "\\usepackage{unicode-math}\n";
}
+ // load CJK support package before font selection
+ // (see autotests/export/latex/CJK/micro-sign_utf8-cjk-libertine.lyx)
+ if (!useNonTeXFonts && encoding().package() != Encoding::none
+ && (encoding().package() == Encoding::CJK || features.mustProvide("CJK"))) {
+ if (encoding().iconvName() == "UTF-8"
+ && LaTeXFeatures::isAvailable("CJKutf8"))
+ os << "\\usepackage{CJKutf8}\n";
+ else
+ os << "\\usepackage[encapsulated]{CJK}\n";
+ }
+
// font selection must be done before loading fontenc.sty
string const fonts = loadFonts(features);
if (!fonts.empty())
<< "\\makeatother\n\n";
// We try to load babel late, in case it interferes with other packages.
- // Jurabib, hyperref, varioref, bicaption and listings (bug 8995) have to be
- // called after babel, though.
+ // Jurabib, hyperref, varioref, bicaption, menukeys and listings (bug 8995)
+ // have to be called after babel, though.
if (use_babel && !features.isRequired("jurabib")
&& !features.isRequired("hyperref")
&& !features.isRequired("varioref")
if (!listings_params.empty()
|| features.mustProvide("listings")
|| features.mustProvide("minted")) {
- if (features.mustProvide("listings"))
- os << "\\usepackage{listings}\n";
- else
+ if (use_minted)
os << "\\usepackage{minted}\n";
- }
- if (!listings_params.empty()) {
- if (features.mustProvide("listings"))
- os << "\\lstset{";
else
+ os << "\\usepackage{listings}\n";
+ }
+ string lst_params = listings_params;
+ // If minted, do not output the language option (bug 11203)
+ if (use_minted && contains(lst_params, "language=")) {
+ vector<string> opts =
+ getVectorFromString(lst_params, ",", false);
+ for (size_t i = 0; i < opts.size(); ++i) {
+ if (prefixIs(opts[i], "language="))
+ opts.erase(opts.begin() + i--);
+ }
+ lst_params = getStringFromVector(opts, ",");
+ }
+ if (!lst_params.empty()) {
+ if (use_minted)
os << "\\setminted{";
+ else
+ os << "\\lstset{";
// do not test validity because listings_params is
// supposed to be valid
string par =
- InsetListingsParams(listings_params).separatedParams(true);
+ InsetListingsParams(lst_params).separatedParams(true);
os << from_utf8(par);
os << "}\n";
}
os << "\\usepackage{xunicode}\n";
}
+ // covington must be loaded after beamerarticle
+ if (features.isRequired("covington"))
+ os << "\\usepackage{covington}\n";
+
// Polyglossia must be loaded last ...
if (use_polyglossia) {
// call the package
opts += delim + "backend=bibtex";
delim = ",";
}
+ if (!bib_encoding.empty() && encodings.fromLyXName(bib_encoding)) {
+ opts += delim + "bibencoding="
+ + encodings.fromLyXName(bib_encoding)->latexName();
+ delim = ",";
+ }
if (!biblio_opts.empty())
opts += delim + biblio_opts;
if (!opts.empty())
os << '\n';
}
+ // Since menukeys uses catoptions, which does some heavy changes on key-value options,
+ // it is recommended to load menukeys as the last package (even after hyperref)
+ if (features.isRequired("menukeys"))
+ os << "\\usepackage{menukeys}\n";
+
docstring const i18npreamble =
features.getTClassI18nPreamble(use_babel, use_polyglossia,
use_minted);
}
-bool BufferParams::setBaseClass(string const & classname)
+bool BufferParams::setBaseClass(string const & classname, string const & path)
{
LYXERR(Debug::TCLASS, "setBaseClass: " << classname);
LayoutFileList & bcl = LayoutFileList::get();
bcl.addEmptyClass(classname);
}
- bool const success = bcl[classname].load();
+ bool const success = bcl[classname].load(path);
if (!success) {
docstring s =
bformat(_("Due to some error in it, the layout file:\n"
invalidateConverterCache();
LayoutModuleList mods;
- LayoutModuleList ces;
LayoutModuleList::iterator it = layout_modules_.begin();
LayoutModuleList::iterator en = layout_modules_.end();
for (; it != en; ++it)
mods.push_back(*it);
- it = cite_engine_.begin();
- en = cite_engine_.end();
- for (; it != en; ++it)
- ces.push_back(*it);
-
- doc_class_ = getDocumentClass(*baseClass(), mods, ces, clone);
+ doc_class_ = getDocumentClass(*baseClass(), mods, cite_engine_, clone);
TextClass::ReturnValues success = TextClass::OK;
if (!forced_local_layout_.empty())
}
-bool BufferParams::citationModuleCanBeAdded(string const & modName) const
-{
- return cite_engine_.moduleCanBeAdded(modName, baseClass());
-}
-
-
docstring BufferParams::getLocalLayout(bool forced) const
{
if (forced)
else
os << "]{inputenc}\n";
}
- if (package == Encoding::CJK || features.mustProvide("CJK")) {
- if (language->encoding()->name() == "utf8-cjk"
- && LaTeXFeatures::isAvailable("CJKutf8"))
- os << "\\usepackage{CJKutf8}\n";
- else
- os << "\\usepackage{CJK}\n";
- }
} else if (inputenc != "default") {
switch (encoding().package()) {
case Encoding::none:
+ case Encoding::CJK:
case Encoding::japanese:
break;
case Encoding::inputenc:
else
os << "]{inputenc}\n";
break;
- case Encoding::CJK:
- if (encoding().name() == "utf8-cjk"
- && LaTeXFeatures::isAvailable("CJKutf8"))
- os << "\\usepackage{CJKutf8}\n";
- else
- os << "\\usepackage{CJK}\n";
- break;
- }
- // Load the CJK package if needed by a secondary language.
- // If the main encoding is some variant of UTF8, use CJKutf8.
- if (encoding().package() != Encoding::CJK && features.mustProvide("CJK")) {
- if (encoding().iconvName() == "UTF-8"
- && LaTeXFeatures::isAvailable("CJKutf8"))
- os << "\\usepackage{CJKutf8}\n";
- else
- os << "\\usepackage{CJK}\n";
}
}
}
}
-bool BufferParams::addCiteEngine(string const & engine)
-{
- LayoutModuleList::const_iterator it = cite_engine_.begin();
- LayoutModuleList::const_iterator en = cite_engine_.end();
- for (; it != en; ++it)
- if (*it == engine)
- return false;
- cite_engine_.push_back(engine);
- return true;
-}
-
-
-bool BufferParams::addCiteEngine(vector<string> const & engine)
-{
- vector<string>::const_iterator it = engine.begin();
- vector<string>::const_iterator en = engine.end();
- bool ret = true;
- for (; it != en; ++it)
- if (!addCiteEngine(*it))
- ret = false;
- return ret;
-}
-
-
string const & BufferParams::defaultBiblioStyle() const
{
if (!biblio_style.empty())
}
-void BufferParams::setCiteEngine(string const & engine)
-{
- clearCiteEngine();
- addCiteEngine(engine);
-}
-
-
-void BufferParams::setCiteEngine(vector<string> const & engine)
-{
- clearCiteEngine();
- addCiteEngine(engine);
-}
-
-
vector<string> BufferParams::citeCommands() const
{
static CitationStyle const default_style;
bool BufferParams::useBiblatex() const
{
- return theCiteEnginesList[citeEngine().list().front()]
- ->getCiteFramework() == "biblatex";
+ return theCiteEnginesList[citeEngine()]->getCiteFramework() == "biblatex";
}
pimpl_->isViewCacheValid = false;
}
+
+// We shouldn't need to reset the params here, since anything
+// we need will be recopied.
+void BufferParams::copyForAdvFR(const BufferParams & bp)
+{
+ string const & lang = bp.language->lang();
+ setLanguage(lang);
+ layout_modules_ = bp.layout_modules_;
+ string const & doc_class = bp.documentClass().name();
+ setBaseClass(doc_class);
+}
+
} // namespace lyx