Seite 1 von 1

Formatierten Text laden - mit Markup

Verfasst: Di 29. Sep 2015, 02:28
von Manutius
Ich möchte hier eine sehr elegante und effiziente Möglichkeit des Imports von formatiertem Text zur Diskussion stellen, die wahrscheinlich die meisten von euch nicht kennen - die aber bei großen Projekten (einige von euch beschäftigen sich ja durchaus mit der Produktion von Büchern) sehr hilfreich ist. Zugleich mache ich damit auch darauf aufmerksam, wie Scribus von den Entwicklern verbessert werden müsste.

In diesem Forum ist verschiedentlich danach gefragt worden, wie man beim Import von Texten aus Office-Programmen auch Formatierungen übernehmen kann. Auf diese Frage gibt es tatsächlich keine befriedigende Antwort: Man sollte das nicht tun. Textverarbeitung ist Textverarbeitung, und Layoutprogramm ist Layoutprogramm. Eine Übernahme von Formatierungen vom einen ins andere ist nicht sauber zu machen.

In einem anderen Thread dieses Forums, der sich auf eine Frage dieser Art bezog, schrieb Arran:
Wenn du den Text hast solltest Du ihn grundsätzlich OHNE Formatierungen kopieren und einfügen. Ich persönlich erwarte eigentlich nur *.txt-Dateien, die können per se keine Formatierungen haben. Notwendigerweise kopiere ich sie aus LibreOffice zuerst in einen einfachen Editor, dabei sind aller Formatierungen verschwunden und anschliessend dann in Scribus.
Arran empfiehlt also, grundsätzlich immer nur reine, unformatierte Textdateien zu laden und die Formatierungen in Scribus vorzunehmen.

Lieber Arran, in diesem Punkt muss ich dir widersprechen - und zwar gestützt auf die Arbeitsweisen professioneller DTP-Praxis. In Zeitschriftenverlagen, die unter Zeitdruck z.B. Wochenmagazine publizieren, wäre es viel zu ineffizient und fehlerträchtig, wenn die Layouter unformatierten Text laden und dann mit viel Klicki-Klicki formatieren müssten.

Professionelle Layoutprogramme bieten seit Jahrzehnten Funktionen, die es ermöglichen, Text so zu laden, dass er direkt komplett formatiert in den Textrahmen einläuft. Natürlich geht das in der Tat nicht mit formatierten Dokumenten aus Office-Programmen, sondern es werden sogenannte Markup-Sprachen verwendet, die den Kommandosprachen früherer Fotosatzsysteme ähneln (und teilweise auch mit HTML vergleichbar sind).

Aber gehen wir zurück zum Bleisatz: Da bekam der Setzer ein Manuskript, das zuvor von einem Arbeitsvorbereiter mit Auszeichnungen versehen worden war. Das heißt: Der Arbeitsvorbereiter hat an den Rand geschrieben, was z.B. eine Kapitelüberschrift oder eine Abschnittsüberschrift ist oder was kursiv zu setzen ist usw. In einer Satzanweisung war definiert, wie eine Kapitelüberschrift oder eine Abschnittsüberschrift zu setzen ist (Schriftart, Zeilenabstand usw.). Diese Anweisungen führte der Setzer dann aus.

Im DTP-Satz ist das Manuskript üblicherweise eine vom Verlag (Redaktion/Lektorat) erstellte Textdatei. Dabei bieten gute Programme die Möglichkeit, die gewünschten Textauszeichnungen als "Markup" in diese Textdatei einzufügen, das vom Programm gelesen wird.

Ich erläutere das am Beispiel QuarkXPress, das eine gut handhabbare Markup-Sprache namens "XPress-Marken" enthält. Eine Textdatei kann dann so aussehen:

Code: Alles auswählen

