Warum wird SVG vom TeX-Backend nicht unterstützt?

Warum wird SVG vom TeX-Backend nicht unterstützt?

Ich habe mich immer gewundert, warum SVG für viele Tools zur Dokumenterstellung ein solches Problem darstellt. MS Office kann das beispielsweise nicht, Libre Office kann meines Wissens nach nur sehr einfache SVGs verwenden und selbst in Latex können wir sie nicht richtig verwenden, sondern sie müssen entweder manuell konvertiert und dann als Bitmap-Grafiken verwendet werden oder automatisch von externen Tools wie InkScape. Obwohl ich InkScape mag, ist das nicht zufriedenstellend.

Insbesondere von Latex oder TeX hätte ich SVG-Unterstützung erwartet, da so viele Leute in der akademischen Welt es direkt oder indirekt und mit so viel Liebe zum Detail verwenden, dass es seltsam erscheint, einen solchen Umweg zu gehen, um SVG in eine Arbeit einzubinden. Es wäre so schön, ein PDF mit unbegrenztem Zoom und trotzdem scharfen, deutlichen Linien in einem Diagramm zu haben, anstatt einer pixeligen Linie, weil das SVG vor der Verwendung im PDF konvertiert wurde.

Wie kommt es also, dass wir im TeX-Backend immer noch keine SVG-Unterstützung haben? Wäre die Implementierung so schwer?

Ich weiß nicht viel über das TeX-Backend, im Grunde nur, dass es existiert und Ihre Sachen in eine PDF-Datei konvertiert, daher ist diese Frage vielleicht naiv. Andererseits gibt es SVG-Unterstützung in jedem Browser und fast jeder Bildbetrachter-Software, daher denke ich, dass es möglich sein sollte, das zu haben. Vielleicht liegt es daran, dass das PDF-Format selbst die Einbindung von SVGs nicht unterstützt, sodass es keinen Sinn ergibt, das TeX-Backend zu ändern, um SVGs zuzulassen, bis sich das PDF-Format geändert hat?

Antwort1

Klassischerweise befasst sich TeX nicht mitbeliebigGrafikformate, die DVI-Datei enthält nur einen Zeiger auf eine Grafikdatei, die vom DVI-Treiber eingebunden werden soll. TeX muss nur den zu lassenden Platz kennen, den es aus einem BoundingBox-Kommentar oder aus optionalen Argumenten in lesen kann \includegraphics.

Es ist (normalerweise) viel einfacher, ein Grafikformat einzubinden, wenn es das Format ist, das Sie für das Dokument generieren, da der DVI-Treiber es nicht „verstehen“ muss, sondern nur in den Stream kopieren muss. So dvipskönnen beispielsweise EPS-Dateien eingeschlossen werden, da sie einfach wörtlich in die Ausgabe kopiert werden, ebenso JPG-Dateien und bestimmte Bitmap-Formate, die mehr oder weniger trivial in PostScript-Bitmaps konvertiert werden können.

Bei pdftex ist die Situation ähnlich, außer dass es keine EPS-Dateien verarbeiten kann, PDF-Dateien jedoch schon, da die Verarbeitung von PDF beim Schreiben in PDF viel einfacher ist.

Um EPS in pdftex zu verarbeiten, benötigen Sie ein externes EPS-zu-PDF-Übersetzungsprogramm, das von TeX aus per Shell-Escape aufgerufen werden kann, konzeptionell (und tatsächlich) jedoch völlig unabhängig ist.

Die Situation mit SVG ist genau die gleiche. Wenn Sie SVG erstellen (z. B. dvisvgm dvi-Treiber), ist es einfacher, SVG einzubinden als EPS oder PDF. Wenn Sie dagegen PostScript oder PDF erstellen, benötigen Sie ein Konvertierungsprogramm, normalerweise incscape, in der Schleife. Auch dies kann hinter einem Shell-Escape verborgen sein und bei Bedarf von TeX aufgerufen werden. Sie sollten das SVG jedoch in ein skalierbares Format (PDF oder EPS) und nicht in eine Bitmap konvertieren, wenn das endgültige Ziel die Einbindung in ein PDF-Dokument ist.

Antwort2

Versetzen Sie sich in die Lage von jemandem, der einen TeX-Compiler schreibt.Es gibt zahlreiche Programme zum Konvertieren von Bildern in das eine oder andere Format (Inkscape, ImageMagick usw. convert). Warum also sollten Sie Ihre Zeit darauf verwenden, mehr als ein Format zu unterstützen, was im Grunde dieselbe Arbeit wäre, als würden Sie einen Konverter von Grund auf neu implementieren?

Insbesondere enthält das SVG-FormatAlles außer die Spüle: von bidirektionalem chinesischem Text auf einem gekrümmten Bézier-Pfad, der in einer benutzerdefinierten Schriftart mit einem Hintergrundfarbmuster gerendert wird, bis hin zu einem vollwertigenJavascript-Interpreter. Oh, wie grausam. Nein danke;Sie können Ihre Zeit besser damit verbringen, Fehler zu beheben und die Kernfunktionen zu verbessern.

(OK, die meisten Konverter unterstützen nicht den vollständigen Funktionsumfang von SVG, das stimmt, aber das Konzept steht.)

In der Praxis unterstützen Sie also nur ein Format (oder vielleicht ein Bitmap- und ein Vektorformat) und sagen Ihren Benutzern, sie sollen eines der vielen verfügbaren externen Tools verwenden, um Grafiken in dieses Format zu konvertieren. Glücklicherweise sind die meisten von ihnen versierte UNIX-Benutzer, sodass sie mit Makefiles oder Build-Skripten umgehen können.

Wenn Sie ein exzellenter Kerl sein wollen, können Sie die automatische Konvertierung von epsin unterstützen pdf, aber selbst das liegt nicht in Ihrer Verantwortung. Oder vielleicht könnten Sie mit dem Betreuer sprechen latexmkund ihn bitten, einzuführenBenutzerdefinierte Abhängigkeiten, sodass dies von ihrer Seite aus automatisiert werden kann.

Kurz zusammengefasst:Programmierer erfinden das Rad nicht gerne neu.

Antwort3

Die Erstellung von SVG-Grafiken wird unterstützt durchdvisvgmPaket in der TeXLive-Distribution. Es funktioniert durch die Konvertierung von DVI-Dateien (erstellt durch texund latexstatt pdftexund pdflatex).

verwandte Informationen