¿Por qué se elimina el directorio de mi argumento de ruta en includegraphics?

¿Por qué se elimina el directorio de mi argumento de ruta en includegraphics?

Hola comunidad tengo un problema raro. Parece que includegraphicsno acepta todo el argumento, ¡siempre recorta la parte del directorio!

El argumento fue manipulado y concatenado en otro comando antes de pasar al comando en cuestión. Pero \typeoutel argumento muestra que contiene la cadena correcta. ¿¡Qué pasó!?

UNA 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}

Llamar \mycommand{red}{figures/figure.png}siempre me da error Not found.

Respuesta1

\includegraphicsutiliza \filename@parseinternamente. Debido a que usó \def\cropfileen lugar de \edef\cropfile, \baseFileNameno se expande y depende del valor de \filename@area. \filename@parseinside \includegraphicssobrescribe el valor de \filename@areaantes de expandir el argumento, por lo que ve su valor \filename@areaya restablecido en lugar del valor asignado por su \filename@parsein \addInsets.

Entonces puedes arreglar esto como lo sugirió @Ian Thompson escribiendo

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

en lugar de

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

o cambiando el nombre de su versión de \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}
    ...
}

Respuesta2

Estoy demasiado cansado para entender qué está pasando aquí, pero el problema parece desaparecer si cambias \defa\edef

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

información relacionada