Mastodon

renephoenix.de

Das PS-PDF-Problem bei LaTeX

Ein wesentliches Problem, auf das ich durch die Arbeit mit LaTeX gestoßen bin, ist die gegensätzliche Herangehensweise von vektor- und pixelbasierten Grafiken. Mit dem Befehl pdflatex werden pixelbasierte Grafiken (PNG, JPG) sowie bereits erstellte PDFs ohne Probleme eingebunden. Das Ergebnis ist — wie der Name schon vermuten läßt — eine PDF-Datei. Allerdings sind bei dieser Methode vektorbasierte Grafiken (z.B. mit PS-Tricks) nicht möglich. Der Befehl latex ist nahezu das Gegenteil: Vektorgrafiken sind absolut kein Problem, dafür aber Pixelgrafiken. Das Ergebnis ist eine dvi-Datei, welche problemlos in PS umgewandelt werden kann. Die Umwandlung zu PDF kann Probleme bereiten, wenn der installierte Druckertreiber die Vektoren in Pixel umwandeln möchte.

Nun möchte ich aber auf beides nicht verzichten: ein Screenshot hier, eine Plot-Funktion da. Ein Logo hier, ein Baumdiagramm dort. Und schon steht man vor einem Problem.

Eine Lösung, die mir richtig gut gefällt, ist das Paket ps4pdf. Im entsprechenden Dokument werden die PS-Funktionen mit einen Befehl gekennzeichnet. Die Generierung erfolgt dabei in vier Schritten: zuerst wird mit dem LaTeX-Befehl die vektorbasierten Bereiche interpretiert und in eine DVI-Datei erzeugt (die einzelnen Bereiche sind auf verschiedene Seiten aufgeteilt). Diese werden mit dvips zu PostScript und mir ps2pdf in eine PDF-Datei umgewandelt. Im anschließenden pdflatex wird die restliche Datei interpretiert und anstelle der vektorbasierten Befehle wird nun eine PDF-Datei eingebunden.

Eine mögliche Batchverarbeitungsdatei könnte so aussehen:

latex %1
dvips -Ppdf -Go -o %1-pics.ps %1.dvi
ps2pdf %1-pics.ps
pdflatex %1

Wenn dieser Befehl mit der Kommandozeile aufgerufen wird, ist %1 der erste übergebene Parameter (Dateiname der LaTeX-Datei ohne Endung).

Der LaTeX-Code für eine Abbildung mit zwei Punkten und zwei Linien sieht so aus:

...
\usepackage{ps4pdf}
\PSforPDF{
  \usepackage{pstricks, pst-node, pst-plot}
}
...
\egin{document}
...
\PSforPDF{
  \begin{pspicture}(0,0)(3,3)
  \cnodeput(0.5,0.5){A}{A}
  \cnodeput(2.5,2.5){B}{B}

  \ncarc[arcangle=45]{->}{A}{B}

  \ncarc{->}{B}{A}
  \end{pspicture}
}
...
\end{document}

Insgesamt ist diese Variante sehr hilfreich:

  • Kombination von vektorbasierten und pixelbasierten Grafiken in einem Dokument
  • Die vektorbasierten Elemente sind in der fertigen PDF-Datei wieder vektorbasiert, sie kann man also beliebig zoomen.

Bisherige Kommentare (16)

Kommentar von Nadja

Diese Seite ist einfach hilfreich, und wenn man mal alleine nicht drauf kommt, dann gibts noch persönliche Nachhilfe :-). Vielen Dank nochmal!
Ich werde definitiv wieder auf diese Seite zurückgreifen, da bin ich mir sicher.
Dickes Lob!

Kommentar von Jan

Dieser Trick ist wirklich hilfreich! Eine Frage habe ich noch:

Bisher habe ich meine PS Grafiken mit \psset{unit=0.5cm} skaliert.
Diese Skalierung scheint bei Tex->Dvi->PS->PDF irgendwo verloren zu gehen. Gibt es noch eine andere Möglichkeit?

Vielen Dank

Kommentar von Thomas

Hallo zusammen,

das mit der Kombination von vektorbasierten und pixelbasierten Grafiken ist eine super sache, aber ich bekomme das leider nicht hin. Ich arbeite mit MikTex und TeXnicCenter. Mein Problem ist, dass ich eps-Grafiken und bestehende PDF-Dateien in meinem Projekt verwenden möchte.

Mein Ausgabeprofil hab ich so gestaltet, wie in der beispielhaften Batchdatei, aber leider stellt Latex die eps-Bilder nicht da, die pdf-Anhänge schon. Was muss ich tun?

Vielen Dank.

Mfg
Thomas

Kommentar von Thomas

Hallo zusammen,

