\noindent não tem efeito quando rodeado por marcadores bidi

\noindent não tem efeito quando rodeado por marcadores bidi

Por que xelatexrecua a primeira linha do texto (hebraico) no pdf obtido do seguinte manuscrito LaTeX?

\documentclass{scrartcl}

\catcode8198=10 % Left-To-Right Mark
\catcode8199=10 % Right-To-Left Mark
\catcode8234=10 % Left-To-Right Embedding
\catcode8235=10 % Right-To-Left Embedding
\catcode8236=10 % Pop Directional Formatting

\usepackage{fontspec}
\setmainfont{Arial Hebrew}
\usepackage[rldocument]{bidi}

\begin{document}
\setRTL

‏‪\noindent‬ פְּרֶצְל מנסה לישון, על מנת להחיש את מהלך הזמן. אדם הולך לו לישון בשתים-עשרה, קם כעבור רגע, והנה השעה שבע בבוקר, ומתברר שהוא השתמש בשינה בתור סוס, לדלג על שבע שעות. תחבולה זו ידועה היטב לטבע. מה עושה הטבע נגדה? נותן לפרש הערמומי להירדם בשתים-עשרה, מציף אותו בהרבה סיוטים, וכשהפרש קם תשוש ומזיע ואומר לעצמו בחצי סיפוק "לפחות עברו שבע שעות," מייד קופץ שעונו ומורה שתים-עשרה ורבע. גם לא ישנת, בסיוטים סוייטת, וכל הלילה עוד לפניך.


\end{document}

A saída tipográfica:

O pdf digitado mostra uma primeira linha recuada.

Uma nota sobre marcadores bidirecionais invisíveis (bidirecionalidade)

O \noindentaparece antes de todo o texto hebraico. O \noindentestá cercado por marcadores bidi. É imediatamente precedido por dois marcadores: Marca Unicode da Direita para a Esquerda (U+200F) e Incorporação da Esquerda para a Direita (U+202A), nesta ordem; e imediatamente seguido por um marcador Pop Directional Formatting (U+202C). Portanto, a ordem dos caracteres é da esquerda para a direita:

U+200F, U+202A, \, n, o, i, n, d, e, n, t, U+202C, U+0020 (a space), <Hebrew text>

Para ajudar a visualizar isso, aproveite a ilustração a seguir.

Lenda
⊳ ... Marca da direita para a esquerda, U+200F (composta como ⊲ dentro de um parágrafo rtl)
⋉ ... Incorporação da esquerda para a direita, U+202A
⋈ ... Formatação direcional pop, U+202C

Cada um desses símbolos foi digitado na janela do editordepoisa instrução que ela representa entrou em vigor.

Um texto bidirecional

Responder1

Seu problema é colocar U+200F no início do parágrafo. Esse é um token catcode 12: 'other', e assim inicia um parágrafo, acionando a inserção do recuo do parágrafo e \everypar. O fato de não ser imprimível não faz diferença para o TeX. Portanto \noindent, ocorre após o início do parágrafo e não faz absolutamente nada.

(A configuração do catcode no início do documento provavelmente não é tão pretendida quanto 8198 = U+2006= SIX-PER-EM SPACEe 8199 = U+2007= FIGURE SPACE.)

Responder2

Em geral, não é correto fornecer aos controles direcionais Unicode o código catcode 10, pois eles não poderão controlar a formatação e produzirão espaço anômalo.

Considere a corda

abc‮xyz‬123

Aquilo é

  U+0061 LATIN SMALL LETTER A     a
  U+0062 LATIN SMALL LETTER B     b
  U+0063 LATIN SMALL LETTER C     c
  U+202e RIGHT-TO-LEFT OVERRIDE
  U+0078 LATIN SMALL LETTER X     x
  U+0079 LATIN SMALL LETTER Y     y
  U+007a LATIN SMALL LETTER Z     z
  U+202c POP DIRECTIONAL FORMATTING
  U+0031 DIGIT ONE     1
  U+0032 DIGIT TWO     2
  U+0033 DIGIT THREE     3

Se definido com os catcodes padrão (12= "other") então

\documentclass{article}
\usepackage{fontspec}
\setmainfont{Arial}
%\catcode"202E=10
%\catcode"202C=10
\begin{document}

abc‮xyz‬123
\end{document}

produz

insira a descrição da imagem aqui

Qual é a ordem especificada, correspondendo à exibição no navegador, mas se você descomentar as declarações para tornar os controles catcode 10, obterá

insira a descrição da imagem aqui

sem mudança de direção e espaço espúrio.

informação relacionada