os << '{';
}
- // In some insets (such as Arguments), we cannot use \selectlanguage
+ // In some insets (such as Arguments), we cannot use \selectlanguage.
+ // Also, if an RTL language is set via environment in polyglossia,
+ // only a nested \\text<lang> command will reset the direction for LTR
+ // languages (see # 10111).
+ bool const in_polyglossia_rtl_env =
+ use_polyglossia
+ && runparams.local_font != 0
+ && outer_language->rightToLeft()
+ && !par_language->rightToLeft();
bool const localswitch = text.inset().forceLocalFontSwitch()
- || (using_begin_end && text.inset().forcePlainLayout());
+ || (using_begin_end && text.inset().forcePlainLayout())
+ || in_polyglossia_rtl_env;
if (localswitch) {
lang_begin_command = use_polyglossia ?
"\\text$$lang$$opts{" : lyxrc.language_command_local;
&& style != nextpar->layout())))
|| (atSameLastLangSwitchDepth(state)
&& state->lang_switch_depth_.size()
- && cur_lang != par_lang))
+ && cur_lang != par_lang)
+ || in_polyglossia_rtl_env)
{
if (using_begin_end && !localswitch)
os << breakln;