Scribus - Text innerhalb eines Textrahmens vertikal ausrichten

8870
iokevins

Wie kann ich Text innerhalb eines Scribus-Textrahmens vertikal ausrichten?

4
Zur Klarstellung: Ich habe eine Breite von 7,4590 x 0,9810 mit hohem Textrahmen und einer Zeile mit 55,0 pt-Text (Schriftart Century Schoolbook Regular). Standardmäßig platziert Scribus den Text in der oberen linken Ecke des Textrahmens. Der Text beansprucht ungefähr 0,5 cm des Textrahmens. Ich möchte wissen, wie (wenn möglich) ich den Text innerhalb des Textrahmens vertikal ausrichten kann, so dass er mit etwa 0,25 weißen Flächen oberhalb und unterhalb des Textes zentriert ist. Dies ist in Microsoft Publisher problemlos möglich. nur sehen, ob ich es in Scribus kann. iokevins vor 13 Jahren 0

4 Antworten auf die Frage

2
VOST

Mit Scribus 1.4.6 richten Sie das folgende Skriptzentrum (vertikal) aus, um den Inhalt eines Textrahmens von Alessandro Rimoldi vertikal innerhalb eines Textrahmens auszurichten:

  • Dies geschieht automatisch, auch wenn der Zeilenabstand und / oder der erste Zeilenversatz danach geändert wird
  • und mit mehreren Absätzen verschiedener Stile

Hier ist das Skript (bei Bedarf folgt eine kurze Anleitung zur Verwendung des Skripts in diesen Codezeilen):

#!/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); 

So verwenden Sie das Skript:

  1. Kopieren Sie das Skript und fügen Sie es in ein Textdokument ein (z. B. Blocknotiz oder Notizblock), ohne dass eine Formatierung auf das Dokument angewendet wird.
  2. Speichern Sie das Dokument als .py- Datei und nennen Sie es den gewünschten Namen.
  3. Wählen Sie in Scribus den Textrahmen aus .
  4. Gehen Sie im Hauptmenü oben auf Script (neben Extras) und wählen Sie dann Execute Scripts ... aus .
  5. Ein Run-Script- Fenster wird angezeigt, in dem Sie die erstellte PY-Datei auswählen.
  6. OK drücken .

Der Text innerhalb des ausgewählten Textrahmens wird dann vertikal zentriert.

Ich könnte mit diesem Skript mindestens zwei Nachteile haben :

  • Das Skript muss erneut ausgeführt werden, wenn entweder die Höhe oder Breite des Textrahmens geändert wurde
  • Der Text kann nicht zentriert werden, wenn er überläuft, da er eine Art oberen und unteren Rand erzeugt (daher möglicherweise nicht ideal für große Texte).

Dieses Skript beseitigt die Tatsache, dass das in Jon Bentleys Antwort erwähnte Skript für mich nicht funktionierte (zumindest in Scribus 1.4.6). Es wurde eine Fehlermeldung mit der folgenden Zeile angezeigt:

ValueError: Textabstände außerhalb der Grenzen, müssen positiv sein.

was sich vielleicht mehr auf das Dokument als auf das Skript selbst bezieht.

1
W_Whalley

Wählen Sie den Textrahmen aus und drücken Sie F2, oder klicken Sie mit der rechten Maustaste, und wählen Sie Eigenschaften aus. Wählen Sie dann den Abschnitt Form aus. Dort können Sie einen linken Randabstand vom Rand des Textrahmens festlegen, der den Text im Rahmen ausrichtet. Sie können auch Tabulatoren und Spalten festlegen, wenn dies Ihrem Ziel mehr entspricht.

