Избранное »

22.09.2014 – 07:27 | 2 комментария | 27 557 views

Здравствуйте все, кто работает в Индизайне!
Извещаем вас о том, что на youtube.com работает канал «InDesign Мастерская вёрстки». Там уже размещены более 70 видео с полным описанием как работать с программой DoTextOK. Другие интересные темы, касающиеся работы …

Читать полностью »
Работа в InDesign

Хитрости и секреты, приемы работы, уроки

Новая версия!

Особенности новой версии Индизайна

Плагины

Описание плагинов, информация о плагинах для работы с Adobe InDesign

Скрипты

Готовые к использованию скрипты для Adobe InDesign

Скриптинг

Описание языка, приёмов и методов программирования для Adobe InDesign

Home » Скрипты

Проблема с содержанием при верстке сборника статей многих авторов

Добавлено на 27.11.2010 – 02:199 комментариев | 2 000 views

При верстке сборника статей многих авторов часто используется такая структура: название статьи, текст статьи, автор статьи. В содержании требуется, чтобы сначала был автор, а потом — название статьи. Сборка содержания при помощи штатных средств Индизайна желаемого результата не дает, — абзац содержания с автором всегда будет после абзаца с названием статьи.

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

 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» четное количество абзацев.
parasort
Повторный запуск скрипта вернет вас к первоначальному варианту.


Дополнение

Наш постоянный читатель Дмитрий Германов предлагает своё решение этой проблемы при помощи скрипта 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]

9 комментариев »

  • gerwimmi:

    Спасибо, скрипт полезный.
    Но если в сборнике статей заголовкам и авторам присвоен разный стиль абзаца, то в содержании поменять их местами элементарно с помощью GREP (да еще и сразу оформить в нужном виде своим набором в FindChangeList).

  • admin:

    Ваша методика опубликована на сайте. Спасибо!

  • gerwimmi:

    Уважаемый Борис, а можно ли (сложно ли) скриптом реализовать обмен местами абзацев, следующих не подряд? Привязав последовательность замены или к именам стилей, или к числу «ступеней» между абзацами.

    Например, у нас есть текст:

    Стиль 1
    Стиль 2
    Стиль 3
    Стиль 4
    Стиль 1
    Стиль 2
    Стиль 3
    Стиль 4

    а нужно получить

    Стиль 3
    Стиль 2
    Стиль 1
    Стиль 4
    Стиль 3
    Стиль 2
    Стиль 1
    Стиль 4

    Спасибо.

  • admin:

    Можно и не сложно. Нужны уточнения. Есть ли текст, оформленный другими стилями, кроме указанных четырех?

  • gerwimmi:

    Текста с другими стилями нет. Выборка идет только из 4-х разных стилей в определенной последовательности.
    Только названия у них, конечно, не «стиль 1», а другие.

  • admin:

    Пришлите ваш текст во избежание дальнейших вопросов и как материал для отладки

  • admin:

    Попробуйте это: http://adobeindesign.ru/wp-content/uploads/SortStyles.zip (на скорую руку). В начале скрипта установите параметр MENUITEMS равный количеству чередующихся стилей. По умолчанию установлено 4.

    • ogrishin:

      к сожалению не работает если стили находятся в группе стилей… ругается 🙂
      Это можно как-то подправить?

      • admin:

        В данном скрипте (да и скриптом стыдно назвать — несколько строчек кода) нигде не используются абзацные стили, поэтому тут что-то другое. В группе стили или нет — без разницы. Напишите, как он у вас ругается, тогда понятнее будет, куда копать.

Оставить комментарий!

Вы должны быть в системе чтобы оставить комментарий.