PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : on-the-fly Einbettung von .jpg, mit latex kompiliert



the-hype
03-05-2011, 12:13
Hallo liebe Forenmitglieder,

ich bin schon mehrere Jahre mit Latex und auch mit pdflatex unterwegs und bin heute auf ein Problem gestoßen, bei dem selbst langes Suchen und Recherche keine für mich brauchbare Lösung zutagegefördert hat.

Ich schreibe an einem Dokument und kompiliere mit latex -> dvi.
Ich möchte aber auch .jpg Bilder einbinden, ohne andauern diese erst konvertieren zu müssen da diese sich mit der Zeit ändern und ich keine Lust habe, alle Dateien wieder neu zu konvertieren.
Soweit das Problem.
Beim stöbern bin ich auf die vermeintliche Lösung mit
\DeclareGraphicsRule{.jpg}{eps}{}{`convert #1 'eps:-'}
gestoßen.
Das scheint aber leider nicht zu funktionieren, da er immer nach einem Bild mit dem Namen `convert... sucht..
Ich habe auch gelesen, dass man dazu mit der Option --shell-escape kompilieren soll, was aber ebenfalls nicht funktioniert hat.

Kann mir jemand bei diesem Problem weiterhelfen?
Ich danke!
Grüße the-hype

Schweinebacke
03-05-2011, 17:15
Ohne vollständiges Minimalbeispiel (http://www.mrunix.de/forums/showthread.php?t=66921) und ohne Angabe, mit welcher TeX-Distribution unter welchen System Du arbeitest, wäre jeder Hilfeversuch ein Ratespiel. Das Programm convert (von ImageMagick) hast Du aber hoffentlich bereits installiert? JPEG konvertiert man übrigens besser mit jpeg2ps (gibt es für Windows, Unix/Linux und AFAIK auch MacOSX) in EPS, weil dabei nur ein Wrapper um die JPEG-Daten gebaut wird und so die Dateien klein bleiben. Alternativ kann man imgtops verwenden. Das benötigt lediglich Python und die Python Image Library.

voss
03-05-2011, 17:54
Ich schreibe an einem Dokument und kompiliere mit latex -> dvi.
Ich möchte aber auch .jpg Bilder einbinden, ohne andauern diese erst konvertieren zu müssen da diese sich mit der Zeit ändern und ich keine Lust habe, alle Dateien wieder neu zu konvertieren.
Soweit das Problem.
Beim stöbern bin ich auf die vermeintliche Lösung mit
\DeclareGraphicsRule{.jpg}{eps}{}{`convert #1 'eps:-'}
gestoßen.
Das scheint aber leider nicht zu funktionieren, da er immer nach einem Bild mit dem Namen `convert... sucht..
Ich habe auch gelesen, dass man dazu mit der Option --shell-escape kompilieren soll, was aber ebenfalls nicht funktioniert hat.



\DeclareGraphicsRule{.jpg}{eps}{}{`convert #1 'eps:-'}
Da fehlt ein backtick hinten. Zufall?

HErbert

Schweinebacke
03-05-2011, 18:18
\DeclareGraphicsRule{.jpg}{eps}{}{`convert #1 'eps:-'}
Da fehlt ein backtick hinten.
Eigentlich nicht. Das ganze wird ja zu einem dvips-special der Art:
\special{psfile="`convert foo.jpg 'eps:-'"} und dabei ist lauf Abschnitt 5.1.5 der dvips-Anleitung nur ein left quote vorn aber kein left quote hinten anzugeben.

the-hype
04-05-2011, 13:18
Entschuldigung, dass ich kein MB eingefügt habe, ich war mir sicher, dass die Frage auch ohne zu beantworten ist.

Distribution Tex Live 2009/Debian,
klar hab ich ImageMagick installiert. Ich konvertiere damit von Hand.

\documentclass{scrartcl}
\usepackage{graphicx}
\DeclareGraphicsRule{.jpg}{eps}{}{`convert #1 'eps:-'}
\begin{document}
\inculdegraphics{NameDesJPGBildes}
\end{document}

Schweinebacke
04-05-2011, 14:37
Das enthält zwei Fehler: \includegraphics ist falsch geschrieben und es kein BoundingBox angegeben. Ich nehme an, dass Du nicht verstanden hast, dass erst dvips die Konvertierung vornimmt. Deshalb ist die Angabe einer BoundingBox zwingend! Beispielweise würde funktionieren:

% This is foo.tex
\documentclass{scrartcl}
\usepackage{graphicx}
\DeclareGraphicsRule{.jpg}{eps}{}{`convert #1 'eps:-'}
\begin{document}
\includegraphics[bb=0 0 123 456]{gurke.jpg}
\end{document}Danach dann »latex foo.tex; dvips -R0 -o foo.ps foo.dvi«. Die so erzeugte foo.ps enthält dann das Bild.

Einfacher ist aber sicher, einmal »for f in *.jpg; do jpeg2ps -o ${f%.jpg}.eps $f;done«. Dann sind alle jpg-Dateien in eps-Dateien umgewandelt und können einfach per \includegraphics geladen werden, ohne dass man eine BoundingBox angeben muss.

u_fischer
04-05-2011, 14:53
LaTeX braucht Informationen über die Größe des Bildes. Also musst du entweder (z.B. mit ebb.exe) eine externe .bb-Datei erstellen, oder die Boundingbox-Informationen bei \includegraphics angeben.

(Im Prinzip kann mit dem Paket bmpsize die Bildgröße automatisch ermittelt werden. In der Praxis beißt sich das mit dvips und dem convert-Befehl. bmpsize braucht eine \DeclareGraphicsRule vom Typ bmp, dvips eine vom Typ eps. http://groups.google.com/group/comp.text.tex/browse_thread/thread/ecd22ac3839116b6/223fe52b865bd482)

Wenn du die Bilder ohne Endung angeben willst, solltest du auch die Extensionliste noch anpassen.

Außerdem muss dvips mit der Option -R0 aufgerufen werden.


\documentclass{scrartcl}
\usepackage{graphicx}
\DeclareGraphicsExtensions{.jpg,.eps,.ps,.eps.gz,. ps.gz,.eps.Z}
\DeclareGraphicsRule{.jpg}{eps}{.bb}{`bmeps -t jpg #1}
\begin{document}
\includegraphics[bb=0 0 10 10]{testconvjpg}%geht ohne .bb-Datei

\includegraphics[scale=0.3]{testconvjpg}%.bb muss existieren.
\end{document}