मैं स्क्रिब्स टेक्स्ट फ़्रेम के भीतर पाठ को लंबवत रूप से कैसे संरेखित करूं?
मैं स्क्रिब्स टेक्स्ट फ़्रेम के भीतर पाठ को लंबवत रूप से कैसे संरेखित करूं?
जवाबों:
स्क्रिप्स 1.4.6 का उपयोग करते हुए, निम्नलिखित स्क्रिप्ट केंद्र (ऊर्ध्वाधर) में एलेसेंड्रो रिमोल्डी द्वारा एक पाठ फ़्रेम की सामग्री को संरेखित किया गया है, पाठ को एक पाठ फ़्रेम के भीतर लंबवत रूप से संरेखित करने में सक्षम था:
यहां स्क्रिप्ट है (यदि आवश्यक हो, तो स्क्रिप्ट का उपयोग करने का एक संक्षिप्त निर्देश कोड की इन पंक्तियों का अनुसरण करता है):
#!/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.4.6 कम से कम), निम्न पंक्ति के साथ एक त्रुटि संदेश दिखा:
ValueError: सीमा से बाहर पाठ की दूरी, सकारात्मक होनी चाहिए।
जो शायद स्क्रिप्ट से अधिक दस्तावेज़ से संबंधित है।
टेक्स्ट फ़्रेम का चयन करें और F2 या राइट-क्लिक करें और गुण चुनें। फिर शेप सेक्शन को चुनें। वहां आप टेक्स्ट फ़्रेम के किनारे से एक लेफ्ट मार्जिन ऑफसेट सेट कर सकते हैं जो टेक्स्ट को फ्रेम में संरेखित करेगा। आप टैब और कॉलम भी सेट कर सकते हैं यदि यह आपके लक्ष्य के अनुरूप है।
आश्चर्यजनक रूप से इस तरह की एक सरल और सामान्य सुविधा के लिए, संस्करण 1.4.5 के रूप में स्क्रिप्स में इसके लिए कोई विकल्प नहीं दिखता है। यहां तीन वर्कअराउंड (जिनमें से कोई भी आदर्श समाधान दुर्भाग्य से हैं), जिनमें से एक @ W_Whalley के उत्तर पर आधारित है (जो कि स्क्रिप्स की वर्तमान UI के लिए पुराना है):
@ W_Whalley के उत्तर से अनुकूलित:
नुकसान:
स्क्रिप्स विकी पर सुझाए गए समाधान के आधार पर :
नुकसान:
मैंने व्यक्तिगत रूप से इस विकल्प की कोशिश नहीं की है इसलिए यह पुष्टि नहीं कर सकता है कि यह कितना प्रभावी है। वर्णन से यह सिर्फ एक को छोड़कर अन्य दो विधियों के अधिकांश नुकसानों को हल करने के लिए प्रकट होगा: