Scribus - alinhar verticalmente o texto dentro de um quadro de texto

4

Como alinhamento verticalmente o texto dentro de um quadro de texto do Scribus?

    
por iokevins 11.01.2011 / 01:42

3 respostas

2

Usando o Scribus 1.4.6, o seguinte script centro (vertical) alinha o conteúdo de um quadro de texto por Alessandro Rimoldi foi capaz de alinhar verticalmente o texto dentro de um quadro de texto:

  • fazendo isso automaticamente mesmo quando o espaçamento entre linhas e / ou o deslocamento da primeira linha é alterado posteriormente
  • e com vários parágrafos de estilos diferentes

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);

Veja como usar o script:

  1. copie e cole o script em um documento de texto (usando nota de bloco ou bloco de notas, por exemplo) sem formatação de estilo aplicada ao documento;
  2. salve o documento como um arquivo .py , chamando o nome que quiser;
  3. no Scribus, selecione o quadro de texto ;
  4. vá para Script (ao lado de Extras) no menu principal na parte superior e selecione Executar scripts ... ;
  5. é exibida uma janela Executar script , na qual você seleciona o arquivo .py que você criou;
  6. pressione OK .

O texto dentro do quadro de texto selecionado será então centralizado verticalmente.

Eu pude experimentar pelo menos duas desvantagens com este script:

  • é necessário executar novamente o script se a altura ou a largura do quadro de texto foi modificada
  • ele não pode centralizar o texto se estiver transbordando, pois cria algum tipo de margem superior e inferior (talvez não seja ideal para textos grandes)

Este script supera o fato de que o script mencionado na resposta de Jon Bentley não funcionou para mim (no Scribus 1.4. Pelo menos 6), mostrando uma mensagem de erro com a seguinte linha:

ValueError: Text distances out of bounds, must be positive.

que talvez esteja mais relacionado ao documento do que ao próprio script.

    
por 03.05.2016 / 14:22
1

Selecione o quadro de texto e pressione F2 ou clique com o botão direito do mouse e escolha as propriedades. Em seguida, selecione a seção Shape. 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 tabulações e colunas se isso estiver mais de acordo com sua meta.

    
por 11.01.2011 / 14:32
1

Surpreendentemente, para um recurso tão simples e comum, parece não 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 são soluções ideais, infelizmente), uma das quais é baseada na resposta da @W_Whalley (que está desatualizada para a interface atual do Scribus):

Defina manualmente o espaçamento no quadro de texto

Adaptado da resposta do @W_Whalley:

  1. Abra Propriedades para o quadro de texto (selecione e pressione F2 ou clique com o botão direito e selecione Propriedades).
  2. Selecione a guia Texto .
  3. Abra as Colunas e & Distâncias de texto na lista suspensa.
  4. Ajuste as margens para obter o alinhamento desejado.

Desvantagens:

  • Você terá que calcular as margens manualmente.
  • Isso só resultará em uma aproximação, a menos que você trabalhe arduamente para calcular as margens.
  • Você terá que refazer toda vez que fizer uma alteração que altere o alinhamento.

Alinhar o próprio quadro de texto em outro objeto

Baseado na solução sugerida no Wiki do Scribus :

  1. Envolva o quadro de texto com outro objeto (por exemplo, outro quadro de texto).
  2. Selecione o quadro interno e o quadro externo juntos nessa ordem (usando a tecla Shift).
  3. Abra a janela Alinhar e distribuir .
  4. Defina Relativo a como Último selecionado .
  5. Clique em Centralizar no eixo horizontal .

Desvantagens:

  • É impreciso devido ao texto não estar alinhado verticalmente no quadro de texto interno.
  • Você terá que refazer toda vez que fizer uma alteração que altere o alinhamento.

Use um script

  1. Use este script no Wiki do Scribus.

Eu pessoalmente não tentei essa opção, então 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:

  • Você terá que refazer toda vez que fizer uma alteração que altere o alinhamento.
por 31.03.2016 / 17:11

Tags