PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Problem mit \IfFileExists



hitchhiker_jiri
21-04-2005, 12:17
Hi @ all!

Ich hab in diesem Forum im Beitrag (http://www.mrunix.de/forums/showthread.php?p=174517#post174517) ein kleines Beispiel für die Benutzung von \IfFileExists gefunden.

Nun wollte ich dieses etwas umgebaut in einem von mir definierten Makro verwenden. Das ganze sieht bei mir dann so aus:

\edef\meinbild{\mypath #3}%
\IfFileExists{\meinbild}
{\immediate\write17{Es liegt im normalen mypath}}
{ \edef\meinbild{\temppath #3}%
\IfFileExists{\meinbild}
{\immediate\write17{Es liegt im temppath}}
{\textsc{caution: file \meinbild\space not found!}}
}

Doch leider komme ich in keine der \IfFileExists hinein, oder er schreibt mir zumindest die ausgabe nicht ins log. Auch die Fehlermeldung falls es nirgends gefunden wird funktioniert bei mir hier leider nicht (ich hab das bild einfach einmal entfernt).

Brauch ich hier vielleicht irgendein zusätzliches Package?
Hat hier jemand einen Tipp für mich?

lg, jiri

hitchhiker_jiri
21-04-2005, 12:54
Ich weiß schon woran es gelegen hat. Ich habe dem File keine Endung gegeben.

Jetzt habe ich allerdings das Problem, dass es sich um ein Graphik-File handelt und ich gerne alle Endungen die in \DeclareGraphicsExtensions definiert sind überprüft hätte.

Geht das irgendwie?
Oder muss ich echt hier nochmal alle Endungen "zu Fuß" durchgehen?

lg, jiri

hitchhiker_jiri
22-04-2005, 10:33
Dann schreiben wir einmal ein minimalbeispiel:


\documentclass[a4paper,12pt,oneside]{book}
\usepackage{graphicx}
\usepackage{ifthen}

\DeclareGraphicsExtensions{.png,.jpg}

\newcommand{\mypath}{./einordner/}
\newcommand{\temppath}{./}
\newcommand{\meinbild}{}

\newcommand{\myincludegraphics}[3]{%
%Schauen ob die Datei über Mypath oder über Temppath erreichbar
\edef\meinbild{\mypath #3.png}%
\IfFileExists{\meinbild}%
{\immediate\write17{Es liegt im normalen mypath}}%
{ \edef\meinbild{\temppath #3.png}%
\IfFileExists{\meinbild}%
{\immediate\write17{Es liegt im temppath}}%
{\errmessage{caution: file \meinbild\space not found!}}%
}%
\immediate\write17{Also die dritte übergebene Variable wurde nun auf \meinbild\space gesetzt.}
\ifthenelse{\equal{#1}{}}{%
\ifthenelse{\equal{#2}{}}{%
\includegraphics{\meinbild}%
}{%
\includegraphics[#2]{\meinbild}%
}%
}{%
\ifthenelse{\equal{#2}{}}{%
\includegraphics[width=#1]{\meinbild}%
}{%
\includegraphics[width=#1,height=#2]{\meinbild}%
}%
}%
}

\begin{document}

\begin{figure}[ht]
\begin{center}
\myincludegraphics{\textwidth}{}{bilder/test}
\caption{Ein Testbild aus irgendeiner Bildergallerie}
\label{fig:test}
\end{center}
\end{figure}

\end{document}


So nun habe ich das Problem, dass ich hier die Endung der Grafikdatei hartcodieren muss, was ich aber nicht unbedingt möchte, da mehrere Personen an den Dateien arbeiten.

Gibt es:
1) eine Möglichkeit den Befehl \includegraphics irgendwie zu renewen, sodass er zar wieder aufgerufen wird, aber halt der Pfad zur Datei vorher ausgebessert wird?
2) Wenn nicht, eine Möglichkeit wenigstens die in \DeclareGraphicsExtensions angegebenen Endungen durchzuprobieren?

Danke für jede Antwort!

lg, jiri

blubb
22-04-2005, 10:38
Ich nehme an, du wirst auf deinem Problem sitzen bleiben. Es gibt glaub keine Lösung.
Lasse mich aber gerne vom Gegenteil überzeugen.

P.S.

\DeclareGraphicsExtensions{.png,.jpg}
Schlecht.
http://tex.lickert.net/tipps/grafiktreiber/grafiktreiber.html

hitchhiker_jiri
22-04-2005, 10:46
Das bedeutet also, dass es keine sinnvolle Möglichkeit gibt \includegraphics zu "erweiteren"?

Schade! Das ist jetzt allerdings ziemlich schlecht.

Hm! Mal überlegen was mir jetzt einfällt.

blubb
22-04-2005, 11:05
Nur um mal sicher zu gehen, weil ich bislang nicht gefunden habe, was du eigentlich willst, und du auch nie \graphicspath erwähnt hast:

Du kannst mit \graphicspath Pfade vorgeben, die sequentiell von \includegraphics durchsucht werden. Das Bild das als erstes gefunden wird, wird eingefügt.
Welches Bild genommen wird steht im Log-File. Was du nicht bekommst, ist eine Möglichkeit in deinem Dokument den gewählten Pfad auszugeben (z.B. als kleine Info unter dem Bild).

hitchhiker_jiri
22-04-2005, 11:11
Aha! Davon hab ich noch nie was gelesen/gehört!

Kann man Graphicspath immer wieder neu definieren, sprich wenn ich in ein eingebundenes Tex-File komme neue Pfade angeben und wenn ich wieder ins ursprungsfile komme, wird das wieder vergessen, oder ist das quasi ein Stack, der nur erweitert werden kann?

oder darf ich das überhaupt nur in der Preambel definieren?

Danke
jiri

blubb
22-04-2005, 11:24
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA :eek: :eek:

Sorry, wenn euch mein Urschrei erschreckt hat.
Ich nehme den Thread mal in meine Anekdotensammlung zu http://www.mrunix.de/forums/showthread.php?t=38919 auf (zweiter Punkt)

Teilt mit was ihr erreichen wollt, nicht nur wo ihr bei eurer Lösung nicht weiterkommt. Vielleicht gibt es bessere Lösungen für euer Ziel, als die bei der ihr gerade Probleme habt. Häufig ist die Lösung ein Paket, das genau das macht, was ihr gerade selbst machen wollt.


Zum Thema:
\graphicspath geht eigentlich immer.
Wird \graphicspath gerufen, gehen die Pfade des vorherigen \graphicspath verloren (Sprich: Pfade müssen evtl wiederholt werden).


\ sind nicht erlaubt, können aber mit / ersetzt werden
Spaces im Pfad sind nicht erlaubt (können aber mit \space ersetzt werden [macht aber lieber einen Test])
Jeder Pfad muß in {} geklammert sein
absolute Pfade sin möglich {/pfad...)
Laufwerkwechsel geht nicht (c:/....)
Der Pfad sollte mit / beendet werden (glaub ich zumindest)


Beispiel:
\graphicspath{{pfad1/}{pfad2/}{pfad2/sub2/}}

hitchhiker_jiri
22-04-2005, 11:45
Danke erstaml für die ausführliche Erklärung.

Was ich jetzt allerdings nicht verstehe ist deine Verlinkung zu dem Thread mit dem Minimalbeispiel!

Wie sollte ich denn bitteschön deiner Meinung nach erwähnen dass ich Graphicspath benötige, wenn ich das nicht kenne?

Ich denke, dass ich mit dem Minimalbeispiel und meinen Fragen sehr wohl versucht habe mein Problem richtig/sinnvoll zu formulieren. Nur ergeben sich nun mal aus antworten manchmal neue Möglichkeiten und auf die sollte man dann auch eingehen dürfen.

Falls ich irgendetwas falsch gemacht haben sollte, dann klär mich bitte auf blubb.

Aber wie du sicher siehst bin ich relativ neu im Forum, also hab vielleicht auch ein bisschen Rücksicht. War ja keinesfalls absicht nur um irgendjemanden zu ärgern.

Lg, jiri

blubb
22-04-2005, 12:12
Du hast anscheinend das Problem ein Bild zu laden, ohne genau vorzugeben in welchem Pfad. Dazu gibt es \graphicspath.
Gefragt hast du für mich nach einem akademischen Problem mit \ifFileExist.

Auf die Idee, das dir \graphicspath das Problem lösen könnte kam ich erst gar nicht, weil du ein anderes Problem geschildert hast. (Datei nicht gefunden). Meine Antwort mit \graphicspath wollte ich eigentlich gar nicht posten, weil ich davon ausging du willst was anderes.

Mein Verweis in den anderen Thread bezog sich nicht auf das Minimalbeispiel (das gut war, weil daran konnte ich ahnen was du eigentlich willst), sondern daran, das du nicht geschrieben hast, was du willst, sondern nur, wo du bei der Lösung gerade ein Problem hast.
Dein Minimalbeispiel war gut. Aber mir fehlte die Info, was du mit dem Makro eigentlich erreichen willst.

Sorry wenn du verärgert bist.
Immerhin waren deine Fargen so gut, das ich nicht die Lust verloren habe eine Lösung zu suchen (es gibt einige Threads hier, wo ich vermute eine Lösung zu haben, ich aber keine Lust habe, erst mühsam rauszukriegen, wo das Problem sitzt).

hitchhiker_jiri
22-04-2005, 12:36
Hi!

Ich bin nicht verärgert. Mich hat es nur ein wenig gewundert und mich hat interessiert, was ich falsch gemacht habe. Ich werde versuchen in Zukunft klarer auszudrücken was mein Problem ist (wofür ich eine Lösung suche).

Sorry nochmal. :o
Danke nochmal. :D

lg, jiri