Scribus - вертикально выравнивать текст внутри текстовой рамки

8479
iokevins

Как выровнять текст по вертикали внутри текстового фрейма Scribus?

4
Чтобы уточнить: у меня есть 7,4590 в ширину х 0,9810 в высоком текстовом фрейме с одной строкой текста 55,0 пт (шрифт Century Schoolbook Regular). Scribus по умолчанию помещает текст в верхний левый угол текстовой рамки. Текст занимает около 0,5 дюйма по вертикали текстового фрейма. Я хочу знать, как (если это возможно) я могу выровнять текст по вертикали внутри текстового фрейма, чтобы он находился по центру примерно с 0,25 пустого пространства над и под текстом. Это легко сделать в Microsoft Publisher; просто посмотреть, смогу ли я сделать это в Scribus. iokevins 13 лет назад 0

4 ответа на вопрос

2
VOST

Using Scribus 1.4.6, the following script center (vertical) align the content of a text frame by Alessandro Rimoldi was able to vertically align the text within a text frame:

  • doing so automatically even when the linespacing and/or the first line offset is changed afterwards
  • and with multiple paragraphs of different styles

Here is the script (if needed, a brief instruction on how to use the script follows these lines of code):

#!/usr/bin/python """ this script adjust the top and bottom distance of a text frame to exactly put its content in the middle of the frame @author: alessandro rimoldi @version: 1.0 / 20090209 @copyright (c) 2009 alessandro rimoldi under the mit license http://www.opensource.org/licenses/mit-license.html """ import sys try: import scribus except ImportError: print "This script only works from within Scribus" sys.exit(1) # check that the selection is one text frame and get that frame frame_n = scribus.selectionCount() if frame_n == 0 : scribus.messageBox('Error:', 'No frame selected'); sys.exit(1) elif frame_n > 1 : scribus.messageBox('Error:', 'You may select only one frame'); sys.exit(1) frame = scribus.getSelectedObject(0) try: char_n = scribus.getTextLength(frame) except scribus.WrongFrameTypeError: scribus.messageBox('Error:', 'You may only adjust text frames'); sys.exit(1) if char_n == 0 : scribus.messageBox('Error:', 'You can\'t adjust an empty frame'); sys.exit(1) if (scribus.textOverflows(frame) == 1) : scribus.messageBox('Error:', 'You can\' center a text which is overflowing'); sys.exit(1) # get some page and frame measure (x, y) = scribus.getPosition(frame) (w, h) = scribus.getSize(frame) original_height = h (dl, dr, dt, db) = scribus.getTextDistances(); scribus.setTextDistances(dl, dr, 0, 0); # if the frame doesn't overflow, shorten it to make it overflow while ((scribus.textOverflows(frame) == 0) and (h > 0)) : h -= 10 scribus.sizeObject(w, h, frame) # resize the frame in 10pt steps while (scribus.textOverflows(frame) > 0) : h += 10 scribus.sizeObject(w, h, frame) # undo the latest 10pt step and fine adjust in 1pt steps h -= 10 scribus.sizeObject(w, h, frame) while (scribus.textOverflows(frame) > 0) : h += 1 scribus.sizeObject(w, h, frame) scribus.sizeObject(w, original_height, frame) dt = (original_height - h) / 2 scribus.setTextDistances(dl, dr, dt, dt); 

Here is how to use the script:

  1. copy and paste the script in a text document (using bloc note or notepad for example) with no style formatting applied to the document;
  2. save the document as a .py file, calling it whatever name you want;
  3. in Scribus, select the text frame;
  4. go to Script (next to Extras) in the main menu at the top, then select Execute Scripts...;
  5. a Run Script window appears in which you select the .py file you have created;
  6. press OK.

The text inside the selected text frame will then be vertically centred.

I could experience at least two drawbacks with this script:

  • it is necessary to rerun the script if either the height or width of the text frame has been modified
  • it cannot center the text if it is overflowing as it creates some kind of top and bottom margins (so maybe not ideal for large texts)