@head:Dies ist die Überschrift
@body:Nun folgt der Grundtext. In ihm kommen gelegentlich <@emph>kursive<@$> Hervorhebungen vor. – Befehlsmarken mit Dollarzeichen schalten auf die Grundeinstellung zurück.
Wenn ein neuer Absatz beginnt und keine Marke vorangestellt ist, wird automatisch das vorige Absatzformat angewendet.
Das wird als reine Textdatei mit der Namensendung *.xtg abgespeichert. In der Layoutdatei müssen Stilvorlagen angelegt sein: in diesem Beispiel Absatzstil "head" für die Überschrift, Absatzstil "body" für den Grundtext, Zeichenstil "emph" für die zur Grundschrift passende Kursivschrift. Wenn man dann diese *.xtg-Datei in einen Textrahmen lädt, dann hat man im Handumdrehen einen fertig formatierten Text auf der Seite und muss nicht mehr darin herumpfriemeln.

Geht das auch in Scribus? Ja, aber leider nur eingeschränkt - leider nur mit Absatzstilen, nicht mit Zeichenstilen. Das ist eine der merkwürdigen Inkonsequenzen und Halbherzigkeiten, die mir in Scribus immer wieder auffallen.

Scribus bietet seit langem die Möglichkeit, selbst Importfilter zum Laden von Text mit Absatzformaten zu definieren. Das ist hier beschrieben:
http://wiki.scribus.net/canvas/Text_imp ... ormatieren

Dieses Verfahren ist leider etwas umständlich. Und es funktioniert, wie gesagt, leider nur mit Absatzstilen, nicht mit Zeichenstilen: Es steht nur die Option "Absatzstil" zur Verfügung. Dass ein Auswahlmenü vorhanden ist, lässt vermuten, dass wohl auch die Auswahl "Zeichenstil" geplant war, aber nie implementiert worden ist. Das finde ich sehr ärgerlich.

Die Entwicklungsversion 1.5 bietet - leider auch nur rudimentär - auch den Import des klassischen XPress-Markenformats von Quark an. Damit wäre es möglich, den oben dargestellten Beispieltext formatiert zu laden, ohne erst selbst Filterregeln definieren zu müssen. Leider werden auch hier nur die Absatzstile unterstützt, keine Zeichenstile. Ich hoffe, dass sich das noch ändert.

Was ist der Vorteil eines solchen Verfahrens? Es liegt auf der Hand: Wenn man ein umfangreiches Werk erstellt, also ein Buch oder eine Zeitschrift, dann kann man sich durch effiziente Arbeitsvorbereitung viel Geklicke und Gepfriemel im Layout ersparen. Bei der Vorbereitung des Texts konzentriert man sich auf diesen: Was sind seine Strukturelemente? Bei der Erstellung/Redaktion des Texts in einem Textverarbeitungsprogramm kann man die Befehle für die gewünschten Formatierungen auf Shortcuts legen. Sie werden als Klartext eingefügt - so wie man in einem HTML-Dokument die Auszeichnungen als Tags im Klartext erfasst -, das Ganze wird als reiner Text gespeichert. Im Layout werden die erforderlichen Stilvorlagen angelegt, und dann flutscht der Text fertig formatiert in den Textrahmen.

Wie gesagt: LEIDER funktioniert das in Scribus - anders als in QuarkXPress oder InDesign - nur mit Absatzstilen. Dummerweise muss man anschließend beispielsweise kursiv hervorzuhebende Stellen im Layout suchen und manuell formatieren. Das ist leider so ein Beispiel, wo in Scribus eine an sich sinnvolle Funktion durch inkonsequente Implementierung entwertet wird. Das sollte man nicht beschönigen, sondern nach Möglichkeiten suchen, die Entwickler darauf hinzuweisen. Ich meine, man muss auch über die Grenzen und Mängel von Scribus reden können.

Wenigstens bietet Scribus auf dem gegenwärtigen Entwicklungsstand aber schon die Möglichkeit, einen Text zu laden, der von vornherein wesentlich aufgeräumter aussieht, als wenn man reinen Text importiert und dann alles "zu Fuß" formatieren muss.

Re: Formatierten Text laden - mit Markup

Verfasst: Mi 30. Sep 2015, 11:43
von a.l.e
hi manutius

sehr interessanter beitrag!

