[ID CC-CC2021] Выравнивание текста по центру фрейма

Hollot

Участник
Топикстартер
Сообщения
3
Реакции
0
Имеется книга коротких стихов. Строки имеют разную длину. Каким образом можно выровнять текст по центру фрейма по горизонтали, но чтобы выключка влево сохранилась. Поэт настаивает именно на таком варианте. На картинке (в красной рамке) это сделано с помощью отступов. Но книга очень объемная, и настраивать отступы под каждое стихотворение довольно трудоёмкая задача.
 

Вложения

  • Untitled-1.jpg
    Untitled-1.jpg
    160.1 КБ · Просм.: 434

Jeine

Да здравствует разум! Да сгинет маразм!
15 лет на форуме
Сообщения
7 246
Реакции
6 279

Elsynor

Tesseract
12 лет на форуме
Сообщения
1 282
Реакции
1 377
Тот же скрипт, но средневзвешенный…
Код:
/*
Данный скрипт устанавливает левый отступ для выделенных строк
текста так, чтобы самая длинная строчка блока оказалась по центру
фрейма.
Практическое применение - верстка стихов, которые надо оставлять с
выключкой в левый край, но ставить по центру полосы.

(c) Евгений Трефилов, 2007 | e-mail: evgenyt@nwgsm.ru

Особая благодарность Максиму Стринжа за помощь и консультации :pray:
*/

if ((app.selection.length == 0) || (app.selection[0].constructor.name != "Text"))
{
alert ("Please select some text with Text tool");
}

else

{
myLines=app.selection[0].lines;

var maxLength;
maxLength=0;
sumLength=0;
//finding longest line among selected
    for (myCounter = 0; myCounter < myLines.length; myCounter++) {

    currentLength=calculateLineLength(myLines.item(myCounter));
    sumLength+=currentLength;
//    if (currentLength > maxLength)
//{
//maxLength=currentLength;
//}
}
maxLength=sumLength/myLines.length;
    
//getting width of frame

myFrame = app.selection[0].parentTextFrames[0];

myFrameWidth = myFrame.geometricBounds[3]-myFrame.geometricBounds[1];
if (myFrame.textFramePreferences.textColumnCount) {
    myFrameWidth=(myFrameWidth / myFrame.textFramePreferences.textColumnCount) - myFrame.textFramePreferences.textColumnGutter;
    }

//calculating indent

myLeftIndent = (myFrameWidth - maxLength)/2;

//applying

    for (myCounter = 0; myCounter < myLines.length; myCounter++) {
    myLines.item(myCounter).leftIndent=myLeftIndent;
    }
}

function calculateLineLength (myLine)
{
myLength = myLine.characters.item(myLine.characters.count()-3).horizontalOffset - myLine.characters.firstItem().horizontalOffset;
return (myLength);
}
 
  • Спасибо
Реакции: Bebs

Hollot

Участник
Топикстартер
Сообщения
3
Реакции
0
Спасибо всем. Отлично всё работает