ЛИКБЕЗ: КАК ПОЛЬЗОВАТЬСЯ АВТОЗАМЕНОЙ В ВОРДЕ
Знающие, как быстро расставить табуляцию и пустые строки с помощью автозамены, могут данный раздел с чистой совестью пропустить. Он предназначен больше для демонстрации того, с чем мы сейчас будем работать прежде чем перейдём к макросам. Ну и для тех, кто до сих пор не знает, как оперативно отформатировать текст при портировании на КФ, а не с него. Как вы, наверное, знаете, автозаменой можно находить не только слова и конкретные сочетания знаков, но и символы конца абзаца. Если вы всё ещё не в теме, то делается это следующим образом: На вкладке «Главная» есть кнопка «Заменить», открывающая окно поиска и замены (есть ещё комбинация клавиш Ctrl+H для вызова того же окна). В окне замены в строчке «Найти» вбейте: ^p Это сочетание знаков эквивалентно символу конца абзаца. Убедитесь, что у вас не стоит галочка «использовать подстановочные знаки» (её можно увидеть, если нажать кнопку «Больше»). Если вам необходимо по какой-то причине использовать подстановочные знаки, то вместо ^p используйте ^0013 – это то же самое. Чтобы проставить табуляцию, в строчке «Заменить на» вбейте: ^p‹tab› ОБРАТИТЕ ВНИМАНИЕ: поскольку КФ сжирает форматирование с соответствующими тегами, знаки < и > дальше в тексте были адаптированы под ‹ и ›. В вашем варианте должны использоваться обычные знаки < и >. Теперь весь текст содержит заветные табы. Если мы хотим сделать двойные строки, то делается это тем же способом: ^p → ^p^p Если мы хотим сделать и двойную строку, и табуляцию, то мы используем всё ту же методику автозамены: ^p → ^p^p‹tab› Здесь вроде всё понятно.***
Чисто технически, с помощью различных комбинаций подстановочных знаков и форматирования текста (всё это находится, если нажать кнопку «Больше» и изучить содержимое выпавшей плашки) можно найти способ автозамены курсивных участков на них же с ‹i›‹/i›, ну и так далее. На самом деле, с подстановочными знаками в Word'е можно творить магию, находить и заменять целые паттерны слов и знаков (например, решить банальную проблему склейки точки или запятой с последующей любой буквой). Но сейчас мы используем эти знания для того, чтобы сделать обратное колдунство: восстановить из отформатированного текста оригинальный. С учётом того, как мы красиво поиздевались над форматированием. И сделать нам это требуется автоматически, а не открывая постоянно окно автозамены. Для восстановления текста без отбивок пустыми строками между абзацами потребуется аж шесть разных автозамен, пять из которых требуют лезть в менюшки «Абзац» и «Шрифт». Нам оно надо, мучиться так с каждой главой? Ладно ещё если глава одна, а если их десять, двадцать, тридцать?.. Проще автоматизировать дело до одного клика, который сразу делает нам красиво. Итак, давайте облегчим себе жизнь. И помогут в этом деле нам макросы.КАК АВТОМАТИЗИРОВАТЬ ЗАДАЧУ В ВОРДЕ
Если коротко, макрос в Word’e – это такая классная штука, которая позволяет нам автоматизировать некоторую последовательность действий. Макросы здесь написаны на Бейсике, так что, если вы не шарите в Бейсике, можно не сношать себе мозг, а воспользоваться простой записью действий, после чего заняться стыковкой кода. В самом коде вам разбираться, на самом деле, не обязательно, потому что он генерируется автоматически. Для препарирования возьмите любой ваш текст из редактора КФ, содержащий курсив, жирный шрифт, табуляции, центровки и прочие страшные вещи. Скопируйте его в отдельный документ, сейчас будем прямо на нём проводить операцию. Шаг 1. Автозамена курсива Откройте «Вид» → «Макросы» → «Запись макроса» (обратите внимание, там выпадающий список, если вы просто на иконку макроса нажмёте, вы перейдёте в меню с макросами), чтобы сделать свой первый макрос. Обзовите его «Тест», чтобы не путать с остальным. Позднее вы можете получить к нему доступ через «Вид» → «Макросы» → «Макросы». Как только вы нажимаете кнопку «ОК», начинается запись ваших действий. Записывается, конечно, не всё, а только конкретное взаимодействие с интерфейсом Word’a. Переходим обратно в окошко автозамены и делаем следующие действия. Нажимаем кнопку «Больше», ставим галочку напротив подстановочных символов. Теперь в строке «Найти» вбиваем: [<][i][>](*)[<][/][i][>] Да, именно так. В данном случае мы ищем точное совпадение каждого символа разметки, а (*) означает всё, что находится между ними. Включая другую разметку. В строке «Заменить на» вбиваем: \1 \1 в данном случае будет означать конструкцию в круглых скобочках. Т.е. всё, что содержит теги курсива, будет заменено на то же самое, только без них. Однако нам нужно, чтобы это что-то ещё и вернуло нам наш курсив. Для этого мы, всё ещё держа курсор ввода в поле «Заменить на» (это важно, потому что мы заменяем на курсив, а не ищем курсив!), нажимаем кнопку «Формат», выбираем в выпадающем списке «Шрифт…» и жамкаем там курсив. После чего нажимаем заветную кнопку «Заменить всё» и закрываем окно автозамены. В наш текст вернулся курсив, прекрасно. Идём обратно в «Вид» → «Макросы» и жамкаем «Остановить запись». Теперь проверим, какой код сгенерировался у нашего макроса. Для этого мы нажимаем «Макросы», выбираем наш макрос и нажимаем «Изменить». Увидим мы вот это вот непотребство: Sub Test() ' ' Test Макрос ' Selection.Find.ClearFormatting Selection.Find.Replacement.ClearFormatting Selection.Find.Replacement.Font.Italic = True With Selection.Find .Text = "[<][i][>](*)[<][/][i][>]" .Replacement.Text = "\1" .Forward = True .Wrap = wdFindContinue .Format = True .MatchCase = False .MatchWholeWord = False .MatchAllWordForms = False .MatchSoundsLike = False .MatchWildcards = True End With Selection.Find.Execute Replace:=wdReplaceAll End Sub Знакомьтесь, так выглядит макрос, который будет автоматически заменять вам весь карнавал с курсивом. Но у нас в тексте есть не только курсив, у нас есть и всё остальное. Создайте второй макрос (для этого вы можете просто включить и тут же отключить запись, это создаст вам пустой макрос) с уже более осмысленным названием и скопируйте в него сгенерированный код. Сейчас мы шаг за шагом соберём полную программу автозамены. Шаг 2. Автозамена жирного и зачёркнутого шрифта Собственно, участки для жирного и зачёркнутого шрифта мы препарируем таким же образом, только теперь у нас в строке «Найти» будут следующие конструкции: Жирный шрифт: [<][b][>](*)[<][/][b][>] Зачёркнутый шрифт: [<][s][>](*)[<][/][s][>] Заменяется и то, и другое на всё тот же \1, только теперь в разделе для форматирования в «Шрифте» вы выбираете, соответственно, жирный шрифт и обычный, но с одинарным зачёркиванием. Остальные действия под запись повторяете так же, а сгенерированные куски копируете в основной макрос (вы же не хотите сами этот код писать, верно?). Теперь у нас в основной программе макроса есть три участка кода, которые в сумме при нажатии кнопки «Выполнить» на макросе сделают вам часть грязной работы. Перейдём к немного более сложному делу – удаление чёртовой табуляции. Шаг 3. Автозамена табуляции Пока что не рассматриваем случай, когда нам нужно удалять ещё и пустые строки, это отдельная проблема, с которой мы разберёмся чуть дальше. Предположим, что в вашем тексте есть только табуляция, но нет отбивок каждого абзаца пустой строкой. Обратите внимание, пример не будет работать для случаев, когда у вас есть двойные табуляции (как в этой статье, двойная табуляция используется для оформления кода) и прочие непотребства. Для обработки таких случаев вам придётся писать собственный макрос. Итак, погнали. Не забудьте перед новым заходом очистить форматирование из строки «Заменить на». В строке «Найти» вбиваем следующую конструкцию: [<](tab)[>](*)^0013 В строке «Заменить на» вбиваем: \2^p. Обратите внимание, теперь в качестве 1-го слова используется (tab), а второе слово – это всё, что идёт после табуляции. ^0013 – это знак конца абзаца. Можно, конечно, его и не использовать, но тогда вычислительная нагрузка будет больше. Можете сами догадаться, почему. Также, в строке замены лучше использовать ^p вместо ^0013, чтобы вам не склеило абзацы ненароком (такое случается, хотя это эквивалентные символы). Далее, удерживая курсор в поле «Заменить на», идём в меню «Формат» → «Абзац», и выставляем там отступ 0.7 (ну или любой удобный вам). Зачем это нужно. Дело в том, что некоторые тексты могут содержать намеренное чередование отбитых и не отбитых табуляцией участков текста (а некоторые ресурсы – такое форматирование подхватывать). Чтобы после удаления табуляции продолжать видеть, где табуляция была, а где нет, мы перестраховываемся, вводя отступ. Конечно, для этого нам нужно, чтобы весь остальной документ до запуска макросов был скопирован в стиль без отступов или с отличающимся отступом. Также в поле «Выравнивание» не забудьте выставить «По ширине» или «По левому краю», по желанию. Для данной операции кусок сгенерированного кода будет выглядеть так: Selection.Find.ClearFormatting Selection.Find.Replacement.ClearFormatting With Selection.Find.Replacement.ParagraphFormat .SpaceBeforeAuto = False .SpaceAfterAuto = False .FirstLineIndent = CentimetersToPoints(0.7) .CharacterUnitFirstLineIndent = 0 .Alignment = wdAlignParagraphJustify End With With Selection.Find .Text = "[<](tab)[>](*)^0013" .Replacement.Text = "\2^0013" .Forward = True .Wrap = wdFindContinue .Format = True .MatchCase = False .MatchWholeWord = False .MatchAllWordForms = False .MatchSoundsLike = False .MatchWildcards = True End With Selection.Find.Execute Replace:=wdReplaceAll Следующим этапом мы разберём, что нам делать с тегами центр и вправо. Шаг 4. Автозамена «центр» и «вправо» Думаю, ни для кого не секрет, что теги «центр» и «вправо» на КФ в режиме чтения автоматом вставляют после себя пустую строку, даже если между отцентрованным текстом и следующим абзацем пустой строки не стоит. Если у вас отцентрованы одним тегом несколько абзацев подряд, между ними пустые строки автоматом вставляться не будут. То же и с тегом «вправо». При реставрации текста надо этот момент учитывать. Поэтому сделаем мы всё это следующим образом. Не забываем целиком очистить предыдущее форматирование перед новым действием! Для тега «центр» в поле «Найти» вводим: [<](center)[>](*)[<][/](center)[>] В поле «Заменить на» вводим: \2^0013 Оставляя курсор ввода в поле «Заменить на», нажимаем «Формат» → «Абзац». В выпадающем списке «Выравнивание» выбираем «По центру». Генерируем макрос из автозамены, получим нечто вроде вот этого: Selection.Find.ClearFormatting Selection.Find.Replacement.ClearFormatting With Selection.Find.Replacement.ParagraphFormat .SpaceBeforeAuto = False .SpaceAfterAuto = False .Alignment = wdAlignParagraphCenter End With With Selection.Find .Text = "[<](center)[>](*)[<][/](center)[>]" .Replacement.Text = "\2^0013" .Forward = True .Wrap = wdFindContinue .Format = True .MatchCase = False .MatchWholeWord = False .MatchAllWordForms = False .MatchSoundsLike = False .MatchWildcards = True End With Selection.Find.Execute Replace:=wdReplaceAll По аналогии делаем для тега «вправо», после чего собираем полный макрос и запускаем тот на проверочном тексте. Если у вас нет совсем хитрого форматирования, должно сработать. Шаг 5. Как автоматически убрать из дока пустые строки В самом простом случае это проблемы не составляет. Просто сгенерируйте участок кода с обратной заменой ^0013{2} на ^0013. Правда, он вам и лишнего может отхапать, например, отбивку пустой строкой перед отцентрованным текстом. Чтобы этого не происходило, надо подбирать через подстановочные знаки условия, с которыми оно будет работать. Для себя я сгенерировал два участка кода, которые должны стоять в самом начале макроса, до того, как будут реставрированы курсивные выделения. Первый участок вводит замену: ^0013{2}([!\<]) → ^0013\1 В итоге убираются пустые строки перед всеми блоками текста, которые не начинаются с какого-либо тега, будь то центр, вправо или таб. Проблема в том, что оно не уберёт пустые строки перед не табулированным текстом, который, например, начинается с тега курсива. С этим придётся либо разбираться самостоятельно, либо подбирать нужную последовательность подстановочных знаков. Второй участок выполняется с отключёнными подстановочными знаками и просто заменяет: ^p^p‹tab› → ^p‹tab›. Здесь всё просто. Конечно, такая замена всё равно может склеить вам переходы между табулированными и не табулированными участками текста, но, если вы не злоупотребляете такими переходами, вам будет несложно уже самостоятельно после макроса пройтись взглядом по тексту и подобрать «склейки» по необходимости. Ну или выполнить домашнее задание и написать макрос, который справляется и с этой проблемой. Спасибо за внимание.UPD. Вариант решения задачи от комментатора Shoopes
Использовать консоль браузера. Вы можете найти решение ниже в комментариях или в самом конце АТшного варианта статьи под спойлером (фикбучное форматирование не даёт нормально оформить код, чтобы тот не выглядел совсем убого). Проверил, как минимум во Хроме работает. Остальное форматирование (вроде пустых строк и пр.) пофиксить уже по желанию, либо тоже через консоль, либо через всё ту же автозамену, кому что удобнее. Спасибо Shoopes за второй вариант решения задачи.