Главная
Программы
GREP-стили для устранения висячих слов при вёрстке текстов в InDesign CS4 и выше
GREP-стили для устранения висячих предлогов
и других висячих служебных слов
при вёрстке текстов в InDesign CS4 и выше
Последнее обновление страницы: 18.11.2025 00:00:20
В данной статье описан опыт устранения висячих служебных слов с целью обеспечения хорошей полиграфичности текстов – отдельно светских, и отдельно богослужебных.
Одна из проблем, которая вызывает головную боль при работе с текстами, – это борьба с так называемыми висячими предлогами, союзами и частицами, т. е. со служебными словами, оказавшимися в конце строки, хотя по смыслу они относятся к слову, которым начинается следующая строка:
Уютный дворик, очень зелёный весной и летом, в
июне весь усыпан жёлтыми одуванчиками.
Мы ходили на детские сеансы в ближайший к
нашему дому кинотеатр.
Вот что написано об этом в знаменитом «Справочнике художественного и технического редакторов» П. Г. Гиленсона на с. 422: «В книжных изданиях не следует оставлять в конце строки предлоги и союзы, начинающие предложение, а также однобуквенные предлоги и союзы в середине предложений». Для полноты информации приведём и другие нормы, касающиеся переносов, приводимые Гиленсоном на страницах 422–423: «Не допускаются неблагозвучные переносы и переносы, искажающие смысл… В книжно-журнальных изданиях числа не должны быть разделены переносами. В газетных, информационных изданиях и изданиях оперативной полиграфии допустимо разделение чисел, соединённых знаком тире (1985—1986), причём тире должно оставаться в первой строке. Сокращённые выражения (и т. д., и т. п., т. е.) при переносе не должны разделяться. При переносах не должны быть оторваны фамилии от инициалов и инициалы друг от друга. Перенос с разрывом фамилии допускается. Не должны быть отделены при переносе сокращённые слова от имён собственных (тов. Иванов)… Не допускается размещение в разных строках чисел и их наименований (250 кг), знаков номера и параграфа и относящихся к ним чисел (№ 25)». К этому списку следует ещё добавить частицы «бы», «же», «ли», которые не следует отрывать от предыдущего слова:
Она никогда не проходила мимо и хотя
бы словом пыталась ободрить человека.
В Word’е эта проблема полноценно не решается, хотя на первый взгляд и кажется, что нет ничего проще: достаточно во всём тексте после всех таких служебных слов (или, соответственно, перед ними) заменить обычные пробелы неразрывными, что можно сделать макросом. Беда, однако, в том, что разработчики Word’а сделали неразрывный пробел имеющим фиксированную ширину, и визуально хорошо заметна разница между нормальными междусловными пробелами в строке и неразрывными пробелами (особенно в том случае, когда в документе отключён автоматический перенос слов, а текст изобилует специальной терминологией, что характерно для служебной документации). Дополнительная проблема заключается в том, что неразрывный пробел блокирует автоматический перенос по слогам в слове, которое привязывается этим пробелом к предлогу, а это ещё больше увеличивает расстояние между словами, делая текст совсем уж некрасивым.
Второй способ, который в некоторых случаях оказывается единственно возможным, – «выгнать» висячее служебное слово на следующую строку, вставляя перед ним нужное количество пробелов. «Лишние» пробелы при этом просто уйдут за правый край страницы и будут незаметны. Однако этот способ хорош до тех пор, пока такой текст не начнут корректировать: ведь при этом добавленные пробелы могут оказаться в середине строки и образовать «дырку».
В Web-документах ситуация лучше. Там тоже можно использовать неразрывный пробел с именем « », имеющий, как и в Word’е, фиксированную ширину. Однако в HTML, помимо этого, имеется CSS-свойство «white-space», значение которого «nowrap» запрещает разрывать текст, помеченный этим свойством, не влияя при этом на ширину междусловных пробелов. Примечательно, что этим свойством можно «обернуть» произвольный фрагмент текста, например: «<span style="white-space:nowrap;">этот текст не будет пере</span>носиться». С использованием примерно такого способа подготовлены и эта статья, и другие страницы на нашем сайте, а нужная HTML-разметка выполняется с помощью специально написанной программы.
Проблемы, описанные по отношению к Word’у, исчезают в InDesign’е. В нём предусмотрен неразрывный пробел, не имеющий конкретной ширины (причём в отличие от Word’а, он не препятствует автоматическому переносу слов по слогам). В русскоязычном интерфейсе он носит название «Фиксированный пробел». И помимо него имеется символьный параметр «Без переносов», которым можно помечать произвольный фрагмент текста (чего так не хватает в Word’е). Достаточно сразу же после импорта текста в InDesign принудительно расставить по всему тексту в нужных местах фиксированные пробелы либо применить свойство «Без переносов» (для этого, в частности, можно использовать скрипт DoTextOK) – и дальше можно спокойно заниматься вёрсткой, не беспокоясь о висячих словах. Параметр «Без переносов» также удобно использовать для блокировки как неблагозвучных переносов (классические примеры – «бри-гады», «проце-дуры»), так и неграмотных переносов типа холодос-тойкий (впрочем, при использовании плагина batov's hyphenator эта проблема отпадает).
Однако такой способ обработки висячих слов имеет один подводный камень. Он на 100% срабатывает в тех случаях, когда после его применения текст больше уже не будет корректироваться. В тех же случаях, когда работа над текстом продолжается, необходимо к каждому изменённому фрагменту применять подобный скрипт, иначе рано или поздно где-нибудь «выплывут» висячие предлоги, поскольку верстальщик уверен, что их в тексте не должно быть, и не будет стараться их отслеживать.
От этого недостатка свободен описываемый ниже способ динамической обработки висячих служебных слов с использованием GREP-стилей. Нельзя, однако, не сказать о том, что он имеет другой недостаток: если мы запретили GREP-стилем отрывать какой-либо предлог от следующего слова, то уже не можем в конкретном месте вёрстки отменить эту неразрывность, сняв атрибут «Без переносов», потому что явным образом этот атрибут здесь отсутствует. Выход следующий: поскольку в правилах, записываемых в GREP-стили, предусмотрено, что между двумя привязываемыми словами может присутствовать только один пробел, то добавление в текст ещё одного пробела отменяет действие этого правила: второе слово переносится на следующую строку, а дополнительный пробел, как и в случае с Word’ом, уходит за правый край текста. Однако в случае последующего внесения изменений в этот абзац двойной пробел может оказаться в середине строки, и это на глаз не очень заметно. Поэтому после окончания работы над макетом желательно проверить весь текст на наличие двойных пробелов.
Есть ещё одна проблема, с которой мы столкнулись в связи с тем, что GREP-стили формировали и отлаживали (с прицелом на будущее) непосредственно в процессе вёрстки. Внесение изменений в GREP-стили может привести к тому, что уже сделанная вёрстка может «поехать», если изменённое правило приведёт к привязке ранее непривязанных слов, или же правило содержит незамеченную ошибку (однако то же самое может произойти и при случайном применении скрипта с принудительной обработкой висячих слов в уже готовом макете). Поэтому желательно перед началом вёрстки продумать, какие служебные слова в этом тексте должны обязательно привязываться, а какие нет, сформировать соответствующим образом правила в GREP-стилях, и до конца работы над макетом их не трогать. Мы выходили из положения следующим образом: перед внесением изменений в GREP-стили экспортировали макет в PDF, корректировали стили и ещё раз экспортировали макет в PDF. Затем открывали оба PDF’а и перещёлкивались между ними на каждом развороте макета. При этом даже небольшие изменения в макете бросаются в глаза.
Было опасение, что наличие GREP-стилей может привести к «тормозам» в процессе вёрстки, которые будут увеличиваться пропорционально объёму текста. Однако работа над книгой в 272 страницы показала, что «тормоза» при вёрстке полностью отсутствуют. И это объяснимо, ибо в каждый конкретный момент InDesign работает только с одним абзацем. Был проведён следующий эксперимент: в начале 75-страничного материала удалены две фотографии, которые обтекались текстом. Вёрстка, естественно, «поехала». Но это произошло мгновенно. Это говорит о том, что динамическая GREP-обработка, по-видимому, выполняется только в процессе работы с текущим абзацем, и впоследствии эти абзацы повторно уже не обрабатываются. Торможение, однако, возникает в тот момент, когда мы вносим изменения в GREP-стили или в описание символьного стиля, который используется в GREP-стилях, поскольку при этом, очевидно, должна быть проведена повторная GREP-обработка всего документа.
Однако совсем без «тормозов» не обходится: они, к сожалению, возникают при каждом сохранении файла (по Ctrl/S). Измерения, проведенные на ноутбуке AMD Ryzen 5 5500U с памятью 8 Гб, показали, что для книги объёмом в 272 страницы, содержащей GREP-стили, процесс сохранения длится 2–3 секунды, однако после удаления из книги всех GREP-стилей она сохраняется мгновенно.
Следует отметить, что приведённые ниже поисковые шаблоны не являются прерогативой одного только InDesign’а. Это стандартные регулярные выражения, которые можно использовать в любом текстовом редакторе, который поддерживает полноценную работу с регулярными выражениями (например, TextPad). Поэтому с помощью этих же правил можно делать описанную выше разметку в HTML-файлах, только следует их дополнить шаблонами замены, которые либо заменяют пробелы в найденных образцах символом « », либо окружают их тэгами с CSS-свойством «white-space».
Работа с GREP-стилями
В InDesign CS4 впервые появилась возможность использования регулярных выражений в составе стилей абзацев. Этот функционал получил название «Стиль GREP». Очень удачное описание использования регулярных выражений дано в небольшой, но ёмкой книжке Михаила Иванюшина «GREPоводство. Регулярные выражения в InDesign». В нашей статье описано использование GREP-стилей для конкретной цели: динамической разметки нужных фрагментов текста символьным параметром «Без переносов» для устранения висячих служебных слов.
В алгоритм работы GREP-стилей заложена следующая идея: с помощью регулярных выражений ищется нужный фрагмент текста, и если поиск оказался успешным, этому фрагменту присваивается указанный символьный стиль. В данной статье идёт речь об устранении висячих предлогов и других служебных слов путём привязки их к тому слову, к которому они относятся. Следовательно, нам нужен символьный стиль, назначающий атрибут «Без переносов» этому служебному слову, а также пробелу между ним и привязываемым к нему словом. Создадим для этой цели символьный стиль, дав ему имя «NoBreak»:
Для отладки GREP-стилей можно использовать интересный приём, найденный на просторах Интернета: в определение символьного стиля «NoBreak» можно добавить окраску символов в какой-либо цвет. Тогда на экране сразу будет видно, к каким конструкциям стиль был применён, а к каким не применился. Можно дальше развить эту идею и окрашивать разные GREP-стили в разные цвета. Особенно это удобно для визуального разделения правил, привязывающих обрабатываемые слова к последующему и к предыдущему тексту.
Теперь нам нужно создать GREP-стили для решения нашей задачи. Открываем параметры основного абзацного стиля, который будет использоваться при вёрстке, переходим на вкладку «Стиль GREP» и нажимаем кнопку «Новый стиль GREP»:
Создаётся новый пустой стиль:
В поле «Применить стиль:» нужно выбрать созданный нами символьный стиль «NoBreak»:
А в поле «К тексту:» вставляем нужное регулярное выражение, которое для привязывания односложных и двухсложных служебных слов к последующему слову выглядит в упрощённом виде следующим образом:
«(?<= )(?i)(а|в|во|да|до|за|и|из|к|ко|на|не|ни|но|ну|о|об|от|по|с|со|см\.|то|у)( )»
В результате получим следующее:
Стиль, который мы только что добавили, устроен следующим образом (ниже приводится список основных метасимволов, которые можно использовать в таких стилях):
- «(а|в|во|…)» – перечень привязываемых служебных слов;
- «( )» – пробел после искомых служебных слов: ему вместе с этими словами должен быть назначен атрибут «Без переносов». Важно то, что основному слову, к которому привязываются эти служебные слова, атрибут «Без переносов» не присваивается, поэтому автоматический перенос его по слогам не блокируется;
- «(?i)» – режим «без учёта регистра», который указывает на то, что необходимо отыскивать предлоги и т. п. не только в середине предложения, но и в его начале, а также в заголовках, набранных заглавными буквами;
- «(?<= )» – указывает на то, что данное правило необходимо выполнять только в том случае, если непосредственно перед найденным текстом имеется пробел (« »).
Искушённый читатель спросит, почему здесь использована конструкция «(?<= )» вместо более простой «\<», означающей «начало слова». Дело в том, что при этом в результат поиска ошибочно попадёт «то» из «кто-то», «за» из «из-за», «на» из сокращения «р-на» и т. д.
Через какое-то время может выясниться, что этот стиль не всегда срабатывает. Дело в том, что используемый в этом шаблоне символ пробела (« ») означает в точности тот обычный пробел, который мы набиваем с клавиатуры. Неразрывный пробел и все шпации будут при таком поиске пропущены. Поэтому вместо стандартного пробела (« ») нужно использовать метасимвол, который будет искать любой пробельный символ. InDesign предлагает для этой цели метасимвол «\s», утверждая, что это «любой пробел». В действительности это «любой пробельный символ + конец абзаца». Поэтому для поиска любого пробела, но не конца абзаца, нужно указывать метасимвол «\h», который появился только в InDesign CS6. В предыдущих версиях InDesign вместо него остаётся использовать более громоздкую форму [[:blank:]].
Таким же образом добавляются и остальные GREP-стили, которые устраняют другие висячие слова. Далее предлагается комплект таких GREP-стилей для использования отдельно в светских текстах, и отдельно в богослужебных текстах.
Поскольку ручное добавление GREP-стилей несколько утомительно, то можно воспользоваться загрузкой комплекта GREP-стилей из следующих двух файлов:
- GREP.indd – для вёрстки текстов в гражданской орфографии;
- GREP-UCS8.indd – для вёрстки богослужебных текстов в кодировке UCS8.
Находясь в том документе, в который нужно загрузить GREP-стили, следует в палитре «Стили абзацев» щёлкнуть по треугольнику в правой части этой палитры:
В появившемся меню следует выбрать пункт «Загрузить все стили текста…»
Далее будет предложено открыть файл, из которого будут загружаться стили. Здесь нужно выбрать скачанный и распакованный файл GREP.indd или GREP-UCS8.indd:
И в открывшемся окне «Загрузить стили» оставить отмеченными только стили «GREP» и «NoBreak»:
При загрузке стилей параметры одноимённых стилей в выходном документе заменяются параметрами из входного файла, поэтому в предлагаемых файлах стилю, содержащему правила GREP, специально дано имя «GREP», чтобы случайно не испортить выходной документ. Однако нам нужно, чтобы загруженные GREP-стили попали в тот стиль, который будет использоваться при вёрстке. Проще всего отредактировать этот стиль (в нашем случае он носит имя «Нормальный»), сделав его основанным на стиле «GREP»: при этом GREP-стили попадут в этот стиль, а остальные атрибуты стиля останутся неизменными:
Основные метасимволы в GREP-стилях
Ниже приводится список метасимволов, используемых в предлагаемых GREP-стилях. Полный список метасимволов, представленный в удобном графическом виде, содержится в брошюре Михаила Иванюшина «GREP коды в Индизайне».
- Буквы и цифры:
- «.» – любой символ;
- «\d» – любая цифра;
- «\u» – любая заглавная буква;
- «\l» – любая строчная буква;
- «[\l\u]» – любая буква;
- «\w» – любой символ слова;
- «(?i)» – режим «без учёта регистра».
- Спецсимволы:
- «\.» – точка;
- «\s» – любой пробельный символ (включая табуляцию) + конец абзаца (в InDesign CS6 в GREP-стилях совпадает с «\h», хотя в поисковых GREP-запросах работает правильно);
- «\h» – любой пробельный символ, включая табуляцию (введён в InDesign CS6);
- «[[:blank:]]» – любой пробельный символ, включая табуляцию (во всех версиях InDesign);
- «\(» – открывающаяся круглая скобка;
- «\)» – закрывающаяся круглая скобка;
- «~=» – короткое тире;
- «~_» – длинное тире.
- Местоположение:
- «\<» – начало слова;
- «\>» – конец слова;
- «\b» – в пределах слова;
- «^» – начало абзаца;
- «$» – конец абзаца.
- Повторение предыдущего символа, набора символов или выражения:
- «?» – ни разу или один раз;
- «*» – от нуля и более раз;
- «+» – от одного раза и более.
- Наборы символов и выражения:
- «|» – перечисление символов («или»);
- «[]» – набор символов;
- «()» – выражение.
- Параметры поиска:
- «(?<=образец)» – положительный просмотр назад («выполнять правило только в том случае, если непосредственно перед найденным текстом имеется образец»);
- «(?<!образец)» – отрицательный просмотр назад («только если непосредственно перед найденным текстом отсутствует образец»);
- «(?=образец)» – положительный просмотр вперёд («только если непосредственно после найденного текста имеется образец»);
- «(?!образец)» – отрицательный просмотр вперёд («только если непосредственно после найденного текста отсутствует образец»).
GREP-стили для вёрстки текстов в гражданской орфографии
Предлагаемые GREP-стили отлаживались в процессе вёрстки книг «Дань любви» и «Растревоженные судьбы».
Чтобы легко было увидеть на экране начало и конец каждого определения стиля, они здесь заключены в кавычки. В действительности кавычки не входят в определение стиля, и следует копировать определение внутри кавычек.
1. Привязывание однобуквенных и двухбуквенных предлогов, союзов и частиц к последующему слову (включая случаи, когда перед ними стоит открывающаяся скобка или открывающаяся кавычка). Пробел в конце этой конструкции «(\h)» совместно с итератором «+» позволяет объединить несколько таких служебных слов, стоящих подряд, например: «Да ни за что!». Для удобства редактирования все служебные слова в списке расположены в алфавитном порядке:
«(?<=[\h«(])(?i)((а|в|во|да|до|за|и|из|к|ко|на|не|ни|но|ну|о|об|от|по|с|со|см\.|то|у)\h)+»
2. Привязывание трёхбуквенных и многобуквенных предлогов, которые всё-таки можно допустить в конце строки. Однако в нашем случае было принято решение полностью отказаться от висячих предлогов:
«(?<=[\h«(])(?i)((без|для|изо|или|как|над|обо|перед|пред|под|при|про|через|что)\h)+»
Но если разрешить использование многобуквенных предлогов в середине предложения, тогда, согласно Гиленсону, следует запретить их в начале предложений:
«(?<=[.!?]\h)[«(]?(?i)((без|для|изо|или|как|над|обо|перед|пред|под|при|про|через|что)\h)+»
Разумеется, это не все существующие в русском языке предлоги, а только те, которые реально встречались в наших текстах, причём не в единичных случаях.
3, 4. Привязывание личных местоимений к последующему слову, если они находятся после знаков препинаний, а также если перед ними стоит открывающаяся скобка или открывающаяся кавычка:
«(?<=[,:;.!?]\h)(?i)(я|мы|ты|вы|он|она|оно|они)\h»
«(?<=[«(])(?i)(я|мы|ты|вы|он|она|оно|они)\h»
5. Привязывание союзов к последующему слову в том случае, если после союза стоит запятая. Необходимо в том случае, когда после этого союза находится вводное слово или вводное словосочетание:
«(?i)(\<(а|и|но|ну|о),\h)»
6. Привязывание частиц «бы», «же», «ли» к предыдущему слову:
«\h(бы|же|ли)\>»
7. Запрет переносов в сокращённых выражениях «и т. д.», «и т. п.», «т. е.», «т. к.» (поскольку союз «и» и так привязывается к последующему тексту 1-м правилом, то он из этого правила исключён):
«\<(?i)(т\.\h[дпек]\.)»
8. Привязывание сокращённых слов к последующему слову, когда они представляют собой единое целое. Список составлен на основании тех сокращений, которые используются в наших текстах, и его можно изменять и дополнять до бесконечности в зависимости от содержания текста (проф, зам…):
«\<(?i)(о|свящ|прот|иером|игум|архим|еп|архиеп|митр|прп|прпп|преп|свт|мч|мчч|муч|мц)\.\h»
9. Привязывание к предыдущему слову короткого и длинного тире и слэша:
«\h[~_~=/]»
10. Привязывание числа к наименованию месяца (включая диапазон дат типа «20–22 января») таким образом, чтобы не лишиться возможности переноса наименования месяца:
«(\d|\d\d)\h(ян|фев|мар|ап|мая|ию|ав|сен|ок|но|де)»
11. Привязывание числа (в арабской или римской форме записи) к последующему наименованию соответствующей единицы: год, век, страница, лист (в том числе оборот листа), физические величины, денежные единицы. Здесь «XХ» отдублировано в латинском и русском регистре, поскольку такой разнобой написания был характерен для «XX века»:
«[\dIVXХ]\h(г\.|гг\.|в\.|вв\.|го|ве|лет|клас|об\.|л\.|лл\.|с\.|сс\.|стр\.|лис|стра|кило|мет|грам|км|см|мм|руб|ко|кро)»12. Обеспечение неразрывности порядковых числительных и их окончаний, записываемых через дефис, включая случаи типа «20-летний», «20-летие»:
«[\dIVXХ]-(х|го|м|ти|е|я|й|ле)»
13. Привязывание числа (в арабской или римской форме записи) к предшествующему наименованию соответствующей единицы: лист, страница, столбец, том, фонд, опись, дело:
«\<(?i)(л\.|лл\.|с\.|сс\.|стр\.|стб\.|т\.|ф\.|оп\.|д\.|лис\l+|стр\l+)\h(?-i)[\dIVXХ]»
14. Привязывание числа к предшествующим знакам номера и параграфа:
«[№~6]\h\d»
15. Привязывание инициалов к последующей фамилии (при этом обязательным условием является наличие обоих инициалов). Внутри инициалов может быть пробел, и от фамилии инициалы также могут отделяться пробелом. Учтено, что инициалы могут состоять из двух букв (напр., «Дм.»):
«(\u\l?\.)\h?(\u\l?\.)\h?(\u\l\l)»
Здесь предполагается, что фамилия состоит минимум из трёх букв. Казалось бы, логичнее фамилию отслеживать целиком: «(\u\l?\.)\h?(\u\l?\.)\h?(\u\l+\>)». Но при этом в ней не будут работать переносы по слогам.
Попытка добавить аналогичный стиль для обработки фамилий с последующими инициалами оказалась неудачной, поскольку в конструкциях типа «Стихотворение С. Я. Маршака …» первое слово «Стихотворение» воспринимается как фамилия, а «С. Я.» – как инициалы при ней.
Надо сказать, что и стиль для обработки фамилии с предшествующими инициалами подобным же образом работает некорректно в конструкциях типа «Маршак С. Я. Стихотворение …»: здесь будет считаться, что С. Я. – это инициалы при фамилии «Стихотворение». Однако такие конструкции в основном встречаются только в списках литературы, причём в начале абзацев, поэтому этот глюк будет незаметен.
GREP-стили для вёрстки богослужебных текстов в кодировке UCS8
Предлагаемые GREP-стили предназначены для использования при вёрстке текстов на церковно-славянском языке с использованием шрифтов в кодировке UCS8 (Unified Church Slavonic Standard).
Стили отлаживались в процессе работы над «Полным православным молитвословом», исходные тексты которого (не вёрстка!) выложены здесь.
Окрашивание киноварью первой буквы абзаца
вместе с возможным надстрочным знаком
Для окрашивание киноварью первой буквы абзаца с возможным надстрочным знаком применяется следующий стиль:
«^\u[#$%C]?»
Правило означает следующее: стиль применяется к любой заглавной букве, стоящей в начале абзаца, и дополнительно к заглавному надстрочному знаку, если он имеется после этой буквы. Надстрочные знаки рассматриваются из следующего списка:
- # – придыхание: « #»;
- $ – придыхание с острым ударением (оксией): « $»;
- % – придыхание с тяжёлым ударением (варией): « %»;
- C – слово-титло: « C».
В прилагаемом файле GREP-UCS8.indd к указанному GREP-стилю применяется символьный стиль с именем «Красный», который определяется следующим образом:
Устранение висячих служебных слов
Остальные стили предназначены для устранения висячих служебных слов с использованием символьного стиля «NoBreak».
1. Привязывание однобуквенных и двухбуквенных предлогов, союзов и частиц к последующему слову (включая случаи, когда перед ними стоит открывающаяся скобка). Пробел в конце этой конструкции «(\h)» совместно с итератором «+» позволяет объединить несколько таких служебных слов, стоящих подряд, например: «и3 во вёки». Для удобства редактирования все служебные слова в списке расположены в алфавитном порядке:
«(?<=[\h(])(?i)((ґ|въ|во|да|до|за|и3|И#|и3з8|И#з8|къ|ко|на|не|ни|но|њ|q|њб8|t|по|съ|сe|со|ў)\h)+»
Ради наглядности сами искомые слова отформатированы здесь и далее шрифтом Orthodox. Очевидно, что на вкладке «Стиль GREP» они будут отображаться системным шрифтом, и данный стиль примет следующий вид:
«(?<=[\h(])(?i)((ґ|въ|во|да|до|за|и3|И#|и3з8|И#з8|къ|ко|на|не|ни|но|њ|q|њб8|t|по|съ|сe|со|ў)\h)+»
2. Привязывание трёхбуквенных и многобуквенных предлогов, которые в нашем случае было решено не оставлять в конце строки:
«(?<=[\h(])(?i)((над8|надо|под8|при)\h)+»
3. Привязывание местоимений и коротких частиц к последующему слову, если они находятся в начале предложения, чтобы они не повисали в конце строки:
«(Ѓзъ|Е\$й|Мы2|Мh|СE,|Ты2|Тh|ТS|Вы2|Вh)\h»
4. Привязывание частиц, а также некоторых местоимений (особенно являющихся энклитиками) к предыдущему слову, в том случае, если этим местоимениям не предшествуют двоеточие или запятая:
«(?<![,:])\h(бо|бы|бы2|є5|же|и5|ли|ми|мS|мs|мz|нE|ни2|нS|сz|ти2|тS|тs|тz|ю5)\>»
5. Предыдущим правилом нельзя описать местоимение «|», поскольку к нему невозможно применить атрибут «в конце слова», поэтому его обработка вынесена в отдельное правило:
«\h(\|)»
6. Исключение из правила 4: в конструкции «тS величaемъ» местоимение «тS» привязывается к последующему глаголу «величaемъ»:
«(тS)\h(ве)»
7. Привязывание «є3си2» и «є3стE» к предыдущему слову. Выделено из правила 3, поскольку при вёрстке крупным кеглем на узкой полосе может понадобиться отключить это правило, чтобы избежать дырявой вёрстки. Сюда не включен глагол «є4смь», поскольку он не всегда привязывается к предыдущему слову (примеры: «ѓзъ є4смь» и «є4смь ѓзъ»):
«\h(є3си2|є3стE)»
8. Привязывание чисел в диапазоне 1–399 к предыдущему слову, если это не порядковое числительное (т. е. заканчивающееся «-» с последующим окончанием). Важно иметь в виду, что это правило будет работать только в том случае, если числа записаны в «натуральном» виде, а не получены из арабских цифр с использованием OpenType-опции «Стиль цифр: Пропорциональные старого стиля». Из обработки исключаются числа в диапазоне 211–299, состоящие из трёх цифр:
«\h(R|©|™|(р|т)?(№|в7|G|д7|є7|ѕ7|з7|\}|f7|‹|к7|l|м7|н7|…|o7|п7|§))(?!-)»
9. В принципе, на практике предыдущего правила достаточно в 99% случаев. Однако чтобы охватить весь рассматриваемый диапазон, можно добавить следующие два правила.
9.1 Привязывание к предыдущему слову чисел в диапазоне 211–299, состоящих из трёх цифр, кроме чисел 251–259. Конструкцией «(?![сн])» из обработки исключаются не являющиеся числами слова, начинающиеся на «сп7с-» и «сlн-»:
«\h(с(№|в7|G|д7|є7|ѕ7|з7|\}|f7|‹|к7|l|м7|…|o7|п7|§))(?![сн])»
9.2 Привязывание к предыдущему слову чисел в диапазоне 252–259 (число 251 визуально не отличается от слова «сн7а», поэтому из обработки чисел исключено):
«\h(сн7)[вгдєѕзиf]»
10. Привязывание к предыдущему слову слэша, а заодно короткого и длинного тире, которые хоть и в единичных случаях, но всё же встречаются:
«\h[~_~=/]»
