From 4e74dd0d4258177133e5a374264bbc0cec7f9dbb Mon Sep 17 00:00:00 2001 From: Juergen Spitzmueller Date: Thu, 15 Aug 2019 15:15:59 +0200 Subject: [PATCH] Fix greyedout note in RTL (#8647) More complicated than I wished for, but color handling in RTL is particularly tricky. The three versions are needed due to the differences between [pdf]latex, xetex, luatex/luabidi and luatex/babel. --- src/LaTeXFeatures.cpp | 51 +++++++++++++++++++++++++++++++++++++--- src/insets/InsetNote.cpp | 2 ++ 2 files changed, 50 insertions(+), 3 deletions(-) diff --git a/src/LaTeXFeatures.cpp b/src/LaTeXFeatures.cpp index 251f5bf8f2..cd04b4c0f2 100644 --- a/src/LaTeXFeatures.cpp +++ b/src/LaTeXFeatures.cpp @@ -195,6 +195,39 @@ static docstring const lyxgreyedout_def = from_ascii( " {\\textcolor{note_fontcolor}\\bgroup\\ignorespaces}\n" " {\\ignorespacesafterend\\egroup}\n"); +static docstring const lyxgreyedout_rtl_def = from_ascii( + "%% The greyedout annotation environment (with RTL support)\n" + "\\NewEnviron{lyxgreyedout}{%\n" + "\\if@rl%\n" + "\\everypar{\\textcolor{note_fontcolor}\\beginL\\ignorespaces}%\n" + "\\BODY\\everypar{\\ignorespacesafterend\\endL}\n" + "\\else%\n" + "\\textcolor{note_fontcolor}\\bgroup\\ignorespaces%\n" + "\\BODY\\ignorespacesafterend\\egroup\n" + "\\fi}\n"); + +static docstring const lyxgreyedout_luartl_def = from_ascii( + "%% The greyedout annotation environment (with RTL support)\n" + "\\NewEnviron{lyxgreyedout}{%\n" + "\\if@RTL%\n" + "\\everypar{\\color{note_fontcolor}\\pardir TRT \\textdir TRT\\ignorespaces}%\n" + "\\BODY\\everypar{\\ignorespacesafterend}\n" + "\\else%\n" + "\\textcolor{note_fontcolor}\\bgroup\\ignorespaces%\n" + "\\BODY\\ignorespacesafterend\\egroup\n" + "\\fi}\n"); + +static docstring const lyxgreyedout_luartl_babel_def = from_ascii( + "%% The greyedout annotation environment (with RTL support)\n" + "\\NewEnviron{lyxgreyedout}{%\n" + "\\if@rl%\n" + "\\everypar{\\color{note_fontcolor}\\pardir TRT \\textdir TRT\\ignorespaces}%\n" + "\\BODY\\everypar{\\ignorespacesafterend}\n" + "\\else%\n" + "\\textcolor{note_fontcolor}\\bgroup\\ignorespaces%\n" + "\\BODY\\ignorespacesafterend\\egroup\n" + "\\fi}\n"); + // We want to omit the file extension for includegraphics, but this does not // work when the filename contains other dots. // Idea from http://www.tex.ac.uk/cgi-bin/texfaq2html?label=unkgrfextn @@ -1019,7 +1052,8 @@ char const * simplefeatures[] = { "chessboard", "xskak", "pict2e", - "drs" + "drs", + "environ" }; char const * bibliofeatures[] = { @@ -1557,8 +1591,19 @@ TexString LaTeXFeatures::getMacros() const // greyed-out environment (note inset) // the color is specified in the routine // getColorOptions() to avoid LaTeX-package clashes - if (mustProvide("lyxgreyedout")) - macros << lyxgreyedout_def; + if (mustProvide("lyxgreyedout")) { + // We need different version for RTL (#8647) + if (hasRTLLanguage()) { + if (runparams_.flavor == OutputParams::LUATEX) + if (useBabel()) + macros << lyxgreyedout_luartl_babel_def; + else + macros << lyxgreyedout_luartl_def; + else + macros << lyxgreyedout_rtl_def; + } else + macros << lyxgreyedout_def; + } if (mustProvide("lyxdot")) macros << lyxdot_def << '\n'; diff --git a/src/insets/InsetNote.cpp b/src/insets/InsetNote.cpp index 02f47ba30e..9f4c5ed1d0 100644 --- a/src/insets/InsetNote.cpp +++ b/src/insets/InsetNote.cpp @@ -312,6 +312,8 @@ void InsetNote::validate(LaTeXFeatures & features) const features.useInsetLayout(getLayout()); break; case InsetNoteParams::Greyedout: + if (features.hasRTLLanguage()) + features.require("environ"); InsetCollapsible::validate(features); break; case InsetNoteParams::Note: -- 2.39.5