Scribus - 在文本框架内垂直对齐文本

Scribus - 在文本框架内垂直对齐文本

如何在 Scribus 文本框架内垂直对齐文本?

答案1

使用 Scribus 1.5.4:

  1. 右键单击文本框并选择Text Properties
  2. 点击Column & Text Distances;
  3. 在第一行,更改Vertical Alignment为所需的值(例如Middle)。

文本属性菜单的屏幕截图

无需脚本、手动边距或黑魔法。

答案2

使用 Scribus 1.4.6,以下脚本使文本框的内容居中(垂直)对齐由 Alessandro Rimoldi 设计的可以在文本框架内垂直对齐文本:

  • 即使行距和/或首行偏移随后发生变化,也会自动执行此操作
  • 并包含多个不同风格的段落

这是脚本(如果需要,以下代码行后面会简要介绍如何使用脚本):

#!/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);

以下是该脚本的使用方法:

  1. 将脚本复制并粘贴到文本文档中(例如,使用 bloc note 或 notepad)没有对文档应用任何样式格式;
  2. 将文档另存为.py文件,任意命名;
  3. 在 Scribus 中,选择文本框架
  4. 转到脚本(附加功能旁边),在顶部的主菜单中选择执行脚本...
  5. A运行脚本出现窗口,您可以在其中选择您创建的.py 文件;
  6. 好的

选定文本框内的文本将垂直居中。

我至少可以经历两次缺点使用这个脚本:

  • 如果文本框的高度或宽度已被修改,则需要重新运行脚本
  • 如果文本溢出,则无法使文本居中,因为它会产生某种顶部和底部边距(因此对于大文本来说可能并不理想)

此脚本克服了在Jon Bentley 的回答对我来说不起作用(至少在 Scribus 1.4.6 中),显示以下行的错误消息:

ValueError:文本距离超出范围,必须为正数。

这可能与文档的关系比与脚本本身的关系更密切。

答案3

选择文本框并按 F2 或右键单击并选择属性。然后选择形状部分。在那里,您可以设置与文本框边缘的左边距偏移,以使文本在框架中对齐。如果这更符合您的目标,您还可以设置标签和列。

答案4

令人惊讶的是,对于如此简单而常见的功能,自 1.4.5 版起,Scribus 中似乎没有此选项。这里有三种解决方法(不幸的是,它们都不是理想的解决方案),其中一种基于 @W_Whalley 的答案(对于 Scribus 当前的 UI 来说已经过时了):

手动设置文本框架内的间距

改编自@W_Whalley 的回答:

  1. 打开特性对于文本框架(选择并按 F2,或右键单击并选择属性)。
  2. 选择文本标签。
  3. 打开列和文本距离落下。
  4. 调整边距以实现所需的对齐。

缺点:

  • 您必须手动计算边距。
  • 除非您努力计算利润,否则它只会得出近似值。
  • 每次做出改变对齐的更改后,您都必须重新执行此操作。

将文本框架本身与另一个对象对齐

根据Scribus Wiki 上建议的解决方案

  1. 用另一个对象(例如另一个文本框架)围绕文本框架。
  2. 按顺序选择内框和外框(使用 Shift 键)。
  3. 打开对齐和分布窗户。
  4. 关系到最后选择
  5. 点击以水平轴为中心

缺点:

  • 由于文本未在内部文本框架内垂直对齐,因此不够精确。
  • 每次做出改变对齐的更改后,您都必须重新执行此操作。

使用脚本

  1. 使用这个脚本来自 Scribus Wiki。

我个人没有尝试过这个选项,所以无法确认它有多有效。从描述来看,它似乎解决了其他两种方法的大部分缺点,只剩下一个缺点:

  • 每次做出改变对齐的更改后,您都必须重新执行此操作。

相关内容