diff --git a/lib/doc/Customization.lyx b/lib/doc/Customization.lyx index 6059c60aa6..3a9abd7f61 100644 --- a/lib/doc/Customization.lyx +++ b/lib/doc/Customization.lyx @@ -1,5 +1,5 @@ #LyX 2.1 created this file. For more info see http://www.lyx.org/ -\lyxformat 470 +\lyxformat 471 \begin_document \begin_header \textclass scrbook @@ -110,7 +110,7 @@ End \use_package stmaryrd 0 \use_package undertilde 0 \cite_engine basic -\cite_engine_type numerical +\cite_engine_type default \biblio_style plain \use_bibtopic false \use_indices false @@ -9437,6 +9437,134 @@ literate \end_inset ] Specifies what sort of output documents using this class will produce. +\change_inserted 1414654397 1369315909 + +\end_layout + +\begin_layout Description + +\change_inserted 1414654397 1369316059 +\begin_inset Flex Code +status collapsed + +\begin_layout Plain Layout + +\change_inserted 1414654397 1369315915 +PackageOptions +\end_layout + +\end_inset + + [ +\begin_inset Flex Code +status collapsed + +\begin_layout Plain Layout + +\change_inserted 1414654397 1369315909 +string +\end_layout + +\end_inset + + +\begin_inset Flex Code +status collapsed + +\begin_layout Plain Layout + +\change_inserted 1414654397 1369315919 +string +\end_layout + +\end_inset + +] Specifies options, given in the second string, for the package named by + the first string. + For example, +\begin_inset Quotes eld +\end_inset + + +\begin_inset Flex Code +status open + +\begin_layout Plain Layout + +\change_inserted 1414654397 1369315957 +PackageOptions natbib square +\change_unchanged + +\end_layout + +\end_inset + + +\begin_inset Quotes erd +\end_inset + + will cause +\begin_inset Flex Code +status open + +\begin_layout Plain Layout + +\change_inserted 1414654397 1369315966 +natbib +\change_unchanged + +\end_layout + +\end_inset + + to be loaded with the +\begin_inset Flex Code +status open + +\begin_layout Plain Layout + +\change_inserted 1414654397 1369315985 +square +\change_unchanged + +\end_layout + +\end_inset + + option. + (For TeXperts, this causes LyX to output: +\begin_inset Flex Code +status open + +\begin_layout Plain Layout + +\change_inserted 1414654397 1369316019 + +\backslash +PassOptionsToPackage{natbib}{square} +\change_unchanged + +\end_layout + +\end_inset + + prior to loading +\begin_inset Flex Code +status open + +\begin_layout Plain Layout + +\change_inserted 1414654397 1369316061 +natbib +\change_unchanged + +\end_layout + +\end_inset + +.) +\change_unchanged + \end_layout \begin_layout Description diff --git a/lib/scripts/layout2layout.py b/lib/scripts/layout2layout.py index 1a39618f61..98cdb94bed 100644 --- a/lib/scripts/layout2layout.py +++ b/lib/scripts/layout2layout.py @@ -157,6 +157,9 @@ import os, re, string, sys # Incremented to format 46, 15 May 2013 by gb # New Tag "ForceLocal" +# Incremented to format 47, 23 May 2013 by rgh +# Add PackageOptions tag + # Do not forget to document format change in Customization # Manual (section "Declaring a new text class"). @@ -164,7 +167,7 @@ import os, re, string, sys # development/tools/updatelayouts.sh script to update all # layout files to the new format. -currentFormat = 46 +currentFormat = 47 def usage(prog_name): @@ -381,7 +384,7 @@ def convert(lines): i += 1 continue - if format == 44 or format == 45: + if format >= 44 and format <= 46: # nothing to do. i += 1 continue diff --git a/src/LaTeXFeatures.cpp b/src/LaTeXFeatures.cpp index ece463005c..88a5d281e9 100644 --- a/src/LaTeXFeatures.cpp +++ b/src/LaTeXFeatures.cpp @@ -825,20 +825,25 @@ string const LaTeXFeatures::getPackages() const // also unknown packages can be requested. They are silently // swallowed now. We should change this eventually. - // + // Output all the package option stuff we have been asked to do. + map::const_iterator it = + params_.documentClass().packageOptions().begin(); + map::const_iterator en = + params_.documentClass().packageOptions().end(); + for (; it != en; ++it) + if (mustProvide(it->first)) + packages << "\\PassOptionsToPackage{" << it->second << "}{" + << it->first << "}\n"; + // These are all the 'simple' includes. i.e // packages which we just \usepackage{package} - // for (int i = 0; i < nb_simplefeatures; ++i) { if (mustProvide(simplefeatures[i])) - packages << "\\usepackage{" - << simplefeatures[i] << "}\n"; + packages << "\\usepackage{" << simplefeatures[i] << "}\n"; } - // // The rest of these packages are somewhat more complicated // than those above. - // // if fontspec is used, AMS packages have to be loaded before // fontspec (in BufferParams) diff --git a/src/TextClass.cpp b/src/TextClass.cpp index a4f0857c28..1fcdb2d372 100644 --- a/src/TextClass.cpp +++ b/src/TextClass.cpp @@ -61,7 +61,7 @@ namespace lyx { // development/tools/updatelayouts.sh script, to update the format of // all of our layout files. // -int const LAYOUT_FORMAT = 46; // gb: New Tag "ForceLocal" +int const LAYOUT_FORMAT = 47; //rgh: package options namespace { @@ -197,6 +197,7 @@ enum TextClassTags { TC_HTMLSTYLES, TC_PROVIDES, TC_REQUIRES, + TC_PKGOPTS, TC_LEFTMARGIN, TC_RIGHTMARGIN, TC_FLOAT, @@ -256,6 +257,7 @@ LexerKeyword textClassTags[] = { { "nostyle", TC_NOSTYLE }, { "outputformat", TC_OUTPUTFORMAT }, { "outputtype", TC_OUTPUTTYPE }, + { "packageoptions", TC_PKGOPTS }, { "pagestyle", TC_PAGESTYLE }, { "preamble", TC_PREAMBLE }, { "provides", TC_PROVIDES }, @@ -633,6 +635,15 @@ TextClass::ReturnValues TextClass::read(Lexer & lexrc, ReadType rt) requires_.insert(req.begin(), req.end()); break; } + + case TC_PKGOPTS : { + lexrc.next(); + string const pkg = lexrc.getString(); + lexrc.next(); + string const options = lexrc.getString(); + package_options_[pkg] = options; + break; + } case TC_DEFAULTMODULE: { lexrc.next(); diff --git a/src/TextClass.h b/src/TextClass.h index faacfa0bbd..2a9a00cba4 100644 --- a/src/TextClass.h +++ b/src/TextClass.h @@ -277,6 +277,8 @@ protected: std::set provides_; /// latex packages requested by document class. std::set requires_; + /// + std::map package_options_; /// default modules wanted by document class LayoutModuleList default_modules_; /// modules provided by document class @@ -435,6 +437,9 @@ public: bool provides(std::string const & p) const; /// features required by the class? std::set const & requires() const { return requires_; } + /// package options to write to LaTeX file + std::map const & packageOptions() const + { return package_options_; } /// unsigned int columns() const { return columns_; } ///