X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2FLaTeXFeatures.cpp;h=55db95350386506ffdbb6673b4f19ef90854dbcf;hb=c1ee1bc0baf00a64734ec5eb345884c057e4d9c1;hp=f94351f1003cad6ab8c71568f4cb5810809ff3f3;hpb=46e3885d19b8ff9409297065faa2f7364ada9465;p=lyx.git diff --git a/src/LaTeXFeatures.cpp b/src/LaTeXFeatures.cpp index f94351f100..55db953503 100644 --- a/src/LaTeXFeatures.cpp +++ b/src/LaTeXFeatures.cpp @@ -79,6 +79,15 @@ static docstring const lyxarrow_def = from_ascii( "{\\leavevmode\\,$\\triangleleft$\\,\\allowbreak}\n" "{\\leavevmode\\,$\\triangleright$\\,\\allowbreak}}"); +// ZERO WIDTH SPACE (ZWSP) is actually not a space character +// but marks a line break opportunity. Several commands provide a +// line break opportunity. They differ in side-effects: +// \allowbreak prevents hyphenation after hyphen or dash + ZWSP +// \linebreak[] takes an optional argument denoting "urgency". +// The \LyXZeroWidthSpace wrapper allows customization in the preamble. +static docstring const lyxZWSP_def = from_ascii( + "\\newcommand*\\LyXZeroWidthSpace{\\hspace{0pt}}"); + // for quotes without babel. This does not give perfect results, but // anybody serious about non-english quotes should use babel (JMarc). @@ -123,19 +132,19 @@ static docstring const textquotedbl_def = from_ascii( static docstring const textquotedblp_xetex_def = from_ascii( "\\providecommand\\textquotedblplain{%\n" - " \\bgroup\\addfontfeatures{Mapping=}\\char`\\\"\\egroup}"); + " \\bgroup\\addfontfeatures{Mapping=}\\char34\\egroup}"); static docstring const textquotedblp_luatex_def = from_ascii( "\\providecommand\\textquotedblplain{%\n" - " \\bgroup\\addfontfeatures{RawFeature=-tlig}\\char`\\\"\\egroup}"); + " \\bgroup\\addfontfeatures{RawFeature=-tlig}\\char34\\egroup}"); static docstring const textquotesinglep_xetex_def = from_ascii( "\\providecommand\\textquotesingleplain{%\n" - " \\bgroup\\addfontfeatures{Mapping=}\\char`\\\'\\egroup}"); + " \\bgroup\\addfontfeatures{Mapping=}\\char39\\egroup}"); static docstring const textquotesinglep_luatex_def = from_ascii( "\\providecommand\\textquotesingleplain{%\n" - " \\bgroup\\addfontfeatures{RawFeature=-tlig}\\char`\\\'\\egroup}"); + " \\bgroup\\addfontfeatures{RawFeature=-tlig}\\char39\\egroup}"); static docstring const paragraphleftindent_def = from_ascii( "\\newenvironment{LyXParagraphLeftIndent}[1]%\n" @@ -591,8 +600,8 @@ bool LaTeXFeatures::isProvided(string const & name) const 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"); @@ -1089,7 +1098,8 @@ string const LaTeXFeatures::getPackages() const // 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"; @@ -1316,16 +1326,19 @@ TexString LaTeXFeatures::getMacros() const if (mustProvide("lyxarrow")) macros << lyxarrow_def << '\n'; + if (mustProvide("lyxzerowidthspace")) + macros << lyxZWSP_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") + 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'; } @@ -1568,7 +1581,10 @@ docstring const LaTeXFeatures::getTClassPreamble() const list::const_iterator cit = usedLayouts_.begin(); list::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();