Subject: Re: bug#22429: Force character to be recognized as LTR inside RTL paragraph

From: Eli Zaretskii <[email-masked]>
Date: Fri, 22 Jan 2016 10:08:06 +0200

> Date: Thu, 21 Jan 2016 13:14:22 -0800
> From: "Filipe Moreira" <[email-masked]>
> 
> I’m using Emacs as a LaTeX editor, with the AUCTeX mode. One document I’m
> authoring is written in English with some paragraphs in Hebrew or Greek. 
> 
> The issue I have is with mixing some neutral characters that need to be LTR,
> inside a paragraph which is RTL. An example of this is the slash (i.e. ‘\’)
> character used by LaTeX to signal its commands. Inside a RTL paragraph I
> ideally want to force Emacs to always interpret the slash character, as well as
> the open and close brackets (i.e. {}) as LTR. 
> 
> This is not what happens at the moment. Here I have a visual representation of
> the problem:
> http://emacs.stackexchange.com/questions/19696/handling-left-to-right-inside-right-to-left-paragraphs-using-emacs-and-auctex.
> 
> Is it possible to whitelist some characters that should always be interpreted
> as LTR?

The directionality of characters is determined by their bidirectional
class property as defined by the Unicode Character Database.  Emacs
uses those definitions in its implementation of the UBA, the Unicode
Bidirectional Algorithm, when it lays out text for display.
Punctuation characters, such as \, {, and } have "weak
directionality": they take the directionality of the surrounding text,
and if the directionality on either side is different, they default to
the paragraph's base direction, which is RTL in your case.  So that is
what you see.

Emacs being Emacs, you can programmatically change the bidirectional
class of every character, but that change has global effect: it will
affect the directionality of that character everywhere in the Emacs
session.  So this is not recommended.

The correct solution to these problems is to wrap the footnote block
in the LRE..PDF or LRI..PDI control characters, so that the footnote
is rendered independently of the surrounding bidirectional context.
See the example below.  Not sure if LaTeX will DTRT with directional
control characters, but if it doesn't, that's a bug/misfeature in
LaTeX.

\begin{hebrew}
  \pstart

בְּרֵאשִׁ֖ית‪\footnoteA{This is a Hebrew related footnote}‬ בָּרָ֣א אֱלֹהִ֑ים אֵ֥ת הַשָּׁמַ֖יִם וְאֵ֥ת הָאָֽרֶץ׃

  \pend
\end{hebrew}

Another possibility is to insert newlines between the footnote and the
surrounding text, as shown below.  Not sure if LaTeX will be happy
with that, and I think it's uglier anyway.

\begin{hebrew}
  \pstart

בְּרֵאשִׁ֖ית

\footnoteA{This is a Hebrew related footnote}

בָּרָ֣א אֱלֹהִ֑ים אֵ֥ת הַשָּׁמַ֖יִם וְאֵ֥ת הָאָֽרֶץ׃

  \pend
\end{hebrew}

I don't think there's a bug to fix here, so I'm going to close this
bug report.  Any objections?