+ os << "\\bulletLaTeX " << i
+ << "\n\t\""
+ << user_defined_bullets[i].getText()
+ << "\"\n\\end_bullet\n";
+ }
+ }
+ }
+
+ os << "\\tracking_changes " << tracking_changes << "\n";
+}
+
+
+void BufferParams::writeLaTeX(ostream & os, LaTeXFeatures & features,
+ TexRow & texrow) const
+{
+ os << "\\documentclass";
+
+ LyXTextClass const & tclass = getLyXTextClass();
+
+ ostringstream clsoptions; // the document class options.
+
+ if (tokenPos(tclass.opt_fontsize(),
+ '|', fontsize) >= 0) {
+ // only write if existing in list (and not default)
+ clsoptions << fontsize << "pt,";
+ }
+
+
+ if (!use_geometry &&
+ (paperpackage == PACKAGE_NONE)) {
+ switch (papersize) {
+ case PAPER_A4PAPER:
+ clsoptions << "a4paper,";
+ break;
+ case PAPER_USLETTER:
+ clsoptions << "letterpaper,";
+ break;
+ case PAPER_A5PAPER:
+ clsoptions << "a5paper,";
+ break;
+ case PAPER_B5PAPER:
+ clsoptions << "b5paper,";
+ break;
+ case PAPER_EXECUTIVEPAPER:
+ clsoptions << "executivepaper,";
+ break;
+ case PAPER_LEGALPAPER:
+ clsoptions << "legalpaper,";
+ break;
+ }
+ }
+
+ // if needed
+ if (sides != tclass.sides()) {
+ switch (sides) {
+ case LyXTextClass::OneSide:
+ clsoptions << "oneside,";
+ break;
+ case LyXTextClass::TwoSides:
+ clsoptions << "twoside,";
+ break;
+ }
+ }
+
+ // if needed
+ if (columns != tclass.columns()) {
+ if (columns == 2)
+ clsoptions << "twocolumn,";
+ else
+ clsoptions << "onecolumn,";
+ }
+
+ if (!use_geometry
+ && orientation == ORIENTATION_LANDSCAPE)
+ clsoptions << "landscape,";
+
+ // language should be a parameter to \documentclass
+ use_babel = false;
+ ostringstream language_options;
+ if (language->babel() == "hebrew"
+ && default_language->babel() != "hebrew")
+ // This seems necessary
+ features.useLanguage(default_language);
+
+ if (lyxrc.language_use_babel ||
+ language->lang() != lyxrc.default_language ||
+ features.hasLanguages()) {
+ use_babel = true;
+ language_options << features.getLanguages();
+ language_options << language->babel();
+ if (lyxrc.language_global_options)
+ clsoptions << language_options.str() << ',';
+ }
+
+ // the user-defined options
+ if (!options.empty()) {
+ clsoptions << options << ',';
+ }
+
+ string strOptions(STRCONV(clsoptions.str()));
+ if (!strOptions.empty()) {
+ strOptions = rtrim(strOptions, ",");
+ os << '[' << strOptions << ']';
+ }
+
+ os << '{' << tclass.latexname() << "}\n";
+ texrow.newline();
+ // end of \documentclass defs
+
+ // font selection must be done before loading fontenc.sty
+ // The ae package is not needed when using OT1 font encoding.
+ if (fonts != "default" &&
+ (fonts != "ae" || lyxrc.fontenc != "default")) {
+ os << "\\usepackage{" << fonts << "}\n";
+ texrow.newline();
+ if (fonts == "ae") {
+ os << "\\usepackage{aecompl}\n";
+ texrow.newline();
+ }
+ }
+ // this one is not per buffer
+ if (lyxrc.fontenc != "default") {
+ os << "\\usepackage[" << lyxrc.fontenc
+ << "]{fontenc}\n";
+ texrow.newline();
+ }
+
+ if (inputenc == "auto") {
+ string const doc_encoding =
+ language->encoding()->LatexName();
+
+ // Create a list with all the input encodings used
+ // in the document
+ std::set<string> encodings =
+ features.getEncodingSet(doc_encoding);
+
+ os << "\\usepackage[";
+ std::copy(encodings.begin(), encodings.end(),
+ std::ostream_iterator<string>(os, ","));
+ os << doc_encoding << "]{inputenc}\n";
+ texrow.newline();
+ } else if (inputenc != "default") {
+ os << "\\usepackage[" << inputenc
+ << "]{inputenc}\n";
+ texrow.newline();
+ }
+
+ // At the very beginning the text parameters.
+ if (paperpackage != PACKAGE_NONE) {
+ switch (paperpackage) {
+ case PACKAGE_A4:
+ os << "\\usepackage{a4}\n";
+ texrow.newline();
+ break;
+ case PACKAGE_A4WIDE:
+ os << "\\usepackage{a4wide}\n";
+ texrow.newline();
+ break;
+ case PACKAGE_WIDEMARGINSA4:
+ os << "\\usepackage[widemargins]{a4}\n";
+ texrow.newline();
+ break;
+ }
+ }
+ if (use_geometry) {
+ os << "\\usepackage{geometry}\n";
+ texrow.newline();
+ os << "\\geometry{verbose";
+ if (orientation == ORIENTATION_LANDSCAPE)
+ os << ",landscape";
+ switch (papersize2) {
+ case VM_PAPER_CUSTOM:
+ if (!paperwidth.empty())
+ os << ",paperwidth="
+ << paperwidth;
+ if (!paperheight.empty())
+ os << ",paperheight="
+ << paperheight;
+ break;
+ case VM_PAPER_USLETTER:
+ os << ",letterpaper";
+ break;
+ case VM_PAPER_USLEGAL:
+ os << ",legalpaper";
+ break;
+ case VM_PAPER_USEXECUTIVE:
+ os << ",executivepaper";
+ break;
+ case VM_PAPER_A3:
+ os << ",a3paper";
+ break;
+ case VM_PAPER_A4:
+ os << ",a4paper";
+ break;
+ case VM_PAPER_A5:
+ os << ",a5paper";
+ break;
+ case VM_PAPER_B3:
+ os << ",b3paper";
+ break;
+ case VM_PAPER_B4:
+ os << ",b4paper";
+ break;
+ case VM_PAPER_B5:
+ os << ",b5paper";
+ break;
+ default:
+ // default papersize ie VM_PAPER_DEFAULT
+ switch (lyxrc.default_papersize) {
+ case PAPER_DEFAULT: // keep compiler happy
+ case PAPER_USLETTER:
+ os << ",letterpaper";
+ break;
+ case PAPER_LEGALPAPER:
+ os << ",legalpaper";
+ break;
+ case PAPER_EXECUTIVEPAPER:
+ os << ",executivepaper";
+ break;
+ case PAPER_A3PAPER:
+ os << ",a3paper";
+ break;
+ case PAPER_A4PAPER:
+ os << ",a4paper";
+ break;
+ case PAPER_A5PAPER:
+ os << ",a5paper";
+ break;
+ case PAPER_B5PAPER:
+ os << ",b5paper";
+ break;