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:
- 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.
- Speichern Sie das Dokument als .py- Datei und nennen Sie es den gewünschten Namen.
- Wählen Sie in Scribus den Textrahmen aus .
- Gehen Sie im Hauptmenü oben auf Script (neben Extras) und wählen Sie dann Execute Scripts ... aus .
- Ein Run-Script- Fenster wird angezeigt, in dem Sie die erstellte PY-Datei auswählen.
- 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.