]> git.lyx.org Git - features.git/blobdiff - src/LaTeXFeatures.cpp
InsetIndex: when building the IndexNode tree, ignore IndexEntry when empty
[features.git] / src / LaTeXFeatures.cpp
index 3acbe41df2740180d892048b15563230b20e6bbf..bcf9ddc82d7c1cf4cf5391bb70260bce7548d1db 100644 (file)
@@ -193,44 +193,11 @@ static docstring const tabularnewline_def = from_ascii(
        "%% Because html converters don't know tabularnewline\n"
        "\\providecommand{\\tabularnewline}{\\\\}\n");
 
-static docstring const lyxgreyedout_def = from_ascii(
-       "%% The greyedout annotation environment\n"
-       "\\newenvironment{lyxgreyedout}\n"
-       "  {\\textcolor{note_fontcolor}\\bgroup\\ignorespaces}\n"
-       "  {\\ignorespacesafterend\\egroup}\n");
-
-static docstring const lyxgreyedout_rtl_def = from_ascii(
-       "%% The greyedout annotation environment (with RTL support)\n"
-       "\\NewEnviron{lyxgreyedout}{%\n"
-       "\\if@rl%\n"
-       "\\everypar{\\textcolor{note_fontcolor}\\beginL\\ignorespaces}%\n"
-       "\\BODY\\everypar{\\ignorespacesafterend\\endL}\n"
-       "\\else%\n"
-       "\\textcolor{note_fontcolor}\\bgroup\\ignorespaces%\n"
-       "\\BODY\\ignorespacesafterend\\egroup\n"
-       "\\fi}\n");
-
-static docstring const lyxgreyedout_luartl_def = from_ascii(
-       "%% The greyedout annotation environment (with RTL support)\n"
-       "\\NewEnviron{lyxgreyedout}{%\n"
-       "\\if@RTL%\n"
-       "\\everypar{\\color{note_fontcolor}\\pardir TRT \\textdir TRT\\ignorespaces}%\n"
-       "\\BODY\\everypar{\\ignorespacesafterend}\n"
-       "\\else%\n"
-       "\\textcolor{note_fontcolor}\\bgroup\\ignorespaces%\n"
-       "\\BODY\\ignorespacesafterend\\egroup\n"
-       "\\fi}\n");
-
-static docstring const lyxgreyedout_luartl_babel_def = from_ascii(
-       "%% The greyedout annotation environment (with RTL support)\n"
-       "\\NewEnviron{lyxgreyedout}{%\n"
-       "\\if@rl%\n"
-       "\\everypar{\\color{note_fontcolor}\\pardir TRT \\textdir TRT\\ignorespaces}%\n"
-       "\\BODY\\everypar{\\ignorespacesafterend}\n"
-       "\\else%\n"
-       "\\textcolor{note_fontcolor}\\bgroup\\ignorespaces%\n"
-       "\\BODY\\ignorespacesafterend\\egroup\n"
-       "\\fi}\n");
+static docstring const cellvarwidth_def = from_ascii(
+       "%% Variable width box for table cells\n"
+       "\\newenvironment{cellvarwidth}[1][t]\n"
+       "    {\\begin{varwidth}[#1]{\\linewidth}}\n"
+       "    {\\@finalstrut\\@arstrutbox\\end{varwidth}}\n");
 
 // We want to omit the file extension for includegraphics, but this does not
 // work when the filename contains other dots.
