如何在 Scribus 文本框架内垂直对齐文本?
答案1
答案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);
以下是该脚本的使用方法:
- 将脚本复制并粘贴到文本文档中(例如,使用 bloc note 或 notepad)没有对文档应用任何样式格式;
- 将文档另存为.py文件,任意命名;
- 在 Scribus 中,选择文本框架;
- 转到脚本(附加功能旁边),在顶部的主菜单中选择执行脚本...;
- A运行脚本出现窗口,您可以在其中选择您创建的.py 文件;
- 按好的。
选定文本框内的文本将垂直居中。
我至少可以经历两次缺点使用这个脚本:
- 如果文本框的高度或宽度已被修改,则需要重新运行脚本
- 如果文本溢出,则无法使文本居中,因为它会产生某种顶部和底部边距(因此对于大文本来说可能并不理想)
此脚本克服了在Jon Bentley 的回答对我来说不起作用(至少在 Scribus 1.4.6 中),显示以下行的错误消息:
ValueError:文本距离超出范围,必须为正数。
这可能与文档的关系比与脚本本身的关系更密切。
答案3
选择文本框并按 F2 或右键单击并选择属性。然后选择形状部分。在那里,您可以设置与文本框边缘的左边距偏移,以使文本在框架中对齐。如果这更符合您的目标,您还可以设置标签和列。
答案4
令人惊讶的是,对于如此简单而常见的功能,自 1.4.5 版起,Scribus 中似乎没有此选项。这里有三种解决方法(不幸的是,它们都不是理想的解决方案),其中一种基于 @W_Whalley 的答案(对于 Scribus 当前的 UI 来说已经过时了):
手动设置文本框架内的间距
改编自@W_Whalley 的回答:
- 打开特性对于文本框架(选择并按 F2,或右键单击并选择属性)。
- 选择文本标签。
- 打开列和文本距离落下。
- 调整边距以实现所需的对齐。
缺点:
- 您必须手动计算边距。
- 除非您努力计算利润,否则它只会得出近似值。
- 每次做出改变对齐的更改后,您都必须重新执行此操作。
将文本框架本身与另一个对象对齐
- 用另一个对象(例如另一个文本框架)围绕文本框架。
- 按顺序选择内框和外框(使用 Shift 键)。
- 打开对齐和分布窗户。
- 放关系到到最后选择。
- 点击以水平轴为中心。
缺点:
- 由于文本未在内部文本框架内垂直对齐,因此不够精确。
- 每次做出改变对齐的更改后,您都必须重新执行此操作。
使用脚本
- 使用这个脚本来自 Scribus Wiki。
我个人没有尝试过这个选项,所以无法确认它有多有效。从描述来看,它似乎解决了其他两种方法的大部分缺点,只剩下一个缺点:
- 每次做出改变对齐的更改后,您都必须重新执行此操作。