X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2Foutput_latex.cpp;h=517ef13d22d17da0ca5927c680a7c37d6349b7ba;hb=1e519d1115f41f71c253cb9e2fbb7803e9a583a9;hp=80af66451d85050f147535ae817b459d9bd8981a;hpb=da23637d7f50aaa697a92f6051cd48dd1f97e380;p=lyx.git diff --git a/src/output_latex.cpp b/src/output_latex.cpp index 80af66451d..517ef13d22 100644 --- a/src/output_latex.cpp +++ b/src/output_latex.cpp @@ -12,6 +12,7 @@ #include "output_latex.h" +#include "BiblioInfo.h" #include "Buffer.h" #include "BufferParams.h" #include "Encoding.h" @@ -304,8 +305,11 @@ static TeXEnvironmentData prepareEnvironment(Buffer const & buf, // in multilingual environments, the CJK tags have to be nested properly data.cjk_nested = false; - if (data.par_language->encoding()->package() == Encoding::CJK && - state->open_encoding_ != CJK && pit->isMultiLingual(bparams)) { + if (!bparams.useNonTeXFonts + && (bparams.inputenc == "auto-legacy" + || bparams.inputenc == "auto-legacy-plain") + && data.par_language->encoding()->package() == Encoding::CJK + && state->open_encoding_ != CJK && pit->isMultiLingual(bparams)) { if (prev_par_language->encoding()->package() == Encoding::CJK) { os << "\\begin{CJK}{" << from_ascii(data.par_language->encoding()->latexName()) @@ -979,10 +983,10 @@ void TeXOnePar(Buffer const & buf, } } - // Switch file encoding if necessary; no need to do this for "default" + // Switch file encoding if necessary; no need to do this for "auto-legacy-plain" // encoding, since this only affects the position of the outputted // \inputencoding command; the encoding switch will occur when necessary - if (bparams.inputenc == "auto" + if (bparams.inputenc == "auto-legacy" && !runparams.isFullUnicode() // Xe/LuaTeX use one document-wide encoding (see also switchEncoding()) && runparams.encoding->package() != Encoding::japanese && runparams.encoding->package() != Encoding::none) { @@ -1191,7 +1195,7 @@ void TeXOnePar(Buffer const & buf, if (localswitch_needed || (intitle_command && using_begin_end) || closing_rtl_ltr_environment - || ((runparams.isLastPar || close_lang_switch) + || (((runparams.isLastPar && !runparams.inbranch) || close_lang_switch) && (par_lang != outer_lang || (using_begin_end && style.isEnvironment() && par_lang != nextpar_lang)))) { @@ -1339,11 +1343,11 @@ void TeXOnePar(Buffer const & buf, // Information about local language is stored as a font feature. // If this is the last paragraph of the inset and a local_font was set upon entering - // and we are mixing encodings ("auto" or "default" and no XeTeX or LuaTeX), + // and we are mixing encodings ("auto-legacy" or "auto-legacy-plain" and no XeTeX or LuaTeX), // ensure the encoding is set back to the default encoding of the local language. if (runparams.isLastPar && runparams_in.local_font != 0 && runparams_in.encoding != runparams_in.local_font->language()->encoding() - && (bparams.inputenc == "auto" || bparams.inputenc == "default") + && (bparams.inputenc == "auto-legacy" || bparams.inputenc == "auto-legacy-plain") && !runparams.isFullUnicode() ) { runparams_in.encoding = runparams_in.local_font->language()->encoding(); @@ -1436,7 +1440,8 @@ void latexParagraphs(Buffer const & buf, if (multibib_child && mparams.useBiblatex()) os << "\\newrefsection"; - else if (multibib_child && mparams.useBibtopic()) { + else if (multibib_child && mparams.useBibtopic() + && !buf.masterBibInfo().empty()) { os << "\\begin{btUnit}\n"; runparams.openbtUnit = true; } @@ -1546,7 +1551,8 @@ void latexParagraphs(Buffer const & buf, && layout.latexname() == bparams.multibib) { if (runparams.openbtUnit) os << "\\end{btUnit}\n"; - if (!bparams.useBiblatex()) { + if (!bparams.useBiblatex() + && !buf.masterBibInfo().empty()) { os << '\n' << "\\begin{btUnit}\n"; runparams.openbtUnit = true; } @@ -1605,14 +1611,23 @@ void latexParagraphs(Buffer const & buf, state->open_encoding_ = none; } // Likewise for polyglossia or when using begin/end commands + // or after an active branch inset with a language switch + Language const * const outer_language = (runparams.local_font != 0) + ? runparams.local_font->language() : bparams.language; + string const & prev_lang = runparams.use_polyglossia + ? getPolyglossiaEnvName(outer_language) + : outer_language->babel(); string const & cur_lang = openLanguageName(state); - if (maintext && !is_child && !cur_lang.empty()) { + if (((runparams.inbranch && langOpenedAtThisLevel(state) && prev_lang != cur_lang) + || (maintext && !is_child)) && !cur_lang.empty()) { os << from_utf8(subst(lang_end_command, "$$lang", cur_lang)) << '\n'; if (using_begin_end) popLanguageName(); + } else if (runparams.inbranch && !using_begin_end && prev_lang != cur_lang) { + os << subst(lang_begin_command, "$$lang", prev_lang) << '\n'; } // reset inherited encoding @@ -1643,11 +1658,11 @@ pair switchEncoding(odocstream & os, BufferParams const & bparams, return make_pair(false, 0); // Only switch for auto-selected legacy encodings (inputenc setting - // "auto" or "default"). + // "auto-legacy" or "auto-legacy-plain"). // The "listings" environment can force a switch also with other // encoding settings (it does not support variable width encodings // (utf8, jis, ...) under 8-bit latex engines). - if (!force && ((bparams.inputenc != "auto" && bparams.inputenc != "default") + if (!force && ((bparams.inputenc != "auto-legacy" && bparams.inputenc != "auto-legacy-plain") || runparams.moving_arg)) return make_pair(false, 0); @@ -1656,7 +1671,8 @@ pair switchEncoding(odocstream & os, BufferParams const & bparams, if (oldEnc.name() == newEnc.name() || oldEnc.package() == Encoding::japanese || oldEnc.package() == Encoding::none - || newEnc.package() == Encoding::none) + || newEnc.package() == Encoding::none + || runparams.for_search) return make_pair(false, 0); // FIXME We ignore encoding switches from/to encodings that do // neither support the inputenc package nor the CJK package here. @@ -1668,7 +1684,7 @@ pair switchEncoding(odocstream & os, BufferParams const & bparams, LYXERR(Debug::LATEX, "Changing LaTeX encoding from " << oldEnc.name() << " to " << newEnc.name()); os << setEncoding(newEnc.iconvName()); - if (bparams.inputenc == "default") + if (bparams.inputenc == "auto-legacy-plain") return make_pair(true, 0); docstring const inputenc_arg(from_ascii(newEnc.latexName()));