insofern ich weiss, damals als die text-importfilter für scribus programmiert wurden, gab's noch keine zeichenstilen.
und seit der einführung der zeicheinstilen, hat es anscheinend niemand mehr gekümmert.

es gibt auch zwei alternative, die für viele ausreichen: aus den formate .odt und .html können ebenfalls formatierte texte importiert. es ist aber zum teil schwierig zu definieren, was und wie importiert werden soll.

ich habe seit jahre nicht mehr mit grössere menge von fremde formatierte texte zu tun gehabt, aber damals benutzte ich ebenfalls das tagged-text für's importieren: das gibt mehr kontrolle über das was passiert...

wie soll sich scribus weiter entwickeln?
ich möchte es vermeiden, eine eigene formatierung (wie xtg für quark) zu enwerfen: es gibt schon genug viele daite-formate!
es wäre auch hilfreich, zuerst darüber zu disktuieren, welche formatierungen überhaupt übernehmen werden sollen und wie sie definiert werden können.

also: ich fange an...

use case:

die redaktoren liefern doc/odt dateien, die für's layout vorbereitet werden, damit sie sauber in scribus importiert werden können (und in einen bestehendes dokument gut passen!).

formatierung die übertragen werden soll:

- absatzstil
- zeichenstil
- tief- und hochgestellt
- kursiv und fett (kann evt. über zeichenstile gesteuert werden)
- evt. unterstreichen
- evt. grossbuchstaben und kapitälchen (sollte lieber über zeichenstile gesteuert werden)

dazu, sobald scribus die formatierung unterstützt

- fussnoten (zahlen und inhalt!)
- web links

was noch? was nicht?

für das format sehe ich drei möglichkeiten:

- eine eigen formatierungsprache
- html mit einschrenkungen
- odt mit einschrenkungen (odt ist da format von libreoffice und openoffice)

beide html und odt sind bereits in scribus vorhanden und man müsste nicht von null anfangen.

ich bin gespannt auf das feedback!
a.l.e

Re: Formatierten Text laden - mit Markup

Verfasst: Mi 30. Sep 2015, 23:15
von Julius
Hallo Manutius, Hallo a.le.,

@Manutius: Danke für deine Erläuterungen, wie Quark XPress das macht, wusste ich noch gar nicht...
Dass das mit dem Textimport in ein DTP-Programm einfacher als in Scribus gehen muss, habe ich mir auch schon überlegt und einen ziemlich frickeligen Lösungsansatz entwickelt, der so ähnlich immer noch im Einsatz ist, mittlerweile allerdings auch rudimentär Stile zuweisen kann. Vorteil meines Ansatzes ist (u.a.), dass man damit auch Bild-URLs ändern kann und dass man damit auch HTML oder LaTeX ausgeben könnte.
Wenn es in Scribus mal etwas Besseres gibt, werde ich meine Bastel-Methode in die Tonne kloppen :)

@a.l.e.: Seit wann kann Scribus denn Zeichenstile? Ich nutze es erst seit 1.4.1... :oops: Für mich waren die immer da :lol:

Ich persönlich würde eine (valide) Untermenge von HTML bevorzugen, da es dafür reichlich Editoren (z.B. TinyMCE) gibt, die man auch gut in Web-Applikationen integrieren kann ohne dauernd das Rad neu zu erfinden. Damit ließe sich auch ein Workflow realisieren, bei dem die Autoren ihre Artikel im Webbrowser schreiben und diese dann sowohl fürs Web als auch für Print ohne großes Gebastel aufbereiten zu können. Der HTML-Code ließe sich sowohl problemlos validieren und säubern (z.B. mit HTMLPurifier), als auch beim Nutzer problemlos anzeigen (auf allem läuft heute ein Webbrowser). Bei Bedarf kann man mit einem Regulären Ausdruck aus dem HTML auch Nur-Text (plain text) generieren.

Wenn ich mich mit den Interna von Scribus auskennen würde und einen Import schreiben würde, würde ich folgende Elemente / Attribute unterstützen: p, br, strong, em, a, sub, sup und das weiche Trennzeichen &shy; eventuell span (wenn das class-Attribut ausgelesen würde und Scribus darüber Stile zuweisen könnte (dann bräuchte auch nicht so ein Gerümpel wie <center>), wäre das ebenfalls genial; für die anderen Elemente könnte man in den Einstellungen ja einfach je einen Stil zuweisbar machen).

