Как избавиться от одиночных символов в конце строк
- http://www.myindesign.ru/single_symbol.php
- 29 апр. 2015 г.
- 6 мин. чтения

Как известно, правила вёрстки не допускают появления одиночных символов на правом краю текста, то есть в конце строк (рис. 1).
Рис. 1. «Висящие» символы в конце строки
Для этого необходимо, чтобы слова, состоящие из одной буквы (такие, как предлоги в, к, о, с, у, союзы а, и, местоимение я), были «привязаны» к следующим за ним словам. Такая привязка осуществляется с помощью неразрывного пробела. Попробуем решить эту задачу в InDesign CS4 с помощью возможностей, которые предоставляет GREP.
Подготовка. Создание стилей
Для того, чтобы отображать результаты наших действий на экране, создадим специальный стиль. Он будет «маркировать» красным цветом те символы, к которым применён (предварительно откроем палитру Swatches и создадим образец этого цвета).
Внимание! Необходимо помнить, что при создании новых образцов цвета InDesign автоматически применяет вновь созданный образец к выделенному объекту. Поэтому, прежде чем приступить к созданию образца цвета, необходимо убедиться в том, что никакие объекты в данный момент не выделены. Можно также выбрать пункт Deselect All из меню Edit или воспользоваться комбинацией клавиш Cmd + Shift + A(Ctrl + Shift + A в Windows)
Эффект «маркирования» достигается путём подчёркивания символов линией большой толщины. Толщина подчёркивания должна быть сопоставима с размером шрифта (в нашем случае это 15 пунктов при размере шрифта 13 пунктов). Созданный стиль назовём Highlight Red.
Рис. 2. Вверху – параметры стиля Highlight Red, который будет помогать нам визуально следить за производимыми нами действиями. Внизу – результат применения стиля Highlight Red
Итак, приступаем к решению задачи. Сначала создадим стиль, который мы будем применять ко всем пробелам, идущим после одиночных символов. Действовать необходимо следующим образом:
В палитре Character Styles из выпадающего в правой верхней части окна меню выбрать Create New Style;
В появившемся диалоговом окне в поле Style Name ввести название стиля; мы решили назвать его No Break;
Перейти в закладку Basic Character Format. Включить чекбокс No Break, оставив прочие поля диалогового окна без изменения; нажать OK для сохранения параметров стиля (рис. 3).
Рис. 3. Создание стиля No Break
Теперь если применить стиль No Break к пробелу, этот пробел станет неразрывным благодаря включенному атрибуту No Break.
Приступим к созданию GREP-стиля. Для этого необходимо проделать следующие подготовительные операции (они помогут отслеживать результаты нашей работы на экране):
Выбрать в палитре Paragraph Styles стиль абзаца, для которого мы хотим создать вложенный стиль (в нашем случае это стиль Normal, используемый для оформления основного текста документа);
Нажать на названии стиля правой кнопки мыши, и из выпадающего меню выбрать пункт Edit "Normal" (как вариант – нажать на кнопку в правом верхнем углу палитры Paragraph Stylesи выбрать из выпавшего меню пункт Style Options);
Перейти в закладку GREP Style и нажать кнопку New GREP Style. Включить чекбокс Preview (если он выключен); из выпадающего меню Apply Style выбрать созданный ранее стиль Highlight Red; перейти в поле To Text и очистить его содержимое; щёлкнуть мышкой на серой области, расположенной ниже поля To Text (в результате этого на экране отобразятся результаты производимых нами операций)
Диалоговое окно Paragraph Style Options примет вид, показанный на рис. 4.
Рис. 4. Подготовка к созданию GREP-стиля
Можно приступать к основной части работы – созданию условия поиска. Для ввода метасимволов в поле To Text необходимо нажать кнопку справа от этого поля. В появившемся меню находим нужный класс метасимволов (нас интересуют пункты, отмеченные на рис. 5), а в выпадающем рядом с названием класса меню – нужный метасимвол. Выбранный метасимвол автоматически оказывается в поле To Text.
Рис. 5. Ввод метасимволов в поле To Text
Шаг 1
Для начала найдём все однобуквенные слова. Необходимо сразу отметить, что наряду с одиночными буквами мы будем отыскивать и «привязывать» к последующему тексту и одиночные цифры (например, в таких сочетаниях как «5 дней», «6 часов» и т. д.). Поэтому для осуществления поиска выбираем метасимвол Any Word Character (клавиатурный код \w) из классаWildcards. Поскольку мы ищем не просто символы, а именно слова, состоящие из одного буквенно-цифрового символа, метасимвол Any Word Character необходимо сопроводить двумя метасимволами класса Location, а именно Beginning Of Word (перед ним) и End Of Word (после него). Последовательность действий при создании описанного выше критерия поиска приведена нарис. 6. Таким образом, в поле To Text появится строка \<\w\>.
Рис. 6. Последовательность создания критерия поиска односимвольных слов
После того, как в поле To Text были введены перечисленные выше метасимволы, мы увидим на экране следующий результат (разумеeтся, в вашем случае он будет отличаться от приведённого, поскольку предполагается, что вы работаете со своим документом). Как можно заметить, нам удалось отыскать в тексте все слова, состоящие из одной буквы.
Рис. 7. Результат поиска всех слов, состоящих из одного символа
Шаг 2
На следующем этапе попробуем добавить к результатам поиска пробелы, следующие за односимвольными словами. Для этого к уже имеющейся в поле To Text: строке необходимо добавить символ пробела. Здесь необходимо сделать небольшое отступление.
Понятно, что фраза «добавить символ пробела» содержит в себе совершенно очевидное руководство к действию. Чтобы добавить к строке символ пробела, необходимо установить курсор в определённое место этой строки и нажать клавишу Spacebar. Однако мы пойдём другим путём. Вместо символа пробела мы будем использовать метасимвол Any White Space из группы Wildcards(обозначается \s).
Рис. 8. Метасимвол Any White Space
Причина такого хода заключается в следующем. Пробел, по сути, представляет собой «пустое место». То есть, если вы прочитаете фразу «в поле To Text: необходимо ввести строку \<\w\< », вы вряд ли догадаетесь, что после символа < должен присутствовать пробел. Однако он действительно должен там присутствовать (более того, пробел там просто необходим). Поэтому для большей наглядности автор принял решение вместо обычного символа пробела использовать вышеупомянутый метасимвол Any White Space из группы Wildcards. Отличие этого метасимвола от пробела состоит в том, что Any White Space – это не только пробел, но вообще любой символ-разделитель: пробел фиксированной ширины, символ табуляции, символ перевода строки, символ окончания абзаца и т. д. Если вас что-либо смущает, вы вполне можете заменять конструкцию \s на обычный символ пробела – на работоспособности описываемой методики это никак не отразится.
Отступление окончено. Итак, теперь содержимое поля To Text: примет вид \<\w\>\s. Результат этого действия показан на рис. 9.
Рис. 9. Результат поиска всех слов, состоящих из одного символа, а также следующих за этими словами пробелов
Шаг 3
Итак, мы научились отыскивать в тексте слово, состощее из одного символа, и следующий за ним пробел. Однако для выполнения поставленной задачи нам нужно найти только пробел, чтобы присвоить ему атрибут No Break. В этом нам поможет метасимвол Positive Lookbehind из классаMatch.
Несколько слов о том, как действуют метасимволы Positive Lookahead и Positive Lookbehind. Прежде всего рассмотрим текстовое представление этих метасимволов. Оно выглядит так:
(?=) для Positive Lookahead,
(?<=) для Positive Lookbehind.
Метасимвол Positive Lookbehind обеспечивает поиск, начиная с некоторого места в тексте (Positive Lookahead, напротив, ищет всё до некоторого места). Что именно это за место – определяет выражение, находящееся между знаком равенства и закрывающейся скобкой (смотри текстовое представление рассматриваемых метасимволов). Нам надо найти пробел, стоящий в тексте после односимвольного слова. Поэтому мы должны выбрать метасимвол Positive Lookbehind и внести в него ранее сгенерированное описание односимвольного слова (см. содержимое поля To Text нарис. 7).
Порядок добавления метасимвола Positive Lookbehind следующий:
Рис. 10. Порядок добавления метасимвола Positive Lookbehind к критерию поиска
Рис. 11.
Рис. 12. Окончание создания критерия поиска
В данный момент в поле To Text закладки GREP Styles диалога Paragraph Style Option находится текст \<\w\>. Выделяем весь текст за исключением пробела (то есть фрагмент \<\w\>) и вырезаем в буфер обмена нажатием клавиш Cmd + X (Ctrl + X в Windows).
Помещаем курсор в левый край поля To Text.
Выбираем из выпадающего списка метасимволов пункт Match, из ещё одного выпадающего меню – пункт Positive Lookbehind (рис. 10).
поле To Text теперь выглядит так: (?<=)\s.
Помещаем курсор между знаком равенства и закрывающейся скобкой (рис. 11); вставляем содержимое буфера обмена нажатием клавиш Cmd + V (Ctrl + V в Windows). Теперь содержимое поля To Text принимает окончательный вид (?<=\<\w\>)\s.
Для того, чтобы увидеть результат работы, необходимо щёлкнуть мышкой на сером области ниже поля To Text. Тогда ко всем фрагментам текста, удовлетворяющим сформированному критерию поиска, будет применён стиль Highlight Red (рис. 13).
Рис. 13. Все фрагменты текста, найденные с помощью созданного нами критерия поиска
Видно, что нам удалось выделить все пробелы, следующие за однобуквенными словами.
Шаг 4
Осталось присвоить найденным пробелам стиль No Break, созданный нами в самом начале работы. Выберем этот стиль из выпадающего списка у поля Apply Style. Для того, чтобы увидеть результат действия созданного стиля, щёлкнем мышью на серой области ниже поля To Text (рис. 14).
Рис. 14. Преобразование всех найденных пробелов в неразрывные путём присвоения им стиля No Break
Предварительные итоги
Для оценки результатов нашей работы сравним рис. 13 и рис. 1, приведённый в самом начале. Видно, что отмеченные на рис. 1 два «висящих» в конце строки однобуквенных слова теперь привязаны к следующему за ними тексту.
Есть ещё один способ убедиться, что созданный нами GREP-стиль работает. Для этого выделим любой пробел после какого-либо короткого слова. Открыв выпадающее окно в правой верхней части панели управления, мы увидим там включённый атрибут No Break (рис. 15).
Рис. 15. Проверка работоспособности созданного правила
В заключение хотелось бы отметить важную деталь. Проделанные нами операции позволяют не только «привязывать» короткие предлоги и союзы к следующим за ними словам, но делать это, что называется, «на лету». Иными словами, при появлении в тексте нового короткого слова (например, в результате редактирования текста), оно будет автоматически прикреплено к последующему слову с помощью неразрывного пробела. Разумеется, это правило будет действовать только для тех абзацев, в стиль форматирования которых встроен созданный нами GREP-стиль.
Казалось бы, задача решена. Однако, внимательно просмотрев текст, можно сделать вывод, что мы предусмотрели не всё. Рассмотрим приведённый ниже фрагмент страницы.
Рис. 16.
Очевидно, что отмеченный на рис. 16 союз и не может удовлетворять построенному нами критерию, так как после буквы и следует не пробел, а запятая. Однако такая конструкция, «висящая» в конце строки, выглядит не очень красиво. О том, как исправить этот недостаток, поговорим в следующий раз.
Недавние посты
Смотреть всеВ этом посте я буду выкладывать ссылки, которые на мой взгяд пригодятся дизайнерам. Предлагаю ознакомится с проэктом, который существует...
コメント