Scribusテキストフレーム内でテキストを垂直方向に揃えるにはどうすればよいですか?
Scribus 1.4.6を使用して、次のスクリプト テキストフレームのコンテンツを中央(垂直)に揃える by 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);
スクリプトの使用方法は次のとおりです。
選択したテキストフレーム内のテキストは、垂直方向の中央に配置されます。
このスクリプトでは、少なくとも2つの欠点が発生する可能性があります。
このスクリプトは、 Jon Bentleyの回答 で言及されているスクリプトが(少なくともScribus 1.4.6では)機能せず、次の行のエラーメッセージを表示するという事実を克服します。
ValueError:テキストの距離が範囲外です。正である必要があります。
これは、スクリプト自体よりもドキュメントに関連している可能性があります。
テキストフレームを選択してF2キーを押すか、右クリックしてプロパティを選択します。次に、[形状]セクションを選択します。そこで、フレーム内のテキストを整列させるテキストフレームのエッジからの左マージンオフセットを設定できます。目標に沿っている場合は、タブと列を設定することもできます。
驚くべきことに、このような単純で一般的な機能については、バージョン1.4.5の時点でScribusにこのオプションがないようです。これが3つの回避策です(残念ながら、どれも理想的な解決策ではありません)。そのうちの1つは、@ W_Whalleyの回答(Scribusの現在のUIでは古くなっています)に基づいています。
@W_Whalleyの回答から適応:
短所:
ScribusWikiで推奨される解決策 に基づく:
短所:
私は個人的にこのオプションを試したことがないので、それがどれほど効果的であるかを確認することはできません。説明から、他の2つの方法の欠点のほとんどを解決し、1つだけを残しているように見えます。