@@ -503,6 +470,7 @@ static docstring const textschwa_def = from_ascii(
 // 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"
@@ -578,6 +546,52 @@ static docstring const lyxmintcaption_def = from_ascii(
        "}\n");
 
 
+docstring const lyxgreyedoutDef(bool const rtl, bool const ct, bool const lua, bool const babel)
+{
+       odocstringstream ods;
+
+       if (rtl) {
+               ods << "%% The greyedout annotation environment (with RTL support)\n"
+                   << "\\NewEnviron{lyxgreyedout}{%\n";
+               if (lua && !babel)
+                       // luabidi uses this switch
+                       ods << "  \\if@RTL%\n";
+               else
+                       ods << "  \\if@rl%\n";
+               ods << "    \\everypar{%\n";
+               if (lua)
+                       ods << "      \\pardir TRT \\textdir TRT\\normalfont\\normalsize\\textcolor{note_fontcolor}\\ignorespaces%\n";
+               else
+                       ods << "      \\normalfont\\normalsize\\textcolor{note_fontcolor}\\beginL\\ignorespaces%\n";
+               ods << "    }%\n";
+               if (ct)
+                       ods << "    \\colorlet{lyxadded}{lyxadded!30}\\colorlet{lyxdeleted}{lyxdeleted!30}%\n";
+               if (lua)
+                       ods << "    \\BODY\\everypar{\\ignorespacesafterend}%\n";
+               else
+                       ods << "    \\BODY\\everypar{\\ignorespacesafterend\\endL}%\n";
+               ods << "  \\else%\n";
+               if (ct)
+                       ods << "    \\colorlet{lyxadded}{lyxadded!30}\\colorlet{lyxdeleted}{lyxdeleted!30}%\n";
+               ods << "    \\normalfont\\normalsize\\textcolor{note_fontcolor}\\bgroup\\ignorespaces%\n"
+                   << "    \\BODY\\ignorespacesafterend\\egroup%\n"
+                   << "  \\fi%\n"
+                   << "}\n";
+       } else {
+               ods << "%% The greyedout annotation environment\n"
+                   << "\\newenvironment{lyxgreyedout}\n"
+                   << "{";
+               if (ct)
+                       ods << "\\colorlet{lyxadded}{lyxadded!30}\\colorlet{lyxdeleted}{lyxdeleted!30}%\n ";
+               ods << "\\normalfont\\normalsize\\textcolor{note_fontcolor}\\bgroup\\ignorespaces}\n"
+                   << "{\\ignorespacesafterend\\egroup}\n";
+       }
+
+       return ods.str();
+}
+
+
+
 /////////////////////////////////////////////////////////////////////
 //
 // LyXHTML strings
@@ -769,8 +783,8 @@ bool LaTeXFeatures::isProvided(string const & name) const
        if (params_.useNonTeXFonts)
                return params_.documentClass().provides(name);
 
-       bool const ot1 = (params_.main_font_encoding() == "default"
-               || params_.main_font_encoding() == "OT1");
+       bool const ot1 = (runparams().main_fontenc == "default"
+               || runparams().main_fontenc == "OT1");
        bool const complete = (params_.fontsSans() == "default"
                && params_.fontsTypewriter() == "default");
        bool const nomath = (params_.fontsMath() == "default");
@@ -823,7 +837,7 @@ void addSnippet(std::list<TexString> & list, TexString ts, bool allow_dupes)
                            return ts.str == ts2.str;
                    })
            )
-               list.push_back(move(ts));
+               list.push_back(std::move(ts));
 }
 
 
@@ -840,7 +854,7 @@ TexString getSnippets(std::list<TexString> const & list)
 
 void LaTeXFeatures::addPreambleSnippet(TexString snippet, bool allow_dupes)
 {
-       addSnippet(preamble_snippets_, move(snippet), allow_dupes);
+       addSnippet(preamble_snippets_, std::move(snippet), allow_dupes);
 }
 
 
@@ -1301,8 +1315,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_.main_font_encoding() == "default"
-                         || params_.main_font_encoding() == "OT1");
+       bool const ot1 = (runparams().main_fontenc == "default"
+                         || runparams().main_fontenc == "OT1");
        bool const use_newtxmath =
                theLaTeXFonts().getLaTeXFont(from_ascii(params_.fontsMath())).getUsedPackage(
                        ot1, false, false) == "newtxmath";
@@ -1497,7 +1511,8 @@ string const LaTeXFeatures::getPackages() const
        }
 
        // fixltx2e provides subscript
-       if (mustProvide("subscript") && !isRequired("fixltx2e"))
+       if (mustProvide("subscript") && !isRequired("fixltx2e")
+           && !isAvailable("LaTeX-2005/12/01"))
                packages << "\\usepackage{subscript}\n";
 
        // footmisc must be loaded after setspace
@@ -1570,15 +1585,15 @@ TexString LaTeXFeatures::getMacros() const
                macros << lyxZWSP_def << '\n';
 
        if (!usePolyglossia() && mustProvide("textgreek")) {
-           // ensure LGR font encoding is defined also if fontenc is not loaded by LyX
-               if (params_.main_font_encoding() == "default")
+               // ensure LGR font encoding is defined also if fontenc is not loaded by LyX
+               if (runparams().main_fontenc == "default")
                        macros << textgreek_LGR_def;
                macros << textgreek_def << '\n';
        }
 
        if (!usePolyglossia() && mustProvide("textcyrillic")) {
                // ensure T2A font encoding is set up also if fontenc is not loaded by LyX
-               if (params_.main_font_encoding() == "default")
+               if (runparams().main_fontenc == "default")
                        macros << textcyr_T2A_def;
                macros << textcyr_def << '\n';
        }
@@ -1687,22 +1702,17 @@ TexString LaTeXFeatures::getMacros() const
        if (mustProvide("NeedTabularnewline"))
                macros << tabularnewline_def;
 
+       if (mustProvide("cellvarwidth"))
+               macros << cellvarwidth_def;
+
        // greyed-out environment (note inset)
        // the color is specified in the routine
        // getColorOptions() to avoid LaTeX-package clashes
-       if (mustProvide("lyxgreyedout")) {
-               // We need different version for RTL (#8647)
-               if (hasRTLLanguage()) {
-                       if (runparams_.flavor == Flavor::LuaTeX)
-                               if (useBabel())
-                                       macros << lyxgreyedout_luartl_babel_def;
-                               else
-                                       macros << lyxgreyedout_luartl_def;
-                       else
-                               macros << lyxgreyedout_rtl_def;
-               } else
-                       macros << lyxgreyedout_def;
-       }
+       if (mustProvide("lyxgreyedout"))
+               // We need different version for RTL (#8647), with change tracking (#12025)
+               // and for some specific engine/language package combinations
+               macros << lyxgreyedoutDef(hasRTLLanguage(), mustProvide("ct-xcolor-ulem"),
+                                         (runparams_.flavor == Flavor::LuaTeX), useBabel());
 
        if (mustProvide("lyxdot"))
                macros << lyxdot_def << '\n';
@@ -1717,11 +1727,11 @@ TexString LaTeXFeatures::getMacros() const
        if (mustProvide("ct-xcolor-ulem")) {
                streamsize const prec = macros.os().precision(2);
 
-               RGBColor cadd = rgbFromHexName(lcolor.getX11HexName(Color_addedtext));
+               RGBColor cadd = rgbFromHexName(lcolor.getX11HexName(Color_addedtext_output));
                macros << "\\providecolor{lyxadded}{rgb}{"
                       << cadd.r / 255.0 << ',' << cadd.g / 255.0 << ',' << cadd.b / 255.0 << "}\n";
 
-               RGBColor cdel = rgbFromHexName(lcolor.getX11HexName(Color_deletedtext));
+               RGBColor cdel = rgbFromHexName(lcolor.getX11HexName(Color_deletedtext_output));
                macros << "\\providecolor{lyxdeleted}{rgb}{"
                       << cdel.r / 255.0 << ',' << cdel.g / 255.0 << ',' << cdel.b / 255.0 << "}\n";
 
@@ -1746,11 +1756,11 @@ TexString LaTeXFeatures::getMacros() const
                if (!mustProvide("ct-xcolor-ulem")) {
                        streamsize const prec = macros.os().precision(2);
 
-                       RGBColor cadd = rgbFromHexName(lcolor.getX11HexName(Color_addedtext));
+                       RGBColor cadd = rgbFromHexName(lcolor.getX11HexName(Color_addedtext_output));
                        macros << "\\providecolor{lyxadded}{rgb}{"
                               << cadd.r / 255.0 << ',' << cadd.g / 255.0 << ',' << cadd.b / 255.0 << "}\n";
        
-                       RGBColor cdel = rgbFromHexName(lcolor.getX11HexName(Color_deletedtext));
+                       RGBColor cdel = rgbFromHexName(lcolor.getX11HexName(Color_deletedtext_output));
                        macros << "\\providecolor{lyxdeleted}{rgb}{"
                               << cdel.r / 255.0 << ',' << cdel.g / 255.0 << ',' << cdel.b / 255.0 << "}\n";