Проблема с содержанием при верстке сборника статей многих авторов
При верстке сборника статей многих авторов часто используется такая структура: название статьи, текст статьи, автор статьи. В содержании требуется, чтобы сначала был автор, а потом — название статьи. Сборка содержания при помощи штатных средств Индизайна желаемого результата не дает, — абзац содержания с автором всегда будет после абзаца с названием статьи.
Вручную менять каждого автора с названием его статьи — неблагодарное и нудное дело. Лучше воспользоваться этим простым скриптом, который в каждой паре абзацев меняет их местами — как раз то, что нам надо.
myParagraphs = app.selection[0].paragraphs; if(myParagraphs.item(0).parentStory.insertionPoints.item(-1).index == myParagraphs.item(-1).insertionPoints.item(-1).index){ myParagraphs.item(-1).insertionPoints.item(-1).contents = "\r";} for(var i = myParagraphs.length -1; i>=1; i--) { myParagraphs.item(i).move(LocationOptions.before, myParagraphs.item(i-1) ); i--; } |
Сохраните его в папку пользовательских скриптов с любым именем и расширением jsx. Перед запуском выделите инструментом «Text» четное количество абзацев.
Повторный запуск скрипта вернет вас к первоначальному варианту.
Дополнение
Наш постоянный читатель Дмитрий Германов предлагает своё решение этой проблемы при помощи скрипта FindChangeByList.jsx, и приводит список замен, которые надо добавить в файл FindChangeList.txt:
***Содержание text {findWhat:"^n"} {changeTo:" ", changeConditionsMode:1919250519} {includeLockedStoriesForFind:false, includeLockedLayersForFind:false, includeHiddenLayers:false, includeMasterPages:false, includeFootnotes:true, wholeWord:false, caseSensitive:false} //убиваем ложные абзацы grep {findWhat:"\\t\\d+", appliedParagraphStyle:"автор"} {changeConditionsMode:1919250519} {includeLockedStoriesForFind:false, includeLockedLayersForFind:false, includeHiddenLayers:false, includeMasterPages:false, includeFootnotes:true} //убираем табуляцию с цифрами у авторов grep {findWhat:"\\d+", appliedParagraphStyle:"автор"} {changeConditionsMode:1919250519} {includeLockedStoriesForFind:false, includeLockedLayersForFind:false, includeHiddenLayers:false, includeMasterPages:false, includeFootnotes:true} //Убираем цифровые сноски у авторов grep {findWhat:"\\u\\l", appliedParagraphStyle:"автор"} {changeTo:"$0", appliedParagraphStyle:"Содержание-автор", changeConditionsMode:1919250519} {includeLockedStoriesForFind:false, includeLockedLayersForFind:false, includeHiddenLayers:false, includeMasterPages:false, includeFootnotes:true} //Меняем стиль абзаца автор на содержание-автор grep {findWhat:"(.+)", appliedParagraphStyle:"Содержание-автор"} {changeTo:"@$1", changeConditionsMode:1919250519} {includeLockedStoriesForFind:false, includeLockedLayersForFind:false, includeHiddenLayers:false, includeMasterPages:false, includeFootnotes:true} //Маркируем абзацы авторов знаком @ grep {findWhat:"(^.+\\r@)"} {changeTo:"#$1", appliedParagraphStyle:"содержание", changeConditionsMode:1919250519} {includeLockedStoriesForFind:false, includeLockedLayersForFind:false, includeHiddenLayers:false, includeMasterPages:false, includeFootnotes:true} //Маркируем абзацы перед авторскими символом # и присваиваем им стиль "содержание" grep {findWhat:"(^@.+\\r)"} {changeTo:"$0", appliedParagraphStyle:"Содержание-автор", changeConditionsMode:1919250519} {includeLockedStoriesForFind:false, includeLockedLayersForFind:false, includeHiddenLayers:false, includeMasterPages:false, includeFootnotes:true} //Присваиваем нужный стиль абзацам "автор" grep {findWhat:"(#.+\\r)(@.+\\r)"} {changeTo:"$2$1", changeConditionsMode:1919250519} {includeLockedStoriesForFind:false, includeLockedLayersForFind:false, includeHiddenLayers:false, includeMasterPages:false, includeFootnotes:true} //меняем абзацы местами grep {findWhat:"^#.+\\r"} {changeTo:"$0", appliedParagraphStyle:"содержание", changeConditionsMode:1919250519} {includeLockedStoriesForFind:false, includeLockedLayersForFind:false, includeHiddenLayers:false, includeMasterPages:false, includeFootnotes:true} //Присваиваем нужный стиль абзацам "содержание" grep {findWhat:"[@#]"} {changeConditionsMode:1919250519} {includeLockedStoriesForFind:false, includeLockedLayersForFind:false, includeHiddenLayers:false, includeMasterPages:false, includeFootnotes:true} //Убираем маркеры |
Скачать файлик дополнений к списку FindChangeList.txt
[stextbox id=»info» caption=»О скрипте FindGhangeByList мы писали:»]Модифицированный скрипт FindChangeByList
Расширяем возможности FindChangeByList
Модифицикации скрипта FindChangeByList
Любителям скрипта FindChangeByList.jsx посвящается[/stextbox]
Спасибо, скрипт полезный.
Но если в сборнике статей заголовкам и авторам присвоен разный стиль абзаца, то в содержании поменять их местами элементарно с помощью GREP (да еще и сразу оформить в нужном виде своим набором в FindChangeList).
Ваша методика опубликована на сайте. Спасибо!
Уважаемый Борис, а можно ли (сложно ли) скриптом реализовать обмен местами абзацев, следующих не подряд? Привязав последовательность замены или к именам стилей, или к числу «ступеней» между абзацами.
Например, у нас есть текст:
Стиль 1
Стиль 2
Стиль 3
Стиль 4
Стиль 1
Стиль 2
Стиль 3
Стиль 4
а нужно получить
Стиль 3
Стиль 2
Стиль 1
Стиль 4
Стиль 3
Стиль 2
Стиль 1
Стиль 4
Спасибо.
Можно и не сложно. Нужны уточнения. Есть ли текст, оформленный другими стилями, кроме указанных четырех?
Текста с другими стилями нет. Выборка идет только из 4-х разных стилей в определенной последовательности.
Только названия у них, конечно, не «стиль 1», а другие.
Пришлите ваш текст во избежание дальнейших вопросов и как материал для отладки
Попробуйте это: http://adobeindesign.ru/wp-content/uploads/SortStyles.zip (на скорую руку). В начале скрипта установите параметр MENUITEMS равный количеству чередующихся стилей. По умолчанию установлено 4.
к сожалению не работает если стили находятся в группе стилей… ругается 🙂
Это можно как-то подправить?
В данном скрипте (да и скриптом стыдно назвать — несколько строчек кода) нигде не используются абзацные стили, поэтому тут что-то другое. В группе стили или нет — без разницы. Напишите, как он у вас ругается, тогда понятнее будет, куда копать.