\includegraphics stolpert über Dateinamen mit mehr als einem Punkt. Datei wäre nicht zu laden, Division durch 0 usw.

Open in writeLaTeX
\documentclass{scrartcl}

\usepackage{xltxtra}
\usepackage{polyglossia}
\setdefaultlanguage[spelling=new]{german}

\usepackage{graphicx}

\begin{document}
% funktioniert nicht
\includegraphics{data/analy.sub01a.A.pdf}

% funktioniert
%\includegraphics{data/analysub01aA.pdf}
\end{document}

In der Doku sehe ich die Optionen "ext" und "type". Aber die Doku sagt nichts über gültige Werte aus.

gefragt 24 Mai '14, 14:38

MoonKid's gravatar image

MoonKid
50211024
Akzeptiert: 63%

bearbeitet 24 Mai '14, 18:15

Bes's gravatar image

Bes
1411516


Es gibt dafür das Paket grffile, das durch Änderung des Dateinamen-Parsers von LaTeX in den Dateinamen von Grafiken auch mehrere Punkte erlaubt. Bei Verwendung von pdfLaTeX, XeLaTeX oder LuaLaTeX erlaubt es außerdem auch Leerzeichen in Dateinamen von Grafiken. Auf das Beispiel der Frage angewendet funktioniert:

Open in writeLaTeX
\documentclass{scrartcl}

\usepackage{xltxtra}
\usepackage{polyglossia}
\setdefaultlanguage[spelling=new]{german}

\usepackage{graphicx}
\usepackage{grffile}

\begin{document}
% funktioniert auch
\includegraphics{data/analy.sub01a.A.pdf}

% funktioniert
%\includegraphics{data/analysub01aA.pdf}
\end{document}
Permanenter link

beantwortet 24 Mai '14, 15:55

Bes's gravatar image

Bes
1411516

bearbeitet 24 Mai '14, 16:02

graphicx nutzt den Punkt, um zwischen Dateinamen und Dateiendung unterscheiden zu können. Das ist deshalb relevant, weil \includegraphics auch die Eingabe ohne Endung erlaubt. Dann wird geschaut, ob eine Datei mit dem angegebenen Namen und einer erlaubten Endung existiert. (Welche Endungen in der Voreinstellung erlaubt sind, hängt vom verwendeten Treiber ab).

Open in writeLaTeX
\documentclass{scrartcl}
\usepackage{graphicx}
\usepackage{mwe}
\begin{document}

\includegraphics{example-image-a}

\includegraphics{example-image-a.jpg}

\end{document}

Wenn man allerdings mehrere Punkte im Argument von \includegraphics hat, dann wird alles ab dem ersten Punkt als Endung interpretiert. Das folgende Beispiel

Open in writeLaTeX
\documentclass{scrartcl}
\usepackage{graphicx}
\begin{document}
\includegraphics{example.image.a.jpg}
\end{document}

verursacht zum Beispiel den Fehler

Open in writeLaTeX
! LaTeX Error: Unknown graphics extension: .image.a.jpg.

Es hilft aber in solchen Fällen, um den Dateinamen vor der Endung geschweifte Klammern zu machen. Das folgende gibt nur deshalb einen Fehler, weil die Datei tatsächlich nicht existiert:

Open in writeLaTeX
\documentclass{scrartcl}
\usepackage{graphicx}
\begin{document}
\includegraphics{{example.image.a}.jpg}
\end{document}

Angewendet auf Dein Beispiel also

Open in writeLaTeX
\documentclass{scrartcl}

\usepackage{xltxtra}
\usepackage{polyglossia}
\setdefaultlanguage[spelling=new]{german}

\usepackage{graphicx}

\begin{document}

\includegraphics{{data/analy.sub01a.A}.pdf}

\end{document}
Permanenter link

beantwortet 24 Mai '14, 15:31

Clemens's gravatar image

Clemens
19.0k112960

bearbeitet 25 Mai '14, 06:47

Alles ab dem ersten Punkt ist eine Dateiendung? Das ist definitiv ein BUG. Nicht mal MS Windows arbeitet so. DateiENDUNG - sagt schon der Name, dass man den Dateinamen-String von rechts beginnend durchsucht.

Der Paketmaintainer hat auf CTAN und in der Doku allerdings keinen Kontakt für Bugreports angegeben.

