2

У меня есть документ Word на персидском языке, и в нем много фраз вроде этого:

Моя проблема в том, что "و نشیب" соединяется с "هایی".

Поначалу кажется, что между ними есть не присоединяющийся символ нулевой ширины, но на самом деле, когда я пытался его скопировать, ничего не копировалось.

Я также скопировал всю фразу в Блокнот и получил следующее: "و نشیبهایی" Как видите, между двумя предыдущими словами нет ничего.

Я включил функцию «Показать / скрыть» в группе "Абзац" на вкладке "Главная", чтобы увидеть, есть ли скрытый символ, и вот результат:

Теперь мне интересно, есть ли способ работать с этим персонажем; например, заменить его на ZWNJ.

Файл с этой проблемой (также читайте ниже)

2 ответа2

2

Это полная замена для моего оригинального ответа (оригинальный текст ниже).

Ваш документ помечает слова зеленым («слова, которые копируются так, как вы хотите») и красным («слова, которые не копируются так, как вы хотите»).

Оба типа используют ZWNJ, например, перед предшествующим символом Heh, который должен соединяться только слева, а не справа.

Разница в том, что в зеленых словах ZWNJ был введен RTL, а в красных словах - LTR.

Я не знаю, как вы обычно вводите ZWNJ, но здесь, если я выберу «Необязательный разрыв без ширины» на панели «Специальные символы» в диалоговом окне «Символ», в ZWNJ вводится LTR (в данном случае плохо), тогда как если я выбираю символ 0x200C из таблицы символов в диалоговом окне Symbol, он вводится в RTL (хорошо, в данном случае). В Word 2010, если я захожу в Word-> Файл-Параметры-> Настроить ленту-> Сочетания клавиш-> Настроить ... и назначить нажатие клавиши для необязательного разрыва без ширины, нажатие этого нажатия клавиши при вводе текста RTL появляется для вставки ZWNJ как RTL (хорошо). Вы можете назначить это следующим образом:

  • в списке категорий прокрутите вниз до "Common Symbols" и выберите его
  • в списке отображаемых общих символов выберите "Необязательный разрыв без ширины"
  • щелкните в поле "Нажать новый ключ"
  • нажмите нужную комбинацию клавиш (я использовал Ctrl-9 в качестве эксперимента)
  • нажмите Назначить
  • нажмите Закрыть

Я не знаю, достигнет ли это всего, что вам нужно, но я думаю, что это, по крайней мере, объясняет, что происходит.

(Я подозревал, что это было что-то подобное, но мне пришлось сохранить как .docx и посмотреть на XML. "Зеленые слова" были закодированы в одном слове "run" с RTL "свойство run" (последовательность выполнения символы с одинаковыми характеристиками, поэтому если вы измените цвет текста, произойдет новый запуск). Красные слова были закодированы как три прогона: два прогона RTL, содержащие текст, и прогон без RTL, содержащий символ ZWNJ.)

Чтобы изменить LTR ZWNJ на RTL, вы должны использовать следующий VBA. (Для тех, кто знает VBA, это один из случаев, когда вам нужно работать с выделением, а не с диапазоном, потому что AFAIK единственный способ установить текст Run to RTL - через метод RTLRun объекта Selection):

Sub replace_LTR_NBZWs_with_RTL_ones()

ActiveDocument.Select
With Selection.Find
  .ClearFormatting
  .Text = ChrW(8204)
  .Forward = True
  .Wrap = wdFindStop
  .Format = False
  .MatchCase = False
  .MatchWholeWord = False
  .MatchKashida = False
  .MatchDiacritics = False
  .MatchAlefHamza = False
  .MatchControl = False
  .MatchByte = False
  .MatchWildcards = False
  .MatchSoundsLike = False
  .MatchAllWordForms = False
  While .Execute
    Selection.RtlRun
  Wend
End With
End Sub

Исходный текст моего ответа следует ...

Это , вероятно , является ZWNJ. Если вы выберите его, а затем нажмите Вставить-> Символ-> Другие символы, ZWNJ (0x200C) должен быть выбран. Это то же самое, что и символ, который Microsoft называет "Необязательный разрыв без ширины" на панели "Специальные символы" в диалоговом окне "Символ".

Насколько я знаю, NotePad игнорирует ZWNJ. Я подозреваю, что вам придется заменить ZWNJ (если это то, что он есть) на пробел (один выбран, вы должны быть в состоянии нажать пробел, чтобы сделать это), что заставит NotePad отображать правильную форму символов.

Копирование из одной точки в документе Word в другую должно сохранить ZWNJ, но это то, что вы видите?

0

Сегодня я нашел другой способ решить проблему. Хитрость заключается в том, чтобы заменить NWOB (символом до и после) на себя, тогда Word сделает трюк ...

  • Найти что: (?)^o(?)
  • Заменить на: \1^o\2
  • Не забудьте поставить галочку рядом с Use wildcards в More >> панель

Затем он изменит LTR ZWNJ на режим, похожий на прямоугольник, а RTL на то, что я ожидал.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .