]> git.lyx.org Git - lyx.git/blobdiff - src/output_latex.cpp
de.po
[lyx.git] / src / output_latex.cpp
index 60bc9f3d5970ee92f41b37622e15faf17bee25ce..517ef13d22d17da0ca5927c680a7c37d6349b7ba 100644 (file)
@@ -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