Anzeige:
Ergebnis 1 bis 6 von 6

Thema: Problem mit \filename@parse

  1. #1
    Registrierter Benutzer Avatar von AureusPhoenix
    Registriert seit
    20.02.2010
    Beiträge
    91

    Problem mit \filename@parse

    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
    Code:
    \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!

  2. #2
    Registrierter Benutzer
    Registriert seit
    09.12.2005
    Beiträge
    1.327
    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:
    Code:
    \documentclass[a4paper]{scrartcl}
    \usepackage{graphics}
    \usepackage{adjustbox}
    
    %------------------------------------------------------------------------------%
    
    \makeatletter
    
    \newcommand*{\myfilename}{}
    \newcommand{\myincludegraphics}[2][\empty]{%
    	\filename@parse{#2}%
            \edef\myfilename{\filename@area\filename@base_suffix}%
    	\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.

    Alternativ geht auch eine \expandafter-Orgie:
    Code:
    \documentclass[a4paper]{scrartcl}
    \usepackage{graphics}
    \usepackage{adjustbox}
    
    %------------------------------------------------------------------------------%
    
    \makeatletter
    
    \newcommand*{\@myincludegraphics}{}
    \newcommand{\myincludegraphics}[2][\empty]{%
    	\filename@parse{#2}%
            \def\@myincludegraphics{\includegraphics[#1]}%
            \expandafter\expandafter\expandafter\@myincludegraphics
            \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.
    Geändert von klops (22-02-2014 um 09:41 Uhr)

  3. #3
    Registrierter Benutzer Avatar von AureusPhoenix
    Registriert seit
    20.02.2010
    Beiträge
    91
    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.

  4. #4
    Registrierter Benutzer
    Registriert seit
    09.12.2005
    Beiträge
    1.327
    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.

  5. #5
    Registrierter Benutzer Avatar von AureusPhoenix
    Registriert seit
    20.02.2010
    Beiträge
    91
    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

  6. #6
    Registrierter Benutzer
    Registriert seit
    09.12.2005
    Beiträge
    1.327
    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 vergünstigt über der Verein kaufst, macht Du bereits einen Reingewinn.
    Geändert von klops (24-02-2014 um 12:32 Uhr)

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •