Como alinhar verticalmente o texto dentro de um quadro de texto Scribus?
Como alinhar verticalmente o texto dentro de um quadro de texto Scribus?
Respostas:
Usando o Scribus 1.5.4:
Text Properties
;Column & Text Distances
;Vertical Alignment
para o valor desejado (por exemplo Middle
).Não há necessidade de scripts, margens manuais ou magia negra.
Usando o Scribus 1.4.6, o seguinte centro de script (vertical), alinhar o conteúdo de um quadro de texto por Alessandro Rimoldi, foi capaz de alinhar verticalmente o texto dentro de um quadro de texto:
Aqui está o script (se necessário, uma breve instrução sobre como usar o script segue estas linhas de código):
#!/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);
Aqui está como usar o script:
O texto dentro do quadro de texto selecionado será então centralizado verticalmente.
Eu poderia experimentar pelo menos duas desvantagens com este script:
Esse script supera o fato de que o script mencionado na resposta de Jon Bentley não funcionou para mim (pelo menos no Scribus 1.4.6), mostrando uma mensagem de erro com a seguinte linha:
ValueError: as distâncias de texto fora dos limites devem ser positivas.
que talvez esteja relacionado mais ao documento do que ao próprio script.
Selecione o quadro de texto e pressione F2 ou clique com o botão direito do mouse e escolha propriedades. Em seguida, selecione a seção Forma. Lá, você pode definir um deslocamento da margem esquerda a partir da borda do quadro de texto que alinhará o texto no quadro. Você também pode definir guias e colunas se isso estiver mais alinhado com sua meta.
Surpreendentemente, para um recurso tão simples e comum, não parece haver uma opção para isso no Scribus a partir da versão 1.4.5. Aqui estão três soluções alternativas (nenhuma das quais, infelizmente, são as soluções ideais), uma delas baseada na resposta de @ W_Whalley (que está desatualizada para a interface atual do Scribus):
Adaptado da resposta de @ W_Whalley:
Desvantagens:
Com base na solução sugerida no Scribus Wiki :
Desvantagens:
Eu pessoalmente não tentei essa opção, portanto não posso confirmar a eficácia dela. A partir da descrição, parece resolver a maioria das desvantagens dos outros dois métodos, deixando apenas um:
Apenas uma observação para a resposta aceita por Kyll: 1.5.4 não está no ramo estável, mas é uma versão de desenvolvimento. Isso pode ser interessante quando alguém se pergunta depois de instalar o 1.4.8 (mais recente estável). No entanto, ele realmente funciona, uma agradável melhoria da equipe de desenvolvimento.