Это полная замена для моего оригинального ответа (оригинальный текст ниже).
Ваш документ помечает слова зеленым («слова, которые копируются так, как вы хотите») и красным («слова, которые не копируются так, как вы хотите»).
Оба типа используют 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, но это то, что вы видите?