X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2Ftex2lyx%2FPreamble.cpp;h=01587cc02dfbbe0995cde64168ed7cca9e472129;hb=2fc430d5ae;hp=0676cad19b35eb3336f3946182a8819217097565;hpb=f76a8c8ab1a7273781e4fa7a361e9fe5464d6257;p=lyx.git diff --git a/src/tex2lyx/Preamble.cpp b/src/tex2lyx/Preamble.cpp index 0676cad19b..01587cc02d 100644 --- a/src/tex2lyx/Preamble.cpp +++ b/src/tex2lyx/Preamble.cpp @@ -39,9 +39,6 @@ using namespace lyx::support; namespace lyx { -// special columntypes -extern map special_columns; - Preamble preamble; namespace { @@ -59,14 +56,15 @@ const char * const known_languages[] = {"acadian", "afrikaans", "albanian", "bulgarian", "canadian", "canadien", "catalan", "croatian", "czech", "danish", "dutch", "english", "esperanto", "estonian", "farsi", "finnish", "francais", "french", "frenchb", "frenchle", "frenchpro", "galician", "german", "germanb", -"greek", "hebrew", "hungarian", "icelandic", "indon", "indonesian", "interlingua", -"irish", "italian", "japanese", "kazakh", "kurmanji", "latin", "latvian", "lithuanian", -"lowersorbian", "lsorbian", "magyar", "malay", "meyalu", "mongolian", "naustrian", -"newzealand", "ngerman", "ngermanb", "norsk", "nynorsk", "polutonikogreek", "polish", -"portuges", "portuguese", "romanian", "russian", "russianb", "samin", -"scottish", "serbian", "serbian-latin", "slovak", "slovene", "spanish", -"swedish", "thai", "turkish", "turkmen", "ukraineb", "ukrainian", -"uppersorbian", "UKenglish", "USenglish", "usorbian", "vietnam", "welsh", +"georgian", "greek", "hebrew", "hungarian", "icelandic", "indon", "indonesian", +"interlingua", "irish", "italian", "japanese", "kazakh", "kurmanji", "latin", +"latvian", "lithuanian", "lowersorbian", "lsorbian", "magyar", "malay", "meyalu", +"mongolian", "naustrian", "newzealand", "ngerman", "ngermanb", "norsk", "nswissgerman", +"nynorsk", "polutonikogreek", "polish", "portuges", "portuguese", "romanian", "russian", +"russianb", "samin", "scottish", "serbian", "serbian-latin", "slovak", +"slovene", "spanish", "swedish", "swissgerman", "thai", "turkish", "turkmen", +"ukraineb", "ukrainian", "uppersorbian", "UKenglish", "USenglish", "usorbian", +"vietnam", "welsh", 0}; /** @@ -79,14 +77,15 @@ const char * const known_coded_languages[] = {"french", "afrikaans", "albanian", "bulgarian", "canadian", "canadien", "catalan", "croatian", "czech", "danish", "dutch", "english", "esperanto", "estonian", "farsi", "finnish", "french", "french", "french", "french", "french", "galician", "german", "german", -"greek", "hebrew", "magyar", "icelandic", "bahasa", "bahasa", "interlingua", -"irish", "italian", "japanese", "kazakh", "kurmanji", "latin", "latvian", "lithuanian", -"lowersorbian", "lowersorbian", "magyar", "bahasam", "bahasam", "mongolian", "naustrian", -"newzealand", "ngerman", "ngerman", "norsk", "nynorsk", "polutonikogreek", "polish", -"portuguese", "portuguese", "romanian", "russian", "russian", "samin", -"scottish", "serbian", "serbian-latin", "slovak", "slovene", "spanish", -"swedish", "thai", "turkish", "turkmen", "ukrainian", "ukrainian", -"uppersorbian", "uppersorbian", "english", "english", "vietnamese", "welsh", +"georgian", "greek", "hebrew", "magyar", "icelandic", "bahasa", "bahasa", +"interlingua", "irish", "italian", "japanese", "kazakh", "kurmanji", "latin", +"latvian", "lithuanian", "lowersorbian", "lowersorbian", "magyar", "bahasam", "bahasam", +"mongolian", "naustrian", "newzealand", "ngerman", "ngerman", "norsk", "german-ch", +"nynorsk", "polutonikogreek", "polish", "portuguese", "portuguese", "romanian", "russian", +"russian", "samin", "scottish", "serbian", "serbian-latin", "slovak", +"slovene", "spanish", "swedish", "german-ch-old", "thai", "turkish", "turkmen", +"ukrainian", "ukrainian", "uppersorbian", "english", "english", "uppersorbian", +"vietnamese", "welsh", 0}; /// languages with danish quotes (.lyx names) @@ -107,7 +106,7 @@ const char * const known_french_quotes_languages[] = {"albanian", /// languages with german quotes (.lyx names) const char * const known_german_quotes_languages[] = {"austrian", "bulgarian", -"czech", "german", "icelandic", "lithuanian", "lowersorbian", "naustrian", +"czech", "german", "georgian", "icelandic", "lithuanian", "lowersorbian", "naustrian", "ngerman", "serbian", "serbian-latin", "slovak", "slovene", "uppersorbian", 0}; /// languages with polish quotes (.lyx names) @@ -133,12 +132,9 @@ const char * const known_sans_fonts[] = { "avant", "berasans", "biolinum-type1", "cmbr", "cmss", "helvet", "iwona", "iwonac", "iwonal", "iwonalc", "kurier", "kurierc", "kurierl", "kurierlc", "lmss", "tgadventor", "tgheros", 0}; -const char * const known_kurier_fonts[] = { "kurier", "kurierl", -"kurier-condensed", "kurier-light-condensed", 0}; - const char * const known_typewriter_fonts[] = { "beramono", "cmtl", "cmtt", -"courier", "lmtt", "luximono", "fourier", "lmodern", "mathpazo", "mathptmx", -"newcent", "tgcursor", "txtt", 0}; +"courier", "lmtt", "luximono", "fourier", "libertineMono-type1", "lmodern", +"mathpazo", "mathptmx", "newcent", "tgcursor", "txtt", 0}; const char * const known_math_fonts[] = { "eulervm", "newtxmath", 0}; @@ -163,11 +159,13 @@ const char * const known_if_commands[] = {"if", "ifarydshln", "ifbraket", "ifcancel", "ifcolortbl", "ifeurosym", "ifmarginnote", "ifmmode", "ifpdf", "ifsidecap", "ifupgreek", 0}; -const char * const known_basic_colors[] = {"blue", "black", "cyan", "green", -"magenta", "red", "white", "yellow", 0}; +const char * const known_basic_colors[] = {"black", "blue", "brown", "cyan", + "darkgray", "gray", "green", "lightgray", "lime", "magenta", "orange", "olive", + "pink", "purple", "red", "teal", "violet", "white", "yellow", 0}; -const char * const known_basic_color_codes[] = {"#0000ff", "#000000", "#00ffff", -"#00ff00", "#ff00ff", "#ff0000", "#ffffff", "#ffff00", 0}; +const char * const known_basic_color_codes[] = {"#000000", "#0000ff", "#964B00", "#00ffff", + "#a9a9a9", "#808080", "#00ff00", "#d3d3d3", "#bfff00", "#ff00ff", "#ff7f00", "#808000", + "#ffc0cb", "#800080", "#ff0000", "#008080", "#8f00ff", "#ffffff", "#ffff00", 0}; /// conditional commands with three arguments like \@ifundefined{}{}{} const char * const known_if_3arg_commands[] = {"@ifundefined", "IfFileExists", @@ -182,10 +180,10 @@ const char * const known_xetex_packages[] = {"arabxetex", "fixlatvian", /// packages that are automatically skipped if loaded by LyX const char * const known_lyx_packages[] = {"amsbsy", "amsmath", "amssymb", "amstext", "amsthm", "array", "babel", "booktabs", "calc", "CJK", "color", -"float", "fontspec", "graphicx", "hhline", "ifthen", "longtable", "makeidx", -"multirow", "nomencl", "pdfpages", "prettyref", "refstyle", "rotating", +"float", "fontspec", "framed", "graphicx", "hhline", "ifthen", "longtable", +"makeidx", "multirow", "nomencl", "pdfpages", "prettyref", "refstyle", "rotating", "rotfloat", "splitidx", "setspace", "subscript", "textcomp", "tipa", "tipx", -"tone", "ulem", "url", "varioref", "verbatim", "wrapfig", "xunicode", 0}; +"tone", "ulem", "url", "varioref", "verbatim", "wrapfig", "xcolor", "xunicode", 0}; // used for the handling of \newindex int index_number = 0; @@ -298,6 +296,7 @@ string process_keyval_opt(vector & options, string name) /** * known polyglossia language names (including variants) + * FIXME: support spelling=old for german variants (german vs. ngerman LyX names etc) */ const char * const Preamble::polyglossia_languages[] = { "albanian", "croatian", "hebrew", "norsk", "swedish", "amharic", "czech", "hindi", @@ -306,10 +305,10 @@ const char * const Preamble::polyglossia_languages[] = { "irish", "portuges", "thai", "bahasai", "english", "italian", "romanian", "turkish", "bahasam", "esperanto", "lao", "russian", "turkmen", "basque", "estonian", "latin", "samin", "ukrainian", "bengali", "farsi", "latvian", "sanskrit", "tibetan", "urdu", -"brazil", "brazilian", "finnish", "lithuanian", "scottish", "usorbian", "breton", +"brazil", "brazilian", "finnish", "lithuanian", "scottish", "usorbian", "breton", "french", "lsorbian", "serbian", "vietnamese", "bulgarian", "galician", "magyar", "slovak", "welsh", "catalan", "german", "malayalam", "slovenian", "coptic", "greek", -"marathi", "spanish", +"marathi", "spanish", "austrian", "american", "ancient", "australian", "british", "monotonic", "newzealand", "polytonic", 0}; @@ -327,11 +326,17 @@ const char * const Preamble::coded_polyglossia_languages[] = { "brazilian", "brazilian", "finnish", "lithuanian", "scottish", "uppersorbian", "breton", "french", "lowersorbian", "serbian", "vietnamese", "bulgarian", "galician", "magyar", "slovak", "welsh", "catalan", "ngerman", "malayalam", "slovene", "coptic", "greek", -"marathi", "spanish", +"marathi", "spanish", "naustrian", "american", "ancientgreek", "australian", "british", "greek", "newzealand", "polutonikogreek", 0}; +bool Preamble::usePolyglossia() const +{ + return h_use_non_tex_fonts && h_language_package == "default"; +} + + bool Preamble::indentParagraphs() const { return h_paragraph_separation == "indent"; @@ -396,6 +401,15 @@ Author const & Preamble::getAuthor(std::string const & name) const } +int Preamble::getSpecialTableColumnArguments(char c) const +{ + map::const_iterator it = special_columns_.find(c); + if (it == special_columns_.end()) + return -1; + return it->second; +} + + void Preamble::add_package(string const & name, vector & options) { // every package inherits the global options @@ -424,7 +438,8 @@ bool scale_as_percentage(string const & scale, string & percentage) if (pos != string::npos) { string value = scale.substr(pos + 1); if (isStrDbl(value)) { - percentage = convert(100 * convert(value)); + percentage = convert( + static_cast(100 * convert(value))); return true; } } @@ -458,16 +473,22 @@ Preamble::Preamble() : one_language(true), explicit_babel(false), //h_float_placement; //h_fontcolor; h_fontencoding = "default"; - h_font_roman = "default"; - h_font_sans = "default"; - h_font_typewriter = "default"; - h_font_math = "auto"; + h_font_roman[0] = "default"; + h_font_roman[1] = "default"; + h_font_sans[0] = "default"; + h_font_sans[1] = "default"; + h_font_typewriter[0] = "default"; + h_font_typewriter[1] = "default"; + h_font_math[0] = "auto"; + h_font_math[1] = "auto"; h_font_default_family = "default"; - h_use_non_tex_fonts = "false"; + h_use_non_tex_fonts = false; h_font_sc = "false"; h_font_osf = "false"; - h_font_sf_scale = "100"; - h_font_tt_scale = "100"; + h_font_sf_scale[0] = "100"; + h_font_sf_scale[1] = "100"; + h_font_tt_scale[0] = "100"; + h_font_tt_scale[1] = "100"; //h_font_cjk h_graphics = "default"; h_default_output_format = "default"; @@ -661,7 +682,7 @@ void Preamble::handle_package(Parser &p, string const & name, if (is_known(name, known_xetex_packages)) { xetex = true; - h_use_non_tex_fonts = "true"; + h_use_non_tex_fonts = true; registerAutomaticallyLoadedPackage("fontspec"); if (h_inputencoding == "auto") p.setEncoding("UTF-8"); @@ -669,25 +690,25 @@ void Preamble::handle_package(Parser &p, string const & name, // roman fonts if (is_known(name, known_roman_fonts)) - h_font_roman = name; + h_font_roman[0] = name; if (name == "fourier") { - h_font_roman = "utopia"; + h_font_roman[0] = "utopia"; // when font uses real small capitals if (opts == "expert") h_font_sc = "true"; } if (name == "garamondx") { - h_font_roman = "garamondx"; + h_font_roman[0] = "garamondx"; if (opts == "osfI") h_font_osf = "true"; } if (name == "libertine") { - h_font_roman = "libertine"; + h_font_roman[0] = "libertine"; // this automatically invokes biolinum - h_font_sans = "biolinum"; + h_font_sans[0] = "biolinum"; if (opts == "osf") h_font_osf = "true"; else if (opts == "lining") @@ -695,7 +716,7 @@ void Preamble::handle_package(Parser &p, string const & name, } if (name == "libertine-type1") { - h_font_roman = "libertine"; + h_font_roman[0] = "libertine"; // NOTE: contrary to libertine.sty, libertine-type1 // does not automatically invoke biolinum if (opts == "lining") @@ -703,14 +724,14 @@ void Preamble::handle_package(Parser &p, string const & name, else if (opts == "osf") h_font_osf = "true"; } - + if (name == "mathdesign") { if (opts.find("charter") != string::npos) - h_font_roman = "md-charter"; + h_font_roman[0] = "md-charter"; if (opts.find("garamond") != string::npos) - h_font_roman = "md-garamond"; + h_font_roman[0] = "md-garamond"; if (opts.find("utopia") != string::npos) - h_font_roman = "md-utopia"; + h_font_roman[0] = "md-utopia"; if (opts.find("expert") != string::npos) { h_font_sc = "true"; h_font_osf = "true"; @@ -718,55 +739,72 @@ void Preamble::handle_package(Parser &p, string const & name, } else if (name == "mathpazo") - h_font_roman = "palatino"; + h_font_roman[0] = "palatino"; else if (name == "mathptmx") - h_font_roman = "times"; + h_font_roman[0] = "times"; // sansserif fonts if (is_known(name, known_sans_fonts)) { - h_font_sans = name; - if (options.size() == 1) { - if (scale_as_percentage(opts, h_font_sf_scale)) + h_font_sans[0] = name; + if (options.size() >= 1) { + if (scale_as_percentage(opts, h_font_sf_scale[0])) options.clear(); } } - if (name == "biolinum-type1") - h_font_sans = "biolinum"; + if (name == "biolinum-type1") { + h_font_sans[0] = "biolinum"; + // biolinum can have several options, e.g. [osf,scaled=0.97] + string::size_type pos = opts.find("osf"); + if (pos != string::npos) + h_font_osf = "true"; + } // typewriter fonts if (is_known(name, known_typewriter_fonts)) { // fourier can be set as roman font _only_ // fourier as typewriter is handled in handling of \ttdefault if (name != "fourier") { - h_font_typewriter = name; - if (options.size() == 1) { - if (scale_as_percentage(opts, h_font_tt_scale)) + h_font_typewriter[0] = name; + if (options.size() >= 1) { + if (scale_as_percentage(opts, h_font_tt_scale[0])) options.clear(); } } } + if (name == "libertineMono-type1") { + h_font_typewriter[0] = "libertine-mono"; + } + // font uses old-style figure if (name == "eco") h_font_osf = "true"; // math fonts if (is_known(name, known_math_fonts)) - h_font_math = name; + h_font_math[0] = name; if (name == "newtxmath") { if (opts.empty()) - h_font_math = "newtxmath"; + h_font_math[0] = "newtxmath"; else if (opts == "garamondx") - h_font_math = "garamondx-ntxm"; + h_font_math[0] = "garamondx-ntxm"; else if (opts == "libertine") - h_font_math = "libertine-ntxm"; + h_font_math[0] = "libertine-ntxm"; else if (opts == "minion") - h_font_math = "minion-ntxm"; + h_font_math[0] = "minion-ntxm"; } + if (name == "iwona") + if (opts == "math") + h_font_math[0] = "iwona-math"; + + if (name == "kurier") + if (opts == "math") + h_font_math[0] = "kurier-math"; + // after the detection and handling of special cases, we can remove the // fonts, otherwise they would appear in the preamble, see bug #7856 if (is_known(name, known_roman_fonts) || is_known(name, known_sans_fonts) @@ -831,7 +869,7 @@ void Preamble::handle_package(Parser &p, string const & name, else if (name == "polyglossia") { h_language_package = "default"; h_default_output_format = "pdf4"; - h_use_non_tex_fonts = "true"; + h_use_non_tex_fonts = true; xetex = true; registerAutomaticallyLoadedPackage("xunicode"); if (h_inputencoding == "auto") @@ -957,6 +995,9 @@ void Preamble::handle_package(Parser &p, string const & name, h_cite_engine_type = "authoryear"; } + else if (name == "bibtopic") + h_use_bibtopic = "true"; + else if (name == "hyperref") handle_hyperref(options); @@ -1013,7 +1054,7 @@ void Preamble::handle_if(Parser & p, bool in_lyx_preamble) } -bool Preamble::writeLyXHeader(ostream & os, bool subdoc) +bool Preamble::writeLyXHeader(ostream & os, bool subdoc, string const & outfiledir) { // set the quote language // LyX only knows the following quotes languages: @@ -1055,11 +1096,13 @@ bool Preamble::writeLyXHeader(ostream & os, bool subdoc) // output the LyX file settings // Important: Keep the version formatting in sync with LyX and // lyx2lyx (bug 7951) + string const origin = roundtripMode() ? "roundtrip" : outfiledir; os << "#LyX file created by tex2lyx " << lyx_version_major << '.' << lyx_version_minor << '\n' << "\\lyxformat " << LYX_FORMAT << '\n' << "\\begin_document\n" << "\\begin_header\n" + << "\\origin " << origin << "\n" << "\\textclass " << h_textclass << "\n"; string const raw = subdoc ? empty_string() : h_preamble.str(); if (!raw.empty()) { @@ -1101,16 +1144,20 @@ bool Preamble::writeLyXHeader(ostream & os, bool subdoc) << "\\language_package " << h_language_package << "\n" << "\\inputencoding " << h_inputencoding << "\n" << "\\fontencoding " << h_fontencoding << "\n" - << "\\font_roman " << h_font_roman << "\n" - << "\\font_sans " << h_font_sans << "\n" - << "\\font_typewriter " << h_font_typewriter << "\n" - << "\\font_math " << h_font_math << "\n" + << "\\font_roman \"" << h_font_roman[0] + << "\" \"" << h_font_roman[1] << "\"\n" + << "\\font_sans \"" << h_font_sans[0] << "\" \"" << h_font_sans[1] << "\"\n" + << "\\font_typewriter \"" << h_font_typewriter[0] + << "\" \"" << h_font_typewriter[1] << "\"\n" + << "\\font_math \"" << h_font_math[0] << "\" \"" << h_font_math[1] << "\"\n" << "\\font_default_family " << h_font_default_family << "\n" - << "\\use_non_tex_fonts " << h_use_non_tex_fonts << "\n" + << "\\use_non_tex_fonts " << (h_use_non_tex_fonts ? "true" : "false") << '\n' << "\\font_sc " << h_font_sc << "\n" << "\\font_osf " << h_font_osf << "\n" - << "\\font_sf_scale " << h_font_sf_scale << "\n" - << "\\font_tt_scale " << h_font_tt_scale << '\n'; + << "\\font_sf_scale " << h_font_sf_scale[0] + << ' ' << h_font_sf_scale[1] << '\n' + << "\\font_tt_scale " << h_font_tt_scale[0] + << ' ' << h_font_tt_scale[1] << '\n'; if (!h_font_cjk.empty()) os << "\\font_cjk " << h_font_cjk << '\n'; os << "\\graphics " << h_graphics << '\n' @@ -1127,13 +1174,13 @@ bool Preamble::writeLyXHeader(ostream & os, bool subdoc) << "\\use_hyperref " << h_use_hyperref << '\n'; if (h_use_hyperref == "true") { if (!h_pdf_title.empty()) - os << "\\pdf_title \"" << h_pdf_title << "\"\n"; + os << "\\pdf_title " << Lexer::quoteString(h_pdf_title) << '\n'; if (!h_pdf_author.empty()) - os << "\\pdf_author \"" << h_pdf_author << "\"\n"; + os << "\\pdf_author " << Lexer::quoteString(h_pdf_author) << '\n'; if (!h_pdf_subject.empty()) - os << "\\pdf_subject \"" << h_pdf_subject << "\"\n"; + os << "\\pdf_subject " << Lexer::quoteString(h_pdf_subject) << '\n'; if (!h_pdf_keywords.empty()) - os << "\\pdf_keywords \"" << h_pdf_keywords << "\"\n"; + os << "\\pdf_keywords " << Lexer::quoteString(h_pdf_keywords) << '\n'; os << "\\pdf_bookmarks " << h_pdf_bookmarks << "\n" "\\pdf_bookmarksnumbered " << h_pdf_bookmarksnumbered << "\n" "\\pdf_bookmarksopen " << h_pdf_bookmarksopen << "\n" @@ -1146,7 +1193,7 @@ bool Preamble::writeLyXHeader(ostream & os, bool subdoc) if (!h_pdf_pagemode.empty()) os << "\\pdf_pagemode " << h_pdf_pagemode << '\n'; if (!h_pdf_quoted_options.empty()) - os << "\\pdf_quoted_options \"" << h_pdf_quoted_options << "\"\n"; + os << "\\pdf_quoted_options " << Lexer::quoteString(h_pdf_quoted_options) << '\n'; } os << "\\papersize " << h_papersize << "\n" << "\\use_geometry " << h_use_geometry << '\n'; @@ -1213,7 +1260,7 @@ void Preamble::parse(Parser & p, string const & forceclass, TeX2LyXDocClass & tc) { // initialize fixed types - special_columns['D'] = 3; + special_columns_['D'] = 3; bool is_full_document = false; bool is_lyx_file = false; bool in_lyx_preamble = false; @@ -1320,7 +1367,7 @@ void Preamble::parse(Parser & p, string const & forceclass, else if (t.cs() == "setmainfont") { // we don't care about the option p.hasOpt() ? p.getOpt() : string(); - h_font_roman = p.getArg('{', '}'); + h_font_roman[1] = p.getArg('{', '}'); } else if (t.cs() == "setsansfont" || t.cs() == "setmonofont") { @@ -1340,12 +1387,12 @@ void Preamble::parse(Parser & p, string const & forceclass, } if (t.cs() == "setsansfont") { if (!scale.empty()) - h_font_sf_scale = scale; - h_font_sans = p.getArg('{', '}'); + h_font_sf_scale[1] = scale; + h_font_sans[1] = p.getArg('{', '}'); } else { if (!scale.empty()) - h_font_tt_scale = scale; - h_font_typewriter = p.getArg('{', '}'); + h_font_tt_scale[1] = scale; + h_font_typewriter[1] = p.getArg('{', '}'); } } @@ -1430,7 +1477,7 @@ void Preamble::parse(Parser & p, string const & forceclass, string const body2 = p.verbatim_item(); // only non-lyxspecific stuff if (in_lyx_preamble && - (name == "subref" || name == "thmref" || name == "lemref")) + (name == "subsecref" || name == "thmref" || name == "lemref")) p.skip_spaces(); else { ostringstream ss; @@ -1441,7 +1488,7 @@ void Preamble::parse(Parser & p, string const & forceclass, h_preamble << ss.str(); } } - + else if (t.cs() == "AtBeginDocument") { string const name = p.verbatim_item(); // only non-lyxspecific stuff @@ -1449,7 +1496,7 @@ void Preamble::parse(Parser & p, string const & forceclass, (name == "\\providecommand\\partref[1]{\\ref{part:#1}}" || name == "\\providecommand\\chapref[1]{\\ref{chap:#1}}" || name == "\\providecommand\\secref[1]{\\ref{sec:#1}}" - || name == "\\providecommand\\subref[1]{\\ref{sub:#1}}" + || name == "\\providecommand\\subsecref[1]{\\ref{subsec:#1}}" || name == "\\providecommand\\parref[1]{\\ref{par:#1}}" || name == "\\providecommand\\figref[1]{\\ref{fig:#1}}" || name == "\\providecommand\\tabref[1]{\\ref{tab:#1}}" @@ -1491,19 +1538,19 @@ void Preamble::parse(Parser & p, string const & forceclass, // font settings if (name == "\\rmdefault") if (is_known(body, known_roman_fonts)) { - h_font_roman = body; + h_font_roman[0] = body; p.skip_spaces(); in_lyx_preamble = true; } if (name == "\\sfdefault") if (is_known(body, known_sans_fonts)) { - h_font_sans = body; + h_font_sans[0] = body; p.skip_spaces(); in_lyx_preamble = true; } if (name == "\\ttdefault") if (is_known(body, known_typewriter_fonts)) { - h_font_typewriter = body; + h_font_typewriter[0] = body; p.skip_spaces(); in_lyx_preamble = true; } @@ -1515,9 +1562,12 @@ void Preamble::parse(Parser & p, string const & forceclass, in_lyx_preamble = true; } - // remove the lyxdot definition that is re-added by LyX + // remove LyX-specific definitions that are re-added by LyX // if necessary - if (name == "\\lyxdot") { + // \lyxline is an ancient command that is converted by tex2lyx into + // a \rule therefore remove its preamble code + if (name == "\\lyxdot" || name == "\\lyxarrow" + || name == "\\lyxline" || name == "\\LyX") { p.skip_spaces(); in_lyx_preamble = true; } @@ -1647,13 +1697,13 @@ void Preamble::parse(Parser & p, string const & forceclass, string const body = p.verbatim_item(); string const opt3 = p.getFullOpt(); - add_known_theorem(name, opt1, !opt2.empty(), - from_utf8("\\newtheorem{" + name + '}' + - opt1 + opt2 + '{' + body + '}' + opt3)); + string const complete = "\\newtheorem{" + name + '}' + + opt1 + opt2 + '{' + body + '}' + opt3; + + add_known_theorem(name, opt1, !opt2.empty(), from_utf8(complete)); if (!in_lyx_preamble) - h_preamble << "\\newtheorem{" << name << '}' - << opt1 << opt2 << '{' << '}' << opt3; + h_preamble << complete; } else if (t.cs() == "def") { @@ -1678,7 +1728,7 @@ void Preamble::parse(Parser & p, string const & forceclass, istringstream is(string(opts, 1)); is >> nargs; } - special_columns[name[0]] = nargs; + special_columns_[name[0]] = nargs; h_preamble << "\\newcolumntype{" << name << "}"; if (nargs) h_preamble << "[" << nargs << "]"; @@ -1713,7 +1763,7 @@ void Preamble::parse(Parser & p, string const & forceclass, else if (content == "\\bigskipamount") h_defskip = "bigskip"; else - h_defskip = content; + h_defskip = translate_len(content); } else h_preamble << "\\setlength{" << name << "}{" << content << "}"; }