Add support for package options in layout files. E.g.:

PackageOption tipa safe will load tipa with the
 "safe" option, if we load it.
This commit is contained in:
Richard Heck 2013-05-23 09:25:40 -04:00
parent de49a2df73
commit 1230372566
5 changed files with 163 additions and 11 deletions

View File

@ -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

View File

@ -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

View File

@ -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<string, string>::const_iterator it =
params_.documentClass().packageOptions().begin();
map<string, string>::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)

View File

@ -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();

View File

@ -277,6 +277,8 @@ protected:
std::set<std::string> provides_;
/// latex packages requested by document class.
std::set<std::string> requires_;
///
std::map<std::string, std::string> 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<std::string> const & requires() const { return requires_; }
/// package options to write to LaTeX file
std::map<std::string, std::string> const & packageOptions() const
{ return package_options_; }
///
unsigned int columns() const { return columns_; }
///