Артефакт

Заголовки / 2 марта 2007 г.

Задачи, с которыми приходится столкнуться при форматировании текстов, иногда бывают совершенно крохотными, но от этого их важность не уменьшается.

Казалось бы, что стоит выделить название книги и имя её автора?

Вот исходный вариант:

А вот что должно получиться:

Стоит ли вообще связываться с макросами?

Ответ: ещё как стоит. Как только количество текстов, с которыми вы имеете дело, увеличивается до десятка-двух, экономия времени в десять секунд на каждом из них становится существенной.

А дел-то всего ничего:

Sub formatTitle()
   ActiveDocument.Paragraphs(1).Range.Select
   ActiveDocument.Paragraphs(1).FirstLineIndent = CentimetersToPoints(0)
   Selection.Font.Size = 16
   Selection.Font.Bold = wdToggle
   ActiveDocument.Paragraphs(2).Range.Select
   ActiveDocument.Paragraphs(2).FirstLineIndent = CentimetersToPoints(0)
   Selection.Font.Size = 12
End Sub

Теперь посмотрим, что можно сделать с разбиением документа на главы. Скажем, таким:

Лично я предпочитаю оформлять это так, как показано на следующей картинке.

Две пустых строки до заголовка, одна после. Почему именно так? Почему не воспользоваться гибкой системой отбивок самого Wordа? Зачем капитализировать номер главы?

Это своего рода компромисс.

Я знаю, что библиотечные тексты часто переделываются посетителями «под себя». Кто-то читает их на КПК, а кто-то и на обычном компьютере пользуется какой-нибудь программой ридером. А теперь представьте, что номер главы выделен повышенным кеглем и сделан полужирным, а пробелы до и после заголовка выставлены при помощи Indentation Before textAfter text. Если пользователь, манипулируя документом, на каком-то этапе сохраняет его в формате Plain text, можно считать, что заголовка нет, и всё слилось в однородную чёрно-белую кашу: ведь атрибуты шрифтов и абзацев при этом не сохранятся. А в нашем случае структура документа выживет.

Что до количества строк до и после заголовка, то здесь нужно принять в расчёт простое правило: заголовок должен прибиваться к тому блоку текста, к которому он имеет непосредственное отношение. В данном случае — к следующему за ним абзацу. Отбивка же от предыдущего абзаца должна быть как минимум в полтора-два раза больше.

Делается это так.

Строка поиска Строка замены Опция Use Wildcards
^13(Глава[!^13]{1;})^13  ^13^13\1^13  включена

Кроме того, нужно установить ещё опцию All caps для шрифта и нулевую левую отбивку для абзаца. Получается следующее:

Код макроса будет выглядеть примерно так:

Sub formatChapters()
    Selection.Find.ClearFormatting
    Selection.Find.Replacement.ClearFormatting
    With Selection.Find.Replacement.ParagraphFormat
        .FirstLineIndent = CentimetersToPoints(0)
        .CharacterUnitFirstLineIndent = 0
    End With
    Selection.Find.Replacement.Font.AllCaps = True
    With Selection.Find
        .Text = "^13(Глава[!^13]{1;})^13"
        .Replacement.Text = "^13^13\1^13"
        .Forward = True
        .Wrap = wdFindContinue
        .Format = True
        .MatchWildcards = True
    End With
    Selection.Find.Execute Replace:=wdReplaceAll
End Sub

Заметьте, что макрос, записанный при помощи стандартного диалога Record Macro, будет содержать несколько иной код. В частности, установка атрибутов шрифта, как это обычно бывает, не запишется. Поэтому после записи мне пришлось открыть редактор VBA и вписать строку 8, а заодно и почистить мусор.

Я думаю, этого достаточно, чтобы вы смогли — после некоторой тренировки — решить любую задачу подобного класса.

Макросы к статье

formatTitle (форматирование названия книги и имени автора)
formatChapters (форматирование разбивки по главам)

...

«Perl и RegExp» | «Кавычки»

Новости раздела

18 ноября 2020 г.
Комплектация библиотеки файлами .fb2

Ещё на сайте

Библиотека
Языки
Друзья
Канада
Авторский угол

Интернет

CPAN
Citforum
W3C.org
useit.com
Типомания
Code Charts
ру/ководство
Лаборатория dk
WebReference.com
Спецификация Perl
Заметки HTML-кодера
Анатомия Adobe Photoshop
The Apache Software Foundation


Рейтинг@Mail.ru

wordpress statistics

Рейтинг@Mail.ru