(25 Mai '14, 01:11) MoonKid
1

Das ist kein Bug, sondern der Tatsache geschuldet, wie TeX begrenzte Argumente liest. Vielleicht ein ungünstig Feature. Die Lösung ist doch einfach genug, oder nicht?

(25 Mai '14, 03:11) Clemens
1

Stelle Dir z.B. vor, Du hast eine Datei namens test.jpg.jpg. Wenn Du jetzt \includegraphics{test.jpg} verwendest, wie soll graphicx wissen, dass Du nicht eine Datei mit dem Namen test.jpg meinst, sondern es noch eine Endung anfügen soll?

(25 Mai '14, 05:12) Clemens

Bevor jemand auf die Idee kommt, Clemens' Beispiel wäre an den Haaren herbeigezogen: Bei Dateien, die aus einem Format in ein anderes umgewandelt wurden, ist ein Name wie test.jpg.png nicht ungewöhnlich.

(25 Mai '14, 05:36) Bes

Ich verstehe euren Standpunkt und auch (teilweise) den technischen Hintergrund. ;)

Das graphics Dateiendungen ergänzt, ist ein Hinkefuß. Wozu brauch ich das? Führt offensichtlich zu Problemen.

"Dateiendung" ist ein per Quasi-Standard klarer Begriff und meint alles hinter dem letzten Punkt. Letzter Punkt ist der erste Punkt von rechts gezählt. Das ist überall so.

Als TeX-er muss man natürlich diverse Internas kennen. Aber ich möchte nicht darüber nachdenken, dass TeX (oder ein Packet) Dateinamen entgegen geltenden Standards behandelt.

(25 Mai '14, 05:55) MoonKid
2

Nun, graphics' Verhalten ist ja nicht erst seit gestern so und genügend Anwender verlassen sich darauf, dass es nach eventuellen Dateiendungen sucht. Selbst wenn Du David Carlisle einen Bug-Report/ein Feature-Request sendest, wird er Dir auch nur sagen, dass das Verhalten nicht mehr verändert werden wird. Du musst also einfach damit leben. Oder grffile laden... (fun fact, Zitat David: »code: it's a bug, my code: it's a feature«)

(25 Mai '14, 06:17) Clemens
1

Der Punkt ist auch nicht einfach, dass graphicx Dateiendungen ergänzt, sondern dass es sie optional ergänzt. Würde es sie immer ergänzen, wäre die Entscheidung, welche Datei zu verwenden ist, einfacher. Das kombiniert mit Clemens Hinweis zeigt, dass man das Verhalten nicht einfach ändern kann, weil sonst die Kompatibilität bricht. Was möglich wäre ist, das Verhalten optional zu ändern. Letztlich ist aber die Verwendung von grffile schlicht das Nachrüsten dieser Option. Verwendet man es, erklärt man sich gleichzeitig einverstanden, dass sich eben die Behandlung einiger Dateien ändern wird.

(25 Mai '14, 12:55) Bes
Ergebnis 5 von 7 Alle anzeigen
Deine Antwort auf die Frage (nicht auf andere Antworten)
Knebel-Vorschau

Folge dieser Frage

Per E-Mail:

Wenn Du Dich anmeldest, kannst Du Updates hier abonnieren

Per RSS:

Antworten

Antworten und Kommentare

Aktuelle Buch-Infos

LaTeX Cookbook

LaTeX Beginners Guide

Limitierter Rabatt ebook
50% Coupon code tDRet6Y

Markdown-Grundlagen

  • *kursiv* oder _kursiv_
  • **Fett** oder __Fett__
  • Link:[Text](http://url.com/ "Titel")
  • Bild?![alt Text](/path/img.jpg "Titel")
  • nummerierte Liste: 1. Foo 2. Bar
  • zum Hinzufügen ein Zeilenumbruchs füge einfach zwei Leerzeichen an die Stelle ein, an der die neue Zeile sein soll.
  • grundlegende HTML-Tags werden ebenfalls unterstützt

Zugeordnete Themen:

×24
×16
×7

Frage gestellt: 24 Mai '14, 14:38

Frage wurde angeschaut: 3,366 Mal

Zuletzt aktualisiert: 25 Mai '14, 12:55