PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Problem mit \filename@parse



AureusPhoenix
21-02-2014, 22:42
Hi Leute,
ich hab ein kleines Problem mit dem genannten Befehl. Sobald ich die aus \filename@parse resultierenden variablen \filename@area und \filename@base mit normalem Text vermischt in \includegraphics anwende, passieren mir nicht erklärliche Dinge.

Hier ein kleines Minimalbeispiel


\documentclass[a4paper]{scrartcl}
\usepackage{graphics}
\usepackage{adjustbox}

%------------------------------------------------------------------------------%

\makeatletter

\newcommand{\myincludegraphics}[2][\empty]{%
\filename@parse{#2}
\includegraphics[#1]{\filename@area\filename@base_suffix}
}

\makeatother

%------------------------------------------------------------------------------%

\begin{document}

\myincludegraphics[width=0.5\textwidth]{pictures/test}

\end{document}


In diesem Beispiel analysiere ich den Pfad (z.B. pictures/bild.jpg), binde dann jedoch "pictures/bild_suffix" ein. Das hätte ich zumindest erwartet. Wenn man sich das log ansieht, sucht tex aber nach "bild_suffix_suffix". Er lässt also \filename@area weg und hängt \filename@base zwei mal an. Würde ich "_suffix" im Kommando weg lassen, würde der Befehl Reibungslos funktionieren.

Kann mir jemand sagen, was da passiert und was ich dagegen unternehmen kann?

Vielen Dank im Voraus!

klops
22-02-2014, 09:34
Das passiert, weil \includegraphics selbst ja auch wieder \filename@parse aufruft und dadurch \filename@area und \filename@base definiert. Da diese beiden aber auch im Argument vorkommen, beißt sich der Hund in den Schwanz:
\documentclass[a4paper]{scrartcl}
\usepackage{graphics}
\usepackage{adjustbox}

%------------------------------------------------------------------------------%

\makeatletter

\newcommand*{\myfilename}{}
\newcommand{\myincludegraphics}[2][\empty]{%
\filename@parse{#2}%
\edef\myfilename{\filename@area\filename@base_suff ix}%
\includegraphics[#1]{\myfilename}%
}

\makeatother

%------------------------------------------------------------------------------%

\begin{document}

\myincludegraphics[width=0.5\textwidth]{pictures/test}

\end{document}
Wichtig ist, dass man für \myfilename \edef und nicht nur \def verwendet. Sonst hat man dasselbe Problem in grün.

Ich habe auch gleich noch ein paar im horizontalen Modus Leerzeichen produzierende Zeilenenden auskommentiert. Darauf solltest Du künftig auch achten. (http://www.komascript.de/signifikanteLeerzeichen)

Alternativ geht auch eine \expandafter-Orgie:

\documentclass[a4paper]{scrartcl}
\usepackage{graphics}
\usepackage{adjustbox}

%------------------------------------------------------------------------------%

\makeatletter

\newcommand*{\@myincludegraphics}{}
\newcommand{\myincludegraphics}[2][\empty]{%
\filename@parse{#2}%
\def\@myincludegraphics{\includegraphics[#1]}%
\expandafter\expandafter\expandafter\@myincludegra phics
\expandafter\expandafter\expandafter{%
\expandafter\filename@area\filename@base_suffix}%
}

\makeatother

%------------------------------------------------------------------------------%

\begin{document}

\myincludegraphics[width=0.5\textwidth]{pictures/test}

\end{document}

Dabei wird dafür gesorgt, dass \filename@area und \filename@base expandiert werden, bevor \includegraphics das Argument zu sehen bekommt. Diese Lösung hat den Vorteil, dass sie selbst dann noch funktioniert, wenn innerhalb von \includegraphics \@myincludegraphics umdefiniert würde.

AureusPhoenix
22-02-2014, 13:19
Vielen Dank!
So ähnlich hatte ich mir das auch schon überlegt bzw. ausprobiert. Ich kannte nur \edef nicht. Und die Funktionsweise von \expandafter habe ich noch nie vollständig verstanden.

Auf die Sache mit den Leerzeichen achte ich übrigens normalerweise.
Nur im Minimalbeispiel war mir das erstmal egal.

Nochmal Danke...
Werds gleich mal in meiner eigentlichen Anwendung ausprobieren.

klops
24-02-2014, 08:39
In dem Zusammenhang sei auf TeX by Topic hingewiesen. In dem Buch werden TeX-Grundlagen wie \edef und \expandafter meist etwas leichter verständlich erklärt als im TeXbook. DANTE-Mitglieder bekommen in diesem Jahr übrigens eine gedruckte Fassung dieses Werkes als besonderen Jubiläumsbonus. Vielleicht ein guter Grund mehr, Mitglied zu werden (http://www.dante.de/index/Intern/Mitglied.html).

AureusPhoenix
24-02-2014, 09:37
Ich werd mal drüber nachdenken. Allerdings sind 40 Euro im Jahr schon na ganz schöne Stange Geld. Auf jeden Fall schau ich mal in Tex by Topic rein.

Grüße

klops
24-02-2014, 12:30
40 €/Jahr gelten nur für Vollmitglieder. Außerdem bekommst Du eine Menge an Gegenwert. Das beginnt mit diesem Buch, geht über Vereinszeitschrift und TeX-Collection, bis hin zum Betrieb von CTAN und der Förderung diverser TeX-Projekte. Ohne DANTE und die anderen TeX-Anwendervereinigungen gäbe es kaum einen TeX-Anwender und nur sehr wenige Makropakete dafür – außer irgend eine Firma hätte das als Gelddruckmaschine entdeckt. Kostenlose wäre dann aber nichts.

Die Schnuppermitgliedschaft kostet übrigens gerade mal 15 €, verlängert sich nicht automatisch und enthält ebenfalls alle Vorzüge. Das eine Buch ist bereits so viel wert. Wenn Du dann noch auch nur eines der vielen anderen Bücher (http://www.dante.de/index/Literatur.html) vergünstigt über der Verein kaufst, macht Du bereits einen Reingewinn.