Заголовки / 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 text / After 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» | «Кавычки»
наверх
|