[LyX/master] mirror left and right margins in LuaTeX with main RTL

Udi Fogiel <[email protected]> Mon, 06 Jul 2026 00:26:58 +0000
Newsgroups gmane.editors.lyx.cvs
Message-ID <[email protected]>
commit df939f252a92a70565951462a6aeb90b082a7563
Author: Udi Fogiel <[email protected]>
Date:   Sun Jul 5 22:18:37 2026 +0300

    mirror left and right margins in LuaTeX with main RTL
    
    see https://github.com/LaTeX-Package-Repositories/geometry/issues/20
    for further details
---
 src/BufferParams.cpp | 16 ++++++++++++++--
 1 file changed, 14 insertions(+), 2 deletions(-)

diff --git a/src/BufferParams.cpp b/src/BufferParams.cpp
index 6e8abdf2ac..923e557e81 100644
--- a/src/BufferParams.cpp
+++ b/src/BufferParams.cpp
@@ -2527,14 +2527,26 @@ bool BufferParams::writeLaTeX(otexstream & os, LaTeXFeatures & features,
 				gs << "," << g_options;
 			// output this only if use_geometry is true
 			if (use_geometry) {
+				// In LuaTeX with RTL main language, lmargin/rmargin are
+				// reversed relative to the user's visual intent. This
+				// only matters for one-sided documents: with two-sided
+				// documents lmargin/rmargin already mean inner/outer
+				// margin, which alternates by page side regardless.
+				OutputParams const & rp = features.runparams();
+				bool const luatex_rtl = (rp.flavor == Flavor::LuaTeX
+				                         || rp.flavor == Flavor::DviLuaTeX)
+				                        && language->rightToLeft()
+				                        && sides == OneSide;
 				if (!topmargin.empty())
 					gs << ",tmargin=" << Length(topmargin).asLatexString();
 				if (!bottommargin.empty())
 					gs << ",bmargin=" << Length(bottommargin).asLatexString();
 				if (!leftmargin.empty())
-					gs << ",lmargin=" << Length(leftmargin).asLatexString();
+					gs << "," << (luatex_rtl ? "rmargin" : "lmargin")
+					   << "=" << Length(leftmargin).asLatexString();
 				if (!rightmargin.empty())
-					gs << ",rmargin=" << Length(rightmargin).asLatexString();
+					gs << "," << (luatex_rtl ? "lmargin" : "rmargin")
+					   << "=" << Length(rightmargin).asLatexString();
 				if (!headheight.empty())
 					gs << ",headheight=" << Length(headheight).asLatexString();
 				if (!headsep.empty())
-- 
lyx-cvs mailing list
[email protected]
https://lists.lyx.org/mailman/listinfo/lyx-cvs