" {\\usefont{U}{lasy}{m}{n}\\char'51}%\n"
"}");
+static docstring const textquotedbl_def = from_ascii(
+ "\\DeclareTextSymbolDefault{\\textquotedbl}{T1}");
+
+static docstring const textquotedblp_xetex_def = from_ascii(
+ "\\providecommand\\textquotedblplain{%\n"
+ " \\bgroup\\addfontfeatures{Mapping=}\\char34\\egroup}");
+
+static docstring const textquotedblp_luatex_def = from_ascii(
+ "\\providecommand\\textquotedblplain{%\n"
+ " \\bgroup\\addfontfeatures{RawFeature=-tlig}\\char34\\egroup}");
+
+static docstring const textquotesinglep_xetex_def = from_ascii(
+ "\\providecommand\\textquotesingleplain{%\n"
+ " \\bgroup\\addfontfeatures{Mapping=}\\char39\\egroup}");
+
+static docstring const textquotesinglep_luatex_def = from_ascii(
+ "\\providecommand\\textquotesingleplain{%\n"
+ " \\bgroup\\addfontfeatures{RawFeature=-tlig}\\char39\\egroup}");
+
static docstring const paragraphleftindent_def = from_ascii(
"\\newenvironment{LyXParagraphLeftIndent}[1]%\n"
"{\n"
static docstring const changetracking_xcolor_ulem_def = from_ascii(
"%% Change tracking with ulem\n"
"\\DeclareRobustCommand{\\lyxadded}[3]{{\\color{lyxadded}{}#3}}\n"
- "\\DeclareRobustCommand{\\lyxdeleted}[3]{{\\color{lyxdeleted}\\sout{#3}}}\n");
+ "\\DeclareRobustCommand{\\lyxdeleted}[3]{{\\color{lyxdeleted}\\lyxsout{#3}}}\n"
+ "\\DeclareRobustCommand{\\lyxsout}[1]{\\ifx\\\\#1\\else\\sout{#1}\\fi}\n");
static docstring const changetracking_xcolor_ulem_hyperref_def = from_ascii(
"%% Change tracking with ulem\n"
"\\DeclareRobustCommand{\\lyxadded}[3]{{\\texorpdfstring{\\color{lyxadded}{}}{}#3}}\n"
- "\\DeclareRobustCommand{\\lyxdeleted}[3]{{\\texorpdfstring{\\color{lyxdeleted}\\sout{#3}}{}}}\n");
+ "\\DeclareRobustCommand{\\lyxdeleted}[3]{{\\texorpdfstring{\\color{lyxdeleted}\\lyxsout{#3}}{}}}\n"
+ "\\DeclareRobustCommand{\\lyxsout}[1]{\\ifx\\\\#1\\else\\sout{#1}\\fi}\n");
+
+static docstring const changetracking_tikz_math_sout_def = from_ascii(
+ "%% Strike out display math with tikz\n"
+ "\\usepackage{tikz}\n"
+ "\\usetikzlibrary{calc}\n"
+ "\\newcommand{\\lyxmathsout}[1]{%\n"
+ " \\tikz[baseline=(math.base)]{\n"
+ " \\node[inner sep=0pt,outer sep=0pt](math){#1};\n"
+ " \\draw($(math.south west)+(2em,.5em)$)--($(math.north east)-(2em,.5em)$);\n"
+ " }\n"
+ "}\n");
static docstring const changetracking_none_def = from_ascii(
"\\newcommand{\\lyxadded}[3]{#3}\n"
"\\DeclareTextCompositeCommand{\\c}{T1}{r}{\\textcommabelow{r}}\n"
"\\DeclareTextCompositeCommand{\\c}{T1}{R}{\\textcommabelow{R}}\n");
+// split-level fractions
+static docstring const xfrac_def = from_ascii(
+ "\\usepackage{xfrac}\n");
+static docstring const smallLetterFrac_def = from_ascii(
+ "\\DeclareCollectionInstance{smallLetterFrac}{xfrac}{default}{text}\n"
+ " {phantom=c, scale-factor=1.0, slash-left-kern=-.05em}\n"
+ "\\DeclareCollectionInstance{smallLetterFrac}{xfrac}{lmr}{text}\n"
+ " {slash-symbol-font=ptm, phantom=c, scale-factor=1, slash-left-kern=-.05em}\n"
+ "\\DeclareCollectionInstance{smallLetterFrac}{xfrac}{lmss}{text}\n"
+ " {slash-symbol-font=ptm, phantom=c, scale-factor=1, slash-left-kern=-.05em}\n"
+ "\\DeclareCollectionInstance{smallLetterFrac}{xfrac}{cmr}{text}\n"
+ " {slash-symbol-font=ptm, phantom=c, scale-factor=1, slash-left-kern=-.05em}\n"
+ "\\DeclareCollectionInstance{smallLetterFrac}{xfrac}{cmss}{text}\n"
+ " {slash-symbol-font=ptm, phantom=c, scale-factor=1, slash-left-kern=-.05em}\n"
+ "\\newcommand{\\smallLetterFrac}[2]{%\n"
+ " {\\UseCollection{xfrac}{smallLetterFrac}\\sfrac{#1}{#2}}}\n");
+
static docstring const lyxref_def = from_ascii(
"\\RS@ifundefined{subsecref}\n"
" {\\newref{subsec}{name = \\RSsectxt}}\n"
LaTeXFeatures::LaTeXFeatures(Buffer const & b, BufferParams const & p,
OutputParams const & r)
- : buffer_(&b), params_(p), runparams_(r), in_float_(false)
+ : buffer_(&b), params_(p), runparams_(r), in_float_(false),
+ in_deleted_inset_(false)
{}
if (params_.useNonTeXFonts)
return params_.documentClass().provides(name);
- bool const ot1 = (params_.font_encoding() == "default"
- || params_.font_encoding() == "OT1");
+ bool const ot1 = (params_.main_font_encoding() == "default"
+ || params_.main_font_encoding() == "OT1");
bool const complete = (params_.fontsSans() == "default"
&& params_.fontsTypewriter() == "default");
bool const nomath = (params_.fontsMath() == "default");
}
+vector<string> LaTeXFeatures::getPolyglossiaExclusiveLanguages() const
+{
+ vector<string> result;
+ // first the main language
+ if (params_.language->isPolyglossiaExclusive())
+ result.push_back(params_.language->display());
+ // now the secondary languages
+ LanguageList::const_iterator const begin = UsedLanguages_.begin();
+ for (LanguageList::const_iterator cit = begin;
+ cit != UsedLanguages_.end();
+ ++cit) {
+ if ((*cit)->isPolyglossiaExclusive())
+ result.push_back((*cit)->display());
+ }
+ return result;
+}
+
+
+vector<string> LaTeXFeatures::getBabelExclusiveLanguages() const
+{
+ vector<string> result;
+ // first the main language
+ if (params_.language->isBabelExclusive())
+ result.push_back(params_.language->display());
+ // now the secondary languages
+ LanguageList::const_iterator const begin = UsedLanguages_.begin();
+ for (LanguageList::const_iterator cit = begin;
+ cit != UsedLanguages_.end();
+ ++cit) {
+ if ((*cit)->isBabelExclusive())
+ result.push_back((*cit)->display());
+ }
+ return result;
+}
+
+
string LaTeXFeatures::getBabelLanguages() const
{
ostringstream languages;
}
-std::map<std::string, std::string> LaTeXFeatures::getPolyglossiaLanguages() const
+set<string> LaTeXFeatures::getPolyglossiaLanguages() const
{
- std::map<std::string, std::string> languages;
+ set<string> languages;
LanguageList::const_iterator const begin = UsedLanguages_.begin();
for (LanguageList::const_iterator cit = begin;
cit != UsedLanguages_.end();
++cit) {
- languages[(*cit)->polyglossia()] = (*cit)->polyglossiaOpts();
+ // We do not need the variants here
+ languages.insert((*cit)->polyglossia());
}
return languages;
}
{
// these must be loaded if glyphs of this script are used
// unless a language providing them is used in the document
- // FIXME: currently the option is written twice in this case
- if (mustProvide("textgreek"))
+ if (mustProvide("textgreek")
+ && find(encodings.begin(), encodings.end(), "LGR") == encodings.end())
encodings.insert(encodings.begin(), "LGR");
- if (mustProvide("textcyr"))
+ if (mustProvide("textcyr")
+ && find(encodings.begin(), encodings.end(), "T2A") == encodings.end())
encodings.insert(encodings.begin(), "T2A");
LanguageList::const_iterator it = UsedLanguages_.begin();
"fixme",
"todonotes",
"forest",
- "varwidth"
+ "varwidth",
};
char const * bibliofeatures[] = {
"authordate1-4",
"babelbib",
"bibgerm",
+ "chapterbib",
"chicago",
"chscite",
"harvard",
// if fontspec or newtxmath is used, AMS packages have to be loaded
// before fontspec (in BufferParams)
string const amsPackages = loadAMSPackages();
- bool const ot1 = (params_.font_encoding() == "default" || params_.font_encoding() == "OT1");
+ bool const ot1 = (params_.main_font_encoding() == "default"
+ || params_.main_font_encoding() == "OT1");
bool const use_newtxmath =
theLaTeXFonts().getLaTeXFont(from_ascii(params_.fontsMath())).getUsedPackage(
ot1, false, false) == "newtxmath";
packages << "numbers";
else
packages << "authoryear";
+ if (!params_.biblio_opts.empty())
+ packages << ',' << params_.biblio_opts;
packages << "]{natbib}\n";
}
}
// jurabib -- we need version 0.6 at least.
- if (mustProvide("jurabib"))
- packages << "\\usepackage{jurabib}[2004/01/25]\n";
+ if (mustProvide("jurabib")) {
+ packages << "\\usepackage";
+ if (!params_.biblio_opts.empty())
+ packages << '[' << params_.biblio_opts << ']';
+ packages << "{jurabib}[2004/01/25]\n";
+ }
// opcit -- we pass custombst as we output \bibliographystyle ourselves
if (mustProvide("opcit")) {
macros << lyxarrow_def << '\n';
if (!usePolyglossia() && mustProvide("textgreek")) {
- // ensure LGR font encoding is defined also if fontenc is not loaded by LyX
- if (params_.font_encoding() == "default")
+ // ensure LGR font encoding is defined also if fontenc is not loaded by LyX
+ if (params_.main_font_encoding() == "default")
macros << textgreek_LGR_def;
macros << textgreek_def << '\n';
}
if (!usePolyglossia() && mustProvide("textcyr")) {
// ensure T2A font encoding is set up also if fontenc is not loaded by LyX
- if (params_.font_encoding() == "default")
+ if (params_.main_font_encoding() == "default")
macros << textcyr_T2A_def;
macros << textcyr_def << '\n';
}
- // non-standard text accents:
+ // non-standard text accents:
if (mustProvide("textcommaabove") || mustProvide("textcommaaboveright") ||
mustProvide("textcommabelow") || mustProvide("textbaltic"))
macros << lyxaccent_def;
if (mustProvide("textbaltic"))
macros << textbaltic_def << '\n';
+ // split-level fractions
+ if (mustProvide("xfrac") || mustProvide("smallLetterFrac"))
+ macros << xfrac_def << '\n';
+
+ if (mustProvide("smallLetterFrac"))
+ macros << smallLetterFrac_def << '\n';
+
if (mustProvide("lyxmathsym"))
macros << lyxmathsym_def << '\n';
macros << guillemotleft_def << '\n';
if (mustProvide("guillemotright"))
macros << guillemotright_def << '\n';
+ if (mustProvide("textquotedbl"))
+ macros << textquotedbl_def << '\n';
+ if (mustProvide("textquotesinglep")) {
+ if (runparams_.flavor == OutputParams::XETEX)
+ macros << textquotesinglep_xetex_def << '\n';
+ else
+ macros << textquotesinglep_luatex_def << '\n';
+ }
+ if (mustProvide("textquotedblp")) {
+ if (runparams_.flavor == OutputParams::XETEX)
+ macros << textquotedblp_xetex_def << '\n';
+ else
+ macros << textquotedblp_luatex_def << '\n';
+ }
// Math mode
if (mustProvide("binom") && !isRequired("amsmath"))
macros << changetracking_xcolor_ulem_def;
}
+ if (mustProvide("ct-tikz-math-sout"))
+ macros << changetracking_tikz_math_sout_def;
+
if (mustProvide("ct-none"))
macros << changetracking_none_def;
list<docstring>::const_iterator cit = usedLayouts_.begin();
list<docstring>::const_iterator end = usedLayouts_.end();
for (; cit != end; ++cit)
- tcpreamble << tclass[*cit].preamble();
+ // For InPreamble layouts, we output the preamble stuff earlier
+ // (before the layouts). See Paragraph::Private::validate.
+ if (!tclass[*cit].inpreamble)
+ tcpreamble << tclass[*cit].preamble();
cit = usedInsetLayouts_.begin();
end = usedInsetLayouts_.end();