wer suchet der findet. Hab das Problem gefunden. Es lag daran, dass ich meine eps-Grafiken mit \epsfig und nicht mit \includegraphics eingebunden habe. Jetzt geht alles.

Vielen Dank.

Mfg
Thomas

Kommentar von René

An der Stelle möchte ich noch auf einen anderen Fehler hinweisen, den jemand bei der Verwendung meiner Vorlage getan hat: sie hat im Kopfbereich explizit festgelegt, daß sie PDF haben möchte (pdftex). Dann klappt natürlich der latex-Befehl nicht, wodurch die eps-Grafiken nicht eingebunden werden.

Kommentar von Peter

@Thomas

Könntest du Dein TexnicCenter-Ausgabeprofil mal Exportieren, und mir mailen bzw zum download anbieten?
(Klar, die Pfade müsste ich anpassen, aber so hätte ich schon mal das Grundgerüst.

Danke im voraus
Peter

Kommentar von charly klein

Leider klappt das bei mir nicht. Möchte ein Koordinatensystem erstellen. Code:
%Umwandeln in PDF
usepackage{ps4pdf}
PSforPDF{
usepackage{pstricks,pst-node,pst-plot}
}

PSforPDF{
psset{yunit=1cm,xunit=1cm}
begin{pspicture}(0,11)(11,11)
psgrid[yunit=1,xunit=1,gridlabels=0](0,0)(0,0)(10,10)
psaxes[Dy=1,Dx=1]{->}(0,0)(0,0)(11,11)
%psaxes[Dy=1,Dx=1,ticks= all, ticklinestyle=dashed,ticksize=0cm 11cm]{->}(-0,-0)(0,0)(10,10)
%psplot{0}{10}{1 3 div neg x mul 6 add}
%psplot{0}{10}{1 2 div x mul 1 add}
%psplot{0}{150}{4 6 div x mul 10 add}
%psplot{0}{150}{1 4 div x mul 20 add}
end{pspicture}
}

Ergibt folgende Fehlermeldung:
Can’t show picture #1 because LaTeXpdf-pics.pdf not found. Create it from LaTeXpdf.dvi using
dvips and ps2pdf!

Haben Sie einen Tipp?

Danke!!

Kommentar von René

Bitte nicht mehr ps4pdf, sondern pst-pdf verwenden. Es könnte sein, daß die alte Klassen vom aktuellen miktex nicht mehr unterstützt wird.

Ansonsten sagt die Fehlermeldung aus, daß die PDF-Datei mit dem PS-Tricks-Grafiken fehlt. Zum Beispiel, weil bei einem der vorherigen Stufen ein Fehler passierte. Hast du eine dvi-Datei in Verzeichnis? Wenn ja: was steht drin? Wenn nein: gab es Fehler beim Durchlauf des latex-Befehls? Hast du eine ps-Datei im Verzeichnis (mit Endung -pics.ps) im Verzeichnis? Wenn ja: was steht drin? Ist der Name der PDF-Datei korrekt? Heißt das LaTeX-Datei diplom.tex und das Ergebnis diplom.pdf, muß eine diplom-pics.pdf existieren. Möglichweise hier ein Verschreiber?

Kommentar von QnC

Hi!

Ich habe bisher einfach alle Pixelgrafiken mit Inkscape in eps-Dateien gespeichert. Das funktioniert auch. Dann habe ich quasi nur Vektorgrafiken. Hat das Nachteile? Kann ja sein, dass dann jeder Pixel als Vektor-Rechteck abgespeichert wird, was sich in der Dateigröße bemerkbar machen sollte...

Kommentar von René

Welche Algorithmen Inkscape genau verwendet und wie gut diese, kann ich dir nicht sagen. In meinen Fällen der Umwandlung fand ich das Ergebnis meist in eps nicht so schön, als wenn ich es direkt mit pdflatex eingebunden habe bzw. das Bild vorher zu einer PDF gewandelt habe. Aber vielleicht gibt es ja auch Tricks dabei...

Natürlich kannst du nur den linken Pfad gehen.

Was die Dateigröße angeht, war mir eigentlich egal.

Kommentar von QnC

Ein von Inkscape als eps gespeichertes Pixelbild sieht genauso aus wie das Original, es wird nicht komprimiert oder vektorisiert (Außer vlt die einzelnen Pixel als Rechtecke oder so).

MfG

Kommentar verfassen

Freiwillige Angabe
Freiwillige Angabe
Der Text kann mit Textile formatiert werden, z.B. *fett* _kursiv_ "link":url. Wie das geht?
Wieviel ist 40 plus 2?

Bisherige Trackbacks (0)

Es wurde noch kein Trackback empfangen!