X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2Foutput_latex.cpp;h=517ef13d22d17da0ca5927c680a7c37d6349b7ba;hb=1e519d1115f41f71c253cb9e2fbb7803e9a583a9;hp=60bc9f3d5970ee92f41b37622e15faf17bee25ce;hpb=af9838fd32f20f80c8e8af30aa0114abe1412160;p=lyx.git diff --git a/src/output_latex.cpp b/src/output_latex.cpp index 60bc9f3d59..517ef13d22 100644 --- a/src/output_latex.cpp +++ b/src/output_latex.cpp @@ -305,10 +305,11 @@ static TeXEnvironmentData prepareEnvironment(Buffer const & buf, // in multilingual environments, the CJK tags have to be nested properly data.cjk_nested = false; - 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 (!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()) @@ -1194,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)))) { @@ -1610,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