[ID CS4-CS6] Глобальное переназначение абзацных стилей

  • Автор темы Автор темы densen
  • Дата начала Дата начала

densen

Топикстартер
20 лет на форуме
Сообщения
811
Реакции
726
Есть несколько скриптов, которые позволяют переназначать абзацные стили.
1) setParaStyles v2.1 (Б. Кащеев, @boriskasmoscow ), где можно выстроить строгую очередность следования стилей.
2) ParagraphStyleChanger v2.75 (Stephan Möbius), где можно выстраивать пары "Если за стилем "1" идет стиль "2", то стиль "1" меняется на стиль "3", а стиль "2" меняется на стиль "4"
3) Change Consecutive Paragraphs Pro v2.1.1 (Ariel Walden) - мощный инструмент с возможностями п. 2, но с дополнительной возможностью записывания этих цепочек и компоновки их в батч.
Расстраивало только то, что все они являются обособленными скриптами с интерфейсом. Возникла необходимость сделать подобный инструмент просто выполняемым скриптом.

JavaScript:
// Global Paragraph Styles Remapping
// Глобальное переназначение абзацных стилей
// densen
// v.1 (15.03.2023)

// Присутствуют три функции переназначения абзацных стилей:

// remapDownShort (Вниз на определенное количество абзацей)
// remapDownShort ("Стиль 1", "Стиль 2", "Стиль 3", количество)
// Если после абзаца со "Стиль 1" следует абзац со "Стиль 2", то [количество] абзацей, следующих после абзаца со "Стиль 1" и имеющих "Стиль 2", будут переназначены в "Стиль 3"

// remapDownLong (Вниз, пока не встретится другой стиль)
// remapDownLong ("Стиль 1", "Стиль 2", "Стиль 3")
// Если после абзаца со "Стиль 1" следует абзац со "Стиль 2", то до тех пор, пока абзацы, следующие за абзацем со "Стиль 1", будут иметь "Стиль 2", все они будут переназначены в "Стиль 3"

// remapUpShort (Вверх на определенное количество абзацей)
// remapUpShort ("Стиль 1", "Стиль 2", "Стиль 3", количество)
// Если абзацу со "Стиль 1" предшествует абзац со "Стиль 2", то [количество] абзацей, предшествующих абзацу со "Стиль 1" и имеющих "Стиль 2", будут переназначены в "Стиль 3"

// Если абзацные стили находятся вне групп, то можно подставлять имя стиля в кавычках - "Text", "Head", "Мой стиль" и т.д.
// Если абзацные стили находятся в группах, или в группах, расположенных в группах, то для удобства можно вводить переменные (обязательно прочитайте раздел "ВНИМАНИЕ!!!")
// var MT = app.activeDocument.paragraphStyleGroups.item("Article").paragraphStyles.item("Main Text"); // Переменная имени стиля "Main Text", расположенного в группе "Article"
// var DOI = app.activeDocument.paragraphStyleGroups.item("Article").paragraphStyleGroups.item("Head").paragraphStyles.item("DOI"); // Переменная имени стиля "DOI", расположенного в группе "Head", которая в свою очередь расположена в группе "Article"

// ВНИМАНИЕ!!!
// Если требуется найти какой-либо стиль в тексте ("Стиль 1" или "Стиль 2"), и этот стиль находится в группе, то к переменной стиля добавляется ".name".
// В этом случае, если задана переменная:
// var MT = app.activeDocument.paragraphStyleGroups.item("Article").paragraphStyles.item("Main Text")
// ...то вместо "Стиль 1" и "Стиль 2" нужно подставлять переменные с суффиксом ".name", то есть MT.name и т.п.
// Если требуется заменить на какой-то стиль в тексте, и этот стиль находится в группе, то вместо "Стиль 3" ставится просто переменная MT.

Каждую функцию выделил в отдельный скрипт и добавил файл для тестирования его возможностей. В каждом скрипте привел пример, как записывать строки поиска и замены абзацных стилей, включая абзацные стили в группе и в "группе-в-группе".
В отдельном архиве полный скрипт (Global_Paragraph_Styles_Remapping_v1.zip). Используя все три функции переназначения и грамотно располагая их иерархически, можно добиться максимально возможного назначения абзацных стилей в тексте.
Скрипт будет полезен для верстки научных журналов, где идут подряд с десяток стилей (doi, название статьи, авторы, место работы, резюме, ключевые слова, конфликты интересов, цитирование, затем то же на английском и проч.)
В комплекте с безинтерфейсным скриптом по "поиску/замене" можно рутинную работу по: а) первоначальной разметке опорных стилей, б) переназначению остальных стилей на основе размеченных, и последующему в) "поиску/замене" в каждом отдельном стиле - превратить в безмятежное чаепитие.
 

Вложения

Последнее редактирование:
Поменял в v. 2 порядок обработки абзацей в двух функциях - remapDownShort и remapDownLong.
Как и в предыдущей версии, лучше длинные списки, например «всем абзацам, имеющим абзацный стиль "Main Text" и следующим после абзацного стиля "Literature Level", присваивать абзацный стиль "Literature" до тех пор, пока не встретится абзац со стилем, отличным от "Main Text"», где этих идущих подряд абзацей 50-300 шт., обрабатывать в самом начале работы скрипта, оставляя мелкие переназначения на потом. В противном случае вся процедура виснет наглухо (подозреваю утечку памяти). Если литературу переназначать в самом начале, то все абзацы в журнале из 16 статей (155 страниц) обрабатываются в 11 шагов за 6-8 минут (в зависимости от кодека сжатия просматриваемого на переднем плане фильма).

JavaScript:
remapDownLong (LL.name, MT.name, LT); // Literature Level -> Literature
remapDownShort (DOI.name, MT.name, ANR, 1); // DOI -> Article Name Rus
remapDownShort (UDK.name, MT.name, ANR, 1); // UDK -> Article Name Rus
remapDownShort (ANR.name, MT.name, AAR, 1); // Article Name Rus -> Article Author Rus
remapDownLong (AAR.name, MT.name, AWR); // Article Author Rus -> Article Author Work Rus
remapDownLong (RR.name, MT.name, RR); // Resume Rus
remapDownShort (CTR.name, MT.name, ANE, 1); // Citation Rus -> Article Name Eng
remapDownShort (ANE.name, MT.name, AAE, 1); // Article Name Eng -> Article Author Eng
remapDownLong (AAE.name, MT.name, AWE); // Article Author Eng -> Article Author Work Eng
remapDownLong (RE.name, MT.name, RE); // Resume Eng
remapDownLong (PL.name, MT.name, PP); // Participation Level -> Participation
 

Вложения

Последнее редактирование:
  • Спасибо
Реакции: LeonidB