warum wird das Verzeichnis aus meinem Pfadargument in Includegraphics entfernt?

warum wird das Verzeichnis aus meinem Pfadargument in Includegraphics entfernt?

Hallo Community, ich habe ein komisches Problem. Es scheint, dass includegraphicsnicht das gesamte Argument akzeptiert wird, sondern immer der Verzeichnisteil abgeschnitten wird!

Das Argument wurde manipuliert und in einem anderen Befehl verknüpft, bevor es an den betreffenden Befehl übergeben wurde. Aber \typeoutdas Argument zeigt, dass das Argument die korrekte Zeichenfolge enthält. Was ist passiert?

Ein MWE:

\documentclass[10pt,a4paper]{article}
\usepackage[latin1]{inputenc}
\usepackage{amssymb}
\usepackage{graphicx}
\usepackage{color}
\usepackage[usenames,dvipsnames,svgnames,table]{xcolor}

\usepackage{calc}
\usepackage{xstring}

\newcommand{\setInset}[6]{%
    \expandafter\gdef\csname useInset#1\endcsname{1}%
    \expandafter\gdef\csname inset#1Color\endcsname{#2}%
    \expandafter\gdef\csname crop#1X\endcsname{#3}%
    \expandafter\gdef\csname crop#1Y\endcsname{#4}%
    \expandafter\gdef\csname crop#1W\endcsname{#5}%
    \expandafter\gdef\csname crop#1H\endcsname{#6}%
}

\newcommand{\addInset}[2]{%
    \color{#2}%
    \typeout{OMG #1}
    \fbox{\includegraphics[width=1\linewidth]{{#1}}}%
}

\makeatletter
\newcommand{\addInsets}[2][1]{%
    \filename@parse{#2}
    \StrSubstitute{\filename@base.\filename@ext}{.}{-}[\tmpName]
    \def\baseFileName{\filename@area\tmpName}
            % setting \cropfile manually works! e.g.
            % \def\cropfile{figures/lr_img_053-png-19.25x19.25+176.5+123.75}
            \def\cropfile{\baseFileName-19.25x19.25+176.5+123.75} 
            \addInset{\cropfile.png}{\insetAColor} % works if I hardcode \addInset{figures/\cropfile.png}

}
\makeatother


\begin{document}
    \begin{figure}\centering
            \setInset{A}{red}{176.5}{123.75}{19.25}{19.25}
            \addInsets{figures/lr_img_053.png}
    \end{figure}
\end{document}

Beim Anrufen \mycommand{red}{figures/figure.png}erhalte ich immer eine Fehlermeldung Not found.

Antwort1

\includegraphicsintern verwendet \filename@parse. Da Sie \def\cropfileanstelle von verwendet haben \edef\cropfile, \baseFileNamewird es nicht erweitert und hängt vom Wert von ab \filename@area. \filename@parseinside \includegraphicsüberschreibt den Wert von \filename@areavor der Erweiterung des Arguments, sieht also den \filename@areabereits zurückgesetzten Wert davon anstelle des von Ihnen \filename@parsein zugewiesenen Werts \addInsets.

Sie können das Problem also wie von @Ian Thompson vorgeschlagen beheben, indem Sie schreiben

\edef\cropfile{\baseFileName-19.25x19.25+176.5+123.75}

anstatt

\def\cropfile{\baseFileName-19.25x19.25+176.5+123.75}

oder indem Sie Ihre Version von umbenennen \filename@area:

\newcommand{\addInsets}[2][1]{%
    \filename@parse{#2}
    \let\myFileArea\filename@area % \edef could be used here too
    \StrSubstitute{\filename@base.\filename@ext}{.}{-}[\tmpName]
    \def\baseFileName{\myFileArea\tmpName}
    ...
}

Antwort2

Ich bin zu müde, um herauszufinden, was hier los ist, aber das Problem scheint zu verschwinden, wenn Sie \defin \edefändern

\def\cropfile{\baseFileName-19.25x19.25+176.5+123.75} 

verwandte Informationen