Beim Import von ODT-Dokumenten und DOC(X)-Dokumenten sehe ich Probleme darin, dass diese Formate zwar (bis auf DOC) auf XML basieren und damit zwar semantisch sein könnten, es aber meist nicht sind: Die Autoren erzeugen einfach einen fett gedruckten Text der Schriftgröße 30, aber weisen ihm nicht die Eigenschaft „Dies ist eine Überschrift“ zu. Außerdem lassen sich odt und doc(x) nur sehr schwer in einer Web-Applikation bearbeiten und in einen Workflow integrieren, der sauberes HTML ausgeben soll.

Eine eigene Formatsprache würde ich nicht verwenden, alles, was benötigt wird, ist auch mit HTML abbildbar. Da erfindet man nur das Rad neu.
Es wäre aber trotzdem nett, wenn der bisherige, von Manutius beschriebene, Import auch Zeichenstile zuweisen könnte, um InDesign-kompatibel zu sein oder diese Funktion möglichst schnell in einer stabilen Version von Scribus zu haben.

Was mich auch reizen würde, wäre eine einfache Anbindung an ein CMS, in einem speziellen Feld in den Eigenschaften eines Textfeldes oder eines Bildes eine Art Platzhalter zuweisen zu können. Und dann an einer zentralen Stelle eine URL einstellen zu können, von der dann die Inhalte geholt werden; ich habe mal eine GIF-Animation erstellt, die den Vorgang demonstriert:
GIF-Datei (211kB; Übergänge alle 5 Sekunden) (Warum kann ich hier direkt keine GIF-Dateien reinstellen :( ? Kann man da irgendwie Schad-Code reinpacken oder hat das (k)einen anderen Grund?)

Die Anwendungsfälle, die mir gerade einfallen:
  • Die Redaktion hat noch ein paar Fehler in mehreren (!) Artikeln entdeckt und möchte die korrigieren :x , der Layouter darf alles per Hand machen oder klickt einfach auf den „Mach alles neu“-Button
  • Mehrere Sprachvarianten: Trennung von Layout und den eigentlichen Inhalt
  • Es gibt eine Print-, eine eBook- und eine Webversion – ohne so ein Hilfsmittel wäre das ein riesen Aufwand, die Formatierungen jeweils nachzupflegen
Diese Methode hätte den Vorteil gegenüber einer direkten Datenbankanbindung, sicher (soweit ich das sehen kann), universell (diese Anbindung ließe sich auch mit anderen Programmen als Scribus benutzen; es ist egal, welche Technologie im Hintergrund läuft, die Server-Seite ist einfach in vielen Sprachen zu implementieren, wäre – in PHP geschrieben – einfach zu installieren wie WordPress und Konsorten, der Webserver kann auch im Intranet oder lokal laufen, keine Plattformbindung (PHP/Python/Perl und einen Webserver gibt es für jedes System), kein Freischalten von Ports in irgendwelchen Firewalls) zu sein.
Ich würde gleich loslegen, wenn ich doch nur Zeit und C-Kenntnisse hätte :roll:

Gruß
Julius

Re: Formatierten Text laden - mit Markup

Verfasst: Do 1. Okt 2015, 00:26
von Manutius
Hallo a.l.e, ich freue mich sehr über das Zustandekommen einer Diskussion.
es gibt auch zwei alternative, die für viele ausreichen: aus den formate .odt und .html können ebenfalls formatierte texte importiert. es ist aber zum teil schwierig zu definieren, was und wie importiert werden soll.
Das ist ja gerade das Problem: Ein "guter" Importfilter, der alle Formatierungen aus Office-Dokumenten genau übernimmt, führt dazu, dass auch alle möglichen unbrauchbaren Formatierungen übernommen werden, die man gar nicht haben will und dann manuell entfernen muss. Solange man nur eigene Dokumente verwendet, könnte man sich bei der Vorbereitung darauf einstellen, aber spätestens bei Dokumenten von fremder Hand wird es schwierig. Und bei Wysywyg-Formatierungen in Office-Dokumenten sieht man nicht, was für Befehle intern im Dokument stecken. (Ich habe tatsächlich vor etlichen Jahren mal ein Word-Dokument bekommen, das seltsamerweise eine Menge kursiv formatierte Leerzeichen enthielt. Ich habe keine Ahnung, wie der Autor das geschafft hat.) Man steht also vor dem Problem, entweder formatierte Dokumente zu übernehmen, die zu viele Formatierungen enthalten, die man dann entfernen muss, oder reinen Text ohne Formatierungen, denn man dann komplett neu formatieren muss. Beides macht Mühe.

Aus diesem Grund wird in professionellen Workflows eher mit Klartext-Markup gearbeitet, wo man redaktionell festlegt, welche Formatinformationen dem Text mitgegeben werden sollen. Zur Arbeitsvorbereitung in Office-Programmen besteht ja auch die Möglichkeit, Formatierungen zu suchen und durch den Suchtext mit Markup zu ersetzen. (Dazu muss man sich ein bisschen mit regulären Ausdrücken auskennen. Beispiel für OpenOffice/LibreOffice hier: https://forum.openoffice.org/en/forum/v ... hp?t=39679 - da wird gezeigt, wie man kursive Formatierungen durch ein LaTeX-Kommando ersetzt, das lässt sich natürlich auch beliebig mit anderen Kommandos anwenden.)

Deine Überlegungen zielen auf einen Office-Importfilter, bei dem man festlegen kann, welche inhaltlich wichtigen Formatierungen man übernehmen möchte (Kursivierungen, Hoch- und Tiefstellungen usw.). Darüber habe ich mir auch schon mal Gedanken gemacht. Ich bin momentan nicht im Bilde darüber, ob es so etwas als Plugin für InDesign oder als XTension für QuarkXPress gibt. Für Scribus wird wahrscheinlich niemand einen solchen Filter entwickeln.

Ich würde also grundsätzlich eher auf Markup-Formate setzen. Dabei ist es an sich eine hervorragende Idee in Scribus, dass man selbst Importfilter definieren kann, durch die beliebig festgelegte Steuercodes in Stilvorlagen umgesetzt werden. Das macht ein bisschen Arbeit, die sich aber bei großen Textmengen auszahlt. Andererseits ist das XPress-Markenformat von Quark eine bewährte Alternative, die meiner Ansicht nach gut handhabbar ist. Nur besteht im Moment das Defizit darin, dass beide Verfahren in Scribus nicht für Zeichenstile funktionieren.

Ich weiß natürlich, dass solche Markup-Formate auf manche Anwender abschreckend wirken, weil sie auf den ersten Blick "abstrakt" erscheinen und nach "Programmierung" aussehen. Andererseits: Jeder, der ein bisschen HTML kennt, versteht das Prinzip. Und auch bei der Eingabe von Text in Internetforen wie diesem sieht man, wie Formatierungen durch Kommandos dargestellt werden.

So, jetzt habe ich gerade diese Antwort geschrieben und sehe, dass in diesem Moment eine weitere Antwort von Julius gekommen ist - auch dir vielen Dank! Dein Ansatz zielt also darauf, das *.sla-Dokument (das faktisch ja eine XML-Datei ist) zu manipulieren. So eine Idee hatte ich auch schon mal, habe sie dann aber verworfen, weil es für meine konkreten Aufgaben (das sind eher sporadische Kleinarbeiten) zu aufwändig war. In diesem Fall müssten dann also im Scribus-Dokument z.B. für kursive Auszeichnungen irgendwelche Marken stehen, die dann durch den internen Scribus-Code ersetzt werden müssten. Das wäre natürlich machbar, aber der Nachteil wäre (wenn ich dein Verfahren richtig verstehe), dass zuerst ein Scribus-Dokument erzeugt werden müsste, das dann per Skript manipuliert und anschließend neu geladen wird, wobei es mit hoher Wahrscheinlichkeit Umbruchänderungen gibt. Das wäre leider immer noch ein Arbeitsgang mehr als bei einem direkten Import von Marken für Zeichenstile.

Ganz allgemein möchte ich sagen: Ich persönlich benutze seit ein paar Jahren Scribus, weil ich ein Layoutprogramm nur noch für wenige Aufgaben benötige und sich die Anschaffung der teuren kommerziellen Programme für mich nicht mehr lohnt. Und ich bin grundsätzlich ein Freund freier Software. Natürlich ist es so, dass vieles in Scribus mühsamer geht. Nun kann man selbstverständlich von Scribus nicht erwarten, dass es alles kann, was InDesign kann - das wäre völlig unrealistisch, weil eine kleine Gruppe ehrenamtlicher Entwickler einfach nicht das leisten kann, was Konzerne wie Adobe leisten (vor allem leisten die sich dafür aber auch eine unverschämte Geschäftspolitik). Wünschenswert fände ich es allerdings, dass unter den Anwendern eine konstruktive, sachliche und unaufgeregte Diskussion darüber zustande käme, wie man in die Grundfunktionalität von Scribus etwas mehr Konsistenz und Praxisnähe bringen könnte.

Re: Formatierten Text laden - mit Markup

Verfasst: Fr 2. Okt 2015, 13:01
von Julius
Hallo Manutius,

das Setzen der Platzhalter sowie das ganze Verfahren sind aufwändig, das hast du Recht.
Für den derzeitigen Anwendungszweck ist das Verfahren aber momentan das Zeitsparendste: Die Aufgabe des Skripts besteht eigentlich gar nicht darin, komplette Zeitrahmen mit Inhalt zu füllen, sondern nur in etwa 3-4 verschiedenen Scribus-Dokumenten (Produkt-Datenblätter) bestimmte Platzhalter mit etwa 30 Varianten von Inhalten zu füllen, ein Dokument könnte also beispielsweise so aussehen:

Varianten-Name: #variante#
Freigabe-Datum: #freigabe#
Artikel-Nummer: #art-nr#

Das Skript setzt auch in seiner allgemeinen Variante keine Stile, da das Eingefügte ja immer den Stil des Platzhalter hat. Mit den Umbrüchen hast du natürlich Recht, aber in diesem speziellen Anwendungsfall habe die eingesetzten Texte meist eine ähnliche Länge, außerdem ist die Vorlage platzmäßig nicht „auf Kante genäht“.
Generell schaut man ja auch noch mal kurz das Ergebnis des Exports durch und korrigiert ggf. – was zwar auch etwas Zeit braucht aber weniger als wenn man die ~50 Texte und Bildpfade von Hand einfügen muss.
Die Daten lagern zentral in einer Datenbank und lassen sich so auch noch für andere Zwecke benutzen. Layout und Inhalt sind also – je nach Umsetzung – mehr oder weniger stark voneinander getrennnt, sodass sich dieses Dokument auch in anderen Sprachen statt deutsch erzeugen ließe.

Eine erweiterte Version des Exporters kann auch in einigen Fällen Stile setzen, steht der Platzhalter allerdings für einen Bildpfad statt Fließtext, knallt es, weil der Exporter das nicht erkennen kann. Außerdem kann die erweiterte Version anhand von übergebenen Längenangaben berechnen, ob der eingesetzte Text in das Feld passt und wirft dann ggf. eine Warnung aus.

Wenn man dann noch einen PDF-Batch-Export per Commandline dahinter setzt, wie Scribus 1.5.1 ihn unterstützt (siehe Scribus Community Newsletter für Oktober), wird das Ganze noch effizienter!

Für ein Magazin o.ä., das ja vom Layout her nicht so starr wie ein Datenblatt ist, würde ich das natürlich nicht einsetzen wollen. Dafür wünsche ich mir ja so ein System in der Art, wie ich es weiter oben in der GIF-Datei geschildert habe. Ich glaube, ich muss mich mal dringend mit Python beschäftigen und dafür ein Plugin programmieren...

Gruß
Julius