
Hallo Community, ich habe ein komisches Problem. Es scheint, dass includegraphics
nicht 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 \typeout
das 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
\includegraphics
intern verwendet \filename@parse
. Da Sie \def\cropfile
anstelle von verwendet haben \edef\cropfile
, \baseFileName
wird es nicht erweitert und hängt vom Wert von ab \filename@area
. \filename@parse
inside \includegraphics
überschreibt den Wert von \filename@area
vor der Erweiterung des Arguments, sieht also den \filename@area
bereits zurückgesetzten Wert davon anstelle des von Ihnen \filename@parse
in 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 \def
in \edef
ändern
\def\cropfile{\baseFileName-19.25x19.25+176.5+123.75}