This script overcomes the fact that the script mentioned in Jon Bentley's answer did not work for me (in Scribus 1.4.6 at least), showing an error message with the following line:

ValueError: Text distances out of bounds, must be positive.

which is maybe related more to the document than the script itself.

1
W_Whalley

Выберите текстовый фрейм и нажмите F2 или щелкните правой кнопкой мыши и выберите свойства. Затем выберите раздел Shape. Там вы можете установить смещение левого поля от края текстового фрейма, чтобы выровнять текст в фрейме. Вы также можете установить вкладки и столбцы, если это больше соответствует вашей цели.

Благодаря W_Whalley - увеличение левого поля корректирует горизонтальные смещения. : o) Кажется, что работа с верхним полем работает, но в Scribus текст почти сразу исчезает из виду, даже если он не находится вблизи нижней границы текстового фрейма .... iokevins 13 лет назад 0
@schultkl, спасибо за разъяснения. Используя размер вашего текстового фрейма и шрифт 54 pt, я установил смещение текста на базовую линию символов -20% и приблизительно отцентрировал текст в фрейме. Увеличение высоты текстового поля до 1 дюйма позволило мне сделать это шрифтом 55 pt. Увеличение высоты текстового фрейма не является проблемой, потому что текстовые фреймы могут перекрываться. W_Whalley 13 лет назад 0
1
Jon Bentley

Удивительно, что для такой простой и распространенной функции в Scribus не существует опции для версии 1.4.5. Вот три обходных пути (к сожалению, ни один из которых не является идеальным решением), один из которых основан на ответе @ W_Whalley (который является устаревшим для текущего пользовательского интерфейса Scribus):

Вручную установите интервал внутри текстовой рамки

Адаптировано из ответа @ W_Whalley:

  1. Откройте « Свойства» для текстового фрейма (выберите и нажмите F2 или щелкните правой кнопкой мыши и выберите «Свойства»).
  2. Выберите вкладку « Текст ».
  3. Откройте раскрывающийся список « Столбцы и расстояния текста» .
  4. Отрегулируйте поля для достижения желаемого выравнивания.

Недостатки:

  • Вы должны будете отработать поля вручную.
  • Это приведет только к приближению, если вы не усердно работаете, чтобы рассчитать поля.
  • Вам придется повторять его каждый раз, когда вы вносите изменения, которые изменяют выравнивание.

Выровняйте текстовую рамку внутри другого объекта

Основываясь на предложенном решении на Scribus Wiki :

  1. Обведите текстовый фрейм другим объектом (например, другим текстовым фреймом).
  2. Выберите внутреннюю рамку и внешнюю рамку вместе в этом порядке (используя клавишу Shift).
  3. Откройте окно « Выравнивание и распространение» .
  4. Набор Относительно к последней выбранной .
  5. Нажмите Центр по горизонтальной оси .

Недостатки:

  • Это неточно из-за того, что текст во внутреннем текстовом фрейме не выровнен по вертикали.
  • Вам придется повторять его каждый раз, когда вы вносите изменения, которые изменяют выравнивание.

Использовать скрипт

  1. Используйте этот скрипт из Scribus Wiki.

Я лично не пробовал эту опцию, поэтому не могу подтвердить, насколько она эффективна. Из описания можно было бы решить большинство недостатков двух других методов, оставив только один:

  • Вам придется повторять его каждый раз, когда вы вносите изменения, которые изменяют выравнивание.
1
Kyll

Использование Scribus 1.5.4:

  1. Щелкните правой кнопкой мыши на текстовом поле и выберите Text Properties;
  2. Нажмите на Column & Text Distances;
  3. В первой строке измените Vertical Alignmentжелаемое значение (например Middle).

Screenshot of the Text Properties menu

Нет необходимости в скриптах, ручных полях или черной магии.

Похожие вопросы