Thanks W_Whalley - Durch Stoßen am linken Rand werden die horizontalen Offsets jedoch angepasst. : o) Das Aufstoßen des oberen Rands scheint zu funktionieren, aber in Scribus verschwindet der Text fast sofort aus der Ansicht, obwohl er sich nicht an der unteren Grenze des Textrahmens befindet. iokevins vor 13 Jahren 0
@ schultkl, danke für die Klarstellung. Unter Verwendung Ihrer Textrahmengröße und einer Schriftart mit einer Schriftgröße von 54 pt setze ich den Textversatz auf die Grundlinie der Zeichen auf -20% und zentrierte den Text im Rahmen ungefähr. Wenn Sie die Höhe des Textfelds auf 1 Zoll erhöhen, kann ich dies mit einer Schrift von 55 pt tun. Das Erhöhen der Höhe des Textrahmens ist kein Problem, da sich Textrahmen überlappen können. W_Whalley vor 13 Jahren 0
1
Jon Bentley

Überraschenderweise scheint es in Scribus ab Version 1.4.5 keine Option für ein derart einfaches und gemeinsames Feature zu geben. Hier sind drei Problemumgehungen (von denen keine leider ideale Lösungen sind), von denen eine auf der Antwort von @ W_Whalley basiert (die für die aktuelle Benutzeroberfläche von Scribus veraltet ist):

Legen Sie den Abstand manuell innerhalb des Textrahmens fest

Angepasst an @ W_Whalleys Antwort:

  1. Öffnen Sie Eigenschaften für den Textrahmen (wählen Sie und drücken Sie F2, oder klicken Sie mit der rechten Maustaste und wählen Sie Eigenschaften).
  2. Wählen Sie die Registerkarte Text .
  3. Öffnen Sie die Dropdown- Liste Spalten & Textabstände .
  4. Passen Sie die Ränder an, um die gewünschte Ausrichtung zu erreichen.

Nachteile:

  • Sie müssen die Ränder manuell berechnen.
  • Dies führt nur zu einer Annäherung, es sei denn, Sie arbeiten intensiv an der Berechnung der Margen.
  • Sie müssen es jedes Mal wiederholen, wenn Sie eine Änderung vornehmen, die die Ausrichtung ändert.

Richten Sie den Textrahmen selbst innerhalb eines anderen Objekts aus

Basierend auf der vorgeschlagenen Lösung im Scribus-Wiki :

  1. Umschließen Sie den Textrahmen mit einem anderen Objekt (z. B. einem anderen Textrahmen).
  2. Wählen Sie den inneren Rahmen und den äußeren Rahmen in dieser Reihenfolge zusammen (mit der Umschalttaste).
  3. Öffnen Sie das Fenster Ausrichten und Verteilen .
  4. Setze relativ zum zuletzt ausgewählten .
  5. Klicken Sie auf horizontale Achse zentrieren .

Nachteile:

  • Es ist ungenau, da der Text nicht innerhalb des inneren Textrahmens vertikal ausgerichtet ist.
  • Sie müssen es jedes Mal wiederholen, wenn Sie eine Änderung vornehmen, die die Ausrichtung ändert.

Verwenden Sie ein Skript

  1. Verwenden Sie dieses Skript aus dem Scribus-Wiki.

Ich habe diese Option nicht persönlich ausprobiert und kann daher nicht bestätigen, wie effektiv sie ist. Aus der Beschreibung scheint es, die meisten Nachteile der beiden anderen Methoden zu lösen, wobei nur eine übrig bleibt:

  • Sie müssen es jedes Mal wiederholen, wenn Sie eine Änderung vornehmen, die die Ausrichtung ändert.
1
Kyll

Verwendung von Scribus 1.5.4:

  1. Klicken Sie mit der rechten Maustaste auf ein Textfeld und wählen Sie aus Text Properties.
  2. Klicken Sie auf Column & Text Distances;
  3. Ändern Sie Vertical Alignmentin der ersten Zeile den gewünschten Wert (zum Beispiel Middle).

Screenshot of the Text Properties menu

Keine Skripte, manuelle Ränder oder schwarze Magie erforderlich.