Нельзя ставить ноль после алефа?

144

Я и друг шутили насчет Алефа. После попытки набрать א 0 (переключить эти 2 символа) они переключились! Любая последовательность символов не останавливает этот эффект. Почему это!??

Попробуйте набрать их с обратным 0 и א (c & p для א):

א 0

א - 0

א \ 0

א -. / 0

Слова однако разделяют их

א foobar 0

Я нахожусь на Arch Linux и еще не проверял это ни на одной другой ОС

РЕДАКТИРОВАТЬ: номер не должен быть нулевым. Работает с цифрами, но не с буквами.

Гман Смит
источник
14
На первый взгляд я думал, что ты сумасшедший. Оказывается, это просто артефакт того, как используются разные языковые направления. Отличный вопрос!
6
Для написания текста на иврите этот порядок имеет смысл. В противном случае было бы очень неприятно набирать такие вещи, как ב-5 דקות(через 5 минут).
Угорен
7
@jamesqf: И есть один, см. сообщение IllidanS4.
Гравитация
28
@jamesqf, еврейские буквы существуют в Юникоде для написания иврита. И я осмелюсь сказать, что больше нас пишут на иврите (около 7 миллионов), чем те, кто пишет о множестве кардиналов.
Угорен
27
По некоторым подсчетам, @ugoren насчитывает 130 тысяч математиков , но на самом деле математика является универсальным языком, так что это действительно ℵ₀.
Ник Т

Ответы:

111

'א', 'HEBREW LETTER ALEF' (U + 05D0) имеет класс BIDI (двунаправленный) "Справа налево [R]", потому что иврит традиционно пишется справа налево. Цифры, с другой стороны, не имеют определенной направленности, и поэтому весь кусок алеф и ноль интерпретируется как справа налево. В этом случае следующий символ необязательно может быть расположен справа от предыдущего символа, как диктуют довольно сложные двунаправленные правила Unicode.

У вас есть несколько вариантов решения этой проблемы.

  1. Вы можете использовать «ℵ», «ALEF SYMBOL» (U + 2135) . Это символ, имеющий свойство слева направо: ℵ0.

  2. Вместо обычной цифры 0вы можете использовать символ, подобный нулю, с направлением слева направо, например, «〇», «ИДЕОГРАФИЧЕСКИЙ НУЛЕВЫЙ НОМЕР» (U + 3007) .

  3. Самый чистый способ - использовать символ «СЛЕВА К ПРАВО» (U + 200E) ( Википедия ) после алефа: «א 0». Это невидимый символ нулевой ширины, который имеет направленность слева направо. Таким образом, он оказывает такое же влияние на алгоритм двунаправленного размещения текста, как и вставка, скажем, латинской буквы слева направо после א, за исключением того, что никакой видимой буквы там не появится.

IllidanS4
источник
69
В математическом контексте (который я ожидаю, что это), U + 2135 является правильным символом для использования.
cmbuckley
10
Вы должны быть осторожны с переопределениями - когда вы помещаете их в текст, важно удалить их (используя символ «всплывающее направленное форматирование» U+202C), когда контекст, с которым вы хотите, чтобы они работали, завершился.
J ...
4
Кроме того, символы «переопределения» являются излишними, «встраивание» достаточно для этого варианта использования. Также есть новый класс под названием «изолят», который не уверен, в чем разница в этой ситуации.
Random832
4
Я бы рекомендовал поменять местами 2 и 3.
wizzwizz4
10
@ Random832 Все это излишне. Все, что вам действительно нужно, это знак слева направо (U + 200E) между алефом и нулем. Таким образом, вам не нужны дополнительные «попсовые» персонажи.
Ильмари
198

Aleph ( U + 05D0 ) - это буква иврита, а иврит пишется справа налево, поэтому Unicode назначает ему двунаправленный класс «справа налево». (См. Unicode TR9: Двунаправленный алгоритм для более подробной информации.)

Латинские буквы, конечно, «слева направо». Однако ноль ( U + 0030 ) находится в двунаправленном классе «European Number», который является слабым классом - в то время как LtR по умолчанию может переключаться на RtL, если перед ним стоит «сильный» символ справа налево. (См. Двунаправленные типы символов и устранение слабых типов в TR9.)

В результате направления до и после меняются местами для всего слова - если вы поставите ноль «до», оно появится справа; если вы напишите ноль «после», он появится слева.

grawity
источник
14
Это чрезвычайно распространенная проблема во многих текстовых редакторах и на веб-сайтах при наборе текста на иврите - я думаю, что это верно и для других языков с написанием справа налево. Это, конечно, со временем стало лучше, но представьте, что вы пытаетесь написать проблему слова - переключаться между еврейскими словами (например, символом алеф) и числами (например, символом 0) несколько раз ...
Джейк,
3
@Walt Большинство учебников, которые я видел, относятся к типу «погружения», в которых используется чрезвычайно простой иврит, но почти полностью иврит. Может показаться нелогичным использование языка для преподавания языка, но это позволяет более органично наращивать языковые навыки. Вы можете увидеть транслитерации или перевода инлайн (что - то вроде lh4.ggpht.com/-_Vc8TUDwznQ/UlhaLFjnrGI/AAAAAAAAzQk/_zm4BMC0aLw/... - «Шалом Kita Алеф» = «Hello First Grade»)
Jake
1
@ Джейк Ах, это имеет смысл. Единственный иностранный язык, который я действительно взял, был латынь; наши учебники, как правило, были в основном английскими с одним кусочком латинского текста, чтобы расшифровать каждую главу, вплоть до тех пор, пока формат всего класса не переключился с «учить латынь» на «переводить всю эту эпическую поэму, постепенно, в течение курса». учебный год".
Tin Man
5
@Walt: я думаю, что может быть недоразумение. Если я наберу латинское (LTR) слово, затем ивритское (RTL) слово, затем другое латинское слово, я могу свободно поместить их все в предложение, и только еврейское слово будет отображать RTL. Это все разработано, чтобы легко вписаться в одно и то же предложение. Проблема в том, что число 0используется языками LTR и RTL, и поэтому программное обеспечение просто направляет его в том же направлении, что и предыдущая буква. Если это следует за символами LTR, это LTR. Если это следует за буквами RTL, это RTL. Есть также переопределения, чтобы поменять его. fileformat.info/info/unicode/char/202d/index.htm
Duck
4
Ноль не становится RTL - это все еще LTR, и последовательность цифр будет отображаться слева направо даже с ивритом вокруг него, но уровни внедрения взаимодействуют таким образом, что ноль отображается слева от Еврейский символ, предшествующий ему в порядке памяти. (Двунаправленность Unicode сложна.)
user2357112
20

Возможно, лучшим способом добиться этого было бы:

echo -e "\u200F0א"

И обязательная ссылка на xkcd https://xkcd.com/1137/

LTR

wvxvw
источник
14

Вполне возможно иметь ноль впереди, как показано в следующем примере, который был сделан в Notepad ++.

Алеф с 0

То, что вы видите, а также становится очевидным, если вы попытаетесь пометить символ в своем вопросе, это то, что иврит пишется справа налево и (так как 0 напрямую связан), текст обрабатывается справа налево (вместо слева) вправо) образом.

См. Второй пример проблемы, с которой столкнулся Firefox (с моей стороны) с четким выбором.

Firefox выбирает текст справа налево

Сет
источник
17
Это ужасный совет, потому что он играет в игры с фактическим упорядочением персонажей, чтобы получить определенный визуальный порядок. Другие ответы объясняют, почему это происходит, и некоторые включают правильный способ борьбы с ним (переопределение и явные метки направления).
Дранон
8
Не могли бы вы указать, где, где я включаю некоторые советы? Я просто показываю пример того, что происходит, что действительно возможно иметь суффиксную цифру и предоставлять информацию о том, почему это происходит так, как это происходит.
Сет
13

Иврит написан справа налево - это заставляет алеф-символ переносить информацию, что следующий символ должен быть напечатан слева от него.

Если вы проверите шестнадцатеричный документ (или проведете курсор по тексту с помощью клавиш со стрелками в подходящем редакторе), вы заметите, что сначала вы попадаете в alpeh, а затем в цифру.

Т.е. предположение «следующий символ == символ справа» не выполняется.

Евгений Рик
источник
3
א 0 0 א 0-א א -0

Вопрос в том, где вы это делаете, и в реализации. Чтобы получить поведение для чисел на иврите, все символы должны быть направлены справа налево. В HTML / CSS это:

<p style="direction:rtl"> א0 0א 0-א א-0 </p>

В операционной системе иврит и двунаправленность должны быть включены.

Обходные пути, предлагая использование других символов в качестве заменителей, побеждает цель Unicode. Алеф как математический оператор может выглядеть одинаково в некоторых наборах символов, но это совершенно другой символ, чем еврейский алеф, как по контексту, так и по тому, как он будет анализироваться. Например, носитель / компьютер на иврите не будет правильно обрабатывать его, если он используется в сочетании с ивритским словом. Числа и не-альфа-символы являются проблемой, когда они сами не получают ту же кодировку, что и альфа-символы. Таким образом, по иронии судьбы сами числа, по-видимому, должны быть независимыми от набора символов / направленности, принимать любую юникодную направленность предыдущей буквы. Таким образом, в иврите документ - числа становятся «Hebraicized», то есть направленно, как иврит. В то время как англо-латинский документ,

Дэнни Ф
источник
OP был пытается использовать алеф как числовой оператор, нет?
grawity
Ну, это не было ясно в посте вообще. В любом случае, направленность не должна быть актуальной. Aleph используется в обозначениях множеств и имеет бесконечное, бесконечное обозначение серии. Он должен быть направлен слева направо, так как все математические данные слева направо независимо от того, какой язык вы используете. Однако использование алеф в качестве символа на иврите направлено справа налево.
Дэнни Ф
2

Это возможно:

א 0

א - 0

א \\ 0

א -. / 0

א foobar 0

(Этот ответ не ответил «почему это так», поскольку на него уже ответили другие. Но он отвечает на вопрос в заголовке «невозможно ...?»)

user23013
источник
7
Но это также не отвечает, КАК, и поэтому почти бесполезно.
НХ.