ฉันจะจัดแนวข้อความในแนวตั้งภายในกรอบข้อความ Scribus ได้อย่างไร
ฉันจะจัดแนวข้อความในแนวตั้งภายในกรอบข้อความ Scribus ได้อย่างไร
คำตอบ:
ใช้ Scribus 1.5.4:
Text Properties
;Column & Text Distances
;Vertical Alignment
เป็นค่าที่ต้องการ (ตัวอย่างMiddle
)ไม่จำเป็นต้องใช้สคริปต์ขอบมือหรือเวทมนต์ดำ
การใช้ 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);
นี่คือวิธีการใช้สคริปต์:
ข้อความภายในกรอบข้อความที่เลือกจะถูกจัดกึ่งกลางแนวตั้ง
ฉันสามารถพบข้อบกพร่องอย่างน้อยสองครั้งด้วยสคริปต์นี้:
สคริปต์นี้เอาชนะความจริงที่ว่าสคริปต์ที่กล่าวถึงในคำตอบของ Jon Bentleyไม่ได้ผลสำหรับฉัน (อย่างน้อยใน Scribus 1.4.6) แสดงข้อผิดพลาดด้วยบรรทัดต่อไปนี้:
ValueError: ข้อความที่อยู่นอกขอบเขตต้องเป็นค่าบวก
ซึ่งอาจเกี่ยวข้องกับเอกสารมากกว่าสคริปต์เอง
เลือกกรอบข้อความและกด F2 หรือคลิกขวาแล้วเลือกคุณสมบัติ จากนั้นเลือกส่วนรูปร่าง คุณสามารถตั้งค่าระยะเยื้องขอบซ้ายจากขอบของกรอบข้อความที่จะจัดแนวข้อความในกรอบ นอกจากนี้คุณยังสามารถตั้งค่าแท็บและคอลัมน์หากเป็นไปตามเป้าหมายของคุณ
น่าแปลกสำหรับคุณสมบัติที่เรียบง่ายและทั่วไปดูเหมือนจะไม่มีตัวเลือกสำหรับสิ่งนี้ใน Scribus ในเวอร์ชั่น 1.4.5 ต่อไปนี้เป็นวิธีแก้ปัญหาสามประการ (ไม่มีวิธีแก้ปัญหาที่น่าเสียดาย) ซึ่งหนึ่งในนั้นขึ้นอยู่กับคำตอบของ @ W_Whalley (ซึ่งล้าสมัยสำหรับ UI ปัจจุบันของ Scribus):
ดัดแปลงมาจากคำตอบของ @ W_Whalley:
ข้อเสีย:
ขึ้นอยู่กับโซลูชันที่แนะนำบน Scribus Wiki :
ข้อเสีย:
ฉันไม่ได้ลองใช้ตัวเลือกนี้เป็นการส่วนตัวดังนั้นจึงไม่สามารถยืนยันได้ว่ามีประสิทธิภาพแค่ไหน จากคำอธิบายมันจะปรากฏขึ้นเพื่อแก้ไขข้อเสียส่วนใหญ่ของอีกสองวิธีที่เหลือเพียงวิธีเดียว: